diff options
| author | Daniel Schadt <kingdread@gmx.de> | 2023-09-14 20:12:54 +0200 | 
|---|---|---|
| committer | Daniel Schadt <kingdread@gmx.de> | 2023-09-14 20:12:54 +0200 | 
| commit | a72e5a97bd2efb11f012cd2d1b7ad02ab6579f8b (patch) | |
| tree | b482008210ec84e12a91bfe7264bab75f4d03006 | |
| parent | 1a326c3fc101c76693bc5e3b46e24625839c4b2e (diff) | |
| download | fietsboek-a72e5a97bd2efb11f012cd2d1b7ad02ab6579f8b.tar.gz fietsboek-a72e5a97bd2efb11f012cd2d1b7ad02ab6579f8b.tar.bz2 fietsboek-a72e5a97bd2efb11f012cd2d1b7ad02ab6579f8b.zip  | |
add a "Force logout" button to the user settings
| -rw-r--r-- | fietsboek/locale/de/LC_MESSAGES/messages.mo | bin | 14714 -> 15259 bytes | |||
| -rw-r--r-- | fietsboek/locale/de/LC_MESSAGES/messages.po | 41 | ||||
| -rw-r--r-- | fietsboek/locale/en/LC_MESSAGES/messages.mo | bin | 13738 -> 14269 bytes | |||
| -rw-r--r-- | fietsboek/locale/en/LC_MESSAGES/messages.po | 41 | ||||
| -rw-r--r-- | fietsboek/locale/fietslog.pot | 38 | ||||
| -rw-r--r-- | fietsboek/routes.py | 1 | ||||
| -rw-r--r-- | fietsboek/templates/user_data.jinja2 | 11 | ||||
| -rw-r--r-- | fietsboek/views/user_data.py | 13 | 
8 files changed, 112 insertions, 33 deletions
diff --git a/fietsboek/locale/de/LC_MESSAGES/messages.mo b/fietsboek/locale/de/LC_MESSAGES/messages.mo Binary files differindex e6dd1c6..f2bf3ea 100644 --- a/fietsboek/locale/de/LC_MESSAGES/messages.mo +++ b/fietsboek/locale/de/LC_MESSAGES/messages.mo diff --git a/fietsboek/locale/de/LC_MESSAGES/messages.po b/fietsboek/locale/de/LC_MESSAGES/messages.po index b34e849..69723be 100644 --- a/fietsboek/locale/de/LC_MESSAGES/messages.po +++ b/fietsboek/locale/de/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid ""  msgstr ""  "Project-Id-Version: PROJECT VERSION\n"  "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-08-17 22:51+0200\n" +"POT-Creation-Date: 2023-09-14 20:05+0200\n"  "PO-Revision-Date: 2022-07-02 17:35+0200\n"  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"  "Language: de\n" @@ -753,22 +753,37 @@ msgid "page.my_profile.personal_data.save"  msgstr "Speichern"  #: fietsboek/templates/user_data.jinja2:38 +msgid "page.my_profile.session_logout.title" +msgstr "Sitzungen abmelden" + +#: fietsboek/templates/user_data.jinja2:40 +msgid "page.my_profile.session_logout.explanation" +msgstr "" +"Mit dieser Funktion können alle Sitzungen beendet werden. Dies ist nützlich, " +"wenn Du vergessen hast, dich auf einem fremden Gerät abzumelden. Beachte, dass " +"Du dich erneut anmelden musst, wenn Du diese Funktion nutzt!" + +#: fietsboek/templates/user_data.jinja2:44 +msgid "page.my_profile.session_logout.button" +msgstr "Alle Sitzungen beenden" + +#: fietsboek/templates/user_data.jinja2:49  msgid "page.my_profile.friends"  msgstr "Freunde" -#: fietsboek/templates/user_data.jinja2:46 +#: fietsboek/templates/user_data.jinja2:57  msgid "page.my_profile.unfriend"  msgstr "Entfreunden" -#: fietsboek/templates/user_data.jinja2:56 +#: fietsboek/templates/user_data.jinja2:67  msgid "page.my_profile.accept_friend"  msgstr "Annehmen" -#: fietsboek/templates/user_data.jinja2:73 +#: fietsboek/templates/user_data.jinja2:84  msgid "page.my_profile.friend_request_email"  msgstr "E-Mail-Adresse des Freundes" -#: fietsboek/templates/user_data.jinja2:77 +#: fietsboek/templates/user_data.jinja2:88  msgid "page.my_profile.send_friend_request"  msgstr "Freundschaftsanfrage senden" @@ -808,7 +823,7 @@ msgstr "Ungültiger Name"  msgid "flash.invalid_email"  msgstr "Ungültige E-Mail-Adresse" -#: fietsboek/views/account.py:67 +#: fietsboek/views/account.py:68  msgid "flash.a_confirmation_link_has_been_sent"  msgstr "Ein Bestätigungslink wurde versandt" @@ -900,23 +915,27 @@ msgstr "Hochladen erfolgreich"  msgid "flash.upload_cancelled"  msgstr "Hochladen abgebrochen" -#: fietsboek/views/user_data.py:61 +#: fietsboek/views/user_data.py:66  msgid "flash.personal_data_updated"  msgstr "Persönliche Daten wurden gespeichert" -#: fietsboek/views/user_data.py:79 +#: fietsboek/views/user_data.py:85  msgid "flash.friend_not_found"  msgstr "Das angegebene Konto wurde nicht gefunden" -#: fietsboek/views/user_data.py:85 +#: fietsboek/views/user_data.py:91  msgid "flash.friend_already_exists"  msgstr "Dieser Freund existiert bereits" -#: fietsboek/views/user_data.py:93 +#: fietsboek/views/user_data.py:99  msgid "flash.friend_added"  msgstr "Freund hinzugefügt" -#: fietsboek/views/user_data.py:103 +#: fietsboek/views/user_data.py:109  msgid "flash.friend_request_sent"  msgstr "Freundschaftsanfrage gesendet" +#: fietsboek/views/user_data.py:195 +msgid "flash.sessions_logged_out" +msgstr "Die Sitzungen wurden beendet. Melde Dich bitte erneut an, um fortzufahren." + diff --git a/fietsboek/locale/en/LC_MESSAGES/messages.mo b/fietsboek/locale/en/LC_MESSAGES/messages.mo Binary files differindex 56137c1..da23e31 100644 --- a/fietsboek/locale/en/LC_MESSAGES/messages.mo +++ b/fietsboek/locale/en/LC_MESSAGES/messages.mo diff --git a/fietsboek/locale/en/LC_MESSAGES/messages.po b/fietsboek/locale/en/LC_MESSAGES/messages.po index c1ff29e..45b15cc 100644 --- a/fietsboek/locale/en/LC_MESSAGES/messages.po +++ b/fietsboek/locale/en/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid ""  msgstr ""  "Project-Id-Version: PROJECT VERSION\n"  "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-08-17 22:51+0200\n" +"POT-Creation-Date: 2023-09-14 20:05+0200\n"  "PO-Revision-Date: 2023-04-03 20:42+0200\n"  "Last-Translator: \n"  "Language: en\n" @@ -747,22 +747,37 @@ msgid "page.my_profile.personal_data.save"  msgstr "Save"  #: fietsboek/templates/user_data.jinja2:38 +msgid "page.my_profile.session_logout.title" +msgstr "Invalidate sessions" + +#: fietsboek/templates/user_data.jinja2:40 +msgid "page.my_profile.session_logout.explanation" +msgstr "" +"With this functionality, you can force all of your current sessions " +"to be logged out. This is useful when you forgot to log out on a foreign " +"device. Note that you will have to log in again after using this function." + +#: fietsboek/templates/user_data.jinja2:44 +msgid "page.my_profile.session_logout.button" +msgstr "Close all sessions" + +#: fietsboek/templates/user_data.jinja2:49  msgid "page.my_profile.friends"  msgstr "Friends" -#: fietsboek/templates/user_data.jinja2:46 +#: fietsboek/templates/user_data.jinja2:57  msgid "page.my_profile.unfriend"  msgstr "Unfriend" -#: fietsboek/templates/user_data.jinja2:56 +#: fietsboek/templates/user_data.jinja2:67  msgid "page.my_profile.accept_friend"  msgstr "Accept" -#: fietsboek/templates/user_data.jinja2:73 +#: fietsboek/templates/user_data.jinja2:84  msgid "page.my_profile.friend_request_email"  msgstr "Email of the friend" -#: fietsboek/templates/user_data.jinja2:77 +#: fietsboek/templates/user_data.jinja2:88  msgid "page.my_profile.send_friend_request"  msgstr "Send friend request" @@ -798,7 +813,7 @@ msgstr "Invalid name"  msgid "flash.invalid_email"  msgstr "Invalid email" -#: fietsboek/views/account.py:67 +#: fietsboek/views/account.py:68  msgid "flash.a_confirmation_link_has_been_sent"  msgstr "A confirmation link has been sent" @@ -889,23 +904,27 @@ msgstr "Upload successful"  msgid "flash.upload_cancelled"  msgstr "Upload cancelled" -#: fietsboek/views/user_data.py:61 +#: fietsboek/views/user_data.py:66  msgid "flash.personal_data_updated"  msgstr "Personal data has been updated" -#: fietsboek/views/user_data.py:79 +#: fietsboek/views/user_data.py:85  msgid "flash.friend_not_found"  msgstr "The friend was not found" -#: fietsboek/views/user_data.py:85 +#: fietsboek/views/user_data.py:91  msgid "flash.friend_already_exists"  msgstr "Friend already exists" -#: fietsboek/views/user_data.py:93 +#: fietsboek/views/user_data.py:99  msgid "flash.friend_added"  msgstr "Friend has been added" -#: fietsboek/views/user_data.py:103 +#: fietsboek/views/user_data.py:109  msgid "flash.friend_request_sent"  msgstr "Friend request sent" +#: fietsboek/views/user_data.py:195 +msgid "flash.sessions_logged_out" +msgstr "All sessions have been logged out. Please log in again to continue." + diff --git a/fietsboek/locale/fietslog.pot b/fietsboek/locale/fietslog.pot index ed93194..b87785e 100644 --- a/fietsboek/locale/fietslog.pot +++ b/fietsboek/locale/fietslog.pot @@ -8,7 +8,7 @@ msgid ""  msgstr ""  "Project-Id-Version: PROJECT VERSION\n"  "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-08-17 22:51+0200\n" +"POT-Creation-Date: 2023-09-14 20:05+0200\n"  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"  "Language-Team: LANGUAGE <LL@li.org>\n" @@ -739,22 +739,34 @@ msgid "page.my_profile.personal_data.save"  msgstr ""  #: fietsboek/templates/user_data.jinja2:38 +msgid "page.my_profile.session_logout.title" +msgstr "" + +#: fietsboek/templates/user_data.jinja2:40 +msgid "page.my_profile.session_logout.explanation" +msgstr "" + +#: fietsboek/templates/user_data.jinja2:44 +msgid "page.my_profile.session_logout.button" +msgstr "" + +#: fietsboek/templates/user_data.jinja2:49  msgid "page.my_profile.friends"  msgstr "" -#: fietsboek/templates/user_data.jinja2:46 +#: fietsboek/templates/user_data.jinja2:57  msgid "page.my_profile.unfriend"  msgstr "" -#: fietsboek/templates/user_data.jinja2:56 +#: fietsboek/templates/user_data.jinja2:67  msgid "page.my_profile.accept_friend"  msgstr "" -#: fietsboek/templates/user_data.jinja2:73 +#: fietsboek/templates/user_data.jinja2:84  msgid "page.my_profile.friend_request_email"  msgstr "" -#: fietsboek/templates/user_data.jinja2:77 +#: fietsboek/templates/user_data.jinja2:88  msgid "page.my_profile.send_friend_request"  msgstr "" @@ -790,7 +802,7 @@ msgstr ""  msgid "flash.invalid_email"  msgstr "" -#: fietsboek/views/account.py:67 +#: fietsboek/views/account.py:68  msgid "flash.a_confirmation_link_has_been_sent"  msgstr "" @@ -878,23 +890,27 @@ msgstr ""  msgid "flash.upload_cancelled"  msgstr "" -#: fietsboek/views/user_data.py:61 +#: fietsboek/views/user_data.py:66  msgid "flash.personal_data_updated"  msgstr "" -#: fietsboek/views/user_data.py:79 +#: fietsboek/views/user_data.py:85  msgid "flash.friend_not_found"  msgstr "" -#: fietsboek/views/user_data.py:85 +#: fietsboek/views/user_data.py:91  msgid "flash.friend_already_exists"  msgstr "" -#: fietsboek/views/user_data.py:93 +#: fietsboek/views/user_data.py:99  msgid "flash.friend_added"  msgstr "" -#: fietsboek/views/user_data.py:103 +#: fietsboek/views/user_data.py:109  msgid "flash.friend_request_sent"  msgstr "" +#: fietsboek/views/user_data.py:195 +msgid "flash.sessions_logged_out" +msgstr "" + diff --git a/fietsboek/routes.py b/fietsboek/routes.py index 36233e6..480094c 100644 --- a/fietsboek/routes.py +++ b/fietsboek/routes.py @@ -60,6 +60,7 @@ def includeme(config):      config.add_route("accept-friend", "/me/accept-friend")      config.add_route("json-friends", "/me/friends.json")      config.add_route("toggle-favourite", "/me/toggle-favourite") +    config.add_route("force-logout", "/me/force-logout")      config.add_route("profile", "/user/{user_id}", factory="fietsboek.models.User.factory")      config.add_route( diff --git a/fietsboek/templates/user_data.jinja2 b/fietsboek/templates/user_data.jinja2 index 15588e8..59124ea 100644 --- a/fietsboek/templates/user_data.jinja2 +++ b/fietsboek/templates/user_data.jinja2 @@ -35,6 +35,17 @@    <hr> +  <h2>{{ _("page.my_profile.session_logout.title") }}</h2> + +  <p>{{ _("page.my_profile.session_logout.explanation") }}</p> + +  <form method="POST" action="{{ request.route_path('force-logout') }}"> +    {{ util.hidden_csrf_input() }} +    <button type="submit" class="btn btn-danger"><i class="bi bi-shield-lock-fill"></i> {{ _("page.my_profile.session_logout.button") }}</button> +  </form> + +  <hr> +    <h2>{{ _("page.my_profile.friends") }}</h2>    <ul class="list-group"> diff --git a/fietsboek/views/user_data.py b/fietsboek/views/user_data.py index 2f6daef..66c2075 100644 --- a/fietsboek/views/user_data.py +++ b/fietsboek/views/user_data.py @@ -4,6 +4,7 @@ import datetime  from pyramid.httpexceptions import HTTPForbidden, HTTPFound, HTTPNotFound  from pyramid.i18n import TranslationString as _  from pyramid.request import Request +from pyramid.response import Response  from pyramid.security import remember  from pyramid.view import view_config  from sqlalchemy import select @@ -181,3 +182,15 @@ def do_toggle_favourite(request: Request) -> dict:          return HTTPNotFound()      request.identity.toggle_favourite(track)      return {"favourite": request.identity in track.favourees} + + +@view_config(route_name="force-logout", permission="user", request_method="POST") +def do_force_logout(request: Request) -> Response: +    """Forces all sessions to be logged out. + +    :param request: The Pyramid request. +    :return: The HTTP response. +    """ +    request.identity.roll_session_secret() +    request.session.flash(request.localizer.translate(_("flash.sessions_logged_out"))) +    return HTTPFound(request.route_url("login"))  | 
