Merge branch 'william' into 'master'

Enhancements of the UI

See merge request ungleich-public/ungleich-user!2
This commit is contained in:
pcoder116 2019-05-01 20:29:18 +02:00
commit a951932118
22 changed files with 658 additions and 208 deletions

View file

@ -56,6 +56,29 @@
border: 2px solid #8396C4; border: 2px solid #8396C4;
} }
.choicered-btn {
min-width: 110px;
background-color: red;
color: #fff;
border: 2px solid red;
padding: 4px 10px;
transition: 0.3s all ease-out;
}
.choicered-btn:focus,
.choicered-btn:hover,
.choicered-btn:active {
color: red;
background-color: #fff;
}
.choicered-btn-faded {
background-color: #8396C4;
border: 2px solid #8396C4;
}
@media (max-width: 767px) { @media (max-width: 767px) {
.h1-thin { .h1-thin {
font-size: 27px; font-size: 27px;

View file

@ -10,8 +10,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content=""> <meta name="description" content="">
<meta name="author" content=""> <meta name="author" content="">
{% block title %}
<title>ungleich</title> {% endblock %}
<!-- Bootstrap Core CSS --> <!-- Bootstrap Core CSS -->
<link href="{% static 'datacenterlight/css/bootstrap-3.3.7.min.css' %}" rel="stylesheet"> <link href="{% static 'datacenterlight/css/bootstrap-3.3.7.min.css' %}" rel="stylesheet">
@ -47,14 +47,14 @@
<!-- End Google Analytics --> <!-- End Google Analytics -->
</head> </head>
<body> <body style="overflow-x: hidden">
<!-- cms_toolbar %}--> <!-- cms_toolbar %}-->
{% block navbar %} {% block navbar %}
{% include "includes/_navbar_transparent.html" %} {% include "includes/_navbar_transparent.html" %}
{% endblock navbar %} {% endblock navbar %}
<div class="{% if request.user.is_authenticated %}content-dashboard{% endif %}"> <div class="{% if request.user.is_authenticated %}content-dashboard{% endif %}" style="min-height: auto">
{% block content %} {% block content %}
{% endblock %} {% endblock %}
</div> </div>

View file

@ -1,14 +1,29 @@
<title> Userdata changed. </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> The data for {{user}} has been changed. </h2> {% block title %}
<br><br> <title> Success! </title>
<ul> {% endblock %}
<li> Username: {{user}} </li>
<li> Firstname: {{firstname}} </li>
<li> Lastname: {{lastname}} </li>
<li> Email: {{email}} </li> {% block content %}
</ul> <div class="auth-container">
<br><br> <div class="auth-bg"></div>
<form action={% url 'index' %} method="get"> <div class="auth-center">
<input type="submit" value="Back to indexpage"> <div class="auth-content">
</form> <div class="auth-box">
<h1 class="section-heading allcaps">{% trans " Data successfully updated." %}</h1>
<form action="{% url 'index' %}" method="get" class="form" novalidated>
<hr>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Back to indexpage" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,7 +1,28 @@
<title> Password for {{user}} changed. </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> The password for {{user}} has been changed. </h2> {% block title %}
<br><br> <title> Password Updated. </title>
<form action={% url 'index' %} method="get"> {% endblock %}
<input type="submit" value="Back to indexpage">
</form>
{% block content %}
<div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h2 class="section-heading allcaps">{% trans " Password successfully updated " %}</h2>
<form action="{% url 'index' %}" method="get" class="form" novalidated>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Back to indexpage" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,20 +1,44 @@
<title> Changing the password for {{user}} </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Changing the password for {{user}} </h2> {% block title %}
<br><br> <title> Changing the password for {{user}} </title>
<form action={% url 'index' %} method="get"> {% endblock %}
<input type="submit" value="Back to indexpage">
</form>
<br><br>
To change the password for {{user}}, please supply {% block content %}
<form action={% url 'change_password' %} method="post"> <div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans " Password change " %}</h1>
<form action="{% url 'change_password' %}" method="post" class="form" novalidated>
{% csrf_token %} {% csrf_token %}
<br>The old password:<br> <br>
<input type="password" name="oldpassword" id="oldpassword"> <div class="form-group">
<br><br>The new password (at least 8 characters):<br> <label class="sr-only control-label" for="password1">oldpassword</label>
<input type="password" name="password1" id="password1"> <input type="password" name="oldpassword" class="form-control" placeholder="Type your current password" title="" required="" id="oldpassword">
<br>Please repeat the new Password:<br> </div>
<input type="password" name="password2" id="password2"> <hr>
<br><br> <div class="form-group">
<input type="submit" value="Submit"> <label class="sr-only control-label" for="password1">password1</label>
</form> <input type="password" name="password1" class="form-control" placeholder="New Password (at least 8 characters):" title="" required="" id="password1">
</div>
<div class="form-group">
<label class="sr-only control-label" for="password2">password2</label>
<input type="password" name="password2" class="form-control" placeholder="Please confirm your new Password:" title="" required="" id="password2">
</div>
<hr>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Change Password" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,19 +1,43 @@
<title> Changing user data for {{user}} </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Changing user data for {{user}} </h2> {% block title %}
<br><br> <title> Changing user data for {{user}} </title>
<form action={% url 'index' %} method="get"> {% endblock %}
<input type="submit" value="Back to indexpage">
</form>
<br><br>
<form action={% url 'change_data' %} method="post"> {% block content %}
<div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans " Update your info " %} </h1>
<form action="{% url 'change_data' %}" method="post" class="form" novalidated>
{% csrf_token %} {% csrf_token %}
<br>Firstname:<br> <div class="form-group">
<input type="text" name="firstname" id="firstname" value="{{firstname}}"> <label class="sr-only control-label" for="firstname">firstname</label>
<br><br>Lastname:<br> <input type="text" name="firstname" placeholder="firstname" value="{{firstname}}" class="form-control" required="" id="firstname">
<input type="text" name="lastname" id="lastname" value="{{lastname}}"> </div>
<br><br>Email:<br> <div class="form-group">
<input type="text" name="email" id="email" value="{{email}}"> <label class="sr-only control-label" for="lastname">lastname</label>
<br><br> <input type="text" name="lastname" placeholder="lastname" value="{{lastname}}" class="form-control" required="" id="lastname">
<input type="submit" value="Submit"> </div>
</form> <div class="form-group">
<label class="sr-only control-label" for="email">email</label>
<input type="text" name="email" placeholder="email" value="{{email}}" class="form-control" required="" id="email">
</div>
<hr>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Change User Data" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,18 +1,39 @@
<title> Deleting an Account </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Deleting an Account </h2> {% block title %}
<br><br> <title> Deleting Account </title>
<form action={% url 'index' %} method="get"> {% endblock %}
<input type="submit" value="Back to indexpage">
</form>
<br><br>
To delete an account, please type the username and password below: {% block content %}
<form action={% url 'account_delete' %} method="post"> <div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans " Enter your credentials to confirm " %}</h1>
<form action="{% url 'account_delete' %}" method="post" class="form" novalidated>
{% csrf_token %} {% csrf_token %}
<br><br>Username:<br>
<input type="text" name="username" id="username">
<br><br>Password:<br>
<input type="password" name="password" id="password">
<br><br> <br><br>
<input type="submit" value="Submit"> <div class="form-group">
</form> <label class="sr-only control-label" for="username">username</label>
<input type="text" name="username" class="form-control" placeholder="Username" title="" required="" id="username">
</div>
<div class="form-group">
<label class="sr-only control-label" for="password">password</label>
<input type="password" name="password" class="form-control" placeholder="Password" title="" required="" id="password">
</div>
<hr>
<div class="text-center">
<button type="submit" class="btn choicered-btn btn-block">
{% trans "Delete Account" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,7 +1,28 @@
<title> Deleted user {{user}} </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> The user {{user}} was deleted from our system. </h2> {% block title %}
<br> <title> Deleted user {{user}} </title>
<form action={% url 'index' %} method="get"> {% endblock %}
<input type="submit" value="Back to indexpage">
</form>
{% block content %}
<div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans " User Removed " %}</h1>
<form action="{% url 'index' %}" method="get" class="form" novalidated>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Back to indexpage" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,17 +1,34 @@
<title> An error has occurred! </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
{% block title %}
<title>An error has occurred!</title>
{% endblock %}
{% block content %}
<div class="container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading">{% trans " We are sorry, an error has occurred. " %}</h1>
<br>
<div class="auth-footer">
While trying to {{service}}, an error was encountered: <strong>{{error}}</strong>
</div>
<div class="text-center">
{% if urlname %}
<br>You can: <br><br>
<a class="btn choice-btn mr-2" href="{% url urlname %}" role="button">Go back and try again</a>
{% endif %}
<a class="btn choice-btn ml-2" href="{% url 'index' %}" role="button">Go to the indexpage</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
<h2> We are sorry, an error has occured while handling your request. </h2>
While trying to {{service}}, an error was encountered: {{error}}
<br><br>
You can try to:
<br>
{% if urlname %}
<form action={% url urlname %} method="get">
<input type="submit" value="Go back and try again">
</form>
<br>or<br>
{% endif %}
<form action={% url 'index' %} method="get">
<input type="submit" value="Go to the indexpage">
</form>

