---
# System prepended metadata

title: Requerimientos y casos de uso
tags: [Requerimientos, ' casos de uso', ' diagramas de secuencia']

---

---
title: Requerimientos y casos de uso
tags: Requerimientos, casos de uso, diagramas de secuencia
description: Requerimientos funcionales
---

# Kiki


## Requerimientos funcionales


- El usuario puede guardar contraseñas de diversos servicios utilizando el nombre del servicio, URL, login, password, descripción (opcional), fecha de modificación 
	
- La aplicación de escritorio y la aplicación móvil permiten al usuario consultar sus contraseñas guardadas, crear nuevas, borrar y modificar registros.
	
- La aplicación contará con una opción para proponer contraseñas al usuario definiendo ciertos criterios a cumplir como por ejemplo: el tamaño de la contraseña, el número de caracteres especiales, alfanuméricos o mayúsculas. 
	
- La aplicación ofrecerá al usuario un login para acceder a ella a través de un usuario y contraseña y en el caso de la aplicación móvil, se propondrá el uso de métodos biométricos (huella digital)
	
- Si un usuario borra su cuenta, se borran todos los datos guardados sobre las credenciales en la aplicación 
	
- Los datos serán guardados en ficheros en local del dispositivo en el que se use la aplicación, por default, los datos no se sincronizarán con el servidor y las contraseñas permanecerán en ficheros locales 
	
- Al momento de sincronizar los datos, el usuario podrá escoger que contraseñas sincronizar con el servidor, a partir de ese momento, una cuenta se creará en el servidor, solicitando al usuario su correo y la contraseña usada en la aplicación local, la cual se verificará con la misma. El correo deberá ser confirmado con un código que se enviará
	
- Las credenciales que serán válidas al momento de sincronizar, serán las que cuenten con la fecha de actualización más reciente independientemente del dispositivo en el que se encuentren.
	 
- Al desincronizar una credencial del servidor, esta se borrará del servidor y posteriormente de todos los dispositivos salvo el que hizo la petición de desincronización verificando que la opción de sincronización este activa (en el dispositivo del cual se borrará) y que la contraseña no se encuentra en el servidor

---

## Casos de uso y diagramas de secuencia

###  Creación de cuenta anónima
1. El usuario abre la aplicación, la cual mostrará un menú de inicio de sesión y un bóton para registrar una cuenta anonima (no sincronizada con el servidor).
2. El usuario selecciona la opción de crear una cuenta anónima y un mensaje explicando lo que es una cuenta anónima se muestra. 
3. El usuario introduce una contraseña a utilizar para crear su cuenta.
4. Solo en el caso de dispositivos móviles compatibles, un mensaje es desplegado para saber si el usuario quiere usar métodos biométricos (huella digital).
5. El usuario accede a la aplicación desde su cuenta anónima, la contraseña y la configuración de esta cuenta son guardadas en un fichero local del dispositivo. 

```plantuml
@startuml
title Flujo 1.0 Creación de cuenta anónima

actor Usuario
Participant Aplicación

Usuario ->> Aplicación : Abrir aplicación
activate Aplicación
Aplicación -> Aplicación : Mostrar menú de inicio de sesión
Usuario ->> Aplicación : Seleccionar "Crear cuenta anónima"
Aplicación -> Aplicación : Mostrar mensaje informativo de cuenta anónima y formulario
Usuario ->> Aplicación : Introducir contraseña

alt Dispositivo con soporte para autentificación biométrica
Aplicación -> Aplicación : Mostrar mensaje "¿Desea activar el acceso por métodos biométricos?"
Usuario ->> Aplicación : Introducir selección
end

@enduml
```

---

###  Acceso a la aplicación con cuenta anónima
1. El usuario abre la aplicación, la cual mostrará un menú de acceso a la aplicación que pedirá al usuario la contraseña registrada para la cuenta anónima.
2. El usuario introduce su contraseña de cuenta anónima y presiona el bóton de acceso. 
3. La aplicación valida la contraseña guardada en un archivo local y permite al usuario el acceso en caso de que esta última sea correcta y en caso contrario, muestra un mensaje de error.
4. Si el acceso es otorgado, el usuario accederá al ménu principal de la aplicación para cuentas anónimas.

> El formulario o la pantalla de acceso a la cuenta local no es la misma que la de inicio de sesión; para esta última se requiere además el login (nombre de usuario/correo).

```plantuml
@startuml
title Flujo 1.1 Acceso a la aplicación con cuenta anónima

actor Usuario
Participant Aplicación

Usuario ->> Aplicación : Abrir aplicación
activate Aplicación
Aplicación -> Aplicación : Mostrar menú de acceso
Usuario ->> Aplicación : Introducir contraseña y presionar el botón de acceso
Aplicación -> Aplicación : Validar contraseña con archivo local

alt Contraseña incorrecta
Aplicación -> Aplicación : Mostrar mensaje "Contraseña incorrecta"
else Contraseña correcta
Aplicación -> Aplicación : Conceder acceso
end

Aplicación -> Aplicación : Mostrar menu principal

@enduml
```

###  Creación de cuenta sincronizada

