Conjunto de cambios b3c14f4 en seiven para usuario


Ignorar:
Fecha y hora:
23/08/2016 09:44:06 (hace 8 años)
Autor:
Ing. Roldan D. Vargas G <rvargas@…>
Branches:
master, carga
Children:
13769af
Parents:
32ce822
Mensaje:

agregadas vistas, urls y template para la gestión de usuarios

Ubicación:
usuario
Ficheros:
1 añadido
2 editados

Leyenda

No modificado
Añadido
Eliminado
  • usuario/urls.py

    rd8d20e7 rb3c14f4  
    2121    url(r'^logout/?$', 'usuario.views.salir', name='salir'),
    2222    url(r'^registro/$', RegistroCreate.as_view(), name='registro'),
     23    url(r'^olvido-clave/$', 'usuario.views.olvido_clave', name='olvido_clave'),
     24    url(r'^confirm/?$', 'usuario.views.confirmar_registro', name='confirmar_registro'),
     25    url(r'^confirm-modificar-clave/?$', 'usuario.views.confirmar_modificar_clave', name='confirmar_modificar_clave'),
     26    url(r'^modificar-clave/?$', 'usuario.views.modificar_clave', name='modificar_clave'),
    2327]
  • usuario/views.py

    rd8d20e7 rb3c14f4  
    3030from django.utils.translation import ugettext_lazy as _
    3131
    32 from base.constant import REGISTRO_MESSAGE, EMAIL_SUBJECT_REGISTRO
    33 from base.functions import enviar_correo
     32from base.constant import REGISTRO_MESSAGE, EMAIL_SUBJECT_REGISTRO, CADUCIDAD_LINK_REGISTRO
     33from base.functions import enviar_correo, calcular_diferencia_fechas
    3434from .forms import AutenticarForm, RegistroForm, OlvidoClaveForm, ModificarClaveForm, PerfilForm
    3535
     
    119119
    120120    return HttpResponseRedirect(urlresolvers.reverse("inicio"))
     121
     122
     123def olvido_clave(request):
     124    """!
     125    Funcion que gestiona el envío de enlace para la modificación de la contraseña
     126
     127    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     128    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     129    @date 06-05-2016
     130    @param request <b>{object}</b> Objeto que obtiene la petición
     131    @return Redirecciona al usuario a la pagina de acceso al sistema
     132    """
     133
     134    form = OlvidoClaveForm()
     135
     136    if request.method == "POST":
     137        form = OlvidoClaveForm(data=request.POST)
     138
     139        if form.is_valid():
     140            username = "%s%s%s" % (
     141                request.POST['rif_0'], request.POST['rif_1'], request.POST['rif_2']
     142            )
     143
     144            correo = request.POST['correo']
     145
     146            usr = User.objects.get(username=username)
     147
     148            ## Asigna un enlace de verificación para el olvido de clave
     149            link = request.build_absolute_uri("%s?userid=%s&key=%s" % (
     150                urlresolvers.reverse('usuario.views.confirmar_modificar_clave'),
     151                username, hash_user(usr, is_reset=True).decode()
     152            ))
     153
     154            administrador, admin_email = '', ''
     155            if settings.ADMINS:
     156                administrador = settings.ADMINS[0][0]
     157                admin_email = settings.ADMINS[0][1]
     158
     159            ## Indica si el correo electrónico fue enviado
     160            enviado = enviar_correo(usr.email, 'usuario.olvido.clave.mail', EMAIL_SUBJECT_REGISTRO, {
     161                'link': link, 'emailapp': settings.EMAIL_FROM, 'administrador': administrador,
     162                'admin_email': admin_email
     163            })
     164
     165            if not enviado:
     166                logger.warning(
     167                    str(_("Ocurrió un inconveniente al enviar el correo de recuperación de clave al usuario [%s]")
     168                        % username)
     169                )
     170            else:
     171                form = OlvidoClaveForm()
     172                messages.info(request, _("Se le ha enviado, al correo electrónico indicado, la información necesaria "
     173                                         "para la modificación de la contraseña"))
     174
     175    return render_to_response('usuario.recuperar.clave.html', {'form': form}, context_instance=RequestContext(request))
     176
     177
     178def confirmar_modificar_clave(request):
     179    """!
     180    Función que permite confirmar el enlace enviado al usuario para la modificación de contraseña
     181
     182    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     183    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     184    @date 06-05-2016
     185    @param request <b>{object}</b> Objeto que contiene la petición
     186    @return Devuelve un mensje al usuario indicando el estatus de la validación del enlace
     187    """
     188    userid = request.GET.get('userid', None)
     189    key = request.GET.get('key', None)
     190    verificado = False
     191    mensaje = str(_("El usuario ha sido verificado"))
     192    modificar_clave_url = None
     193
     194    if userid and key and User.objects.filter(username=userid):
     195        user = User.objects.get(username=userid)
     196        if calcular_diferencia_fechas(user.date_joined) <= CADUCIDAD_LINK_REGISTRO:
     197            if key.strip() == hash_user(user, is_reset=True).decode():
     198                modificar_clave_url = "%s?userid=%s&key=%s" % (
     199                    urlresolvers.reverse('modificar_clave'), user.username, hash_user(user, is_reset=True)
     200                )
     201                verificado = True
     202            else:
     203                mensaje = str(_("El usuario no puede ser verificado"))
     204        else:
     205            mensaje = str(_("El enlace utilizado expiró. Contacte al administrador del sistema."))
     206
     207    return render_to_response('usuario.validar.olvido.clave.html', {
     208        'verificado': verificado, 'emailapp': settings.EMAIL_FROM, 'mensaje': mensaje,
     209        'modificar_clave_url': modificar_clave_url
     210    }, context_instance=RequestContext(request))
     211
     212
     213def modificar_clave(request):
     214    """!
     215    Funcion que gestiona la modificación de contraseña
     216
     217    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     218    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     219    @date 06-05-2016
     220    @param request <b>{object}</b> Objeto que obtiene la petición
     221    @return Redirecciona al usuario a la pagina de autenticación del sistema
     222    """
     223    form = ModificarClaveForm()
     224    username = request.GET.get('userid', None)
     225
     226    if request.method == "POST":
     227        form = ModificarClaveForm(data=request.POST)
     228
     229        if form.is_valid():
     230            user = User.objects.get(username=username)
     231            user.set_password(request.POST['clave'])
     232            user.save()
     233            if UserProfile.objects.filter(user=user):
     234                perfil = UserProfile.objects.get(user=user)
     235                perfil.fecha_modpass = datetime.now()
     236                perfil.save()
     237            messages.info(request, _("Su contraseña ha sido modificada correctamente"))
     238
     239            logger.info(str(_("El usuario [%s] modificó su contraseña por olvido") % username))
     240            return HttpResponseRedirect(urlresolvers.reverse("acceso"))
     241
     242    return render_to_response('usuario.modificar.clave.html', {'form': form, 'fortaleza_clave': True},
     243                              context_instance=RequestContext(request))
     244
     245
     246def confirmar_registro(request):
     247    """!
     248    Función que permite confirmar el enlace enviado al usuario durante el registro
     249
     250    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     251    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     252    @date 02-05-2016
     253    @param request <b>{object}</b> Objeto que contiene la petición
     254    @return Devuelve un mensje al usuario indicando el estatus de la validación del enlace
     255    """
     256    userid = request.GET.get('userid', None)
     257    key = request.GET.get('key', None)
     258    verificado = False
     259    mensaje = str(_("El usuario ha sido verificado"))
     260    login_url = None
     261
     262    if userid and key and User.objects.filter(username=userid):
     263        user = User.objects.get(username=userid)
     264        if calcular_diferencia_fechas(user.date_joined) <= CADUCIDAD_LINK_REGISTRO:
     265            if key.strip() == hash_user(user, is_new_user=True).decode():
     266                user.is_active = True
     267                user.save()
     268                login_url = "%s?userid=%s&key=%s" % (
     269                    urlresolvers.reverse('acceso'), user.username, hash_user(user, is_new_user=True)
     270                )
     271                verificado = True
     272            else:
     273                mensaje = str(_("El usuario no puede ser verificado"))
     274        else:
     275            mensaje = str(_("El enlace utilizado expiró. Contacte al administrador del sistema."))
     276
     277    return render_to_response(
     278        'usuario.validar.cuenta.html', {
     279            'verificado': verificado, 'emailapp': settings.EMAIL_FROM, 'mensaje': mensaje, 'login_url': login_url
     280        },
     281        context_instance=RequestContext(request)
     282    )
    121283
    122284
Nota: Vea TracChangeset para ayuda en el uso del visor de conjuntos de cambios.