# Doc for API auth-severino ## Versao intermediária ### POST ``/auth/temp/renew-token`` - Não é uma versão nova da API, apenas um novo recurso. - *O endpoint espera o `access_token` do firebase e só vai gerar o refresh token para o usuário caso tenha telefone e o mesmo esteja validado* **Body** ```json { "access_token": "access token do firebase do usuário" } ``` **Response** - Usuário valido - **CODE: 200** ```json { "authorization": { "access_token": "", "refresh_token": "refresh token gerado", "expire_at": "0" } } ``` ## AUTH Todos endpoints estão em uma nova versão da API do BFF - `v5.0`. Ex: /GET `/v5.0/users/me` Endpoint de `/auth` estão publicos. Já os de `/users` necessitam estar autenticados, mandando o header de authorization. **JSON de user exemplo**: ```json { "user_id": "B9mxFCOz5qUoSapyQDskYQVCGjE2", "facebook_id": "2546295938744283", "first_name": "Ronaldo", "last_name": "Da Silva", "phone": "48984045261", "email": "richardjrbertozzo@gmail.com", "birthday": "1994-02-10", "cpf": "08319218977", "is_validated_phone": true } ``` ### 1 - POST ``/auth`` Code: código gerado pelo facebook ou account kit Origin: 1 - Facebook ou 2 - Account kit (e-mail) *O endpoint pode ter mais de um response, dependedo do usuário. Se ele já existe e se já tem seu telefone validado.* **Body** ```json { "code": "code gerado pelo facebook ou account_kit" "origin": 1 } ``` **Response** - Usuário já existe e está validado - **CODE: 200** ```json { "authorization": { "access_token": "sadasdlmkldskldskldd", "refresh_token": "dslkdasdskldsakl", "expire_at": "date string em utc" } } ``` **Response** para a próxima etapa: **CODE 200** ```json { "user": { "email": "teste@gmail.com", "facebook_id": 1234, "first_name": "joao", "last_name": "silva" }, "hash_user": "hmac cifrado do obj do user" } ``` ### 2 - POST ``/auth/phone`` **Body** ```json { "code": "dsakndnasdkakjdkjsada" "user": { "email": "richardbertozzo@gmail.com", } "hash_user": "dklnasjkldsakjldlhadklsajkd" } ``` **Response** success - **CODE 200** ```json { "authorization": { "access_token": "sadasdlmkldskldskldd", "refresh_token": "dslkdasdskldsakl", "expire_at": "date string em utc" } } ``` **Response** para a próxima parte, caso que é novo usuário: **CODE 200** ```json { "user": { "email": "teste@gmail.com", "facebook_id": 1234, "first_name": "joao", "last_name": "silva" }, "hash_user": "slkdaskjldkajlsjd", "fields_error": [ { "field": "first_name", "type_field": "string", "error": "required" } ] } ``` ### 3 - POST /auth/users Precisa ser enviado todas as fields que são *required* e no padrão das fields **Body** ```json { "user": { "email": "richardbertozzo@gmail.com" "first_name": "Richard", "last_name": "Bertozzo", "cpf": "08819219299", "phone": "48984848484" "facebook_id": 31231, "birthday": "2009-11-10 23:00:00" }, "hash_user": "dkjsandjkaskjdsjk" } ``` **Response** success - **CODE 200** ```json { "authorization": { "access_token": "sadasdlmkldskldskldd", "refresh_token": "dslkdasdskldsakl", "expire_at": "date string em utc" } } ``` **Response** - **CODE 200** ```json { "user": { "email": "teste@gmail.com", "facebook_id": 1234, "first_name": "joao", "last_name": "silva" }, "hash_user": "slkdaskjldkajlsjd", "fields_error": [ { "field": "first_name", "type_field": "string", "error": "required" } ] } ``` ### POST /auth/renew-token Recurso para renovar `access_token` a partir do refresh_token. **Caracteristicas:** - Refresh token vai ser gerado também com a chave privada RSA, vai ter características básica e o id do usuário. A duração desse token vai ser 3 meses. Então se um usuário no periodo de 3 meses não usar o sistema, vai precisar logar novamente. - O response da renovação é o mesmo que gerado no login, com access_token, refresh_tokem e expire_at. - Esperando o refresh_token no body, pois no body vem crifrado no protocolo HTTPS. - Esse refresh_token é unico a cada usuário, e vai ser salvo no Redis. Referenciando este usuário. Exemplo: **Body** ```json { "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" } ``` **Response** success - **CODE 200** ```json { "authorization": { "access_token": "sadasdlmkldskldskldd", "refresh_token": "dslkdasdskldsakl", "expire_at": "date string em utc" } } ``` ## USER ### GET `/users/me` Protected - precisa estar logado. Mandar o JWT **Response** - Usuário - **CODE: 200** ```json { "user_id": "B9mxFCOz5qUoSapyQDskYQVCGjE2", "facebook_id": "2546295938744283", "first_name": "Ronaldo", "last_name": "Da Silva", "phone": "48984045261", "email": "richardjrbertozzo@gmail.com", "birthday": "1994-02-10", "cpf": "08319218977", "is_validated_phone": true } ``` ### PUT `/users/me` Protected - precisa estar logado. Mandar o JWT **Body** ```json { "first_name": "Ronaldo", "last_name": "Da Silva", "birthday": "1994-02-10", "cpf": "08319218977" } ``` **Response** - **CODE: 200** ### PATCH `/users/me/phone` Protected - precisa estar logado. Mandar o JWT **Body** ```json { "code": "codigo do account-kit" } ``` **Response** - **CODE: 200** ### PATCH `/users/me/email` Protected - precisa estar logado. Mandar o JWT **Body** ```json { "code": "codigo do account-kit" } ``` **Response** - **CODE: 200** # Response **Todos os endpoint pode dar error e retornar code = 400 ou 500**