---
# System prepended metadata

title: Doc for API auth-severino

---

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