Skip to content

Commit

Permalink
loglevel from .env, add log & delete-me btn to privacy policy, render…
Browse files Browse the repository at this point in the history
… deleted profiles as deleted
  • Loading branch information
sondregronas committed Aug 7, 2023
1 parent 471801d commit b9ca3bf
Show file tree
Hide file tree
Showing 9 changed files with 188 additions and 42 deletions.
5 changes: 4 additions & 1 deletion BookingSystem/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@

# Logger setup
logger = Logger(__name__)
logger.setLevel('DEBUG')
if os.getenv('DEBUG') == 'True':
logger.setLevel('DEBUG')
else:
logger.setLevel('INFO')
logger.addHandler(StreamHandler())
logger.handlers[0].setFormatter(Formatter('[%(levelname)s | %(asctime)s]: %(message)s', '%Y-%m-%d %H:%M:%S'))

Expand Down
10 changes: 10 additions & 0 deletions BookingSystem/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,3 +277,13 @@ def prune_inactive_users() -> flask.Response:
"""
user.prune_inactive()
return flask.Response('Inaktive brukere ble fjernet.', status=200)


@api.route('/delete/me', methods=['POST'])
@login_required()
def delete_me() -> flask.Response:
"""Delete the currently logged in user."""
u = flask.session.get("user")
user.delete(u.userid)
flask.session.clear()
return flask.redirect(flask.url_for('app.login'))
4 changes: 4 additions & 0 deletions BookingSystem/inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,14 @@ def user(self) -> dict:

@property
def lender_name(self) -> str:
if not self.user.get('name'):
return 'Slettet bruker'
return self.user.get('name')

@property
def lender_association(self) -> str:
if not self.user.get('name'):
return 'Se logg'
return self.user.get('classroom') or 'Lærer'

@property
Expand Down
23 changes: 0 additions & 23 deletions BookingSystem/templates/partials/css.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
{% include 'partials/css_student.html' %}
<link rel="stylesheet" href="/static/css/font-awesome.min.css">
<link rel="stylesheet" href="/static/css/iziToast.min.css">
<link rel="stylesheet" href="/static/css/jquery-confirm.min.css">

<style>
.red-button {
Expand Down Expand Up @@ -38,25 +36,4 @@
padding: 1rem;
z-index: 999;
}

.jconfirm.jconfirm-modern .jconfirm-box {
background-color: var(--card-background-color) !important;
}

.jconfirm-bg {
background-color: var(--background-color) !important;
}

.jconfirm-title {
color: var(--h1-color) !important;
}

.jconfirm-content {
color: var(--color) !important;
}

.jconfirm button {
width: auto !important;
}

</style>
23 changes: 23 additions & 0 deletions BookingSystem/templates/partials/css_student.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,32 @@
<link rel="shortcut icon" href="/static/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/static/css/font-awesome.min.css">
<link rel="stylesheet" href="/static/css/pico.classless.min.css">
<link rel="stylesheet" href="/static/css/jquery-confirm.min.css">

<style>
header, main, footer {
padding-top: 1rem !important;
padding-bottom: 1rem !important;
}

.jconfirm.jconfirm-modern .jconfirm-box {
background-color: var(--card-background-color) !important;
}

.jconfirm-bg {
background-color: var(--background-color) !important;
}

.jconfirm-title {
color: var(--h1-color) !important;
}

.jconfirm-content {
color: var(--color) !important;
}

.jconfirm button {
width: auto !important;
}

</style>
3 changes: 1 addition & 2 deletions BookingSystem/templates/partials/js.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
{% include 'partials/js_student.html' %}
<script src="/static/js/jquery-3.7.0.min.js"></script>
<script src="/static/js/iziToast.min.js"></script>
<script src="/static/js/jquery-confirm.min.js"></script>

<script src="/static/js/iziToast.min.js"></script>

<script>
$(document).ready(function () {
Expand Down
149 changes: 134 additions & 15 deletions BookingSystem/templates/privacy.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
{% extends 'layout.html' %}

{% block extra_head %}
{% if session.user and session.user.is_admin %}
{% else %}
<script src="/static/js/jquery-3.7.0.min.js"></script>
<script src="/static/js/jquery-confirm.min.js"></script>
<script>
jconfirm.defaults = {
theme: 'modern',
draggable: false,
boxWidth: '30%',
useBootstrap: false,
escapeKey: true,
backgroundDismiss: true,
}
</script>
{% endif %}
{% endblock %}

{% block content %}

<hgroup>
Expand All @@ -19,11 +37,28 @@ <h5>Når du logger inn med Feide, gir du fra deg følgende data</h5>
<li>Feide ID (En unik ID som representerer deg)</li>
</ul>

Følgende data gir du tilgang på, men lagres ikke:
Følgende data gir du tilgang på, men brukes kun til autentisering:
<ul>
<li>Organisasjon (Gir oss informasjon om du er en gyldig elev eller ansatt)</li>
</ul>
</blockquote>

<blockquote>
<hgroup>
<h4>Loggføring</h4>
<h5>Når du låner utstyr, vil dette loggføres med navnet ditt</h5>
</hgroup>

For å kunne identifisere hvem som har brukt utstyret, arkiveres & loggføres følgende data i det du låner utstyr:
<ul>
<li>Navn på utlåner</li>
<li>Klasse og kontaktlærer</li>
<li>Dato og tidspunkt</li>
<li>Hvilket utstyr som er brukt</li>
</ul>

Dette er for å kunne identifisere hvem som har brukt utstyret over tid, og for å kunne spore utstyr som ikke
blir levert.
</blockquote>

<blockquote>
Expand All @@ -40,28 +75,112 @@ <h5>Når du registrerer deg, lagres følgende data</h5>

<blockquote>
<hgroup>
<h4>Men hvorfor?</h4>
<h5>Dette er årsaken til at vi trenger informasjonen</h5>
<h4>Hva skjer etterpå?</h4>
<h5>Dataen som blir lagret er kun gyldig i 1 skoleår, og vil slettes før skolestart</h5>
</hgroup>

Informasjonen brukes til å identifisere deg, og for å gi deg tilgang til utstyrsrommet.<br>
Din student e-post brukes dersom vi trenger å kontakte deg eller sende deg varsler.
Du vil fremdeles være søkbar i utlånshistorikken, men kontoen din og all dataen som er knyttet til den vil
bli slettet. Utlånshistorikken slettes ikke, men arkiveres for å kunne ivareta utstyrets historikk.
<br>
<br>
<b>Obs for ansatte:</b> Ansatte ved skolen som har brukt utstyrsrommet vil ikke bli slettet automatisk, men kan
slettes manuelt.
</blockquote>

<blockquote>
<hgroup>
<h4>Hva skjer etterpå?</h4>
<h5>Dataen som blir lagret er kun gyldig i 1 skoleår, og vil manuelt bli slettet</h5>
<h4>Slett meg</h4>
<h5>Ønsker du å slette din konto?</h5>
</hgroup>

Vi har system på hvem som er aktive brukere, og hvem som ikke er det.
<br>Brukere som ikke har vært aktive vil bli slettet regelmessig.
<br>
Dersom du ønsker å slette din konto kan du gjøre det ved å trykke knappen under. Du kan når
som helst logge inn igjen for å opprette kontoen på nytt.
<br>
Dersom du ønsker å fremskynde slettingen av dataen, kan du kontakte skolens IT-avdeling.
<br>
<br>
<b>Obs for ansatte:</b> Ansatte ved skolen som har brukt utstyrsrommet vil ikke bli slettet automatisk.
<button onclick="deleteMe()" class="red-button">Slett min brukerkonto</button>
</blockquote>

{% endblock %}


{% if session.user %}
<script>
function deleteMe() {
$.confirm({
title: 'Slett konto',
icon: 'fa fa-trash',
type: 'red',
content: 'Er du sikker på at du vil slette kontoen din?<br>Du kan når som helst logge inn igjen for å opprette en ny konto.',
buttons: {
confirm: {
text: 'Slett',
btnClass: 'btn-red',
action: function () {
$.ajax({
type: 'POST',
url: '{{ url_for("api.delete_me") }}',
success: function (response) {
alertDeleted();
}
})
}
},
cancel: {
text: 'Avbryt',
btnClass: 'btn-blue',
action: function () {
}
}
}
});
}

function alertDeleted() {
$.confirm({
title: 'Konto slettet',
icon: 'fa fa-check-circle',
type: 'green',
content: 'Din konto er blitt slettet',
buttons: {
cancel: {
text: 'Ok',
btnClass: 'btn-blue',
action: function () {
window.location.href = '{{ url_for("app.index") }}';
}
}
},
backgroundDismiss: function () {
window.location.href = '{{ url_for("app.index") }}';
}
}
)
}
</script>
{% else %}
<script>
function deleteMe() {
$.alert({
title: 'Slett konto',
icon: 'fa fa-times-circle',
type: 'orange',
content: 'Du må være logget inn for å kunne slette kontoen din.',
buttons: {
login: {
text: 'Logg inn',
btnClass: 'btn-blue',
action: function () {
window.location.href = '{{ url_for("app.index") }}';
}
},
cancel: {
text: 'Avbryt',
btnClass: 'btn-red',
action: function () {
}
}
}
});
}
</script>
{% endif %}
{% endblock %}

12 changes: 11 additions & 1 deletion BookingSystem/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from flask import request

from __init__ import DATABASE, KIOSK_FQDN
from __init__ import DATABASE, KIOSK_FQDN, logger
from db import read_sql_query
from feide import get_feide_data

Expand Down Expand Up @@ -94,3 +94,13 @@ def get(userid: str) -> dict:
if not user:
return {}
return {columns[i]: user[i] for i in range(len(columns)) if not columns[i] == 'id'}


def delete(userid: str) -> None:
"""Delete the user from the database."""
con = sqlite3.connect(DATABASE)
cur = con.cursor()
cur.execute('DELETE FROM users WHERE userid = ?', (userid,))
logger.debug(f'Deleted user {userid}')
con.commit()
con.close()
1 change: 1 addition & 0 deletions tests/test_endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ def test_user_endpoints(client):
'app.register',
'feide.login',
'feide.login_feide_callback',
'api.delete_me',
]

for endpoint in client.application.view_functions:
Expand Down

0 comments on commit b9ca3bf

Please sign in to comment.