ForgotPassword: initial layout created
authorYasin <mohammed-yasin.rahman@lip6.fr>
Mon, 23 Dec 2013 15:39:07 +0000 (16:39 +0100)
committerYasin <mohammed-yasin.rahman@lip6.fr>
Mon, 23 Dec 2013 15:39:07 +0000 (16:39 +0100)
auth/templates/widget-login.html
portal/forms.py
portal/passresetview.py [new file with mode: 0644]
portal/templates/pass_reset.html [new file with mode: 0644]
portal/templates/pass_reset_sent.html [new file with mode: 0644]
portal/urls.py

index 37fb938..39a8bdc 100644 (file)
@@ -11,5 +11,7 @@
   <p class='login'>Password</p>
   <input class='login' type="password" name="password" value="" /><br />
   <input class='login' type="submit" value="Log In" />
+  <p></p>      
+  <a href="/portal/pass_reset/">Can't access your account?</a> 
 </form>
 </div>
index 9bcf8fa..848f1c3 100644 (file)
@@ -53,6 +53,9 @@ class ContactForm(forms.Form):
     message = forms.CharField(widget=forms.Textarea(attrs={'class':'form-control'}))
     cc_myself = forms.BooleanField(required=False,widget=forms.CheckboxInput(attrs={'class':'form-control'}))
 
+class PassResetForm(forms.Form):
+    email = forms.EmailField(widget=forms.TextInput(attrs={'class':'form-control'}))
+
 class SliceRequestForm(forms.Form):
 #    slice_name = forms.CharField()
 #    authority_hrn = forms.ChoiceField(choices=[(1, 'un')])
diff --git a/portal/passresetview.py b/portal/passresetview.py
new file mode 100644 (file)
index 0000000..c9d50dc
--- /dev/null
@@ -0,0 +1,47 @@
+import os.path, re
+import json
+
+from random                     import choice
+
+from django.core.mail           import send_mail
+
+from django.views.generic       import View
+from django.shortcuts           import render
+
+from unfold.loginrequired       import FreeAccessView
+from ui.topmenu                 import topmenu_items_live
+
+from manifold.manifoldapi       import execute_admin_query
+from manifold.core.query        import Query
+
+from portal.forms               import PassResetForm
+from portal.actions             import manifold_update_user
+
+
+class PassResetView (FreeAccessView):
+    def post (self, request):   
+        form = PassResetForm(request.POST) # A form bound to the POST data
+        if form.is_valid(): # All validation rules pass
+            # Process the data in form.cleaned_data
+            email = form.cleaned_data['email'] # email of the user
+            
+            sender = 'support@myslice.info'
+            #recipients = authority_get_pi_emails(authority_hrn)
+            recipients = [email ]
+            pass_list = ['demo', 'test', 'abcdef']
+            reset_pass = choice (pass_list)           
+            msg = "Your password has been reset to: %s"% reset_pass + "\n\n Please use this temporary password to login and reset your password from MyAccount page."
+            print "test ", msg 
+            send_mail("Onelab Portal: Password reset request", msg, sender, recipients)
+            return render(request,'pass_reset_sent.html') # Redirect after POST
+        else:
+            return self._display (request, form)
+
+    def get (self, request):
+        return self._display (request, PassResetForm()) # A fresh unbound form
+
+    def _display (self, request, form):
+        return render(request, 'pass_reset.html', {
+                'form': form,
+                })
+                                                                                                       
diff --git a/portal/templates/pass_reset.html b/portal/templates/pass_reset.html
new file mode 100644 (file)
index 0000000..8fa828f
--- /dev/null
@@ -0,0 +1,30 @@
+{% extends "layout-unfold1.html" %}
+
+{% block head %}
+{{ wizard.form.media }}
+{% endblock %}
+
+{% block unfold_main %}
+
+<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}/css/onelab.css" />
+<div class="onelab-title well-lg">
+  <h2>Onelab Password Reset</h2>
+</div>
+
+<!-- no hint for this form, moreover we need more space to write stuff down
+     so we use a 3-6-3 layout -->
+<div class='well'>
+  <form class="cmxform form-horizontal" id="commentForm" action="#" method="post" role="form">{% csrf_token %}
+  <fieldset>
+    {% for field in form %}
+    <div class="form-group">
+      <label for="{{ field.html_name }}" class="col-xs-3 control-label">{{ field.label }}</label>
+      <div class="col-xs-6"> {{ field.errors }} {{ field }} <p class="form-hint">{{ field.help_text }}</p> </div>
+    </div>
+    {% endfor %}
+    <button class="submit btn btn-default col-xs-12" type="submit">Reset Password</button>
+  </fieldset>
+  </form>
+</div>
+{% endblock %}
+
diff --git a/portal/templates/pass_reset_sent.html b/portal/templates/pass_reset_sent.html
new file mode 100644 (file)
index 0000000..fbdf304
--- /dev/null
@@ -0,0 +1,9 @@
+{% extends "layout-unfold1.html" %}
+
+{% block unfold_main %}
+
+<h1>Under Construction.</h1>
+<h3>Please <a href="/portal/contact/">Contact Support</a> for password recovery.</h2>  
+
+{% endblock %}
+
index 5659386..87ff1e1 100644 (file)
@@ -32,6 +32,7 @@ from portal.contactview         import ContactView
 from portal.slicerequestview    import SliceRequestView
 from portal.registrationview    import RegistrationView
 from portal.sliceview           import SliceView
+from portal.passresetview       import PassResetView
 
 # hopefully these should move in dedicated source files too
 from portal.views               import PresViewView, pres_view_static, pres_view_methods, pres_view_animation
@@ -65,6 +66,7 @@ urlpatterns = patterns('',
     url(r'^account/account_process/?$', account_process),
     url(r'^register/?$', RegistrationView.as_view(), name='registration'),
     url(r'^contact/?$', ContactView.as_view(), name='contact'),
+    url(r'^pass_reset/?$', PassResetView.as_view(), name='pass_rest'),
     # Slice request
     url(r'^slice_request/?$', SliceRequestView.as_view(), name='slice_request'),
     # Validate pending requests