# 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**