Skip to content
Snippets Groups Projects
Commit 0d4eb81b authored by dcz2's avatar dcz2
Browse files

Setting, resetting password, e-mail conf, standarize quotes

parent db5bbe1f
Branches
Tags
No related merge requests found
Showing
with 298 additions and 64 deletions
UWSGI_PROCESS_PER_CONTAINER=4
DEBUG=true
ALLOWED_HOSTS=localhost,127.0.0.1
SECRET_KEY=Ixosoh1iemoh0Heloh1thee5akooboonu5veehae4aikoh2ohg
DATABASE_HOST=shellvalier-postgresql
DATABASE_NAME=shellvalier
DATABASE_USER=shellvalier
DATABASE_PASSWORD=shellvalier
DATABASE_PORT=5432
DATABASE_USER=shellvalier
DEBUG=true
EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
EMAIL_HOST=
EMAIL_PORT=25
EMAIL_HOST_USER=
EMAIL_HOST_PASSWORD=
EMAIL_USE_TLS=false
EMAIL_USE_SSL=false
SECRET_KEY=Ixosoh1iemoh0Heloh1thee5akooboonu5veehae4aikoh2ohg
UWSGI_PROCESS_PER_CONTAINER=4
No preview for this file type
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-07 23:17+0200\n"
"POT-Creation-Date: 2022-04-08 21:59+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"
......@@ -46,9 +46,8 @@ msgstr "Your profile"
msgid "Wyloguj się"
msgstr "Sign out"
#: common/templates/base.html:89 users/forms.py:71
#: users/templates/registration/login.html:6
#: users/templates/registration/login.html:12
#: common/templates/base.html:89 users/forms.py:74 users/templates/login.html:6
#: users/templates/login.html:12
msgid "Zaloguj się"
msgstr "Sign in"
......@@ -2290,28 +2289,100 @@ msgstr "distributive phrase"
msgid "fraza posesywna"
msgstr "possesive phrase"
#: users/forms.py:10 users/templates/user_list.html:21
#: users/forms.py:12 users/templates/user_list.html:21
msgid "Grupa"
msgstr "Group"
#: users/forms.py:29 users/forms.py:59
#: users/forms.py:31 users/forms.py:61
msgid "Zapisz"
msgstr "Save"
#: users/forms.py:30 users/forms.py:60
#: users/forms.py:32 users/forms.py:63 users/forms.py:84 users/forms.py:93
#: users/forms.py:102
msgid "Wróć"
msgstr "Back"
#: users/forms.py:84
#: users/forms.py:62 users/templates/password_change.html:6
#: users/templates/password_change.html:12
msgid "Zmień swoje hasło"
msgstr "Change your password"
#: users/forms.py:75
msgid "Nie pamiętam hasła"
msgstr "I forgot my password"
#: users/forms.py:83
msgid "Zresetuj hasło"
msgstr "Reset password"
#: users/templates/registration/password_reset.html:6
#: users/templates/registration/password_reset.html:12
#: users/forms.py:92
msgid "Zmień hasło"
msgstr "Change password"
#: users/forms.py:101
msgid "Ustaw hasło"
msgstr "Set password"
#: users/templates/new_user_email.html:2
#, python-format
msgid "Otrzymujesz ten e-mail, ponieważ ktoś zaprosił Cię do %(site_name)s."
msgstr ""
"You're receiving this email because you have been invited to %(site_name)s."
#: users/templates/new_user_email.html:4
msgid "Przejdź na poniższą stronę i ustaw swoje hasło:"
msgstr "Please go to the following page and set your password:"
#: users/templates/new_user_email.html:8
msgid "Twoja nazwa użytkownika"
msgstr "Your username"
#: users/templates/new_user_email.html:10
#: users/templates/password_reset_email.html:10
#, python-format
msgid "Zespół %(site_name)s"
msgstr "The %(site_name)s team"
#: users/templates/password_reset.html:6 users/templates/password_reset.html:12
msgid "Zresetuj swoje hasło"
msgstr "Reset your password"
#: users/templates/user_list.html:12 users/views.py:35
#: users/templates/password_reset_email.html:2
#, python-format
msgid ""
"Otrzymujesz ten e-mail w związku z prośbą o zmianę hasła Twojego użytkownia "
"na %(site_name)s."
msgstr ""
"You're receiving this email because you requested a password reset for your "
"user account at %(site_name)s."
#: users/templates/password_reset_email.html:4
msgid "Przejdź na poniższą stronę i ustaw swoje nowe hasło:"
msgstr "Please go to the following page and choose a new password:"
#: users/templates/password_reset_email.html:8
msgid "Twoja nazwa użytkownia:"
msgstr "Your username, in case you’ve forgotten:"
#: users/templates/password_reset_form.html:6
#: users/templates/password_reset_form.html:12
msgid "Ustaw swoje nowe hasło"
msgstr "Choose your new password"
#: users/templates/password_reset_requested.html:6
#: users/templates/password_reset_requested.html:12
msgid "Sprawdź swoją skrzynkę e-mail"
msgstr "Please check your e-mail inbox"
#: users/templates/password_reset_requested.html:13
msgid ""
"Wysłaliśmy na Twój adres e-mail link, po kliknięciu którego uzyskasz "
"możliwość wprowadzenia swojego nowego hasła."
msgstr ""
"We've sent you an e-mail containing a link you can use to set your new "
"password."
#: users/templates/user_list.html:12 users/views.py:38
msgid "Dodaj użytkownika"
msgstr "Add a user"
......@@ -2335,7 +2406,12 @@ msgstr "Actions"
msgid "Edytuj"
msgstr "Edit"
#: users/views.py:48
#: users/utils.py:7
#, python-format
msgid "Zaproszenie do %s"
msgstr "An invitation to %s"
#: users/views.py:51
msgid "Edytuj użytkownika"
msgstr "Edit user"
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-07 23:17+0200\n"
"POT-Creation-Date: 2022-04-08 21:59+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"
......
......@@ -162,6 +162,14 @@ STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'common/static/'),
]
LOGIN_URL = reverse_lazy("users:login")
LOGIN_URL = reverse_lazy('users:login')
LOGIN_REDIRECT_URL = reverse_lazy('dash')
LOGOUT_REDIRECT_URL = reverse_lazy('dash')
EMAIL_BACKEND = get_environment('EMAIL_BACKEND')
EMAIL_HOST = get_environment('EMAIL_HOST')
EMAIL_PORT = get_environment('EMAIL_PORT', mapper=int)
EMAIL_HOST_USER = get_environment('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = get_environment('EMAIL_HOST_PASSWORD')
EMAIL_USE_TLS = get_environment('EMAIL_USE_TLS', mapper=boolean_mapper)
EMAIL_USE_SSL = get_environment('EMAIL_USE_SSL', mapper=boolean_mapper)
from django import forms
from django.contrib.auth.models import Group, User
from django.utils.translation import gettext as _
from django.urls import reverse_lazy
from django.utils.text import format_lazy
from django.utils.translation import gettext_lazy as _
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Layout, Fieldset, ButtonHolder, Submit
class UserForm(forms.ModelForm):
group = forms.ModelChoiceField(queryset=Group.objects.all(), label=_("Grupa"))
group = forms.ModelChoiceField(queryset=Group.objects.all(), label=_('Grupa'))
class Meta:
model = User
......@@ -27,7 +29,7 @@ class UserForm(forms.ModelForm):
Fieldset('', 'first_name', 'last_name', 'username', 'email', 'group', 'is_active'),
ButtonHolder(
Submit('submit', _('Zapisz'), css_class='btn btn-sm btn-success'),
HTML('''<a class="btn btn-sm btn-light" href="{% url 'users:user_list' %}">''' + _('Wróć') + '</a>'),
HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>', reverse_lazy('users:user_list'), _('Wróć'))),
),
)
for field in ['first_name', 'last_name', 'email']:
......@@ -57,7 +59,8 @@ class UserProfileForm(forms.ModelForm):
Fieldset('', 'first_name', 'last_name', 'email'),
ButtonHolder(
Submit('submit', _('Zapisz'), css_class='btn btn-sm btn-success'),
HTML('''<a class="btn btn-sm btn-light" href="{% url 'dash' %}">''' + _('Wróć') + '</a>'),
HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>', reverse_lazy('users:password_change'), _('Zmień swoje hasło'))),
HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>', reverse_lazy('dash'), _('Wróć'))),
),
)
for field in ['first_name', 'last_name', 'email']:
......@@ -69,11 +72,7 @@ login_form_helper.layout = Layout(
Fieldset('', 'username', 'password'),
ButtonHolder(
Submit('submit', _('Zaloguj się'), css_class='btn btn-sm btn-success'),
HTML(
'''<a class="btn btn-sm btn-light" href="{% url 'users:password_reset' %}">'''
f"{_('Nie pamiętam hasła')}"
'</a>'
),
HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>', reverse_lazy('users:password_reset'), _('Nie pamiętam hasła'))),
),
)
......@@ -82,6 +81,24 @@ password_reset_form_helper.layout = Layout(
Fieldset('', 'email'),
ButtonHolder(
Submit('submit', _('Zresetuj hasło'), css_class='btn btn-sm btn-success'),
HTML('''<a class="btn btn-sm btn-light" href="{% url 'users:login' %}">''' f"{_('Wróć')}" '</a>'),
HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>', reverse_lazy('users:login'), _('Wróć'))),
)
)
password_change_form_helper = FormHelper()
password_change_form_helper.layout = Layout(
Fieldset('', 'old_password', 'new_password1', 'new_password2'),
ButtonHolder(
Submit('submit', _('Zmień hasło'), css_class='btn btn-sm btn-success'),
HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>', reverse_lazy('users:user_profile'), _("Wróć"))),
)
)
password_reset_set_password_form_helper = FormHelper()
password_reset_set_password_form_helper.layout = Layout(
Fieldset('', 'new_password1', 'new_password2'),
ButtonHolder(
Submit('submit', _('Ustaw hasło'), css_class='btn btn-sm btn-success'),
HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>', reverse_lazy('dash'), _("Wróć"))),
)
)
......@@ -5,18 +5,18 @@ from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, **options):
admins, __ = Group.objects.get_or_create(name="Admini")
admins, __ = Group.objects.get_or_create(name='Admini')
admins.permissions.add(
Permission.objects.get(codename="view_user", content_type=ContentType.objects.get_for_model(User)),
Permission.objects.get(codename="add_user", content_type=ContentType.objects.get_for_model(User)),
Permission.objects.get(codename="change_user", content_type=ContentType.objects.get_for_model(User)),
Permission.objects.get(codename="delete_user", content_type=ContentType.objects.get_for_model(User)),
Permission.objects.get(codename='view_user', content_type=ContentType.objects.get_for_model(User)),
Permission.objects.get(codename='add_user', content_type=ContentType.objects.get_for_model(User)),
Permission.objects.get(codename='change_user', content_type=ContentType.objects.get_for_model(User)),
Permission.objects.get(codename='delete_user', content_type=ContentType.objects.get_for_model(User)),
)
lexicographs, __ = Group.objects.get_or_create(name="Leksykografowie")
lexicographs, __ = Group.objects.get_or_create(name='Leksykografowie')
lexicographs.permissions.add(
# TODO
)
super_lexicographs, __ = Group.objects.get_or_create(name="Super Leksykografowie")
super_lexicographs, __ = Group.objects.get_or_create(name='Super Leksykografowie')
super_lexicographs.permissions.add(
# TODO
)
{% extends "base.html" %}
{% extends 'base.html' %}
{% load i18n %}
{% load crispy_forms_filters %}
{% block title %}{% trans "Zaloguj się" %}{% endblock %}
{% block title %}{% trans 'Zaloguj się' %}{% endblock %}
{% block content %}
<div class="row m-0">
<div class="col-lg-4 col-md-6 m-auto">
<div class="bg-white mt-4 p-3 clearfix">
<h5 class="mt-2 mb-4">{% trans "Zaloguj się" %}</h5>
<h5 class="mt-2 mb-4">{% trans 'Zaloguj się' %}</h5>
<form action="." method="post">
{% crispy form helper %}
</form>
......
{% load i18n %}{% autoescape off %}
{% blocktranslate %}Otrzymujesz ten e-mail, ponieważ ktoś zaprosił Cię do {{ site_name }}.{% endblocktranslate %}
{% translate 'Przejdź na poniższą stronę i ustaw swoje hasło:' %}
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'users:password_reset' %}
{% endblock %}
{% translate 'Twoja nazwa użytkownika' %}: {{ user.get_username }}
{% blocktranslate %}Zespół {{ site_name }}{% endblocktranslate %}
{% endautoescape %}
{% extends 'base.html' %}
{% load i18n %}
{% load crispy_forms_filters %}
{% block title %}{% trans 'Zmień swoje hasło' %}{% endblock %}
{% block content %}
<div class="row m-0">
<div class="col-lg-4 col-md-6 m-auto">
<div class="bg-white mt-4 p-3 clearfix">
<h5 class="mt-2 mb-4">{% trans 'Zmień swoje hasło' %}</h5>
<form action="." method="post">
{% crispy form helper %}
</form>
</div>
</div>
</div>
{% endblock %}
{% extends "base.html" %}
{% extends 'base.html' %}
{% load i18n %}
{% load crispy_forms_filters %}
{% block title %}{% trans "Zresetuj swoje hasło" %}{% endblock %}
{% block title %}{% trans 'Zresetuj swoje hasło' %}{% endblock %}
{% block content %}
<div class="row m-0">
<div class="col-lg-4 col-md-6 m-auto">
<div class="bg-white mt-4 p-3 clearfix">
<h5 class="mt-2 mb-4">{% trans "Zresetuj swoje hasło" %}</h5>
<h5 class="mt-2 mb-4">{% trans 'Zresetuj swoje hasło' %}</h5>
<form action="." method="post">
{% crispy form helper %}
</form>
......
{% load i18n %}{% autoescape off %}
{% blocktranslate %}Otrzymujesz ten e-mail w związku z prośbą o zmianę hasła Twojego użytkownia na {{ site_name }}.{% endblocktranslate %}
{% translate 'Przejdź na poniższą stronę i ustaw swoje nowe hasło:' %}
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'users:password_reset_confirm' uidb64=uid token=token %}
{% endblock %}
{% translate 'Twoja nazwa użytkownia:' %} {{ user.get_username }}
{% blocktranslate %}Zespół {{ site_name }}{% endblocktranslate %}
{% endautoescape %}
{% extends 'base.html' %}
{% load i18n %}
{% load crispy_forms_filters %}
{% block title %}{% trans 'Ustaw swoje nowe hasło' %}{% endblock %}
{% block content %}
<div class="row m-0">
<div class="col-lg-4 col-md-6 m-auto">
<div class="bg-white mt-4 p-3 clearfix">
<h5 class="mt-2 mb-4">{% trans 'Ustaw swoje nowe hasło' %}</h5>
<form action="." method="post">
{% if form %}
{% crispy form helper %}
{% else %}
<div class="alert alert-danger">{{ title }}</div>
{% endif %}
</form>
</div>
</div>
</div>
{% endblock %}
{% extends 'base.html' %}
{% load i18n %}
{% load crispy_forms_filters %}
{% block title %}{% trans 'Sprawdź swoją skrzynkę e-mail' %}{% endblock %}
{% block content %}
<div class="row m-0">
<div class="col-lg-4 col-md-6 m-auto">
<div class="bg-white mt-4 p-3 clearfix">
<h5 class="mt-2 mb-4">{% trans 'Sprawdź swoją skrzynkę e-mail' %}</h5>
<p>{% trans 'Wysłaliśmy na Twój adres e-mail link, po kliknięciu którego uzyskasz możliwość wprowadzenia swojego nowego hasła.' %}</p>
</div>
</div>
</div>
{% endblock %}
{% extends "base-margins.html" %}
{% extends 'base-margins.html' %}
{% load i18n %}
......
{% extends "base-margins.html" %}
{% extends 'base-margins.html' %}
{% load i18n %}
......@@ -16,11 +16,11 @@
<table class="table">
<thead>
<tr>
<th>{% trans "Imię i nazwisko" %}</th>
<th>{% trans "Nazwa użytkownika" %}</th>
<th>{% trans "Grupa" %}</th>
<th>{% trans "Aktywny" %}</th>
<th>{% trans "Akcje" %}</th>
<th>{% trans 'Imię i nazwisko' %}</th>
<th>{% trans 'Nazwa użytkownika' %}</th>
<th>{% trans 'Grupa' %}</th>
<th>{% trans 'Aktywny' %}</th>
<th>{% trans 'Akcje' %}</th>
</tr>
</thead>
<tbody>
......@@ -28,7 +28,7 @@
<tr>
<td>{{ user.get_full_name }}</td>
<td>{{ user.username }}</td>
<td>{{ user.groups.all|join:", " }}</td>
<td>{{ user.groups.all|join:', ' }}</td>
<td>{{ user.is_active|yesno }}</td>
<td><a href="{% url 'users:user_edit' pk=user.pk %}" class="btn btn-xs btn-outline-dark">{% trans 'Edytuj' %}</a></td>
</tr>
......
{% extends "base-margins.html" %}
{% extends 'base-margins.html' %}
{% load i18n %}
......
from django.urls import include, path, reverse_lazy
from django.contrib.auth import views as auth_views
from django.urls import include, path, reverse_lazy
from django.views.generic import TemplateView
from . import views
from .forms import login_form_helper, password_reset_form_helper
from . import forms
app_name = 'users'
urlpatterns = [
path('', views.user_list, name="user_list"),
path('add/', views.user_add, name="user_add"),
path('<int:pk>/edit/', views.user_edit, name="user_edit"),
path('profile/', views.user_profile, name="user_profile"),
path('', views.user_list, name='user_list'),
path('add/', views.user_add, name='user_add'),
path('<int:pk>/edit/', views.user_edit, name='user_edit'),
path('profile/', views.user_profile, name='user_profile'),
path(
'login/',
auth_views.LoginView.as_view(extra_context={"helper": login_form_helper}, success_url=reverse_lazy('dash')),
name="login",
auth_views.LoginView.as_view(
template_name='login.html',
success_url=reverse_lazy('dash'),
extra_context={'helper': forms.login_form_helper},
),
name='login',
),
path('logout/', auth_views.LogoutView.as_view(), name="logout"),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
path(
'psasword-change/',
auth_views.PasswordChangeView.as_view(
template_name='password_change.html',
success_url=reverse_lazy('users:user_profile'),
extra_context={'helper': forms.password_change_form_helper},
),
name='password_change'),
path(
'password-reset/',
auth_views.PasswordResetView.as_view(
template_name="registration/password_reset.html",
extra_context={"helper": password_reset_form_helper},
template_name='password_reset.html',
email_template_name='password_reset_email.html',
success_url=reverse_lazy('users:password_reset_requested'),
extra_context={'helper': forms.password_reset_form_helper},
),
name='password_reset',
),
path(
'password-reset/check-your-inbox/',
TemplateView.as_view(template_name='password_reset_requested.html'),
name='password_reset_requested',
),
path(
'password-reset/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(
template_name='password_reset_form.html',
success_url=reverse_lazy('users:login'),
extra_context={'helper': forms.password_reset_set_password_form_helper},
),
name="password_reset",
name='password_reset_confirm'
),
]
from django.core.mail import send_mail
from django.utils.translation import gettext as _
from django.template import loader
def send_new_user_email(site, user, use_https):
subject = _('Zaproszenie do %s') % (site.name, )
body = loader.render_to_string('new_user_email.html', {
'site_name': site.name,
'protocol': 'https' if use_https else 'http',
'domain': site.domain,
'user': user,
})
send_mail(subject, body, from_email=None, recipient_list=[user.email])
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.models import User
from django.contrib.sites.shortcuts import get_current_site
from django.shortcuts import get_object_or_404, render, redirect
from django.utils.translation import gettext_lazy as _
from users.forms import UserForm, UserProfileForm
from users.utils import send_new_user_email
@permission_required('users.view_user')
......@@ -28,7 +30,8 @@ def user_add(request):
if request.method == 'POST':
form = UserForm(instance=User(), data=request.POST)
if form.is_valid():
form.save()
user = form.save()
send_new_user_email(site=get_current_site(request), user=user, use_https=request.is_secure())
return redirect('users:user_list')
else:
form = UserForm(instance=User())
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment