ramiletus / fraud-detection

Mozilla Public License 2.0
1 stars 0 forks source link

Information to Adquire - Locations #3

Closed jemacineiras closed 3 months ago

jemacineiras commented 4 months ago

As a Product Owner I want to collect the exact location for an user + device in order to recognize fraud attempts. The required information should be extracted from the request headers. External services should be needed to use in order to get physical location for IP, Sim Card etc..

Relevant data to keep store

Data should be extracted from the request and enrich with call to external services, For example:

This information should be use to query if an user is at the same time with several devices en different countries. Note - Investigate the detection of proxies and VPNs services.

ramiletus commented 3 months ago

As done in #2 , I am going to delegate the extraction of the IP to the frontend applications. I will focus on creating a REST endpoint so location information can be injected through a POST body, with a DTO.

ramiletus commented 3 months ago

I have decided to use the endpoint https://ip-api.com/, because it provides a configurable field called "proxy", which indicates if the IP corresponds to a "Proxy, VPN or Tor exit address". This way we get a solution for the last thing commented in the issue.

ramiletus commented 3 months ago
Caso de prueba no. TC-08
Nombre El servidor responde con un HTTP status code 400 cuando el cuerpo del método POST del endpoint habilitado para inyectar localizaciones de ip no está bien formado
Precondiciones 1. Un servidor de la aplicación está en marcha
Pasos de prueba 1. Se hace una llamada POST("/locations/inject") al servidor con cuerpo inválido, con un campo con valor null
Resultado esperado El servidor responde con una HTTP response 400, incluido un mensaje con el motivo concreto de la invalidez de la petición
Resultados 400 Bad Request
{
"ip": "no debe ser nulo"
}
Aprobado/reprobado APROBADO
ramiletus commented 3 months ago
Caso de prueba no. TC-09
Nombre El servidor responde con un HTTP status code 200 cuando se invoca correctamente el endpoint POST("/locations/inject")
Precondiciones 1. Un servidor de la aplicación está en marcha
Pasos de prueba 1. Se hace una llamada POST("/devices/inject") al servidor
Resultado esperado El servidor valida el cuerpo del método POST y responde con una HTTP response 200
Resultados El servidor responde con un HTTP status code 200
Aprobado/reprobado APROBADO
ramiletus commented 3 months ago
Caso de prueba no. TC-10
Nombre El sistema responde con una excepción InstanceNotFoundException cuando el Dispositivo al que se intenta asociar una localización no existe en la base de datos
Precondiciones -
Pasos de prueba 1. Se lanza un comando de creación de Localización con un deviceId inexistente en base de datos
2. Se recupera el Device con la id inválida
Resultado esperado El sistema hace saltar una excepción InstanceNotFoundException
Resultados El sistema hace saltar una excepción InstanceNotFoundException
Aprobado/reprobado APROBADO
ramiletus commented 3 months ago
Caso de prueba no. TC-11
Nombre El sistema genera satisfactoriamente una Localización en la base de datos
Precondiciones 1. Existe un Usuario creado en base de datos.
2. El usuario creado tiene asociado un Dispositivo en base de datos
Pasos de prueba 1. Se lanza un comando de creación de Localización con una ip válida y un deviceId existente en base de datos
2. Se utiliza un servicio externo para localizar la ip
3. Se instancia un objeto Localización con los datos obtenidos.
4. Se asocia la Localización con el Dispositivo correpondiente a la deviceId
Resultado esperado El sistema consigue localizar la ip y relacionarla correctamente con el dispositivo
Resultados El sistema consigue localizar la ip y relacionarla correctamente con el dispositivo
Aprobado/reprobado APROBADO