diff --git a/uffd/default_config.cfg b/uffd/default_config.cfg index 6a27760bb0c7fdc390f5c5b04e8fa89068bf2373..e7ee0d6276b569c79c4b56e3697d053e6ec42cbd 100644 --- a/uffd/default_config.cfg +++ b/uffd/default_config.cfg @@ -95,6 +95,7 @@ OAUTH2_CLIENTS={ # You can optionally restrict access to users with a certain group. Set 'required_group' to the name of an LDAP group name or a list of groups. # ... 'required_group': 'test_access_group' ... only allows users with group "test_access_group" access # ... 'required_group': ['groupa', ['groupb', 'groupc']] ... allows users with group "groupa" as well as users with both "groupb" and "groupc" access + # Set 'login_message' (or suffixed with a language code like 'login_message_de') to display a custom message on the login form. } API_CLIENTS={ diff --git a/uffd/oauth2/models.py b/uffd/oauth2/models.py index 450edd9aadf0a183f17b97a4ce2e4e581cd0f762..5e27c5d78138952d30c2ac3adc7bdfe837c93d40 100644 --- a/uffd/oauth2/models.py +++ b/uffd/oauth2/models.py @@ -1,4 +1,5 @@ from flask import current_app +from flask_babel import get_locale, gettext as _ from sqlalchemy import Column, Integer, String, DateTime, Text from uffd.ldapalchemy.dbutils import DBRelationship @@ -7,7 +8,7 @@ from uffd.user.models import User from uffd.session.models import DeviceLoginInitiation, DeviceLoginType class OAuth2Client: - def __init__(self, client_id, client_secret, redirect_uris, required_group=None, logout_urls=None): + def __init__(self, client_id, client_secret, redirect_uris, required_group=None, logout_urls=None, **kwargs): self.client_id = client_id self.client_secret = client_secret # We only support the Authorization Code Flow for confidential (server-side) clients @@ -21,6 +22,12 @@ class OAuth2Client: self.logout_urls.append(['GET', url]) else: self.logout_urls.append(url) + self.kwargs = kwargs + + @property + def login_message(self): + return self.kwargs.get('login_message_' + get_locale().language, + self.kwargs.pop('login_message', _('You need to login to access this service'))) @classmethod def from_id(cls, client_id): diff --git a/uffd/oauth2/views.py b/uffd/oauth2/views.py index cb8037c957d823dc4948da540771467215ef7ca6..898d3d9be15130a4bee49a709e20cc82d62855cf 100644 --- a/uffd/oauth2/views.py +++ b/uffd/oauth2/views.py @@ -164,12 +164,13 @@ def authorize(): del session['devicelogin_secret'] del session['devicelogin_confirmation'] if not initiation or initiation.expired or not confirmation: - flash('Device login failed') + flash(_('Device login failed')) return redirect(url_for('session.login', ref=request.full_path, devicelogin=True)) credentials['user'] = confirmation.user db.session.delete(initiation) db.session.commit() else: + flash(client.login_message) return redirect(url_for('session.login', ref=request.full_path, devicelogin=True)) # Here we would normally ask the user, if he wants to give the requesting diff --git a/uffd/translations/de/LC_MESSAGES/messages.mo b/uffd/translations/de/LC_MESSAGES/messages.mo index e58966921aed2726349395182b5de736f144f297..8732d8a30f74045b143df675da5ec4687b98356f 100644 Binary files a/uffd/translations/de/LC_MESSAGES/messages.mo and b/uffd/translations/de/LC_MESSAGES/messages.mo differ diff --git a/uffd/translations/de/LC_MESSAGES/messages.po b/uffd/translations/de/LC_MESSAGES/messages.po index bae852ddaffca378b3c2dd4a5f706f31bdc68363..89805c8fcbe12c13ec3e510b2da4d456802b979e 100644 --- a/uffd/translations/de/LC_MESSAGES/messages.po +++ b/uffd/translations/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: 2021-08-30 23:22+0200\n" +"POT-Creation-Date: 2021-09-04 21:18+0200\n" "PO-Revision-Date: 2021-05-25 21:18+0200\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language: de\n" @@ -700,8 +700,12 @@ msgstr "Sekunden" msgid "Verify and complete setup" msgstr "Verifiziere und beende das Setup" -#: uffd/oauth2/views.py:95 uffd/selfservice/views.py:76 -#: uffd/session/views.py:93 +#: uffd/oauth2/models.py:30 +msgid "You need to login to access this service" +msgstr "Du musst dich anmelden, um auf diesen Dienst zugreifen zu können" + +#: uffd/oauth2/views.py:146 uffd/selfservice/views.py:76 +#: uffd/session/views.py:95 #, python-format msgid "" "We received too many requests from your ip address/network! Please wait " @@ -710,10 +714,14 @@ msgstr "" "Wir haben zu viele Anfragen von deiner IP-Adresses bzw. aus deinem " "Netzwerk empfangen! Bitte warte mindestens %(delay)s." -#: uffd/oauth2/views.py:103 +#: uffd/oauth2/views.py:154 msgid "Device login is currently not available. Try again later!" msgstr "Geräte-Login ist gerade nicht verfügbar. Versuche es später nochmal!" +#: uffd/oauth2/views.py:167 +msgid "Device login failed" +msgstr "Gerätelogin fehlgeschlagen" + #: uffd/oauth2/templates/oauth2/logout.html:10 uffd/templates/base.html:99 msgid "Logout" msgstr "Abmelden" @@ -757,7 +765,7 @@ msgstr "" "versuchen?" #: uffd/role/views.py:44 uffd/rolemod/views.py:36 uffd/rolemod/views.py:45 -#: uffd/rolemod/views.py:60 uffd/session/views.py:130 +#: uffd/rolemod/views.py:60 uffd/session/views.py:132 #: uffd/user/views_group.py:14 uffd/user/views_user.py:25 msgid "Access denied" msgstr "Zugriff verweigert" @@ -1163,7 +1171,7 @@ msgstr "Kein Zugriff" msgid "Close" msgstr "Schließen" -#: uffd/session/views.py:91 +#: uffd/session/views.py:93 #, python-format msgid "" "We received too many invalid login attempts for this user! Please wait at" @@ -1172,27 +1180,27 @@ msgstr "" "Wir haben zu viele fehlgeschlagene Anmeldeversuche für diesen Account " "erhalten! Bitte warte mindestens %(delay)s." -#: uffd/session/views.py:99 +#: uffd/session/views.py:101 msgid "Login name or password is wrong" msgstr "Der Anmeldename oder das Passwort ist falsch" -#: uffd/session/views.py:102 +#: uffd/session/views.py:104 msgid "You do not have access to this service" msgstr "Du hast keinen Zugriff auf diesen Service" -#: uffd/session/views.py:114 uffd/session/views.py:125 +#: uffd/session/views.py:116 uffd/session/views.py:127 msgid "You need to login first" msgstr "Du musst dich erst anmelden" -#: uffd/session/views.py:147 uffd/session/views.py:157 +#: uffd/session/views.py:149 uffd/session/views.py:159 msgid "Initiation code is no longer valid" msgstr "Startcode ist nicht mehr gültig" -#: uffd/session/views.py:161 +#: uffd/session/views.py:163 msgid "Invalid confirmation code" msgstr "Ungültiger Bestätigungscode" -#: uffd/session/views.py:173 uffd/session/views.py:184 +#: uffd/session/views.py:175 uffd/session/views.py:186 msgid "Invalid initiation code" msgstr "Ungültiger Startcode"