]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/web/auth.py
wiki: Only match usernames when a word starts with @
[ipfire.org.git] / src / web / auth.py
index 9e3bf7127208df1c1673916c131c40fa5134975f..4a4c88a4c2858f8b864fb584223b328e615590bf 100644 (file)
@@ -5,6 +5,7 @@ import tornado.web
 import urllib.parse
 
 from . import base
+from . import ui_modules
 
 class AuthenticationMixin(object):
        def login(self, account):
@@ -30,7 +31,7 @@ class AuthenticationMixin(object):
                        self.clear_cookie("session_id")
 
 
-class LoginHandler(AuthenticationMixin, base.BaseHandler):
+class LoginHandler(base.AnalyticsMixin, AuthenticationMixin, base.BaseHandler):
        def get(self):
                next = self.get_argument("next", None)
 
@@ -73,14 +74,14 @@ class LogoutHandler(AuthenticationMixin, base.BaseHandler):
                self.redirect("/")
 
 
-class RegisterHandler(base.BaseHandler):
+class JoinHandler(base.AnalyticsMixin, base.BaseHandler):
        def get(self):
                # Redirect logged in users away
                if self.current_user:
                        self.redirect("/")
                        return
 
-               self.render("auth/register.html")
+               self.render("auth/join.html")
 
        @base.ratelimit(minutes=15, requests=5)
        async def post(self):
@@ -93,13 +94,13 @@ class RegisterHandler(base.BaseHandler):
                # Register account
                try:
                        with self.db.transaction():
-                               self.backend.accounts.register(uid, email,
+                               self.backend.accounts.join(uid, email,
                                        first_name=first_name, last_name=last_name,
                                        country_code=self.current_country_code)
                except ValueError as e:
                        raise tornado.web.HTTPError(400, "%s" % e) from e
 
-               self.render("auth/register-success.html")
+               self.render("auth/join-success.html")
 
 
 class ActivateHandler(AuthenticationMixin, base.BaseHandler):
@@ -177,6 +178,15 @@ class PasswordResetHandler(AuthenticationMixin, base.BaseHandler):
                self.redirect("/")
 
 
+class WellKnownChangePasswordHandler(base.BaseHandler):
+       @tornado.web.authenticated
+       def get(self):
+               """
+                       Implements https://web.dev/articles/change-password-url
+               """
+               self.redirect("/users/%s/passwd" % self.current_user.uid)
+
+
 class SSODiscourse(base.BaseHandler):
        @base.ratelimit(minutes=24*60, requests=100)
        @tornado.web.authenticated
@@ -232,6 +242,17 @@ class SSODiscourse(base.BaseHandler):
                self.redirect("%s?%s" % (params.get("return_sso_url"), qs))
 
 
+class PasswordModule(ui_modules.UIModule):
+       def render(self, account=None):
+               return self.render_string("auth/modules/password.html", account=account)
+
+       def javascript_files(self):
+               return "js/zxcvbn.js"
+
+       def embedded_javascript(self):
+               return self.render_string("auth/modules/password.js")
+
+
 class APICheckUID(base.APIHandler):
        @base.ratelimit(minutes=1, requests=100)
        def get(self):