OAuth2#

GET /api/oauth/apps#

Obtenir les clients OAuth2 pour l’utilisateur authentifié avec pagination (5 clients/page).

Ce point d’accès n’est accessible que par le client web FitTrackee.

Exemple de requête :

  • sans paramètres :

GET /api/oauth/apps HTTP/1.1
Content-Type: application/json
  • avec le paramètre “page” :

GET /api/oauth/apps?page=2 HTTP/1.1
Content-Type: application/json

Exemple de réponse :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

{
  "data": {
    "clients": [
      {
        "client_description": "",
        "client_id": "o22a27s2aBPUoxJbxV3UjDOx",
        "id": 1,
        "issued_at": "Thu, 14 July 2022 06:27:53 GMT",
        "name": "GPX Importer",
        "redirect_uris": [
          " https://example.com/callback"
        ],
        "scope": "profile:read workouts:write",
        "website": "https://example.com"
      }
    ]
  },
  "pagination": {
    "has_next": false,
    "has_prev": false,
    "page": 1,
    "pages": 1,
    "total": 1
  },
  "status": "success"
}
Paramètres de requête:
  • page (integer) – page pour la pagination (par défaut : 1)

En-têtes de requête:
Codes d’état:
  • 200 OKsuccess

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

POST /api/oauth/apps#

Créer un client OAuth2 pour l’utilisateur authentifié.

Ce point d’accès n’est accessible que par le client web FitTrackee.

Exemple de requête :

POST /api/oauth/apps HTTP/1.1
Content-Type: application/json

Exemple de réponse :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

{
  "data": {
    "client": {
      "client_description": "",
      "client_id": "o22a27s2aBPUoxJbxV3UjDOx",
      "client_secret": "<CLIENT SECRET>",
      "id": 1,
      "issued_at": "Thu, 14 July 2022 06:27:53 GMT",
      "name": "GPX Importer",
      "redirect_uris": [
        "https://example.com/callback"
      ],
      "scope": "profile:read workouts:write",
      "website": "https://example.com"
    }
  },
  "status": "created"
}
Paramètre JSON:
  • client_name (string) – nom du client

  • client_uri (string) – URl du client

  • redirect_uri (array) – liste des URL de redirection du client (chaîne de caractères)

  • scope (string) – scopes du client

  • client_description (string) – description du client (optionnelle)

En-têtes de requête:
Codes d’état:
GET /api/oauth/apps/(string: client_client_id)#

Obtenir un client OAuth2 avec le “client_id”.

Ce point d’accès n’est accessible que par le client web FitTrackee.

Exemple de requête :

GET /api/oauth/apps/o22a27s2aBPUoxJbxV3UjDOx HTTP/1.1
Content-Type: application/json

Exemple de réponses :

  • succès :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

{
  "data": {
    "client": {
      "client_description": "",
      "client_id": "o22a27s2aBPUoxJbxV3UjDOx",
      "id": 1,
      "issued_at": "Thu, 14 July 2022 06:27:53 GMT",
      "name": "GPX Importer",
      "redirect_uris": [
        "https://example.com/callback"
      ],
      "scope": "profile:read workouts:write",
      "website": "https://example.com"
    }
  },
  "status": "success"
}
  • non trouvé :

HTTP/1.1 404 NOT FOUND
Content-Type: application/json

{
  "status": "not found",
  "message": "OAuth2 client not found"
}
Paramètres:
  • client_client_id (string) – client_id du client OAuth2

En-têtes de requête:
Codes d’état:
  • 200 OKsuccess

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

  • 404 Not FoundOAuth2 client not found

GET /api/oauth/apps/(int: client_id)/by_id#

Obtenir un client OAuth2 avec l’identifiant (valeur de type entier).

Ce point d’accès n’est accessible que par le client web FitTrackee.

Exemple de requête :

GET /api/oauth/apps/1/by_id HTTP/1.1
Content-Type: application/json

Exemple de réponses :

  • succès :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

{
  "data": {
    "client": {
      "client_description": "",
      "client_id": "o22a27s2aBPUoxJbxV3UjDOx",
      "id": 1,
      "issued_at": "Thu, 14 July 2022 06:27:53 GMT",
      "name": "GPX Importer",
      "redirect_uris": [
        "https://example.com/callback"
      ],
      "scope": "profile:read workouts:write",
      "website": "https://example.com"
    }
  },
  "status": "success"
}
  • non trouvé :

HTTP/1.1 404 NOT FOUND
Content-Type: application/json

