forked from enviPath/enviPy
[Fix] Registering Issue (#125)
Co-authored-by: Tim Lorsbach <tim@lorsba.ch> Reviewed-on: enviPath/enviPy#125
This commit is contained in:
@ -348,6 +348,7 @@ FLAGS = {
|
|||||||
# path of the URL are checked via "startswith"
|
# path of the URL are checked via "startswith"
|
||||||
# -> /password_reset/done is covered as well
|
# -> /password_reset/done is covered as well
|
||||||
LOGIN_EXEMPT_URLS = [
|
LOGIN_EXEMPT_URLS = [
|
||||||
|
'/register',
|
||||||
'/api/legacy/',
|
'/api/legacy/',
|
||||||
'/o/token/',
|
'/o/token/',
|
||||||
'/o/userinfo/',
|
'/o/userinfo/',
|
||||||
|
|||||||
@ -164,7 +164,7 @@ class UserManager(object):
|
|||||||
if 'uuid' in kwargs:
|
if 'uuid' in kwargs:
|
||||||
extra_fields['uuid'] = kwargs['uuid']
|
extra_fields['uuid'] = kwargs['uuid']
|
||||||
|
|
||||||
u = get_user_model().objects.create_user(username, email, password, **kwargs)
|
u = get_user_model().objects.create_user(username, email, password, **extra_fields)
|
||||||
|
|
||||||
# Create package
|
# Create package
|
||||||
package_name = f"{u.username}{'’' if u.username[-1] in 'sxzß' else 's'} Package"
|
package_name = f"{u.username}{'’' if u.username[-1] in 'sxzß' else 's'} Package"
|
||||||
|
|||||||
@ -12,6 +12,7 @@ urlpatterns = [
|
|||||||
# Login
|
# Login
|
||||||
re_path(r'^login', v.login, name='login'),
|
re_path(r'^login', v.login, name='login'),
|
||||||
re_path(r'^logout', v.logout, name='logout'),
|
re_path(r'^logout', v.logout, name='logout'),
|
||||||
|
re_path(r'^register', v.register, name='register'),
|
||||||
|
|
||||||
# Built In views
|
# Built In views
|
||||||
path('password_reset/', auth_views.PasswordResetView.as_view(
|
path('password_reset/', auth_views.PasswordResetView.as_view(
|
||||||
|
|||||||
125
epdb/views.py
125
epdb/views.py
@ -51,71 +51,44 @@ def login(request):
|
|||||||
return render(request, 'static/login.html', context)
|
return render(request, 'static/login.html', context)
|
||||||
|
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
is_login = bool(request.POST.get('login', False))
|
from django.contrib.auth import authenticate
|
||||||
is_register = bool(request.POST.get('register', False))
|
from django.contrib.auth import login
|
||||||
|
|
||||||
if is_login:
|
username = request.POST.get('username')
|
||||||
from django.contrib.auth import authenticate
|
password = request.POST.get('password')
|
||||||
from django.contrib.auth import login
|
|
||||||
|
|
||||||
username = request.POST.get('username')
|
# Get email for username and check if the account is active
|
||||||
password = request.POST.get('password')
|
try:
|
||||||
|
temp_user = get_user_model().objects.get(username=username)
|
||||||
|
|
||||||
# Get email for username and check if the account is active
|
if not temp_user.is_active:
|
||||||
try:
|
context['message'] = "User account is not activated yet!"
|
||||||
temp_user = get_user_model().objects.get(username=username)
|
|
||||||
|
|
||||||
if not temp_user.is_active:
|
|
||||||
context['message'] = "User account is not activated yet!"
|
|
||||||
return render(request, 'static/login.html', context)
|
|
||||||
|
|
||||||
email = temp_user.email
|
|
||||||
except get_user_model().DoesNotExist:
|
|
||||||
context['message'] = "Login failed!"
|
|
||||||
return render(request, 'static/login.html', context)
|
|
||||||
try:
|
|
||||||
user = authenticate(username=email, password=password)
|
|
||||||
except Exception as e:
|
|
||||||
context['message'] = "Login failed!"
|
|
||||||
return render(request, 'static/login.html', context)
|
return render(request, 'static/login.html', context)
|
||||||
|
|
||||||
if user is not None:
|
email = temp_user.email
|
||||||
login(request, user)
|
except get_user_model().DoesNotExist:
|
||||||
|
context['message'] = "Login failed!"
|
||||||
if next := request.POST.get('next'):
|
|
||||||
return redirect(next)
|
|
||||||
|
|
||||||
return redirect(s.SERVER_URL)
|
|
||||||
else:
|
|
||||||
context['message'] = "Login failed!"
|
|
||||||
return render(request, 'static/login.html', context)
|
|
||||||
|
|
||||||
elif is_register:
|
|
||||||
username = request.POST.get('username')
|
|
||||||
email = request.POST.get('email')
|
|
||||||
password = request.POST.get('password', '').strip()
|
|
||||||
rpassword = request.POST.get('rpassword', '').strip()
|
|
||||||
|
|
||||||
if password != rpassword or password == '':
|
|
||||||
context['message'] = "Registration failed, provided passwords differ!"
|
|
||||||
return render(request, 'static/login.html', context)
|
|
||||||
|
|
||||||
try:
|
|
||||||
u = UserManager.create_user(username, email, password)
|
|
||||||
except Exception:
|
|
||||||
context['message'] = "Registration failed! Couldn't create User Account."
|
|
||||||
return render(request, 'static/login.html', context)
|
|
||||||
|
|
||||||
if s.ADMIN_APPROVAL_REQUIRED:
|
|
||||||
context['message'] = "Your account has been created! An admin will activate it soon!"
|
|
||||||
else:
|
|
||||||
context['message'] = "Account has been created! You'll receive a mail to activate your account shortly."
|
|
||||||
return render(request, 'static/login.html', context)
|
return render(request, 'static/login.html', context)
|
||||||
|
try:
|
||||||
|
user = authenticate(username=email, password=password)
|
||||||
|
except Exception as e:
|
||||||
|
context['message'] = "Login failed!"
|
||||||
|
return render(request, 'static/login.html', context)
|
||||||
|
|
||||||
|
if user is not None:
|
||||||
|
login(request, user)
|
||||||
|
|
||||||
|
if next := request.POST.get('next'):
|
||||||
|
return redirect(next)
|
||||||
|
|
||||||
|
return redirect(s.SERVER_URL)
|
||||||
else:
|
else:
|
||||||
return HttpResponseBadRequest()
|
context['message'] = "Login failed!"
|
||||||
|
return render(request, 'static/login.html', context)
|
||||||
else:
|
else:
|
||||||
return HttpResponseNotAllowed(['GET', 'POST'])
|
return HttpResponseNotAllowed(['GET', 'POST'])
|
||||||
|
|
||||||
|
|
||||||
def logout(request):
|
def logout(request):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
is_logout = bool(request.POST.get('logout', False))
|
is_logout = bool(request.POST.get('logout', False))
|
||||||
@ -128,6 +101,48 @@ def logout(request):
|
|||||||
return HttpResponseBadRequest()
|
return HttpResponseBadRequest()
|
||||||
|
|
||||||
|
|
||||||
|
def register(request):
|
||||||
|
current_user = _anonymous_or_real(request)
|
||||||
|
context = get_base_context(request)
|
||||||
|
|
||||||
|
if request.method == 'GET':
|
||||||
|
context['title'] = 'enviPath'
|
||||||
|
context['next'] = request.GET.get('next', '')
|
||||||
|
return render(request, 'static/register.html', context)
|
||||||
|
elif request.method == 'POST':
|
||||||
|
context['title'] = 'enviPath'
|
||||||
|
if next := request.POST.get('next'):
|
||||||
|
context['next'] = next
|
||||||
|
|
||||||
|
username = request.POST.get('username', '').strip()
|
||||||
|
email = request.POST.get('email', '').strip()
|
||||||
|
password = request.POST.get('password', '').strip()
|
||||||
|
rpassword = request.POST.get('rpassword', '').strip()
|
||||||
|
|
||||||
|
if not (username and email and password):
|
||||||
|
context["message"] = "Invalid username/email/password"
|
||||||
|
return render(request, 'static/register.html', context)
|
||||||
|
|
||||||
|
if password != rpassword or password == '':
|
||||||
|
context['message'] = "Registration failed, provided passwords differ!"
|
||||||
|
return render(request, 'static/register.html', context)
|
||||||
|
|
||||||
|
try:
|
||||||
|
u = UserManager.create_user(username, email, password)
|
||||||
|
except Exception:
|
||||||
|
context['message'] = "Registration failed! Couldn't create User Account."
|
||||||
|
return render(request, 'static/register.html', context)
|
||||||
|
|
||||||
|
if s.ADMIN_APPROVAL_REQUIRED:
|
||||||
|
context['success_message'] = "Your account has been created! An admin will activate it soon!"
|
||||||
|
else:
|
||||||
|
context['success_message'] = "Account has been created! You'll receive a mail to activate your account shortly."
|
||||||
|
|
||||||
|
return render(request, 'static/login.html', context)
|
||||||
|
else:
|
||||||
|
return HttpResponseNotAllowed(['GET', 'POST'])
|
||||||
|
|
||||||
|
|
||||||
def editable(request, user):
|
def editable(request, user):
|
||||||
|
|
||||||
if user.is_superuser:
|
if user.is_superuser:
|
||||||
|
|||||||
@ -5,6 +5,10 @@
|
|||||||
<div class="alert alert-danger" role="alert">
|
<div class="alert alert-danger" role="alert">
|
||||||
{{ message }}
|
{{ message }}
|
||||||
</div>
|
</div>
|
||||||
|
{% elif success_message %}
|
||||||
|
<div class="alert alert-success" role="alert">
|
||||||
|
{{ success_message }}
|
||||||
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="alert alert-success" role="alert">
|
<div class="alert alert-success" role="alert">
|
||||||
Kia ora! We are running our closed beta tests at the moment. It would be great to get your help as tester,
|
Kia ora! We are running our closed beta tests at the moment. It would be great to get your help as tester,
|
||||||
@ -22,7 +26,6 @@
|
|||||||
<form class="form-horizontal" method="post" action="{% url 'login' %}">
|
<form class="form-horizontal" method="post" action="{% url 'login' %}">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<input type="hidden" name="login" id="login" value="true"/>
|
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label class="control-label" for="username">Username</label>
|
<label class="control-label" for="username">Username</label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
@ -38,15 +41,17 @@
|
|||||||
<a href="{% url 'password_reset' %}">Forgot your password?</a>
|
<a href="{% url 'password_reset' %}">Forgot your password?</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label class="control-label" for="signin"></label>
|
<label class="control-label" for="signin"></label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<button id="signin" name="signin" class="btn btn-success">Sign In
|
<button id="signin" name="signin" class="btn btn-success pull-right">Sign In
|
||||||
</button>
|
</button>
|
||||||
|
<a class="btn btn-primary" href="{% url 'register' %}">Create an Account</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<input type="hidden" name="next" value="{{ next }}"/>
|
||||||
<input type="hidden" name="next" value="{{ next }}"/>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
65
templates/static/register.html
Normal file
65
templates/static/register.html
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
{% extends "static/static_base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if message %}
|
||||||
|
<div class="alert alert-danger" role="alert">
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="alert alert-success" role="alert">
|
||||||
|
Kia ora! We are running our closed beta tests at the moment. It would be great to get your help as tester,
|
||||||
|
you
|
||||||
|
can apply to become tester by registering for this page, just hit the button below. More information on the
|
||||||
|
beta
|
||||||
|
test is available in our <a href="https://community.envipath.org/t/apply-to-join-our-closed-beta/95">
|
||||||
|
community
|
||||||
|
form</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="modal-dialog" style="margin:30px auto; z-index:9999;">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-body">
|
||||||
|
<form class="form-horizontal" method="post" action="{% url 'register' %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
<fieldset>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="username">Username</label>
|
||||||
|
<div class="controls">
|
||||||
|
<input required id="username" name="username" type="text"
|
||||||
|
class="form-control" placeholder="username" autocomplete="username">
|
||||||
|
</div>
|
||||||
|
<label class="control-label" for="email">Email</label>
|
||||||
|
<div class="controls">
|
||||||
|
<input required id="email" name="email" type="text"
|
||||||
|
class="form-control" placeholder="email" autocomplete="email">
|
||||||
|
</div>
|
||||||
|
<label class="control-label" for="passwordinput">Password:</label>
|
||||||
|
<div class="controls">
|
||||||
|
<input required id="passwordinput" name="password" class="form-control"
|
||||||
|
type="password" placeholder="********" autocomplete="current-password">
|
||||||
|
</div>
|
||||||
|
<label class="control-label" for="passwordinput2">Password:</label>
|
||||||
|
<div class="controls">
|
||||||
|
<input required id="passwordinput2" name="rpassword" class="form-control"
|
||||||
|
type="password" placeholder="********" autocomplete="current-password">
|
||||||
|
</div>
|
||||||
|
<div class="form-group text-center" style="margin-top:15px;">
|
||||||
|
<a href="{% url 'password_reset' %}">Forgot your password?</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="signin"></label>
|
||||||
|
<div class="controls">
|
||||||
|
<button id="signin" name="signin" class="btn btn-success pull-right">Sign Up
|
||||||
|
</button>
|
||||||
|
<a class="btn btn-primary" href="{% url 'login' %}">Already have an Account?</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="hidden" name="next" value="{{ next }}"/>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user