Example #1
0
 def handle(self, request, data):
     email = data.get("email")
     try:
         res = keystoneapi.get_user(email)
         if not (res.get("success") or res.get("result")):
             return None                
         user = res.get("result")
         user_id = user.get('id')
         email_activation_code = generate_sms_activation_code()
         data = {"email_activation_code": email_activation_code,
                 "email_activation_code_time": timeutils.strtime()}
         # email confirmation about the change
         send_templated_email("JioCloud account password change confirmation",
             [email],
             html_template="signup/password_change_verification.html",
             template_context={
             "name": user.get("first_name") if user.get("first_name") else user.get("name"),
             "reset_password_path": reverse_lazy('horizon_jiocloud:resetPassword', kwargs={'user_id':user_id, 'code':email_activation_code}),
             "SITE_URL": getattr(settings, "SITE_URL", "http://127.0.0.1"),
             })
         # push changes to keystone database
         response = keystoneapi.update_user(user_id, data)
     except Exception as e:
         LOG.exception(e)
     return render_to_response('signup/forgot_password_success.html', 
             {'email':settings.DEFAULT_FROM_EMAIL, 'user_id': user_id})
Example #2
0
 def handle(self, request, data):
     data.pop('confirm_password')
     user_id = data.pop('user_id')
     code = data.pop('code')
     try:
         res = keystoneapi.get_user(user_id)
         if not (res.get("success") or res.get("result")):
             return None                
     except Exception as e:
         LOG.exception(e)
         return None                
     user = res.get("result")
     # check if the code submitted in the form and that in the 
     # database match
     email_activation_code = user.get("email_activation_code")
     if email_activation_code not in [code]:
         self.set_non_field_errors(["Invalid Activation Code"])
         return None
     # codes matched. so we will change the password
     # in database.
     # email_activation_code no more required so unset it
     # in database.
     data["email_activation_code"] = ""
     try:
         res = keystoneapi.update_user(user_id, data)
     except Exception as e:
         LOG.exception(e)
     return render_to_response('signup/reset_password_success.html') 
Example #3
0
def activate(request, activation_code):
     new_email = request.GET.get('email', '')
     try:
         res = keystoneapi.get_user(request.user.id)
         if not (res.get("success") or res.get("result")):
             raise Exception()
     except Exception as ex:
         LOG.exception(ex)
         return render_to_response('change_email/email_change_failure.html')
     user = res.get("result")
     email_activation_code = user.get("email_activation_code")
     email_activation_code_time = user.get("email_activation_code_time")
     if not new_email or email_activation_code != activation_code or is_sms_expired(email_activation_code_time):
         return render_to_response('change_email/email_change_failure.html')
     # codes matched. so we will change the email in database
     try:
         # push changes to keystone database
         if user.get("name") == user.get("email"):
             response = keystoneapi.update_user(request.user.id, {"name" : new_email, "email" : new_email})
         else:
             response = keystoneapi.update_user(request.user.id, {"email" : new_email})
     except Exception as ex:
         LOG.exception(ex)
         return render_to_response('change_email/email_change_failure.html')
     return render_to_response('change_email/email_change_success.html')
Example #4
0
def resendSms(request, user_id):
     url = reverse_lazy('horizon_jiocloud:user_sms_activation',
                        kwargs={'user_id':user_id})
     # This method serves re-sending SMS multiple times 
     # to cater to SMS sending failures.
     # If the OTP is expired, a new one will be generated
     try:
         res = keystoneapi.get_user(user_id)
         if not (res.get("success") or res.get("result")):
             raise Exception('Unable to get user details')
     except Exception as e:
         LOG.exception(e)
         return http.HttpResponseRedirect(url + "?resentSms=True&resentSuccess=False")
     user = res.get("result")
     phone = user.get("phone")
     sms_activation_code = user.get("sms_activation_code")
     sms_activation_code_time = user.get("sms_activation_code_time")
     try:
         if is_sms_expired(sms_activation_code_time):
             sms_activation_code = generate_sms_activation_code()
             data = {"sms_activation_code": sms_activation_code,
                     "sms_activation_code_time": timeutils.strtime()}
             # push changes to keystone database
             response = keystoneapi.update_user(user_id, data)
         generate_and_send_sms(phone, sms_activation_code)
     except Exception as e:
         LOG.exception(e)
         return http.HttpResponseRedirect(url + "?resentSms=True&resentSuccess=False")
     return http.HttpResponseRedirect(url + "?resentSms=True&resentSuccess=True")
