# Autentificare

8 rute de platformă, cu exemplu de cerere pentru fiecare.

Adresa de bază: `https://app.ilustromania.com/nucleu`

### POST /v1/auth/cod-email/trimite

Acces: `public`

**Trimite codul pe email**

Trimite un cod de intrare pe emailul dat; răspunde la fel indiferent dacă emailul există.

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `scop` | `string` | da | una din: `parola-noua`, `parola-uitata` |
| `email` | `string` | nu | cel mult 254 caractere |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/auth/cod-email/trimite \
  -H "Content-Type: application/json" \
  -d '{
    "scop": "parola-noua",
    "email": "text"
  }'
```

### POST /v1/auth/cod-email/verifica

Acces: `public`

**Verifică codul din email**

Schimbă codul primit pe email pe un jeton; 410 cod expirat, 429 prea multe încercări.

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `scop` | `string` | da | una din: `parola-noua`, `parola-uitata` |
| `email` | `string` | nu | cel mult 254 caractere |
| `cod` | `string` | da | — |

Răspuns 200:

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `jeton` | `string` | da | — |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/auth/cod-email/verifica \
  -H "Content-Type: application/json" \
  -d '{
    "scop": "parola-noua",
    "email": "text",
    "cod": "text"
  }'
```

Răspuns 200 (exemplu din schemă):

```json
{
  "jeton": "text"
}
```

### GET /v1/auth/google

Acces: `public`

**Configurarea intrării cu Google**

Datele publice pentru butonul Google; activ: false dacă nu e configurat.

```bash
curl https://app.ilustromania.com/nucleu/v1/auth/google
```

### POST /v1/auth/intrare

Acces: `public`

**Intrare cu email și parolă**

Verifică datele și deschide sesiunea; limită pe IP (429).

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `utilizator` | `string` | da | între 3 și 320 caractere |
| `parola` | `string` | da | între 1 și 256 caractere |
| `tineConectat` | `boolean` | nu | — |

Răspuns 200:

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `trebuieSchimbataParola` | `boolean` | da | — |
| `urmator` | `string` | da | una din: `aplicatie`, `schimba-parola` |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/auth/intrare \
  -H "Content-Type: application/json" \
  -d '{
    "utilizator": "text",
    "parola": "text",
    "tineConectat": true
  }'
```

Răspuns 200 (exemplu din schemă):

```json
{
  "trebuieSchimbataParola": true,
  "urmator": "aplicatie"
}
```

### POST /v1/auth/intrare-google

Acces: `public`

**Intrare cu Google**

Verifică jetonul Google și deschide sesiunea contului; limită pe IP (429).

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `jeton` | `string` | da | între 10 și 8192 caractere |
| `tine_minte` | `boolean` | nu | — |

Răspuns 200:

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `trebuieSchimbataParola` | `boolean` | da | una din: `false` |
| `urmator` | `string` | da | una din: `aplicatie` |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/auth/intrare-google \
  -H "Content-Type: application/json" \
  -d '{
    "jeton": "text",
    "tine_minte": true
  }'
```

Răspuns 200 (exemplu din schemă):

```json
{
  "trebuieSchimbataParola": false,
  "urmator": "aplicatie"
}
```

### POST /v1/auth/parola-noua

Acces: `sesiune`

**Setează parola nouă**

Contul din sesiune își pune parola nouă (de ex. după parola temporară).

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `jeton` | `string` | da | — |
| `parola` | `string` | da | între 10 și 128 caractere |
| `deconecteazaTot` | `boolean` | nu | implicit `true` |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/auth/parola-noua \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{
    "jeton": "text",
    "parola": "text",
    "deconecteazaTot": true
  }'
```

### POST /v1/auth/parola-uitata/confirma

Acces: `public`

**Confirmă parola uitată**

Pune parola nouă după linkul de parolă uitată; limită pe IP.

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `jeton` | `string` | da | — |
| `parola` | `string` | da | între 10 și 128 caractere |
| `deconecteazaTot` | `boolean` | nu | implicit `true` |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/auth/parola-uitata/confirma \
  -H "Content-Type: application/json" \
  -d '{
    "jeton": "text",
    "parola": "text",
    "deconecteazaTot": true
  }'
```

### POST /v1/auth/parola/schimba

Acces: `sesiune`

**Schimbă parola**

Schimbă parola cu parola veche; celelalte sesiuni se închid, dacă nu se cere altfel.

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `veche` | `string` | da | între 1 și 256 caractere |
| `noua` | `string` | da | între 10 și 128 caractere |
| `deconecteazaTot` | `boolean` | nu | implicit `true` |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/auth/parola/schimba \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{
    "veche": "text",
    "noua": "text",
    "deconecteazaTot": true
  }'
```
