summaryrefslogtreecommitdiff
path: root/password
diff options
context:
space:
mode:
authorcoderick142017-05-17 15:40:18 +0530
committercoderick142017-05-17 15:41:00 +0530
commitfe407193c200e03070928c1e2c1a6e067d32893d (patch)
tree1c492aa814754b5db5d644c769f5382306217298 /password
parent9a1393e8470d855762e699abca9911b9cdae6a7d (diff)
downloadSBHS-2018-Rpi-fe407193c200e03070928c1e2c1a6e067d32893d.tar.gz
SBHS-2018-Rpi-fe407193c200e03070928c1e2c1a6e067d32893d.tar.bz2
SBHS-2018-Rpi-fe407193c200e03070928c1e2c1a6e067d32893d.zip
Upgrade to Django 1.11
- Database integration yet to be tested
Diffstat (limited to 'password')
-rw-r--r--password/__init__.py0
-rw-r--r--password/admin.py3
-rw-r--r--password/models.py3
-rw-r--r--password/tests.py3
-rw-r--r--password/urls.py10
-rw-r--r--password/views.py83
6 files changed, 102 insertions, 0 deletions
diff --git a/password/__init__.py b/password/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/password/__init__.py
diff --git a/password/admin.py b/password/admin.py
new file mode 100644
index 0000000..8c38f3f
--- /dev/null
+++ b/password/admin.py
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/password/models.py b/password/models.py
new file mode 100644
index 0000000..71a8362
--- /dev/null
+++ b/password/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/password/tests.py b/password/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/password/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/password/urls.py b/password/urls.py
new file mode 100644
index 0000000..8409b6c
--- /dev/null
+++ b/password/urls.py
@@ -0,0 +1,10 @@
+from django.conf.urls import url
+
+from . import views
+
+urlpatterns = [
+ url(r'^$', views.new, name='password_index'),
+ url(r'^link/?$', views.email, name='password_link'),
+ url(r'^edit/(.*)/?$', views.edit, name='password_edit'),
+ url(r'^update/(.*)/?$', views.update, name='password_update'),
+] \ No newline at end of file
diff --git a/password/views.py b/password/views.py
new file mode 100644
index 0000000..c0323a3
--- /dev/null
+++ b/password/views.py
@@ -0,0 +1,83 @@
+from django.shortcuts import render, redirect
+from sbhs_server.tables.models import Account
+from django.contrib import messages
+from sbhs_server.helpers import simple_encrypt
+from pages.views import index as INDEX_PAGE
+import datetime
+
+# Create your views here.
+
+def new(req):
+ return render(req, 'password/new.html')
+
+def password_token(username):
+ return simple_encrypt.encrypt(username + ",,," + str(datetime.datetime.now()))
+
+def email(req):
+ email = req.POST.get("email")
+
+ account = Account.objects.filter(email=email)
+
+ if len(account) == 1:
+ account[0].send_password_link(password_token(account[0].username))
+ messages.add_message(req, messages.SUCCESS, "Password reset link has been sent to your email address.")
+ return redirect(INDEX_PAGE)
+
+def validate_token(req, token):
+ try:
+ data = simple_encrypt.decrypt(token)
+ except:
+ messages.add_message(req, messages.ERROR, "Invalid link")
+ return redirect(INDEX_PAGE), False
+
+ data = data.split(",,,")
+ if len(data) != 2:
+ messages.add_message(req, messages.ERROR, "Invalid link")
+ return redirect(INDEX_PAGE), False
+
+ return data, True
+
+def edit(req, token):
+ data, flag = validate_token(req, token)
+ if not flag:
+ return data
+
+ timediff = datetime.datetime.now() - datetime.datetime.strptime(data[1], "%Y-%m-%d %H:%M:%S.%f")
+
+ if timediff.total_seconds() < 7200:
+ return render(req, "password/edit.html", {"token": token})
+ else:
+ messages.add_message(req, messages.ERROR, "The reset link is expired.")
+ return redirect(INDEX_PAGE)
+
+def update(req, token):
+ data, flag = validate_token(req, token)
+ if not flag:
+ return data
+
+ timediff = datetime.datetime.now() - datetime.datetime.strptime(data[1], "%Y-%m-%d %H:%M:%S.%f")
+
+ if timediff.total_seconds() < 7200:
+ username = data[0]
+ account = Account.objects.filter(username=username)
+ if len(account) == 1:
+ error = ""
+ if req.POST.get("email") != account[0].email:
+ error = "Invalid email"
+ if req.POST.get("password") != req.POST.get("confirm"):
+ error = "Passwords do not match"
+
+ if error != "":
+ messages.add_message(req, messages.ERROR, error)
+ return redirect(INDEX_PAGE)
+
+ account[0].set_password(req.POST.get("password"))
+ account[0].save()
+ messages.add_message(req, messages.SUCCESS, "Password changed successfully")
+ return redirect(INDEX_PAGE)
+ else:
+ messages.add_message(req, messages.ERROR, "Invalid link")
+ return redirect(INDEX_PAGE)
+ else:
+ messages.add_message(req, messages.ERROR, "The reset link is expired.")
+ return redirect(INDEX_PAGE) \ No newline at end of file