Example #5
0
 def __init__(self, request, *args, **kwargs):
     super(PhoneForm, self).__init__(request, *args, **kwargs)
     res = {}
     self.user = None
     self.sms_expired = True
     request.session["show_sms_button"] = None
     try:
         # erro handling: when the user details could not be fetched,
         # show the default error message
         try:
             res = keystoneapi.get_user(self.request.user.id)
         except Exception as ex:
             LOG.exception(ex)
             self.set_non_field_errors([self.get_default_error_message()])
             del self.fields["sms_activation_code"]
             return None
         if not (res.get("success") or res.get("result")):
             del self.fields["sms_activation_code"]
             return None                
         self.user = res.get("result")
         if not kwargs["initial"]["phone"]:
             # we populate the initial value from request.session in views.py
             # No intial value implies that the user hasn't yet started the 
             # phone number change process and hasn't keyed-in the new phone
             # number. So, pre-fill the field with the current phone number
             # from database
             kwargs["initial"]["phone"] = self.user.get("phone")
         sms_activation_code = self.user.get("sms_activation_code")
         sms_activation_code_time = \
                 self.user.get("sms_activation_code_time")
         self.sms_expired = is_sms_expired(sms_activation_code_time)
         if (not (sms_activation_code and sms_activation_code_time)) or \
            self.sms_expired:
             # empty sms_activation_code => the user hasn't yet started the
             # phone number change process.
             # sms_expired => the user has to generate a new OTP.
             # In either case, remove the sms_activation_code field from form
             del self.fields["sms_activation_code"]
             return None
         else:
             # the user is in the middle of phone number change.
             # In some cases, SMS may not have been delivered.
             # So, set this flag to true. Based on this flag, 'Resend SMS'
             # button will be displayed in UI. Logic to this effect is 
             # implemented in the template
             request.session["show_sms_button"] = True
     except Exception as ex:
         import traceback
         traceback.print_exc()
         LOG.exception(ex)
         self.set_non_field_errors([self.get_default_error_message()])
         return None
     if not res.get("success"):
         self.set_non_field_errors([
                 res.get("error", 
                         self.get_default_error_message()
                     )
             ])
         return None
Example #6
0
 def __init__(self, request, *args, **kwargs):
     super(EmailForm, self).__init__(request, *args, **kwargs)
     res = {}
     self.user = None
     try:
         res = keystoneapi.get_user(self.request.user.id)
     except Exception as ex:
         LOG.exception(ex)
         self.set_non_field_errors([self.get_default_error_message()])
         return None
     if not (res.get("success") or res.get("result")):
         return None                
     self.user = res.get("result")
     kwargs["initial"]["email"] = self.user.get("email")
Example #7
0
 def get(self, *args, **kwargs):
     user = None
     res = None
     try:
         user_id = self.kwargs.get('user_id')
         res = keystoneapi.get_user(user_id)
     except Exception as ex:
         LOG.exception(str(ex))
         pass
     if res:
         if res.get("success"):
             user = res.get("result")            
     if not self.is_valid_url(user):
         return shortcuts.redirect("/")
     return super(UserSMSActivateView, self).get(*args, **kwargs)      
Example #8
0
def resendEmail(request, user_id):
    try:
        res = keystoneapi.get_user(user_id)
        if not (res.get("success") or res.get("result")):
            raise Exception('Unable to get user details')
        user = res.get("result")
        send_registration_email(user, "signup/account_activation_email.html")
    except Exception as e:
        LOG.exception(e)
        return shortcuts.render_to_response('signup/signup_success.html', 
                {'email':settings.DEFAULT_FROM_EMAIL, 'user_id':user.get("id"),
                 'resentEmail':True, 'resentSuccess':False})
    return shortcuts.render_to_response('signup/signup_success.html', 
           {'email':settings.DEFAULT_FROM_EMAIL, 'user_id':user.get("id"),
            'resentEmail':True, 'resentSuccess':True})
