{
    "openapi": "3.1.0",
    "info": {
        "version": "9.6.1",
        "title": "@fastify/swagger"
    },
    "components": {
        "schemas": {}
    },
    "paths": {
        "/api/auth/disableOtp": {
            "put": {
                "operationId": "disableOtp",
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "success"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "disableOtp.success"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "notLoggedIn"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "auth.noCookie",
                                                "auth.invalidKind",
                                                "auth.noUser",
                                                "auth.invalid"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failure"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "disableOtp.failure.generic"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/enableOtp": {
            "put": {
                "operationId": "enableOtp",
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg",
                                        "payload"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "success"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "enableOtp.success"
                                            ]
                                        },
                                        "payload": {
                                            "type": "object",
                                            "required": [
                                                "url"
                                            ],
                                            "properties": {
                                                "url": {
                                                    "type": "string",
                                                    "description": "The otp url to feed into a 2fa app"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "required": [
                                                "kind",
                                                "msg"
                                            ],
                                            "properties": {
                                                "kind": {
                                                    "enum": [
                                                        "failure"
                                                    ]
                                                },
                                                "msg": {
                                                    "enum": [
                                                        "enableOtp.failure.noUser",
                                                        "enableOtp.failure.noSecret"
                                                    ]
                                                }
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "required": [
                                                "kind",
                                                "msg"
                                            ],
                                            "properties": {
                                                "kind": {
                                                    "enum": [
                                                        "notLoggedIn"
                                                    ]
                                                },
                                                "msg": {
                                                    "enum": [
                                                        "auth.noCookie",
                                                        "auth.invalidKind",
                                                        "auth.noUser",
                                                        "auth.invalid"
                                                    ]
                                                }
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/providerList": {
            "get": {
                "operationId": "providerList",
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg",
                                        "payload"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "success"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "providerList.success"
                                            ]
                                        },
                                        "payload": {
                                            "type": "object",
                                            "required": [
                                                "list"
                                            ],
                                            "properties": {
                                                "list": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object",
                                                        "required": [
                                                            "display_name",
                                                            "name",
                                                            "colors"
                                                        ],
                                                        "properties": {
                                                            "display_name": {
                                                                "type": "string",
                                                                "description": "Name to display to the user"
                                                            },
                                                            "name": {
                                                                "type": "string",
                                                                "description": "internal Name of the provider"
                                                            },
                                                            "colors": {
                                                                "type": "object",
                                                                "required": [
                                                                    "normal",
                                                                    "hover"
                                                                ],
                                                                "properties": {
                                                                    "normal": {
                                                                        "type": "string",
                                                                        "description": "Default color for the provider"
                                                                    },
                                                                    "hover": {
                                                                        "type": "string",
                                                                        "description": "Hover color for the provider"
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/guest": {
            "post": {
                "operationId": "guestLogin",
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg",
                                        "payload"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "success"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "guestLogin.success"
                                            ]
                                        },
                                        "payload": {
                                            "type": "object",
                                            "required": [
                                                "token"
                                            ],
                                            "properties": {
                                                "token": {
                                                    "type": "string",
                                                    "description": "JWT that represent a logged in user"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failed"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "guestLogin.failed.generic.unknown",
                                                "guestLogin.failed.generic.error"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/login": {
            "post": {
                "operationId": "login",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "password"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "password": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    },
                    "required": true
                },
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg",
                                        "payload"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "success"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "login.success"
                                            ]
                                        },
                                        "payload": {
                                            "type": "object",
                                            "required": [
                                                "token"
                                            ],
                                            "properties": {
                                                "token": {
                                                    "type": "string",
                                                    "description": "JWT that represent a logged in user"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "202": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg",
                                        "payload"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "otpRequired"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "login.otpRequired"
                                            ]
                                        },
                                        "payload": {
                                            "type": "object",
                                            "required": [
                                                "token"
                                            ],
                                            "properties": {
                                                "token": {
                                                    "type": "string",
                                                    "description": "JWT to send with the OTP to finish login"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failed"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "login.failed.generic",
                                                "login.failed.invalid"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/logout": {
            "post": {
                "operationId": "logout",
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "success"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "logout.success"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/otp": {
            "post": {
                "operationId": "loginOtp",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "token",
                                    "code"
                                ],
                                "properties": {
                                    "token": {
                                        "type": "string",
                                        "description": "The token given at the login phase"
                                    },
                                    "code": {
                                        "type": "string",
                                        "description": "The OTP given by the user"
                                    }
                                }
                            }
                        }
                    },
                    "required": true
                },
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg",
                                        "payload"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "success"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "otp.success"
                                            ]
                                        },
                                        "payload": {
                                            "type": "object",
                                            "required": [
                                                "token"
                                            ],
                                            "properties": {
                                                "token": {
                                                    "type": "string",
                                                    "description": "the JWT Token"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failed"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "otp.failed.invalid"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failed"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "otp.failed.noSecret"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "408": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failed"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "otp.failed.timeout"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failed"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "otp.failed.generic"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/signin": {
            "post": {
                "operationId": "signin",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "password"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "password": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    },
                    "required": true
                },
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg",
                                        "payload"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "success"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "signin.success"
                                            ]
                                        },
                                        "payload": {
                                            "type": "object",
                                            "required": [
                                                "token"
                                            ],
                                            "properties": {
                                                "token": {
                                                    "type": "string",
                                                    "description": "the JWT token"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failed"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "signin.failed.username.existing",
                                                "signin.failed.username.toolong",
                                                "signin.failed.username.tooshort",
                                                "signin.failed.username.invalid",
                                                "signin.failed.password.toolong",
                                                "signin.failed.password.tooshort",
                                                "signin.failed.password.invalid"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failed"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "signin.failed.generic"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/auth/statusOtp": {
            "get": {
                "operationId": "statusOtp",
                "responses": {
                    "200": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "required": [
                                                "kind",
                                                "msg",
                                                "payload"
                                            ],
                                            "properties": {
                                                "kind": {
                                                    "enum": [
                                                        "success"
                                                    ]
                                                },
                                                "msg": {
                                                    "enum": [
                                                        "statusOtp.success.enabled"
                                                    ]
                                                },
                                                "payload": {
                                                    "type": "object",
                                                    "required": [
                                                        "url"
                                                    ],
                                                    "properties": {
                                                        "url": {
                                                            "type": "string",
                                                            "description": "The otp url to feed into a 2fa app"
                                                        }
                                                    }
                                                }
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "required": [
                                                "kind",
                                                "msg"
                                            ],
                                            "properties": {
                                                "kind": {
                                                    "enum": [
                                                        "success"
                                                    ]
                                                },
                                                "msg": {
                                                    "enum": [
                                                        "statusOtp.success.disabled"
                                                    ]
                                                }
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "required": [
                                                "kind",
                                                "msg"
                                            ],
                                            "properties": {
                                                "kind": {
                                                    "enum": [
                                                        "notLoggedIn"
                                                    ]
                                                },
                                                "msg": {
                                                    "enum": [
                                                        "auth.noCookie",
                                                        "auth.invalidKind",
                                                        "auth.noUser",
                                                        "auth.invalid"
                                                    ]
                                                }
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "required": [
                                                "kind",
                                                "msg"
                                            ],
                                            "properties": {
                                                "kind": {
                                                    "enum": [
                                                        "notLoggedIn"
                                                    ]
                                                },
                                                "msg": {
                                                    "enum": [
                                                        "auth.noCookie",
                                                        "auth.invalidKind",
                                                        "auth.noUser",
                                                        "auth.invalid"
                                                    ]
                                                }
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Default Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "kind",
                                        "msg"
                                    ],
                                    "properties": {
                                        "kind": {
                                            "enum": [
                                                "failure"
                                            ]
                                        },
                                        "msg": {
                                            "enum": [
                                                "statusOtp.failure.generic"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "servers": [
        {
            "url": "https://local.maix.me:8888",
            "description": "direct from docker"
        },
        {
            "url": "https://local.maix.me:8000",
            "description": "using fnginx"
        }
    ]
}
