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"
|
||||
# -> /password_reset/done is covered as well
|
||||
LOGIN_EXEMPT_URLS = [
|
||||
'/register',
|
||||
'/api/legacy/',
|
||||
'/o/token/',
|
||||
'/o/userinfo/',
|
||||
|
||||
@ -164,7 +164,7 @@ class UserManager(object):
|
||||
if 'uuid' in kwargs:
|
||||
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
|
||||
package_name = f"{u.username}{'’' if u.username[-1] in 'sxzß' else 's'} Package"
|
||||
|
||||
@ -12,6 +12,7 @@ urlpatterns = [
|
||||
# Login
|
||||
re_path(r'^login', v.login, name='login'),
|
||||
re_path(r'^logout', v.logout, name='logout'),
|
||||
re_path(r'^register', v.register, name='register'),
|
||||
|
||||
# Built In views
|
||||
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)
|
||||
|
||||
elif request.method == 'POST':
|
||||
is_login = bool(request.POST.get('login', False))
|
||||
is_register = bool(request.POST.get('register', False))
|
||||
from django.contrib.auth import authenticate
|
||||
from django.contrib.auth import login
|
||||
|
||||
if is_login:
|
||||
from django.contrib.auth import authenticate
|
||||
from django.contrib.auth import login
|
||||
username = request.POST.get('username')
|
||||
password = request.POST.get('password')
|
||||
|
||||
username = request.POST.get('username')
|
||||
password = request.POST.get('password')
|
||||
# Get email for username and check if the account is active
|
||||
try:
|
||||
temp_user = get_user_model().objects.get(username=username)
|
||||
|
||||
# Get email for username and check if the account is active
|
||||
try:
|
||||
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!"
|
||||
if not temp_user.is_active:
|
||||
context['message'] = "User account is not activated yet!"
|
||||
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:
|
||||
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."
|
||||
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)
|
||||
|
||||
if user is not None:
|
||||
login(request, user)
|
||||
|
||||
if next := request.POST.get('next'):
|
||||
return redirect(next)
|
||||
|
||||
return redirect(s.SERVER_URL)
|
||||
else:
|
||||
return HttpResponseBadRequest()
|
||||
context['message'] = "Login failed!"
|
||||
return render(request, 'static/login.html', context)
|
||||
else:
|
||||
return HttpResponseNotAllowed(['GET', 'POST'])
|
||||
|
||||
|
||||
def logout(request):
|
||||
if request.method == 'POST':
|
||||
is_logout = bool(request.POST.get('logout', False))
|
||||
@ -128,6 +101,48 @@ def logout(request):
|
||||
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):
|
||||
|
||||
if user.is_superuser:
|
||||
|
||||
@ -5,6 +5,10 @@
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{{ message }}
|
||||
</div>
|
||||
{% elif success_message %}
|
||||
<div class="alert alert-success" role="alert">
|
||||
{{ success_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,
|
||||
@ -22,7 +26,6 @@
|
||||
<form class="form-horizontal" method="post" action="{% url 'login' %}">
|
||||
{% csrf_token %}
|
||||
<fieldset>
|
||||
<input type="hidden" name="login" id="login" value="true"/>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="username">Username</label>
|
||||
<div class="controls">
|
||||
@ -38,15 +41,17 @@
|
||||
<a href="{% url 'password_reset' %}">Forgot your password?</a>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="signin"></label>
|
||||
<div class="controls">
|
||||
<button id="signin" name="signin" class="btn btn-success">Sign In
|
||||
</button>
|
||||
|
||||
<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 In
|
||||
</button>
|
||||
<a class="btn btn-primary" href="{% url 'register' %}">Create an Account</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="next" value="{{ next }}"/>
|
||||
<input type="hidden" name="next" value="{{ next }}"/>
|
||||
</fieldset>
|
||||
</form>
|
||||
</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