Example #9
0
 def get(self, *args, **kwargs):
     user = None
     res = None
     try:
         user_id = self.kwargs.get('user_id')
         code = self.kwargs['code']
         res = keystoneapi.get_user(user_id)
         if res and res.get("success"):
             user = res.get("result")            
         else:
             raise Exception('Unable to get user details')
     except Exception as ex:
         LOG.exception(str(ex))
         return shortcuts.redirect("/")
     if not self.is_valid_url(user, code):
         return shortcuts.redirect("/")
     return super(UserResetPasswordView, self).get(*args, **kwargs)      
Example #10
0
def sendSms(request):
     # This method serves re-sending SMS multiple times until the OTP is
     # expired, to cater to SMS sending failures.
     phone = request.session.get("phone")
     try:
         res = keystoneapi.get_user(request.user.id)
         if not (res.get("success") or res.get("result")):
             raise Exception()
     except Exception as ex:
         LOG.exception(ex)
     user = res.get("result")
     sms_activation_code = user.get("sms_activation_code")
     try:
         generate_and_send_sms(phone, sms_activation_code)
         messages.success(request,
                          'SMS sent successfully')
     except Exception as ex:
         LOG.exception(ex)
     return shortcuts.redirect('horizon:settings:phone:index')
Example #11
0
	def process_request(self, request):
		user = None
		if request.user.is_authenticated():
			try:
				user = keystoneapi.get_user(request.user.id).get("result")
			except:
				log.debug("Error while getting user")
			if user is not None:
				display_name = user.get('first_name')
				if display_name is None: 
					display_name = user.get('name')
				else:
					#If lastname is taken as the input from the UI, uncomment the below to display user lastname in the UI
					#last_name = user.get('last_name')
					#if last_name:
					#   display_name += last_name
					pass
				request.session['display_name'] = display_name
				request.session.save()
Example #12
0
    def handle(self, request, data):
        res = {}
        user = None
        try:
            code = data.get("code")
            user_id = data.get("user_id")
            try:
                res = keystoneapi.get_user(user_id)
            except Exception as ex:
                LOG.exception(ex)
                self.set_non_field_errors([self.get_default_error_message()])
                return None

            if not res.get("success"):
                self.set_non_field_errors(["Invalid Account"])
                return None                
            user = res.get("result")
            if not user:
                self.set_non_field_errors(["Invalid Account"])
                return None
            else:
                if user.get("enabled"):
                    self.set_non_field_errors(["Account already activated"])
                    return None
                else:
                    sms_activation_code = user.get("sms_activation_code")
                    sms_activation_code_time = \
                            user.get("sms_activation_code_time")
                    if not (sms_activation_code and sms_activation_code_time):
                        self.set_non_field_errors(["Invalid Activation Code"])
                        return None
                    if sms_activation_code not in [code]:
                        self.set_non_field_errors(["Invalid Activation Code"])
                        return None
                    if is_sms_expired(sms_activation_code_time):
                        self.set_non_field_errors(["Activation Code Expired. Click 'Resend OTP'"])
                        return None
                    user_id = user.get("id")
                    if not user_id:
                        self.set_non_field_errors(["Invalid Account"])
                        return None
                    _data = {"user_id": user_id}
                    try:
                        res = keystoneapi.activate_user(_data)
                        keystoneapi.update_user(user_id, {"sms_activation_code" : ""})
                    except Exception as ex:
                        LOG.exception(ex)
                        self.set_non_field_errors([self.get_default_error_message()])
                        return None
                    try:
                        send_registration_email(user, "signup/registration_success_email.html")
                    except Exception as ex:
                        LOG.exception(ex)
        except Exception as ex:
            import traceback
            traceback.print_exc()
            LOG.exception(ex)
            self.set_non_field_errors([self.get_default_error_message()])
            return None
        if not res.get("success"):
            self.set_non_field_errors([
                    res.get("error", 
                            self.get_default_error_message()
                        )
                ])
            return None
        return res