{
  "status": "not found",
  "message": "OAuth2 client not found"
}
Paramètres:
  • client_id (integer) – Identifiant du client OAuth2

En-têtes de requête:
Codes d’état:
  • 200 OKsuccess

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

  • 404 Not FoundOAuth2 client not found

DELETE /api/oauth/apps/(int: client_id)#

Delete an OAuth2 client (app).

Ce point d’accès n’est accessible que par le client web FitTrackee.

Exemple de requête :

DELETE /api/oauth/apps/1 HTTP/1.1
Content-Type: application/json

Exemple de réponse :

HTTP/1.1 204 NO CONTENT
Content-Type: application/json
Paramètres:
  • client_id (integer) – Identifiant du client OAuth2

En-têtes de requête:
Codes d’état:
POST /api/oauth/apps/(int: client_id)/revoke#

Révoquer tous les tokens associés à un client OAuth2.

Ce point d’accès n’est accessible que par le client web FitTrackee.

Exemple de requête :

POST /api/oauth/apps/1/revoke HTTP/1.1
Content-Type: application/json

Exemple de réponse :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

{
  "status": "success"
}
Paramètres:
  • client_id (integer) – Identifiant du client OAuth2

En-têtes de requête:
Codes d’état:
  • 200 OKsuccess

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

  • 404 Not FoundOAuth2 client not found

POST /api/oauth/authorize#

Autoriser un client OAuth2 (app). En cas de succès, il redirige vers l’URL de redirection du client avec le code pour émettre un jeton.

Ce point d’accès n’est accessible que par le client web FitTrackee.

Exemple de requête :

POST /api/oauth/authorize HTTP/1.1
Content-Type: multipart/form-data

Exemple de réponse :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

{
  "status": "success"
}
Paramètres de la forme:
  • string client_id – “client_id” du client OAuth2

  • string response_type – type de réponse du client (seul “code” est supporté par FitTrackee)

  • string scopes – scope du client OAuth2

  • boolean confirm – confirmation (doit être true)

  • string state – valeur unique pour éviter la falsification des requêtes entre les sites (cross-site request forgery (CSRF)), non obligatoire mais recommandée

  • string code_challenge – chaîne générée par un vérificateur de code (pour PKCE, non obligatoire mais recommandée)

  • string code_challenge_method – méthode utilisée pour créer le challenge, par exemple « S256 » (obligatoire si code_challenge fourni)

En-têtes de requête:
Codes d’état:
  • 200 OKsuccess

  • 400 Bad Request

    • invalid payload

    • erreurs renvoyées par la librairie Authlib

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

POST /api/oauth/token#

Délivrer ou rafraîchir un jeton pour un client OAuth2 donné.

Exemple de requête :

POST /api/oauth/token HTTP/1.1
Content-Type: multipart/form-data

Exemple de réponse :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

{
  "access_token": "rOEHv64THCG28WcewZHRnVLUsOdUvw8NVnHKCmL57e",
  "expires_in": 864000,
  "refresh_token": "NuV9cY8VQOnrQKHTZ5pQAq2Zw7mSH0MorNPJr14AmSwD6f6I",
  "scope": ["profile:read", "workouts:write"],
  "token_type": "Bearer",
  "expires_at": 1658660147.0667062
}
Paramètres de la forme:
  • string client_id – “client_id” du client OAuth2

  • string client_secret – secret du client OAuth2

  • string grant_type – Type d’autorisation du client OAuth2 (seuls “authorization_code” (pour l’émission de jetons) et “refresh_token” (pour le rafraîchissement de jeton) sont pris en charge par FitTrackee)

  • string code – code généré après l’autorisation du client (pour l’émission de jetons)

  • string code_verifier – vérificateur de code (pour l’émission de jetons avec PKCE, non obligatoire)

  • string refresh_token – jeton de rafraîchissement (pour le rafraîchissement du jeton)

Codes d’état:
  • 200 OKsuccess

  • 400 Bad Request – erreurs renvoyées par la librairie Authlib

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

POST /api/oauth/revoke#

Révoquer un jeton pour un client OAuth2 donné.

Exemple de requête :

POST /api/oauth/revoke HTTP/1.1
Content-Type: multipart/form-data

Exemple de réponse :

HTTP/1.1 200 SUCCESS
Content-Type: application/json

{}
Paramètres de la forme:
  • string client_id – “client_id” du client OAuth2

  • string client_secret – secret du client OAuth2

  • string token – jeton d’accès à révoquer

Codes d’état:
  • 200 OKsuccess

  • 400 Bad Request – erreurs renvoyées par la librairie Authlib

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again