GitBook: No commit message

This commit is contained in:
stalcke2288969
2025-07-24 08:07:52 +00:00
committed by gitbook-bot
parent 53ea25f9fd
commit 19f1ccdfd5
15 changed files with 1943 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
---
description: How to work with jwt tokens
icon: user
---
# Authentication
### <mark style="color:$info;">Components</mark>
* **AuthController**: Handles registration and login.
* **Route**: `/api/auth`
* **RefreshController**: Manages token refresh.
* **Route**: `/api/auth/token`
### <mark style="color:$info;">Authentication Process</mark>
* **Registration**:
* **Endpoint**: `POST /api/auth/register`
* **Input**: `RegistrationRequest` (name, password, inviteLink, deviceInfo)
* **Output**: Access token
* **Action**: Validates invite, registers user, opens session.
* **Login**:
* **Endpoint**: `POST /api/auth/login`
* **Input**: `LoginRequest` (name, password, deviceInfo)
* **Output**: Access token
* **Action**: Authenticates user, opens session.
* **Token Refresh**:
* **Endpoint**: `POST /api/auth/token/refresh`
* **Input**: `RefreshTokenRequest` (refreshToken)
* **Output**: `RefreshTokenResponse` (accessToken, refreshToken)
* **Action**: Refreshes expired access token.
### <mark style="color:$info;">Token Usage</mark>
* **Access Token**:
* **Request**: Obtain during registration or login.
* **Refresh**: Request via `/api/auth/token/refresh` when expired (e.g., 02:12 PM CEST, July 21, 2025).
* **Refresh Token**:
* **Request**: Received during registration or login.
* **Refresh**: Use to obtain new access token when current one expires.
### Security
* **Protocol**: Requires HTTPS.
* **Storage**: Store refresh token in HTTP-only cookie with `Secure` and `SameSite=Strict`.
+141
View File
@@ -0,0 +1,141 @@
---
description: >-
Controller for handling user authentication operations, including registration
and login, with session management and invite-based registration.
---
# AuthController
### Controller Description
* **Route**: `api/auth`
* **Authorize**: Allows anonymous access (`[AllowAnonymous]`).
### Endpoints
#### <mark style="color:$info;">Register</mark>
* **Description**: Registers a new user using a valid invite link and opens a user session, returning an authentication token.
* **Route**: `[POST] api/auth/register`
* **HTTP Method**: `POST`
* **Request**:
* **Content-Type**: `application/json`
* **Request Body**: `RegistrationRequest` object with the following structure:
```json
{
"name": "string",
"password": "string",
"inviteLink": "string",
"deviceInfo": "string"
}
```
* **Responses**:
* <mark style="color:$success;">**200 OK**</mark>: Returns the authentication token upon successful registration and session creation.
```json
{
"refreshToken": "string",
"accessToken": "string"
}
```
* <mark style="color:$danger;">**400 Bad Request**</mark>:
* If model validation fails.
* If the user already exists: `"Registration failed: user already exists."`
* If the invite link is invalid: `"Invite link invalid."`
* If the username is invalid: `"Invalid username: <error_message>"`
* <mark style="color:$warning;">**500 Internal Server Error**</mark>: Indicates an unexpected error.
```json
"An unexpected error occurred. Please try again later."
```
#### <mark style="color:$info;">Login</mark>
* **Description**: Authenticates an existing user and opens a session, returning an authentication token.
* **Route**: `[POST] api/auth/login`
* **HTTP Method**: `POST`
* **Request**:
* **Content-Type**: `application/json`
* **Request Body**: `LoginRequest` object with the following structure:
```json
{
"name": "string",
"password": "string",
"deviceInfo": "string"
}
```
* **Responses**:
* <mark style="color:$success;">**200 OK**</mark>: Returns the authentication token upon successful login and session creation.
```json
{
"refreshToken": "string",
"accessToken": "string"
}
```
* <mark style="color:$danger;">**400 Bad Request**</mark>:
* If model validation fails.
* If the user does not exist: `"Login failed: user does not exist."`
* If the username or password is incorrect: `"Login failed: username or password is incorrect."`
* <mark style="color:$warning;">**500 Internal Server Error**</mark>: Indicates an unexpected error.
```json
"An unexpected error occurred. Please try again later."
```
### Data Models
#### RegistrationRequest
* **Description**: Model for registration request data.
* **Structure**:
```json
{
"name": "string",
"password": "string",
"inviteLink": "string",
"deviceInfo": "string"
}
```
#### LoginRequest
* **Description**: Model for login request data.
* **Structure**:
```json
{
"name": "string",
"password": "string",
"deviceInfo": "string"
}
```
#### RefreshResult
* **Description**: Model for refresh token response data.
* **Structure**:
```json
{
"refreshToken": "string",
"accessToken": "string"
}
```
### Error Handling
* **Invalid User ID**: Not applicable (handled by session service).
* **Invalid Operations**: Registration fails if the user already exists, invite link is invalid, or username is invalid, returning `400 Bad Request`.
* **Unauthorized Access**: Not applicable (endpoint is `[AllowAnonymous]`).
* **Unexpected Errors**: General exceptions are caught, logged, and returned as `500 Internal Server Error`.
### Logging
* Logs successful registration and login events with username and user ID.
* Logs session opening events with username and user ID.
* Logs warnings for specific exceptions (e.g., user already exists, invalid invite link, login failures).
* Logs errors for unexpected exceptions during registration and login.
@@ -0,0 +1,90 @@
---
description: >-
Controller for managing token refresh operations, allowing users to refresh
their access tokens using a valid refresh token.
---
# RefreshController
### Controller Description
* **Route**: `api/auth/token`
* **Authorize**: Allows anonymous access (`[AllowAnonymous]`).
### Endpoints
#### <mark style="color:$info;">Refresh</mark>
* **Description**: Refreshes an access token using a provided refresh token and returns a new access token and refresh token pair.
* **Route**: `[POST] api/auth/token/refresh`
* **HTTP Method**: `POST`
* **Request**:
* **Content-Type**: `application/json`
* **Request Body**: `RefreshTokenRequest` object with the following structure:
```json
{
"refreshToken": "string"
}
```
* **Responses**:
* <mark style="color:$success;">**200 OK**</mark>: Returns a new access token and refresh token upon successful refresh.
```json
{
"accessToken": "string",
"refreshToken": "string"
}
```
* <mark style="color:$warning;">**400 Bad Request**</mark>: If model validation fails or the refresh token is empty.
```json
"Refresh token cant be empty."
```
* <mark style="color:$warning;">**401 Unauthorized**</mark>: If the refresh token is invalid or authorization fails.
```json
"Invalid refresh token"
```
* <mark style="color:$danger;">**500 Internal Server Error**</mark>: Indicates an unexpected error.
```json
"An unexpected error occurred."
```
### Data Models
#### RefreshTokenRequest
* **Description**: Model for refresh token request data.
* **Structure**:
```json
{
"refreshToken": "string"
}
```
#### RefreshTokenResponse
* **Description**: Model for refresh token response data.
* **Structure**:
```json
{
"accessToken": "string",
"refreshToken": "string"
}
```
### Error Handling
* **Invalid User ID**: Not applicable (handled by session service).
* **Invalid Operations**: Returns `400 Bad Request` if the refresh token is empty or invalid.
* **Unauthorized Access**: Returns `401 Unauthorized` if the refresh token fails authorization.
* **Unexpected Errors**: General exceptions are caught, logged, and returned as `500 Internal Server Error`.
### Logging
* Logs warnings for invalid or failed refresh token attempts.
* Logs errors for unexpected exceptions during token refresh.