View file

@ -1,7 +1,7 @@
{% load i18n %} {% load i18n %}
<footer> <footer>
<div class="container">
<div class="row"> <div class="row">
<div class="container">
<div class="col-lg-12"> <div class="col-lg-12">
<ul class="list-inline"> <ul class="list-inline">
</ul> </ul>

View file

@ -1,6 +1,10 @@
{% extends "base_short.html" %} {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %} {% load i18n staticfiles bootstrap3 %}
{% block title %}
<title>ungleich</title>
{% endblock %}
{% block content %} {% block content %}
<div class="auth-container"> <div class="auth-container">
@ -17,7 +21,7 @@
{% endfor %} {% endfor %}
<p class="red">{{form.non_field_errors|striptags}}</p> <p class="red">{{form.non_field_errors|striptags}}</p>
<div class="text-center"> <div class="text-center">
<button type="submit" class="btn choice-btn"> <button type="submit" class="btn choice-btn btn-block">
{% trans "Log in" %} {% trans "Log in" %}
</button> </button>
</div> </div>

View file

@ -1,11 +1,29 @@
<title> Login failed! </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Sorry, but your login has failed </h2> {% block title %}
<br><br>This service runs for our LDAP users, so maybe you don't already have an LDAP account with us? If so, please register one. <title>Login failed!</title>
<form action={% url 'register' %} method="get"> {% endblock %}
<input type="submit" value="Register an user">
</form>
<br><br> {% block content %}
<form action={% url 'index' %} method="get"> <div class="container">
<input type="submit" value="Back to indexpage"> <div class="auth-bg"></div>
</form> <div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading">{% trans " Sorry, but your login has failed. " %}</h1>
<br>
<div class="auth-footer">
{% trans " This service runs for our LDAP users, so maybe you don't already have an LDAP account with us? If so, please register one " %}
</div>
<div class="text-center">
<br><br>
<a class="btn choice-btn mr-2" href="{% url 'register' %}" role="button">Register an user</a>
<a class="btn choice-btn ml-2" href="{% url 'index' %}" role="button">Back to the indexpage</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,7 +1,29 @@
<title> You must be logged in to access this page </title>
<h2> You must be logged in to access this page </h2> {% extends "base_short.html" %}
<br><br> {% load i18n staticfiles bootstrap3 %}
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage"> {% block title %}
</form> <title> You must be logged in to access this page </title>
{% endblock %}
{% block content %}
<div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans " You need to login to access " %}</h1>
<form action="{% url 'index' %}" method="get" class="form" novalidated>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Back to indexpage" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,27 +1,60 @@
<title> Register an user at ungleich </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Register an user at ungleich </h2> {% block title %}
<br><br> <title> Register an user at ungleich </title>
<form action={% url 'index' %} method="get"> {% endblock %}
<input type="submit" value="Back to indexpage">
</form> {% block content %}
<br><br> <div class="auth-container">
To register yourself an user, please fill out the fields below: <div class="auth-bg"></div>
<br> <div class="auth-center">
<form action={% url 'register' %} method="post"> <div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans "Sign Up" %}</h1>
{% include 'includes/_messages.html' %}
<form action="{% url 'register' %}" method="post" class="form" novalidated>
{% csrf_token %} {% csrf_token %}
<br>Username (alphanumeric):<br> <div class="form-group">
<input type="text" name="username" id="username"> <label class="sr-only control-label" for="username">Username</label>
<br>Password (at least 8 characters):<br> <input type="text" name="username" class="form-control" placeholder="Username (alphanumeric)" title="" required="" id="username">
<input type="password" name="password1" id="password1"> </div>
<br>Please confirm your Password:<br> <div class="form-group">
<input type="password" name="password2" id="password2"> <label class="sr-only control-label" for="password1">password1</label>
<br>Firstname:<br> <input type="password" name="password1" class="form-control" placeholder="Password (at least 8 characters):" title="" required="" id="password1">
<input type="text" name="firstname" id="firstname"> </div>
<br>Lastname:<br> <div class="form-group">
<input type="text" name="lastname" id="lastname"> <label class="sr-only control-label" for="password2">password2</label>
<br>Emailaddress:<br> <input type="password" name="password2" class="form-control" placeholder="Please confirm your Password:" title="" required="" id="password2">
<input type="text" name="email" id="email"> </div>
<br> <div class="form-group">
<input type="submit" value="Submit"> <label class="sr-only control-label" for="firstname">First Name</label>
</form> <input type="text" name="firstname" class="form-control" placeholder="firstname" title="" required="" id="firstname">
</div>
<div class="form-group">
<label class="sr-only control-label" for="lastname">Last Name</label>
<input type="text" name="lastname" class="form-control" placeholder="lastname" title="" required="" id="lastname">
</div>
<div class="form-group">
<label class="sr-only control-label" for="id_email">Email</label>
<input type="text" name="email" class="form-control" placeholder="Email" title="" required="" id="email">
</div>
<p class="red">{{form.non_field_errors|striptags}}</p>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Register" %}
</button>
</div>
</form>
<div class="auth-footer">
<div>
{% trans "If you already have an account" %}&nbsp;<a href="{% url 'index' %}">{% trans "Sign In" %}</a>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,13 +1,34 @@
<title> Password reset </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Password reset </h2> {% block title %}
<br><br> <title> Password reset </title>
To reset your password, please enter your username below. You will get an email with a link to change your password. {% endblock %}
<br><br>
<form action={% url 'reset_password' %} method="post">
{% block content %}
<div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans " Password Reset " %}</h1>
<p class="text-center">{% trans "Please enter your username below. You will get an email with a link to change your password." %}</p>
<form action="{% url 'reset_password' %}" method="post" class="form" novalidated>
{% csrf_token %} {% csrf_token %}
Username:<br> <div class="form-group">
<input type="text" name="user" id="user"> <label class="sr-only control-label" for="user">user</label>
<br> <input type="text" name="user" class="form-control" placeholder="User" title="" required="" id="user">
<input type="submit" value="Submit"> </div>
</form> <div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Submit" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,14 +1,66 @@
<title> Set new password for {{user}} </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Please set new password for {{user}} </h2> {% block title %}
<br><br> <title> Set new password for {{user}} </title>
<form action={% url 'reset' %} method="post"> {% endblock %}
{% block content %}
<div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans "Please set new password for {{user}} " %}</h1>
{% include 'includes/_messages.html' %}
<form action="{% url 'reset' %}" method="post" class="form">
{% csrf_token %} {% csrf_token %}
New Password:<br> <div class="form-group">
<input type="password" name="password1" id="password1"> <label class="sr-only control-label" for="password1">password1</label>
<br>Please confirm new password:<br> <input type="password" name="password1" class="form-control" placeholder="New Password (at least 8 characters):" title="" required="" id="password1">
<input type="password" name="password2" id="password2"> </div>
<br> <div class="form-group">
<label class="sr-only control-label" for="password2">password2</label>
<input type="password" name="password2" class="form-control" placeholder="Please confirm your Password:" title="" required="" id="password2">
</div>
<input type="hidden" name="user" id="user" value="{{user}}"> <input type="hidden" name="user" id="user" value="{{user}}">
<input type="submit" value="Submit"> <p class="red">{{form.non_field_errors|striptags}}</p>
</form> <div class="text-center">
<button type="submit" class="btn choice-btn">
{% trans "Submit" %}
</button>
</div>
<input type='hidden' name='next' value='{{request.GET.next}}'/>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
{##}
{##}
{##}
{#<title></title>#}
{##}
{#<h2> </h2>#}
{#<br><br>#}
{#<form action={% url 'reset' %} method="post">#}
{# {% csrf_token %}#}
{# New Password:<br>#}
{# <input type="password" name="password1" id="password1">#}
{# <br>Please confirm new password:<br>#}
{# <input type="password" name="password2" id="password2">#}
{# <br>#}
{# <input type="hidden" name="user" id="user" value="{{user}}">#}
{# <input type="submit" value="Submit">#}
{#</form>#}

View file

@ -1,10 +1,29 @@
<title> Reset request processed and confirmation email sent </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Reset request processed and confirmation email sent </h2> {% block title %}
<br><br> <title> Reset request processed and confirmation email sent </title>
You will shortly get the confirmation email to confirm that you wish to reset the password for {{user}}.<br> {% endblock %}
Please follow the link in the email to reset your password.
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage"> {% block content %}
</form> <div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans " Reset request processed " %}</h1>
<p class="text-center">{% trans "You will shortly get the confirmation email. Please follow the instructions sent to reset your password." %}</p>
<form action="{% url 'index' %}" method="get" class="form" novalidated>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Back to indexpage" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,7 +1,29 @@
<title> User {{ user }} created. </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> User {{ user }} was successfully created. </h2> {% block title %}
<br><br> <title> User {{ user }} created. </title>
<form action={% url 'index' %} method="get"> {% endblock %}
<input type="submit" value="Back to Indexpage">
</form>
{% block content %}
<div class="auth-container">
<div class="auth-bg"></div>
<div class="auth-center">
<div class="auth-content">
<div class="auth-box">
<h1 class="section-heading allcaps">{% trans " Success " %}</h1>
<p class="text-center">{% trans "User was successfully created." %}</p>
<form action="{% url 'index' %}" method="get" class="form" novalidated>
<div class="text-center">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Back to indexpage" %}
</button>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,24 +1,30 @@
<title> Options for {{user}} </title> {% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Welcome, {{user}} </h2> {% block title %}
<br><br> <title>Options for {{user}}</title>
You have the following options: {% endblock %}
<br>
<form action={% url 'change_data' %} method="get">
<input type="submit" value="Change your userdata"> {% block content %}
</form> <div class="auth-container">
<br> <div class="auth-bg"></div>
<form action={% url 'change_password' %} method="get"> <div class="auth-center">
<input type="submit" value="Change your password"> <div class="auth-content">
</form> <div class="auth-box">
<br> <h1 class="section-heading allcaps">{% trans "Welcome," %} {{user}}</h1><br><br>
<form action={% url 'reset_password' %} method="get"> <form class="form">
<input type="submit" value="Reset your password"> <a class="btn choice-btn btn-block" href="{% url 'change_data' %}" role="button">{% trans "Change your userdata" %}</a><br>
</form> <a class="btn choice-btn btn-block" href="{% url 'change_password' %}" role="button">Change your password</a><br>
<br> <a class="btn choicered-btn btn-block" href="{% url 'logout' %}" role="button">{% trans "Logout" %}</a><br><br>
<form action={% url 'account_delete' %} method="get"> </form>
<input type="submit" value="Delete your account"> <br>
</form> <hr>
<form action={% url 'logout' %} method="get"> <div class="text-center">
<input type="submit" value="Logout"> <a href="{% url 'account_delete' %}">Delete your account</a><br>
</form> </div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -4,10 +4,21 @@ from django.conf.urls import url
from django.contrib import admin from django.contrib import admin
# Import the classes for the views # Import the classes for the views
from .views import Register, ChangeData, ChangePassword, ResetPassword, DeleteAccount, Index, LogOut, ResetRequest from .views import (
Register,
ChangeData,
ChangePassword,
ResetPassword,
DeleteAccount,
Index,
LogOut,
ResetRequest,
UserCreateAPI
)
urlpatterns = [ urlpatterns = [
path('register/', Register.as_view(), name="register"), path('register/', Register.as_view(), name="register"),
path('create/', UserCreateAPI.as_view(), name="create"),
path('changedata/', ChangeData.as_view(), name="change_data"), path('changedata/', ChangeData.as_view(), name="change_data"),
path('resetpassword/', ResetPassword.as_view(), name="reset_password"), path('resetpassword/', ResetPassword.as_view(), name="reset_password"),
path('changepassword/', ChangePassword.as_view(), name="change_password"), path('changepassword/', ChangePassword.as_view(), name="change_password"),

View file

@ -2,12 +2,15 @@
from django.shortcuts import render from django.shortcuts import render
from django.views.generic import View, FormView from django.views.generic import View, FormView
from django.contrib.auth import authenticate, login, logout from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.http import HttpResponse from django.http import HttpResponse
from django.core.validators import validate_email, ValidationError from django.core.validators import validate_email, ValidationError
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.views.decorators.cache import cache_control from django.views.decorators.cache import cache_control
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import ResetToken from .models import ResetToken
from .forms import LoginForm from .forms import LoginForm
from .ungleich_ldap import LdapManager from .ungleich_ldap import LdapManager
@ -93,7 +96,25 @@ class Register(View):
return render(request, 'error.html', { 'urlname': urlname, return render(request, 'error.html', { 'urlname': urlname,
'service': service, 'service': service,
'error': e } ) 'error': e } )
# Finally, we send the send user credentials via email
creationtime = int(datetime.utcnow().timestamp())
# Construct the data for the email
email_from = settings.EMAIL_FROM_ADDRESS
to = ['%s <%s>' % (username, email)]
subject = '{}, Welcome to datacenterlight'.format(firstname)
body = 'The username {} was successfully created.\n'.format(username)
# Build the email
mail = EmailMessage(
subject=subject,
body=body,
from_email=email_from,
to=to
)
try:
mail.send()
except Exception as e:
print(e)
pass
return render(request, 'usercreated.html', { 'user': username } ) return render(request, 'usercreated.html', { 'user': username } )
class ChangeData(LoginRequiredMixin, View): class ChangeData(LoginRequiredMixin, View):
@ -459,3 +480,57 @@ class PseudoUser():
# random alphanumeric strings for primary key and password, just used for token generation # random alphanumeric strings for primary key and password, just used for token generation
pk = ''.join(choice(string.ascii_letters + string.digits) for _ in range(20)) pk = ''.join(choice(string.ascii_letters + string.digits) for _ in range(20))
password = ''.join(choice(string.ascii_letters + string.digits) for _ in range(30)) password = ''.join(choice(string.ascii_letters + string.digits) for _ in range(30))
class UserCreateAPI(APIView):
def post(self, request):
print(request.data)
print(request.POST)
username = request.POST.get('username')
email = request.POST.get('email')
firstname = request.POST.get('firstname')
lastname = request.POST.get('lastname')
if username == "" or not username:
return Response('Please supply a username.', 400)
try:
validate_email(email)
except ValidationError:
return Response('Email is not valid.', 400)
if not firstname or not lastname:
return Response('Please provide firstname and lastname', 400)
pwd = r'%s' % User.objects.make_random_password()
try:
ldap_manager = LdapManager()
ldap_manager.create_user(
username, pwd, firstname, lastname, email
)
except Exception as e:
return Response('While trying to create the user, an error was encountered: %s' % e, 400)
# send user credentials via email
creationtime = int(datetime.utcnow().timestamp())
# Construct the data for the email
email_from = settings.EMAIL_FROM_ADDRESS
to = ['%s <%s>' % (username, email)]
subject = 'Your datacenterlight credentials'
body = 'Your user was successfully created.\n'
body += 'Your credentials are:\n'
body += 'Username: %s\n\n' % username
body += 'Password: %s\n\n' % pwd
body += 'We strongly recommend you to after log in change your password.\n'
# Build the email
mail = EmailMessage(
subject=subject,
body=body,
from_email=email_from,
to=to
)
try:
mail.send()
except:
return Response('User was created, but failed to send the email', 201)
return Response('User successfully created', 200)

View file

@ -5,3 +5,4 @@ django-bootstrap3
django-filter==2.1.0 django-filter==2.1.0
python-decouple python-decouple
ldap3 ldap3
djangorestframework