protected function evt__pre_update($id) { //Se trata de verificar que si la clave actual es una nueva o es similar a la anterior //Para encriptarla if ($this->datos[$id]['autentificacion'] != 'plano') { $usuario = quote($this->datos[$id]['usuario']); $sql = "SELECT clave, autentificacion FROM apex_usuario WHERE usuario = {$usuario}"; $rs = toba::db($this->_fuente)->consultar($sql); $cambio_clave = $rs[0]['clave'] != $this->datos[$id]['clave']; $cambio_metodo = $rs[0]['autentificacion'] != $this->datos[$id]['autentificacion']; if ($cambio_clave || $cambio_metodo) { //Antes de encriptar la clave verifico que no se esta usando una clave anterior toba_usuario::verificar_clave_no_utilizada($this->datos[$id]['clave'], $this->datos[$id]['usuario']); $this->datos[$id]['autentificacion'] = apex_pa_algoritmo_hash; //Fijo el algoritmo por defecto, de manera que se vayan migrando las claves $this->encriptar_clave($id, $this->datos[$id]['autentificacion']); } } }
function conf__basica($form) { $datos = $this->datos('basica')->get(); if (isset($datos)) { $datos['clave'] = self::clave_falsa; } $largo_clave = toba_parametros::get_largo_pwd(null); //Como aun no se sobre que proyecto trabajo.. el largo es el por defecto, osea 8. $form->ef('clave')->set_expreg(toba_usuario::get_exp_reg_pwd($largo_clave)); $form->ef('clave')->set_descripcion("La clave debe tener al menos {$largo_clave} caracteres, entre letras mayúsculas, minúsculas, números y símbolos, no pudiendo repetir caracteres adyacentes"); // obtengo los datos de arai-usuarios $datos = gestion_arai_usuarios::get_datos($datos); // quito los campos que no se utilizan cuando esta vinculado con arai-usuarios if (toba::instalacion()->vincula_arai_usuarios()) { $form->desactivar_efs(array('usuario', 'nombre', 'email', 'clave', 'forzar_cambio_pwd', 'vencimiento')); } else { $form->desactivar_efs(array('usuario_arai', 'cuenta')); } return $datos; }
protected function definir_clave_usuario_admin() { do { $es_invalido = false; $pwd = $this->consola->dialogo_ingresar_texto('Toba - Clave (usuario "toba")', true); //Verifico que la clave cumpla ciertos requisitos basicos if ($this->get_instalacion()->es_produccion()) { try { toba_usuario::verificar_composicion_clave($pwd, apex_pa_pwd_largo_minimo); } catch (toba_error_pwd_conformacion_invalida $e) { $es_invalido = true; $this->consola->mensaje($e->getMessage(), true); } } } while ($es_invalido); if (strtoupper($pwd) == 'TOBA') { $this->consola->mensaje('Este password puede crear un OJO de seguridad, por favor cambialo lo antes posible', true); } return $pwd; }
protected function definir_clave_usuario_admin($param) { $nombre_parametro = array('-k', '--archivo-clave-admin', 'toba-archivo-clave-admin'); $esto_es_produccion = $this->get_instalacion()->es_produccion(); do { $ind = current($nombre_parametro); $es_invalido = !isset($param[$ind]); if (!$es_invalido) { $pwd = $this->recuperar_contenido_archivo($param[$ind]); if ($esto_es_produccion) { //Verifico que la clave recuperada posea ciertos requisitos. try { toba_usuario::verificar_composicion_clave($pwd, apex_pa_pwd_largo_minimo); } catch (toba_error_pwd_conformacion_invalida $e) { $es_invalido = true; } } } } while ($es_invalido && next($nombre_parametro) !== false); if ($es_invalido) { $randompass = toba_usuario::generar_clave_aleatoria(apex_pa_pwd_largo_minimo); toba::logger()->error("Se selecciono una clave aleatoria, ya que una válida no fue provista"); return $randompass; } return $pwd; }
function disparar_confirmacion_cambio() { //Recupero mail del usuario junto con el hash de confirmacion $datos_rs = $this->recuperar_datos_solicitud_cambio($this->s__usuario, $this->randr); if (empty($datos_rs)) { toba::logger()->debug('Proceso de cambio de contraseña en base: El usuario o el random no coinciden'); toba::logger()->var_dump(array('rnd' => $this->randr)); throw new toba_error('Se produjo un error en el proceso de cambio, contactese con un administrador del sistema.'); } else { $datos_orig = current($datos_rs); } //Aca tengo que generar una clave temporal y enviarsela para que confirme el cambio e ingrese con ella. do { try { $claveok = true; $clave_tmp = toba_usuario::generar_clave_aleatoria('10'); toba_usuario::verificar_composicion_clave($clave_tmp, 10); toba_usuario::verificar_clave_no_utilizada($clave_tmp, $datos_orig['id_usuario']); } catch (toba_error_pwd_conformacion_invalida $e) { $claveok = false; } catch (toba_error_usuario $e) { toba::logger()->error('Se estan generando claves aleatorias repetidas!! ' . $clave_tmp); //Debe aparecer en el log para revisar la generacion de la clave aleatoria $claveok = false; } } while (!$claveok); //Armo el mail nuevo $asunto = 'Nueva contraseña'; $cuerpo_mail = '<p>Se ha recibido su confirmación exitosamente, su contraseña fue cambiada a: </br>' . $clave_tmp . '</br> Por favor en cuanto pueda cambiela a una contraseña más segura. </br> Gracias. </p> '; //Cambio la clave del flaco, envio el nuevo mail y bloqueo el random toba::instancia()->get_db()->abrir_transaccion(); try { //Recupero los dias de validez de la clave, si existe $dias = toba_parametros::get_clave_validez_maxima(toba::proyecto()->get_id()); //Seteo la clave para el usuario toba_usuario::reemplazar_clave_vencida($clave_tmp, $datos_orig['id_usuario'], $dias); toba_usuario::forzar_cambio_clave($datos_orig['id_usuario']); //Enviar nuevo mail con la clave temporaria $mail = new toba_mail($datos_orig['email'], $asunto, $cuerpo_mail); $mail->set_html(true); $mail->enviar(); //Bloqueo el pedido para que no pueda ser reutilizado $this->bloquear_random_utilizado($this->s__usuario, $this->randr); toba::instancia()->get_db()->cerrar_transaccion(); } catch (toba_error $e) { toba::instancia()->get_db()->abortar_transaccion(); toba::logger()->debug('Proceso de cambio de contraseña en base: ' . $e->getMessage()); throw new toba_error('Se produjo un error en el proceso de cambio, contactese con un administrador del sistema.'); } }
function evt__form_passwd_vencido__modificacion($datos) { $usuario = $this->s__datos['usuario']; if (toba::manejador_sesiones()->invocar_autenticar($usuario, $datos['clave_anterior'], null)) { //Si la clave anterior coincide $proyecto = toba::proyecto()->get_id(); //Verifico que no intenta volver a cambiarla antes del periodo permitido $dias_minimos = toba_parametros::get_clave_validez_minima($proyecto); if (!is_null($dias_minimos)) { if (!toba_usuario::verificar_periodo_minimo_cambio($usuario, $dias_minimos)) { toba::notificacion()->agregar('No transcurrio el período minimo para poder volver a cambiar su contraseña. Intentelo en otra ocasión'); return; } } //Obtengo el largo minimo de la clave $largo_clave = toba_parametros::get_largo_pwd($proyecto); try { toba_usuario::verificar_composicion_clave($datos['clave_nueva'], $largo_clave); //Obtengo los dias de validez de la nueva clave $dias = toba_parametros::get_clave_validez_maxima($proyecto); $ultimas_claves = toba_parametros::get_nro_claves_no_repetidas($proyecto); toba_usuario::verificar_clave_no_utilizada($datos['clave_nueva'], $usuario, $ultimas_claves); toba_usuario::reemplazar_clave_vencida($datos['clave_nueva'], $usuario, $dias); $this->es_cambio_contrasenia = true; //Bandera para el post_eventos } catch (toba_error_pwd_conformacion_invalida $e) { toba::logger()->info($e->getMessage()); toba::notificacion()->agregar($e->getMessage(), 'error'); return; } } else { throw new toba_error_usuario('La clave ingresada no es correcta'); } $this->set_pantalla('login'); }
function __construct() { parent::__construct('no_autentificado'); }
private static function get_clave_aleatoria($largo_clave) { do { try { $claveok = true; $clave_tmp = toba_usuario::generar_clave_aleatoria($largo_clave); toba_usuario::verificar_composicion_clave($clave_tmp, $largo_clave); } catch (toba_error_pwd_conformacion_invalida $e) { $claveok = false; } catch (toba_error_usuario $e) { $claveok = false; } } while (!$claveok); return $clave_tmp; }
function get_datos_usuario() { //Verifico que la clave cumpla ciertos requisitos basicos do { $hubo_error = false; if (!isset($datos)) { $datos = $this->definir_usuario("Crear USUARIO"); } if ($this->get_instalacion()->es_produccion()) { try { toba_usuario::verificar_composicion_clave($datos['clave'], apex_pa_pwd_largo_minimo); //Hay que brindar la posibilidad de marcar produccion antes } catch (toba_error_pwd_conformacion_invalida $e) { $this->consola->mensaje($e->getMessage(), true); $hubo_error = true; unset($datos); } } } while ($hubo_error); return $datos; }