def professorRecoverPasswd(request, username, oneTimePasswd): infoForm = [ ( 'Usuari', username, ), ] if request.method == 'POST': form = recuperacioDePasswdForm(request.POST) del form.fields['data_neixement'] errors = [] if form.is_valid(): passwd = form.cleaned_data['p1'] professor = Professor.objects.get(username=username) a_temps = datetime.now() - timedelta(minutes=30) codiOK = OneTimePasswd.objects.filter( usuari=professor.getUser(), clau=oneTimePasswd, moment_expedicio__gte=a_temps, reintents__lt=3) if not codiOK: errors.append( u"Dades incorrectes. Demaneu un altre codi de recuperació." ) #todoBloquejar oneTimePasswd elif codiOK: professor.set_password(passwd) professor.is_active = True professor.save() user = authenticate(username=professor.username, password=passwd) login(request, user) if not errors: codiOK.update(reintents=3) url_next = '/' return HttpResponseRedirect(url_next) else: form._errors.setdefault(NON_FIELD_ERRORS, []).extend(errors) else: form = recuperacioDePasswdForm() del form.fields['data_neixement'] return render_to_response('form.html', { 'form': form, 'infoForm': infoForm, 'head': u'Recuperació de Contrasenya' }, context_instance=RequestContext(request))
def professorRecoverPasswd( request , username, oneTimePasswd ): infoForm = [ ('Usuari',username,),] if request.method == 'POST': form = recuperacioDePasswdForm( request.POST ) del form.fields['data_neixement'] errors = [] if form.is_valid( ): passwd = form.cleaned_data['p1'] professor = Professor.objects.get( username = username) a_temps = datetime.now() - timedelta( minutes = 30 ) codiOK = OneTimePasswd.objects.filter( usuari = professor.getUser(), clau = oneTimePasswd, moment_expedicio__gte = a_temps, reintents__lt = 3 ) if not codiOK: errors.append( u"Dades incorrectes. Demaneu un altre codi de recuperació.") #todoBloquejar oneTimePasswd elif codiOK: professor.set_password( passwd ) professor.is_active = True professor.save() user = authenticate(username=professor.username, password=passwd) login( request, user ) if not errors: codiOK.update( reintents = 3 ) url_next = '/' return HttpResponseRedirect( url_next ) else: form._errors.setdefault(NON_FIELD_ERRORS, []).extend( errors ) else: form = recuperacioDePasswdForm( ) del form.fields['data_neixement'] return render( request, 'form.html', {'form': form, 'infoForm':infoForm, 'head': u'Recuperació de Contrasenya' } )
def alumneRecoverPasswd(request, username, oneTimePasswd): client_address = getClientAdress(request) infoForm = [ ( 'Usuari', username, ), ] if request.method == 'POST': form = recuperacioDePasswdForm(request.POST) errors = [] if form.is_valid(): passwd = form.cleaned_data['p1'] data_neixement = form.cleaned_data['data_neixement'] alumneOK = True try: alumneUser = AlumneUser.objects.get(username=username) dataOK = data_neixement == alumneUser.getAlumne( ).data_neixement a_temps = datetime.now() - timedelta(minutes=30) codiOK = OneTimePasswd.objects.filter( usuari=alumneUser.getUser(), clau=oneTimePasswd, moment_expedicio__gte=a_temps, reintents__lt=3) except AlumneUser.DoesNotExist: alumneOK = False if not alumneOK: errors.append( u'Dades incorrectes. Demaneu un altre codi de recuperació. Si el problema persisteix parleu amb el tutor.' ) elif codiOK and not dataOK: errors.append(u'La data proporcionada no és correcta.') codiOK[0].reintents += 1 codiOK[0].save() elif dataOK and not codiOK: errors.append( u"L'enllaç que esteu utilitzant està caducat o no és correcta. Demaneu un altre codi de recuperació." ) elif not dataOK and not codiOK: errors.append( u"Dades incorrectes. Demaneu un altre codi de recuperació." ) #todoBloquejar oneTimePasswd elif alumneUser.alumne.esBaixa(): errors.append( u'Cal parlar amb el tutor per recuperar accés a aquest compte.' ) elif codiOK and dataOK and not alumneUser.alumne.esBaixa(): alumneUser.set_password(passwd) alumneUser.is_active = True alumneUser.save() if alumneUser.alumne.motiu_bloqueig: alumneUser.alumne.motiu_bloqueig = u"" alumneUser.alumne.save() user = authenticate(username=alumneUser.username, password=passwd) login(request, user) if not errors: codiOK.update(reintents=3) #apunto el login: LoginUsuari.objects.create(usuari=user, exitos=True, ip=client_address) url_next = '/' return HttpResponseRedirect(url_next) else: try: #apunto el login: LoginUsuari.objects.create(usuari=alumneUser, exitos=False, ip=client_address) except: pass form._errors.setdefault(NON_FIELD_ERRORS, []).extend(errors) else: form = recuperacioDePasswdForm() return render(request, 'form.html', { 'form': form, 'infoForm': infoForm, 'head': u'Recuperació de Contrasenya' })
def alumneRecoverPasswd( request , username, oneTimePasswd ): client_address = getClientAdress( request ) infoForm = [ ('Usuari',username,),] if request.method == 'POST': form = recuperacioDePasswdForm( request.POST ) errors = [] if form.is_valid( ): passwd = form.cleaned_data['p1'] data_neixement = form.cleaned_data['data_neixement'] alumneOK = True try: alumneUser = AlumneUser.objects.get( username = username) dataOK = data_neixement == alumneUser.getAlumne().data_neixement a_temps = datetime.now() - timedelta( minutes = 30 ) codiOK = OneTimePasswd.objects.filter( usuari = alumneUser.getUser(), clau = oneTimePasswd, moment_expedicio__gte = a_temps, reintents__lt = 3 ) except AlumneUser.DoesNotExist: alumneOK = False if not alumneOK: errors.append( u'Dades incorrectes. Demaneu un altre codi de recuperació. Si el problema persisteix parleu amb el tutor.') elif codiOK and not dataOK: errors.append( u'La data proporcionada no és correcta.') codiOK[0].reintents += 1 codiOK[0].save() elif dataOK and not codiOK: errors.append( u"L'enllaç que esteu utilitzant està caducat o no és correcta. Demaneu un altre codi de recuperació.") elif not dataOK and not codiOK: errors.append( u"Dades incorrectes. Demaneu un altre codi de recuperació.") #todoBloquejar oneTimePasswd elif alumneUser.alumne.esBaixa(): errors.append( u'Cal parlar amb el tutor per recuperar accés a aquest compte.') elif codiOK and dataOK and not alumneUser.alumne.esBaixa(): alumneUser.set_password( passwd ) alumneUser.is_active = True alumneUser.save() if alumneUser.alumne.motiu_bloqueig: alumneUser.alumne.motiu_bloqueig = u"" alumneUser.alumne.save() user = authenticate(username=alumneUser.username, password=passwd) login( request, user ) if not errors: codiOK.update( reintents = 3 ) #apunto el login: LoginUsuari.objects.create( usuari = user, exitos = True, ip = client_address) url_next = '/' return HttpResponseRedirect( url_next ) else: try: #apunto el login: LoginUsuari.objects.create( usuari = alumneUser, exitos = False, ip = client_address) except: pass form._errors.setdefault(NON_FIELD_ERRORS, []).extend( errors ) else: form = recuperacioDePasswdForm( ) return render( request, 'form.html', {'form': form, 'infoForm':infoForm, 'head': u'Recuperació de Contrasenya' } )