api.raml 7.13 KB
#%RAML 0.8
title: API d'Etunicorn
baseUri: https://etunicorn.plil.net/{version}/
version: v1

securitySchemes:
    - oauth_2_0:
        description: Il faut un token OAuth 2.0 pour utiliser cette API
        type: OAuth 2.0
        describedBy:
            headers:
                Authorization:
                    description: |
                       Utilisé pour envoyer un token d'accès OAuth 2. Ne pas envoyer en même temps que le paramètre de requête "access_token"
                    type: string
            queryParameters:
                access_token:
                    description: |
                       Utilisé pour envoyer un token d'accès OAuth 2. Ne pas envoyer en même temps que le header "Authorization"
                    type: string
            responses:
                401:
                    description: Token expiré ou invalide. Reconnectez-vous
                403:
                    description: Permission refusée. Se re-connecter ne changera rien

# Les codes 400 sont implicites
/login:
  post:
    description: Instancie une nouvelle connexion
    queryParameters:
      login:
        displayName: Login Polytech
        type: string
        required: true
      password:
        displayName: Mot de passe Polytech
        type: string
        required: false
    responses: 
      200:
        description: Authentification réussie
        body:
          application/json:
            example: |
              {
                "token": "ooT6zahdura7vaethuiph1ugiph6co",
                "expire": 1485607703,
                "role": "admin",
                "permissions": [
                  {
                    "nom": "CREER_EVENEMENT"
                  },
                  {
                    "nom": "SUPPRIMER_EVENEMENT"
                  }
                ]
              }
      401:
        description: Authentication échouée
  /{token}:
    delete:
      description: Se déconnecter
      responses: 
        204:
          description: Déconnecté avec succès
        404:
          description: Jeton invalide ou expiré. À priori, vous êtes déjà déconnecté
/personne:
  get:
    securedBy: [oauth_2_0]
    description: Obtenir la liste des persones
    responses: 
     200:
       body:
          application/json:
            example: |
              [
               {
                  "id": 42,
                  "carte": "AAAAA",
                  "naissance": "1997-02-14",
                  "solde": 1337,
                  "login": "gbontoux",
                  "role": "etudiant"
                }
              ]
  /{idPersonne}:
    get:
      securedBy: [oauth_2_0]
      description: Obtenir les infos sur une personne
      responses:
        200:
          description: Utilisateur récupéré
          body:
            application/json:
              example: |
               {
                  "id": 42,
                  "carte": "AAAAA",
                  "naissance": "1997-02-14",
                  "solde": 1337,
                  "login": "gbontoux",
                  "role": "etudiant"
                }
        404:
          description: Utilisateur non trouvé
    put:
      securedBy: [oauth_2_0]
      description: Modifer les infos d'une personne
      queryParameters:
        carte:
          displayName: ID de la carte NFC
          type: string
          required: false
          minLength: 14
          maxLength: 14
          example: 39cdd9ed0b191d
        naissance:
          displayName: Date de naissance
          type: date
          required: false
          example: 1997-02-14
        login:
          displayName: Login Polytech
          type: string
          required: false
          example: gbontoux
        role:
          displayName: Rôle
          type: string
          required: false
          example: etudiant
      responses:
        202:
          description: Utilisateur modifié
        404:
          description: Utilisateur non trouvé
    delete:
      securedBy: [oauth_2_0]
      description: Obtenir les infos sur une personne
      responses:
        204:
          description: Utilisateur supprimé
        404:
          description: Utilisateur non trouvé
  post:
    securedBy: [oauth_2_0]
    description: Ajoute une nouvelle personne
    queryParameters:
      carte:
        displayName: ID de la carte NFC
        type: string
        required: false
        minLength: 14
        maxLength: 14
        example: 39cdd9ed0b191d
      naissance:
        displayName: Date de naissance
        type: date
        required: false
        example: 1997-02-14
      login:
        displayName: Login Polytech
        type: string
        required: false
        example: gbontoux
      role:
        displayName: Rôle
        type: string
        required: true
        example: etudiant
        default: etudiant
    responses: 
      201:
        description: Personne ajoutée avec succès
        body:
          application/json:
            example: |
              {
                "id": 42
              }
/role:
  get:
    securedBy: [oauth_2_0]
    description: Liste les rôles
    responses: 
      200:
        body: 
          application/json:
            example: |
              [
                {
                  "nom": "etudiant",
                  "permissions": []
                },
                {
                  "nom": "bde",
                    "permissions": [
                    {
                      "nom": "CREER_EVENEMENT"
                    },
                    {
                      "nom": "SUPPRIMER_EVENEMENT"
                    }
                  ]
                }
              ]
  post:
    securedBy: [oauth_2_0]
    description: Ajoute un nouveau rôle
    queryParameters: 
      nom:
        type: string
        minLength: 3
        required: true
        example: bde
    responses: 
      201:
        description: Rôle créé avec succès
      409:
        description: Un rôle avec le même nom existe déjà
  /{nomRole}:
    delete:
      securedBy: [oauth_2_0]
      description: Supprime un rôle
      responses: 
        204:
          description: Rôle supprimé
        404:
          description: Rôle inconnu
    post:
      securedBy: [oauth_2_0]
      description: Ajoute une permission à un rôle
      queryParameters: 
        nom:
          type: string
          required: true
          minLength: 3
      responses: 
        201:
          description: Permission ajouté avec succès
        404:
          description: Permission ou rôle inconnu
    /{nomPermission}:
      delete:
        securedBy: [oauth_2_0]
        description: Enlève la permission du rôle
        responses: 
          204:
            description: Permission enlevée avec succès
          404:
            description: Permission ou rôle inconnu
  /permission:
    get:
      securedBy: [oauth_2_0]
      description: Liste les permissions
      responses:
        200:
          body:
            application/json:
              example: |
                [
                  {
                    "nom": "CREER_EVENEMENT"
                  },
                  {
                    "nom": "SUPPRIMER_EVENEMENT"
                  }
                ]