diff options
author | Andrea Lepori <alepori@student.ethz.ch> | 2022-01-05 11:21:39 +0100 |
---|---|---|
committer | Andrea Lepori <alepori@student.ethz.ch> | 2022-01-05 11:21:53 +0100 |
commit | 36ae891283213008924630aecbcaba682f65cf6c (patch) | |
tree | a959895965188fda91603c6e32fb4994bdf7ad82 | |
parent | logout user if token expired + set password page (diff) | |
download | scout-subs-36ae891283213008924630aecbcaba682f65cf6c.tar.gz scout-subs-36ae891283213008924630aecbcaba682f65cf6c.zip |
edit password working
-rw-r--r-- | accounts/templates/accounts/index.html | 17 | ||||
-rw-r--r-- | accounts/views.py | 59 | ||||
-rw-r--r-- | client/templates/client/about.html | 16 | ||||
-rw-r--r-- | client/views.py | 4 | ||||
-rw-r--r-- | templates/registration/base_simple.html | 2 | ||||
-rw-r--r-- | templates/registration/login.html | 24 | ||||
-rw-r--r-- | version.txt | 2 |
7 files changed, 89 insertions, 35 deletions
diff --git a/accounts/templates/accounts/index.html b/accounts/templates/accounts/index.html index 06dcff2..ea9c160 100644 --- a/accounts/templates/accounts/index.html +++ b/accounts/templates/accounts/index.html @@ -9,9 +9,9 @@ {% block toolbar %} <div class="nav-content {{color}}"> <ul class="tabs tabs-transparent"> - <li class="tab"><a class="active" href="#personal">Info Personali</a></li> + <li class="tab"><a class="{{personal_active}}" href="#personal">Info Personali</a></li> <li class="tab"><a href="#medic">Info Mediche</a></li> - <li class="tab"><a href="#settings">Impostazioni</a></li> + <li class="tab"><a class="{{settings_active}}" href="#settings">Impostazioni</a></li> </ul> </div> {% endblock%} @@ -362,13 +362,13 @@ </div> <div class="row"> <div class="col s12"> - <form method="post"> + <form action="{% url 'personal'%}" id="form2" method="post"> {% csrf_token %} <input type="hidden" name="action" id="action" value="password"> {% if usable_password %} <div class="row"> <div class="col s12"> - <input id="old_password" type="password"> + <input id="old_password" name="old_password" type="password"> <label for="old_password">Password attuale</label> </div> </div> @@ -377,19 +377,19 @@ {% endif %} <div class="row"> <div class="col s12"> - <input id="new_password1" type="password"> + <input id="new_password1" name="new_password1" type="password"> <label for="new_password1">Nuova password</label> </div> </div> <div class="row"> <div class="col s12"> - <input id="new_password2" type="password"> + <input id="new_password2" name="new_password2" type="password"> <label for="new_password2">Conferma nuova password</label> </div> </div> <div class="row"> <div class="col s12"> - <button type="submit" class="btn waves-effect waves-light {{color}}">Salva</button> + <button onclick="document.getElementById(form2).submit()" class="btn waves-effect waves-light {{color}}">Salva</button> </div> </div> </form> @@ -457,6 +457,9 @@ $(document).ready(function() { {% for error in errors %} M.toast({html: '{{ error }}', classes: 'orange'}) {% endfor %} + {% if ok_message %} + M.toast({html: '{{ ok_message }}', classes: 'green'}) + {% endif %} document.getElementById("vac_certificate").onchange = function() { for (i=0; i < this.files.length; i++) { if(this.files[i].size > 1048576*10) { diff --git a/accounts/views.py b/accounts/views.py index 21f33da..2f291c6 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render from django.urls import reverse from django.conf import settings -from django.contrib.auth.forms import PasswordChangeForm, UserCreationForm +from django.contrib.auth.forms import PasswordChangeForm, SetPasswordForm, UserCreationForm from django.contrib.auth.models import User from django.contrib.auth import login, authenticate, logout from django.http import FileResponse @@ -37,8 +37,8 @@ class RegisterForm(UserCreationForm): for fieldname in ['username', 'password1', 'password2']: self.fields[fieldname].help_text = None +# request data from user account def get_oauth_data(token): - # request data from user account headers = { "Authorization" : "Bearer " + token, "X-Scope": "with_roles", @@ -50,6 +50,7 @@ def get_oauth_data(token): def oauth_login(request): redirect_uri = request.build_absolute_uri(reverse('auth')) + # forward next page requested by user if not request.GET["next"]: redirect_uri += "?next=/" else: @@ -85,6 +86,7 @@ def auth(request): return HttpResponseRedirect(request.GET["next"]) + # create new user user = User.objects.create_user(resp_data["email"], resp_data["email"]) # create new usercode @@ -117,6 +119,7 @@ def oauth_connect(request): redirect_uri = request.build_absolute_uri(reverse('auth_connect')) return hitobito.authorize_redirect(request, redirect_uri) +# clear token only if user has another way to login @login_required def oauth_disconnect(request): if not request.user.has_usable_password(): @@ -208,6 +211,9 @@ def personal(request): @login_required def personal_wrapper(request, errors): context = {} + ok_message = "" + personal_active = "active" + settings_active = "" # additional user information usercode = UserCode.objects.filter(user=request.user)[0] # medical info @@ -259,23 +265,34 @@ def personal_wrapper(request, errors): elif request.POST['action'] == "password": # get form object - print(request.POST) + if request.user.has_usable_password(): + form2 = PasswordChangeForm(data=request.POST, user=request.user) + else: + form2 = SetPasswordForm(data=request.POST, user=request.user) # if form is valid and terms were accepted save user - password_errors = [] - for err in password_errors: - if err.code == "password_mismatch": - errors.append("Le due password non sono uguali") - elif err.code == "password_too_similar": - errors.append("La password è troppo simile all'username") - elif err.code == "password_too_short": - errors.append("La password è troppo corta") - elif err.code == "password_too_common": - errors.append("La password è troppo comune") - elif err.code == "password_entirely_numeric": - errors.append("La password deve contenere lettere") - elif err.code == "password_incorrect": - errors.append("La password attuale è incorretta") + if form2.is_valid(): + form2.save() + ok_message = "Password modificata con successo" + personal_active = "" + settings_active = "active" + else: + personal_active = "" + settings_active = "active" + for field in form2.errors.as_data().values(): + for err in field: + if err.code == "password_mismatch": + errors.append("Le due password non sono uguali") + elif err.code == "password_too_similar": + errors.append("La password è troppo simile all'username") + elif err.code == "password_too_short": + errors.append("La password è troppo corta") + elif err.code == "password_too_common": + errors.append("La password è troppo comune") + elif err.code == "password_entirely_numeric": + errors.append("La password deve contenere lettere") + elif err.code == "password_incorrect": + errors.append("La password attuale è incorretta") else: # set all attributes @@ -448,8 +465,7 @@ def personal_wrapper(request, errors): if len(request.user.groups.values_list('name', flat=True)) == 0: branca_default = "selected" else: - parent_group = request.user.groups.values_list('name', flat=True)[ - 0] + parent_group = request.user.groups.values_list('name', flat=True)[0] if parent_group == "colonia": branca_castorini = "selected" elif parent_group == "muta": @@ -487,9 +503,11 @@ def personal_wrapper(request, errors): else: card_name = '' + # check if user is connected with midata midata_user = (usercode.midata_id > 0) midata_disable = "" + # get user info from midata if midata_user: resp = get_oauth_data(usercode.midata_token) @@ -559,9 +577,12 @@ def personal_wrapper(request, errors): 'health_care_certificate': card_name, 'vac_certificate': vac_name, 'errors': errors, + 'ok_message': ok_message, 'midata_user': midata_user, 'midata_disable': midata_disable, 'usable_password': usable_password, + 'settings_active': settings_active, + 'personal_active': personal_active, } return render(request, 'accounts/index.html', context) diff --git a/client/templates/client/about.html b/client/templates/client/about.html index dfeab99..4ace6d3 100644 --- a/client/templates/client/about.html +++ b/client/templates/client/about.html @@ -1,22 +1,24 @@ -{% extends 'registration/base_client.html' %} +{% extends 'registration/base_simple.html' %} {% block title %}About{% endblock %} -{%block breadcrumb%} - <a class="breadcrumb hide-on-med-and-down">Informazioni</a> -{% endblock%} - {% block content %} + <div class="fixed-action-btn"> + <a class="btn-floating btn-large {{color}}" href='/'> + <i class="large material-icons">home</i> + </a> + </div> + <div class="row"> <div class="col l6 offset-l3 m8 offset-m2 s12"> <div class="card"> <div class="card-content"> <p> - Versione software {{version}}<br>Commit ID: <a href="https://git.thearcway.org/mafaldo/scout-subs/commit/?id={{commitid}}">{{commitid}}</a> + Versione: {{version}}<br>Commit ID: <a href="https://git.thearcway.org/mafaldo/scout-subs/commit/?id={{commitid}}">{{commitid}}</a> </p> <h5>Licenza</h5> <blockquote> - Copyright (C) 2020-21 Andrea Lepori<br><br> + Copyright (C) 2020-22 Andrea Lepori<br><br> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/client/views.py b/client/views.py index 41bb3dd..44820be 100644 --- a/client/views.py +++ b/client/views.py @@ -304,6 +304,10 @@ def about(request): version = version[version.find("=")+1:] version = version.replace("\n", " ").replace("=", " ") + # get branch + branch = check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"]).decode() + version += " (" + branch[:-1] + ")" + if version.startswith("0"): version = "Beta " + version diff --git a/templates/registration/base_simple.html b/templates/registration/base_simple.html index 667a62e..dc36f06 100644 --- a/templates/registration/base_simple.html +++ b/templates/registration/base_simple.html @@ -83,6 +83,8 @@ {% block content %} {% endblock %} </main> + {% block footer %} + {% endblock %} <script type="text/javascript" src="{% static 'materialize.min.js' %}"></script> <script type="text/javascript"> {% block script %} diff --git a/templates/registration/login.html b/templates/registration/login.html index cfa4a2b..cee57d6 100644 --- a/templates/registration/login.html +++ b/templates/registration/login.html @@ -1,10 +1,21 @@ {% extends 'registration/base_simple.html' %} {% load static %} +{% block style %} + body { + display: flex; + min-height: 100vh; + flex-direction: column; + } + + main { + flex: 1 0 auto; + } +{% endblock %} {% block title %}Login{% endblock %} {% block content %} - <div class="row"> + <div style="margin-top: 50px" class="row"> <div class="col l4 offset-l4 m8 offset-m2 s12"> <div class="card"> <div class="card-content"> @@ -43,4 +54,15 @@ </div> </div> </div> +{% endblock %} +{% block footer %} + <footer class="page-footer {{color}}"> + <div class="container"> + </div> + <div class="footer-copyright"> + <div class="container"> + <a class="grey-text text-lighten-4 right" href="{% url 'about' %}">© 2020-22 Andrea Lepori</a> + </div> + </div> + </footer> {% endblock %}
\ No newline at end of file diff --git a/version.txt b/version.txt index 2058a6b..5d4e9ed 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ version=0.4
-rev=14 +rev=15 |