1. Estando dentro de la aplicación, una opción "Sincronizar cuenta" aparecerá en el ménu principal de la aplicación, este bóton aparecerá unicamente para los usuarios que no tengan una cuenta sincronizada con el servidor.
2. La aplicación mostrará un mensaje explicando lo que es una cuenta sincronizada y el funcionamiento de la misma y pedirá una confirmación al usuario para crear su cuenta sincronizada.
3. En caso de que el usuario acepte, se le solicitará un correo y se le enviará un correo con un código de confirmación para validar la creación de la cuenta.
4. Una vez validado el correo, se creará una cuenta en el servidor con el correo introducido y la contraseña que se usa para la cuenta anonima.
5. Seguido de esto se mostrará un ménu al usuario con sus credenciales para que el usuario escoja cuales de ellas quiere sincronizar en el servidor y cuales no.
6. Después de la confirmación, las contraseñas seleccionadas se guardarán en el servidor.


```plantuml
@startuml
title Flujo 1.2.1 Creación de cuenta sincronizada

actor Usuario
Participant Aplicación
Participant Servidor

activate Aplicación

alt Cuenta no sincronizada
Usuario ->> Aplicación : Seleccionar la opción de sincronización
Aplicación -> Aplicación : Mostrar un mensaje que explique el funcionamiento de la cuenta sincronizada
Aplicación -> Aplicación : Solicitar confirmación
Usuario ->> Aplicación : Confirmar sincronización
Aplicación -> Aplicación : Pedir correo
Usuario ->> Aplicación : Introducir correo
Aplicación -> Aplicación : Validar sintaxis de correo
alt Correo no válido
Aplicación -> Aplicación : Mostrar mensaje "Correo inválido"
else Correo válido
alt Sin conexión
Aplicación -> Aplicación : Mostrar mensaje de no conexión
else Conexión a Internet
Aplicación -> Servidor : Enviar solicitud de creación de cuenta
activate Servidor
end

end 

@enduml
```

```plantuml
@startuml
title Flujo 1.2.2 Creación de cuenta sincronizada (servidor)

actor Usuario
Participant Aplicación
Participant Servidor
Participant BD

activate Aplicación


Aplicación ->> Servidor : Enviar solicitud de creación de cuenta (correo,contraseña)

activate Servidor

Servidor -> BD : Crear cuenta sincronizada : (correo,contraseña)

activate BD

BD ->> BD: Verificación de correo: (correo)

alt Correo ya existente

BD ->> Servidor : Correo ya asociado a una cuenta
Servidor ->> Aplicación : Correo ya asociado a una cuenta

else Correo no registrado

BD -> BD: Guardar credenciales
BD -->> Servidor : Confirmación de creación de cuenta

deactivate BD

Servidor -->> Aplicación: Confirmación de creación de cuenta

Aplicación ->> Servidor : Sincronizar credenciales: (lista de credenciales)

Servidor ->> BD: Sincronizar credenciales: (lista de credenciales)

activate BD

BD ->> BD: Guardar credenciales: (lista de credenciales)

end

@enduml
```


###  Envío de correo de confirmación de cuenta sincronizada/recuperación de cuenta
1. Para el proceso de validación del correo electrónico (sea para la creación de cuenta sincronizada o para la recuperación de cuenta al olvidar la contraseña), el servidor verifica en la BD que el usuario no tenga un código activo. Si no es el caso, el servidor genera un código y lo guarda en la base datos acompañado del correo y de la fecha de creación del codigo.
2. El último código no utilizado asignado a un correo es enviado al usuario.
3. El correo es recibido y el usuario deberá ingresar el código enviado por correo en el formulario mostrado al usuario para continuar el proceso de creación de cuenta sincronizada.
> Los códigos deberán invalidarse automaticamente después de determinado tiempo.
> Si un usuario con un código activo solicita nuevamente 


```plantuml
@startuml
title Flujo 1.3 Envío de correo de confirmación de cuenta sincronizada/recuperación de cuenta

actor Usuario
Participant Aplicación
Participant Servidor
Participant BD

activate Aplicación


Aplicación ->> Servidor : Enviar solicitud de creación de cuenta (correo,contraseña)

activate Servidor

Servidor -> BD : Crear cuenta sincronizada : (correo,contraseña)

activate BD

BD ->> BD: Verificación de correo: (correo)

alt Correo ya existente

BD ->> Servidor : Correo ya asociado a una cuenta
Servidor ->> Aplicación : Correo ya asociado a una cuenta

else Correo no registrado

BD -> BD: Guardar credenciales
BD -->> Servidor : Confirmación de creación de cuenta

deactivate BD

Servidor -->> Aplicación: Confirmación de creación de cuenta

Aplicación ->> Servidor : Sincronizar credenciales: (lista de credenciales)

Servidor ->> BD: Sincronizar credenciales: (lista de credenciales)

activate BD

BD ->> BD: Guardar credenciales: (lista de credenciales)

end

@enduml
```

###  Agregar credenciales

1. En la pagina principal habrá un botón flotante del lado derecho, el cual mostrará la opción de agregar nuevas credenciales, una vez que el usuario lo seleccione, será enviado a un formulario.
2. Para registrar nuevas credenciales, el usuario deberá introducir la información siguiente: login, contraseña, nombre del servicio, URL (proponer al usuario opciones en una lista), la descripción y en caso de que el usuario tenga una cuenta sincronizada, aparecerá un botón switch para escoger si quiere que la contraseña se sincronice o no con el servidor.
3. Al guardar los datos, se validará que las credenciales no existan en los archivos locales de la aplicación y si no estan registradas, se guardaran dentro de la aplicación local y en caso de haber seleccionado la opción de sincronizar, se guardaran de igual manera en el servidor.

