Your IP : 216.73.216.182


Current Path : /home/hotlineuser/mobius/
Upload File :
Current File : //home/hotlineuser/mobius/api.yaml

openapi: 3.0.3
info:
  title: Mobius API
  description: REST API for managing a Hotline server
  version: 1.0.0
  contact:
    name: Mobius
    url: https://github.com/jhalter/mobius
servers:
  - url: http://localhost:5603
    description: Local development server
security:
  - ApiKeyAuth: []
paths:
  /api/v1/online:
    get:
      summary: Get online users
      description: Returns a list of currently online users with their login, nickname, and IP address
      responses:
        '200':
          description: List of online users
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    login:
                      type: string
                      description: User's login name
                    nickname:
                      type: string
                      description: User's display nickname
                    ip:
                      type: string
                      description: User's IP address
                  example:
                    login: "admin"
                    nickname: "Administrator"
                    ip: "192.168.1.100"
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/ban:
    post:
      summary: Ban a user
      description: Ban a user by username, nickname, or IP address. At least one field must be provided.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: Username to ban
                nickname:
                  type: string
                  description: Nickname to ban
                ip:
                  type: string
                  description: IP address to ban
              example:
                username: "baduser"
      responses:
        '200':
          description: User banned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: "banned"
        '400':
          description: Bad request - missing required fields
          content:
            text/plain:
              schema:
                type: string
                example: "username, nickname, or ip required"
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/unban:
    post:
      summary: Unban a user
      description: Remove a ban for a user by username, nickname, or IP address. At least one field must be provided.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                  description: Username to unban
                nickname:
                  type: string
                  description: Nickname to unban
                ip:
                  type: string
                  description: IP address to unban
              example:
                username: "baduser"
      responses:
        '200':
          description: User unbanned successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: "unbanned"
        '400':
          description: Bad request - missing required fields
          content:
            text/plain:
              schema:
                type: string
                example: "username, nickname, or ip required"
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/banned/ips:
    get:
      summary: List banned IP addresses
      description: Returns a list of all banned IP addresses
      responses:
        '200':
          description: List of banned IP addresses
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                example: ["192.168.1.100", "10.0.0.5"]
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
                example: "failed to fetch banned IPs"
  /api/v1/banned/usernames:
    get:
      summary: List banned usernames
      description: Returns a list of all banned usernames
      responses:
        '200':
          description: List of banned usernames
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                example: ["baduser", "spammer"]
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
                example: "failed to fetch banned usernames"
  /api/v1/banned/nicknames:
    get:
      summary: List banned nicknames
      description: Returns a list of all banned nicknames
      responses:
        '200':
          description: List of banned nicknames
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                example: ["BadNick", "Spammer123"]
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
                example: "failed to fetch banned nicknames"
  /api/v1/reload:
    post:
      summary: Reload server configuration
      description: Triggers a reload of the server configuration
      responses:
        '200':
          description: Configuration reloaded successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: "config reloaded"
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/shutdown:
    post:
      summary: Shutdown server
      description: Gracefully shutdown the server with a message
      requestBody:
        required: true
        content:
          text/plain:
            schema:
              type: string
              example: "Server maintenance"
      responses:
        '200':
          description: Server shutting down
          content:
            application/json:
              schema:
                type: object
                properties:
                  msg:
                    type: string
                    example: "server shutting down"
        '400':
          description: Bad request - missing shutdown message
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/stats:
    get:
      summary: Get server statistics
      description: Returns current server statistics and metrics
      responses:
        '200':
          description: Server statistics
          content:
            application/json:
              schema:
                type: object
                description: Server statistics object (structure depends on implementation)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          description: Internal server error
          content:
            text/plain:
              schema:
                type: string
                example: "failed to marshal stats"
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key for authentication
  responses:
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: "unauthorized"