From b9ca3bfcbb1994ecbe39ac006b9d0dd703b14a80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sondre=20Gr=C3=B8n=C3=A5s?= <44143748+sondregronas@users.noreply.github.com> Date: Mon, 7 Aug 2023 16:49:23 +0200 Subject: [PATCH] loglevel from .env, add log & delete-me btn to privacy policy, render deleted profiles as deleted --- BookingSystem/__init__.py | 5 +- BookingSystem/api.py | 10 ++ BookingSystem/inventory.py | 4 + BookingSystem/templates/partials/css.html | 23 --- .../templates/partials/css_student.html | 23 +++ BookingSystem/templates/partials/js.html | 3 +- BookingSystem/templates/privacy.html | 149 ++++++++++++++++-- BookingSystem/user.py | 12 +- tests/test_endpoints.py | 1 + 9 files changed, 188 insertions(+), 42 deletions(-) diff --git a/BookingSystem/__init__.py b/BookingSystem/__init__.py index eac626c..388c268 100644 --- a/BookingSystem/__init__.py +++ b/BookingSystem/__init__.py @@ -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')) diff --git a/BookingSystem/api.py b/BookingSystem/api.py index 3179c52..731746f 100644 --- a/BookingSystem/api.py +++ b/BookingSystem/api.py @@ -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')) diff --git a/BookingSystem/inventory.py b/BookingSystem/inventory.py index e7f30cb..630776b 100644 --- a/BookingSystem/inventory.py +++ b/BookingSystem/inventory.py @@ -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 diff --git a/BookingSystem/templates/partials/css.html b/BookingSystem/templates/partials/css.html index 1b3cbe8..02aa22f 100644 --- a/BookingSystem/templates/partials/css.html +++ b/BookingSystem/templates/partials/css.html @@ -1,7 +1,5 @@ {% include 'partials/css_student.html' %} - - \ No newline at end of file diff --git a/BookingSystem/templates/partials/css_student.html b/BookingSystem/templates/partials/css_student.html index a0902dc..6ed0747 100644 --- a/BookingSystem/templates/partials/css_student.html +++ b/BookingSystem/templates/partials/css_student.html @@ -1,9 +1,32 @@ + + \ No newline at end of file diff --git a/BookingSystem/templates/partials/js.html b/BookingSystem/templates/partials/js.html index 5457dc0..1a0f054 100644 --- a/BookingSystem/templates/partials/js.html +++ b/BookingSystem/templates/partials/js.html @@ -1,8 +1,7 @@ {% include 'partials/js_student.html' %} - - + + + + {% endif %} +{% endblock %} + {% block content %}
@@ -19,11 +37,28 @@
Når du logger inn med Feide, gir du fra deg følgende data
  • Feide ID (En unik ID som representerer deg)
  • - Følgende data gir du tilgang på, men lagres ikke: + Følgende data gir du tilgang på, men brukes kun til autentisering: + + +
    +
    +

    Loggføring

    +
    Når du låner utstyr, vil dette loggføres med navnet ditt
    +
    + + For å kunne identifisere hvem som har brukt utstyret, arkiveres & loggføres følgende data i det du låner utstyr: + + Dette er for å kunne identifisere hvem som har brukt utstyret over tid, og for å kunne spore utstyr som ikke + blir levert.
    @@ -40,28 +75,112 @@
    Når du registrerer deg, lagres følgende data
    -

    Men hvorfor?

    -
    Dette er årsaken til at vi trenger informasjonen
    +

    Hva skjer etterpå?

    +
    Dataen som blir lagret er kun gyldig i 1 skoleår, og vil slettes før skolestart
    - Informasjonen brukes til å identifisere deg, og for å gi deg tilgang til utstyrsrommet.
    - 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. +
    +
    + Obs for ansatte: Ansatte ved skolen som har brukt utstyrsrommet vil ikke bli slettet automatisk, men kan + slettes manuelt.
    -

    Hva skjer etterpå?

    -
    Dataen som blir lagret er kun gyldig i 1 skoleår, og vil manuelt bli slettet
    +

    Slett meg

    +
    Ønsker du å slette din konto?
    - - Vi har system på hvem som er aktive brukere, og hvem som ikke er det. -
    Brukere som ikke har vært aktive vil bli slettet regelmessig. -
    + 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.
    - Dersom du ønsker å fremskynde slettingen av dataen, kan du kontakte skolens IT-avdeling.
    -
    - Obs for ansatte: Ansatte ved skolen som har brukt utstyrsrommet vil ikke bli slettet automatisk. +
    -{% endblock %} \ No newline at end of file + + + {% if session.user %} + + {% else %} + + {% endif %} +{% endblock %} + diff --git a/BookingSystem/user.py b/BookingSystem/user.py index b5aca39..4461b47 100644 --- a/BookingSystem/user.py +++ b/BookingSystem/user.py @@ -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 @@ -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() diff --git a/tests/test_endpoints.py b/tests/test_endpoints.py index a2a0401..b58c86c 100644 --- a/tests/test_endpoints.py +++ b/tests/test_endpoints.py @@ -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: