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;
}
.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) {
.h1-thin {
font-size: 27px;

View file

@ -10,8 +10,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>ungleich</title>
{% block title %}
{% endblock %}
<!-- Bootstrap Core CSS -->
<link href="{% static 'datacenterlight/css/bootstrap-3.3.7.min.css' %}" rel="stylesheet">
@ -47,14 +47,14 @@
<!-- End Google Analytics -->
</head>
<body>
<body style="overflow-x: hidden">
<!-- cms_toolbar %}-->
{% block navbar %}
{% include "includes/_navbar_transparent.html" %}
{% 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 %}
{% endblock %}
</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>
<br><br>
<ul>
<li> Username: {{user}} </li>
<li> Firstname: {{firstname}} </li>
<li> Lastname: {{lastname}} </li>
<li> Email: {{email}} </li>
</ul>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
{% block title %}
<title> Success! </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 " 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>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
{% block title %}
<title> Password Updated. </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">
<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>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
<br><br>
To change the password for {{user}}, please supply
<form action={% url 'change_password' %} method="post">
{% csrf_token %}
<br>The old password:<br>
<input type="password" name="oldpassword" id="oldpassword">
<br><br>The new password (at least 8 characters):<br>
<input type="password" name="password1" id="password1">
<br>Please repeat the new Password:<br>
<input type="password" name="password2" id="password2">
<br><br>
<input type="submit" value="Submit">
</form>
{% block title %}
<title> Changing the password for {{user}} </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 " Password change " %}</h1>
<form action="{% url 'change_password' %}" method="post" class="form" novalidated>
{% csrf_token %}
<br>
<div class="form-group">
<label class="sr-only control-label" for="password1">oldpassword</label>
<input type="password" name="oldpassword" class="form-control" placeholder="Type your current password" title="" required="" id="oldpassword">
</div>
<hr>
<div class="form-group">
<label class="sr-only control-label" for="password1">password1</label>
<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 %}
{% block title %}
<title> Changing user data for {{user}} </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 " Update your info " %} </h1>
<form action="{% url 'change_data' %}" method="post" class="form" novalidated>
{% csrf_token %}
<div class="form-group">
<label class="sr-only control-label" for="firstname">firstname</label>
<input type="text" name="firstname" placeholder="firstname" value="{{firstname}}" class="form-control" required="" id="firstname">
</div>
<div class="form-group">
<label class="sr-only control-label" for="lastname">lastname</label>
<input type="text" name="lastname" placeholder="lastname" value="{{lastname}}" class="form-control" required="" id="lastname">
</div>
<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 %}
<h2> Changing user data for {{user}} </h2>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
<br><br>
<form action={% url 'change_data' %} method="post">
{% csrf_token %}
<br>Firstname:<br>
<input type="text" name="firstname" id="firstname" value="{{firstname}}">
<br><br>Lastname:<br>
<input type="text" name="lastname" id="lastname" value="{{lastname}}">
<br><br>Email:<br>
<input type="text" name="email" id="email" value="{{email}}">
<br><br>
<input type="submit" value="Submit">
</form>

View file

@ -1,18 +1,39 @@
<title> Deleting an Account </title>
{% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
<h2> Deleting an Account </h2>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
<br><br>
To delete an account, please type the username and password below:
<form action={% url 'account_delete' %} method="post">
{% 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>
<input type="submit" value="Submit">
</form>
{% block title %}
<title> Deleting Account </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 " Enter your credentials to confirm " %}</h1>
<form action="{% url 'account_delete' %}" method="post" class="form" novalidated>
{% csrf_token %}
<br><br>
<div class="form-group">
<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>
<br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
{% block title %}
<title> Deleted user {{user}} </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 " 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 %}
<footer>
<div class="container">
<div class="row">
<div class="row">
<div class="container">
<div class="col-lg-12">
<ul class="list-inline">
</ul>

View file

@ -1,6 +1,10 @@
{% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
{% block title %}
<title>ungleich</title>
{% endblock %}
{% block content %}
<div class="auth-container">
@ -17,7 +21,7 @@
{% endfor %}
<p class="red">{{form.non_field_errors|striptags}}</p>
<div class="text-center">
<button type="submit" class="btn choice-btn">
<button type="submit" class="btn choice-btn btn-block">
{% trans "Log in" %}
</button>
</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>
<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.
<form action={% url 'register' %} method="get">
<input type="submit" value="Register an user">
</form>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
{% block title %}
<title>Login failed!</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 " 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>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
{% extends "base_short.html" %}
{% load i18n staticfiles bootstrap3 %}
{% block title %}
<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>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to indexpage">
</form>
<br><br>
To register yourself an user, please fill out the fields below:
<br>
<form action={% url 'register' %} method="post">
{% csrf_token %}
<br>Username (alphanumeric):<br>
<input type="text" name="username" id="username">
<br>Password (at least 8 characters):<br>
<input type="password" name="password1" id="password1">
<br>Please confirm your Password:<br>
<input type="password" name="password2" id="password2">
<br>Firstname:<br>
<input type="text" name="firstname" id="firstname">
<br>Lastname:<br>
<input type="text" name="lastname" id="lastname">
<br>Emailaddress:<br>
<input type="text" name="email" id="email">
<br>
<input type="submit" value="Submit">
</form>
{% block title %}
<title> Register an user at ungleich </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 "Sign Up" %}</h1>
{% include 'includes/_messages.html' %}
<form action="{% url 'register' %}" method="post" class="form" novalidated>
{% csrf_token %}
<div class="form-group">
<label class="sr-only control-label" for="username">Username</label>
<input type="text" name="username" class="form-control" placeholder="Username (alphanumeric)" title="" required="" id="username">
</div>
<div class="form-group">
<label class="sr-only control-label" for="password1">password1</label>
<input type="password" name="password1" class="form-control" placeholder="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 Password:" title="" required="" id="password2">
</div>
<div class="form-group">
<label class="sr-only control-label" for="firstname">First Name</label>
<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>
<br><br>
To reset your password, please enter your username below. You will get an email with a link to change your password.
<br><br>
<form action={% url 'reset_password' %} method="post">
{% csrf_token %}
Username:<br>
<input type="text" name="user" id="user">
<br>
<input type="submit" value="Submit">
</form>
{% block title %}
<title> Password reset </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 " 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 %}
<div class="form-group">
<label class="sr-only control-label" for="user">user</label>
<input type="text" name="user" class="form-control" placeholder="User" title="" required="" id="user">
</div>
<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>
<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>
{% block title %}
<title> Set new password for {{user}} </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 "Please set new password for {{user}} " %}</h1>
{% include 'includes/_messages.html' %}
<form action="{% url 'reset' %}" method="post" class="form">
{% csrf_token %}
<div class="form-group">
<label class="sr-only control-label" for="password1">password1</label>
<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 Password:" title="" required="" id="password2">
</div>
<input type="hidden" name="user" id="user" value="{{user}}">
<p class="red">{{form.non_field_errors|striptags}}</p>
<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>
<br><br>
You will shortly get the confirmation email to confirm that you wish to reset the password for {{user}}.<br>
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">
</form>
{% block title %}
<title> Reset request processed and confirmation email sent </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 " 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>
<br><br>
<form action={% url 'index' %} method="get">
<input type="submit" value="Back to Indexpage">
</form>
{% block title %}
<title> User {{ user }} created. </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 " 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>
<br><br>
You have the following options:
<br>
<form action={% url 'change_data' %} method="get">
<input type="submit" value="Change your userdata">
</form>
<br>
<form action={% url 'change_password' %} method="get">
<input type="submit" value="Change your password">
</form>
<br>
<form action={% url 'reset_password' %} method="get">
<input type="submit" value="Reset your password">
</form>
<br>
<form action={% url 'account_delete' %} method="get">
<input type="submit" value="Delete your account">
</form>
<form action={% url 'logout' %} method="get">
<input type="submit" value="Logout">
</form>
{% block title %}
<title>Options for {{user}}</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 "Welcome," %} {{user}}</h1><br><br>
<form class="form">
<a class="btn choice-btn btn-block" href="{% url 'change_data' %}" role="button">{% trans "Change your userdata" %}</a><br>
<a class="btn choice-btn btn-block" href="{% url 'change_password' %}" role="button">Change your password</a><br>
<a class="btn choicered-btn btn-block" href="{% url 'logout' %}" role="button">{% trans "Logout" %}</a><br><br>
</form>
<br>
<hr>
<div class="text-center">
<a href="{% url 'account_delete' %}">Delete your account</a><br>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -4,10 +4,21 @@ from django.conf.urls import url
from django.contrib import admin
# 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 = [
path('register/', Register.as_view(), name="register"),
path('create/', UserCreateAPI.as_view(), name="create"),
path('changedata/', ChangeData.as_view(), name="change_data"),
path('resetpassword/', ResetPassword.as_view(), name="reset_password"),
path('changepassword/', ChangePassword.as_view(), name="change_password"),

View file

@ -2,12 +2,15 @@
from django.shortcuts import render
from django.views.generic import View, FormView
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.http import HttpResponse
from django.core.validators import validate_email, ValidationError
from django.urls import reverse_lazy
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core.mail import EmailMessage
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 .forms import LoginForm
from .ungleich_ldap import LdapManager
@ -93,7 +96,25 @@ class Register(View):
return render(request, 'error.html', { 'urlname': urlname,
'service': service,
'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 } )
class ChangeData(LoginRequiredMixin, View):
@ -459,3 +480,57 @@ class PseudoUser():
# 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))
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
python-decouple
ldap3
djangorestframework