openapi: 3.0.0
info:
  title: Register Service API
  description: API for user registration and configuration management in CAPIF.
  version: 1.0.0

servers:
  - url: https://localhost:8084
    description: Local development server

paths:
  /login:
    post:
      summary: Admin login
      description: Logs in an admin user and returns access and refresh tokens.
      tags:
        - Authentication
      security:
        - basicAuth: []
      responses:
        "200":
          description: Successfully logged in
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                  refresh_token:
                    type: string
        "401":
          description: Unauthorized

  /refresh:
    post:
      summary: Refresh access token
      description: Generates a new access token using a refresh token.
      tags:
        - Authentication
      security:
        - bearerAuth: []
      responses:
        "200":
          description: New access token generated
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
        "401":
          description: Unauthorized

  /createUser:
    post:
      summary: Register a new user
      description: Allows an admin to create a new user.
      tags:
        - Users
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                password:
                  type: string
                enterprise:
                  type: string
                country:
                  type: string
                email:
                  type: string
                purpose:
                  type: string
      responses:
        "201":
          description: User registered successfully
        "400":
          description: Missing or invalid fields
        "409":
          description: User already exists

  /getauth:
    get:
      summary: Get user authorization
      description: Retrieves authorization information for a user.
      tags:
        - Users
      security:
        - basicAuth: []
      responses:
        "200":
          description: Authorization details returned
        "400":
          description: User not found

  /deleteUser/{uuid}:
    delete:
      summary: Delete a user
      description: Removes a user from the system.
      tags:
        - Users
      security:
        - bearerAuth: []
      parameters:
        - name: uuid
          in: path
          required: true
          schema:
            type: string
      responses:
        "204":
          description: User deleted successfully
        "400":
          description: Invalid UUID

  /getUsers:
    get:
      summary: Get all users
      description: Retrieves a list of all registered users.
      tags:
        - Users
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Users retrieved successfully

  /configuration:
    get:
      summary: Retrieve register configuration
      description: Fetches the current configuration of the register service.
      tags:
        - Configuration
      security:
        - bearerAuth: []
      responses:
        "200":
          description: Configuration retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  config_name:
                    type: string
                  description:
                    type: string
                  version:
                    type: string
                  settings:
                    type: object
                    properties:
                      certificates_expiry:
                        type: object
                        properties:
                          ttl_superadmin_cert:
                            type: string
        "404":
          description: Configuration not found
    patch:
      summary: Update register configuration
      description: Updates a specific parameter in the register configuration.
      tags:
        - Configuration
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                param_path:
                  type: string
                  example: "settings.certificates_expiry.hola"
                new_value:
                  type: string
                  example: "2500h"
      responses:
        "200":
          description: Parameter updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: "Parameter 'settings.certificates_expiry.ttl_superadmin_cert' updated successfully"
        "400":
          description: Invalid request body
    put:
      summary: Replace register configuration
      description: Replaces the entire configuration with a new one.
      tags:
        - Configuration
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                config_name:
                  type: string
                  example: "default"
                description:
                  type: string
                  example: "Updated Register Configuration"
                version:
                  type: string
                  example: "1.1"
                settings:
                  type: object
                  properties:
                    certificates_expiry:
                      type: object
                      properties:
                        ttl_superadmin_cert:
                          type: string
                          example: "4300h"
      responses:
        "200":
          description: Configuration replaced successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: "Register configuration replaced successfully"
        "400":
          description: Invalid request body

  /configuration/addNewCategory:
    post:
      summary: Add new configuration category
      description: Adds a new category inside the register configuration.
      tags:
        - Configuration
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                category_name:
                  type: string
                  example: "new_category"
                category_values:
                  type: object
                  example: {"config1": 1, "config2": "xxxx"}
      responses:
        "200":
          description: Category added successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: "Category 'new_category' added successfully"
        "400":
          description: Invalid request body

  /configuration/addNewParamConfigSetting:
    patch:
      summary: Add new configuration setting
      description: Adds a new parameter inside a category in settings.
      tags:
        - Configuration
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                param_path:
                  type: string
                  example: "certificates_expiry.new_config_ttl"
                new_value:
                  type: string
                  example: "1000h"
      responses:
        "200":
          description: Parameter added successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: "Parameter 'certificates_expiry.new_config_ttl' added successfully"
        "400":
          description: Invalid request body


components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
