5503 lines
No EOL
162 KiB
JSON
5503 lines
No EOL
162 KiB
JSON
{
|
|
"openapi": "3.0.3",
|
|
"info": {
|
|
"title": "E/PLACE API",
|
|
"description": "Publicly available API for E/PLACE",
|
|
"version": "1.0.0"
|
|
},
|
|
"servers": [
|
|
{
|
|
"url": "http://localhost:3333/api"
|
|
}
|
|
],
|
|
"paths": {
|
|
"/status": {
|
|
"get": {
|
|
"operationId": "status",
|
|
"summary": "Get the status of the API",
|
|
"description": "Get the status of the API",
|
|
"tags": [
|
|
"Misc"
|
|
],
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/reload-config": {
|
|
"put": {
|
|
"operationId": "reloadConfig",
|
|
"summary": "Reload the config",
|
|
"description": "Reload the config",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"reloadLocally": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"reloadLocally"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/update-event/{slug}": {
|
|
"post": {
|
|
"operationId": "changeEvent",
|
|
"summary": "Update the event of a room",
|
|
"description": "Update the event of a room",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"event": {
|
|
"type": "string",
|
|
"enum": [
|
|
null,
|
|
"EVEN_OR_ODD",
|
|
"EVEN_OR_ODD_DEFAULT_CANVAS",
|
|
"INITIAL_DEFAULT_CANVAS",
|
|
"RANDOM",
|
|
"GROUPS",
|
|
"VOID",
|
|
"RESET"
|
|
],
|
|
"nullable": true,
|
|
"default": null
|
|
},
|
|
"radius": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"message"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/update-rate-limits/{slug}": {
|
|
"post": {
|
|
"operationId": "updateRateLimits",
|
|
"summary": "Update the rate limits",
|
|
"description": "Update the rate limits for the API",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"rateLimitName": {
|
|
"type": "string",
|
|
"enum": [
|
|
"testsLimiter",
|
|
"getCanvasLimiter",
|
|
"getPixelLimiter",
|
|
"placePixelLimiter",
|
|
"getRoomsLimiter",
|
|
"getRoomConfigLimiter",
|
|
"createRoomLimiter",
|
|
"updateRoomLimiter",
|
|
"deleteRoomLimiter",
|
|
"getStudentLimiter",
|
|
"updateStudentLimiter",
|
|
"sendMessageLimiter",
|
|
"reportRoomLimiter"
|
|
]
|
|
},
|
|
"limit": {
|
|
"type": "number",
|
|
"minimum": 1
|
|
},
|
|
"interval": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
}
|
|
},
|
|
"required": [
|
|
"rateLimitName",
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tests/error": {
|
|
"get": {
|
|
"operationId": "tests-error",
|
|
"summary": "Return a server error",
|
|
"description": "Always return 500 Internal Server Error",
|
|
"tags": [
|
|
"Tests"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tests/invalid-token": {
|
|
"post": {
|
|
"operationId": "tests-invalid-token",
|
|
"summary": "Return an invalid token error",
|
|
"description": "Always return 401 Unauthorized \"Invalid token\"",
|
|
"tags": [
|
|
"Tests"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tests/expired-token": {
|
|
"post": {
|
|
"operationId": "tests-expired-token",
|
|
"summary": "Return a token expired error",
|
|
"description": "Always return 401 Unauthorized \"Token expired\"",
|
|
"tags": [
|
|
"Tests"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tests/valid": {
|
|
"get": {
|
|
"operationId": "tests-valid",
|
|
"summary": "Return a valid response",
|
|
"description": "Always return a valid response",
|
|
"tags": [
|
|
"Tests"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/tests/too-many-requests": {
|
|
"get": {
|
|
"operationId": "tests-too-many-requests",
|
|
"summary": "Return a too many requests error",
|
|
"description": "Always return 429 Too Many Requests",
|
|
"tags": [
|
|
"Tests"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/students": {
|
|
"get": {
|
|
"operationId": "students-getStudents",
|
|
"summary": "Get all students",
|
|
"description": "Get all students",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"uid": {
|
|
"type": "number"
|
|
},
|
|
"login": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"uid",
|
|
"login"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"description": "An array of students with their UID and login"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/students/{id}": {
|
|
"get": {
|
|
"operationId": "students-getStudent",
|
|
"summary": "Get a student by UID or login",
|
|
"description": "Get a student by UID or login",
|
|
"tags": [
|
|
"Students (Mandatory)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The UID or login of the student"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"YAKA",
|
|
"ING1_LYON",
|
|
"ING1_PARIS",
|
|
"ING1_RENNES",
|
|
"ING1_STRASBOURG",
|
|
"ING1_TOULOUSE"
|
|
]
|
|
}
|
|
},
|
|
"uid": {
|
|
"type": "number"
|
|
},
|
|
"login": {
|
|
"type": "string"
|
|
},
|
|
"avatarURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"quote": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"currentRoomSlug": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"banUntil": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"guild": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"groups",
|
|
"uid",
|
|
"login",
|
|
"avatarURL",
|
|
"quote",
|
|
"currentRoomSlug",
|
|
"banUntil",
|
|
"guild"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"operationId": "students-updateStudent",
|
|
"summary": "Update a student by UID or login",
|
|
"description": "Update a student by UID or login",
|
|
"tags": [
|
|
"Students (Optional)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"avatarURL": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
],
|
|
"description": "The URL of your avatar"
|
|
},
|
|
"quote": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
],
|
|
"description": "Your quote"
|
|
},
|
|
"guild": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
],
|
|
"description": "Your guild tag"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "Your student UID or login"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"YAKA",
|
|
"ING1_LYON",
|
|
"ING1_PARIS",
|
|
"ING1_RENNES",
|
|
"ING1_STRASBOURG",
|
|
"ING1_TOULOUSE"
|
|
]
|
|
}
|
|
},
|
|
"uid": {
|
|
"type": "number"
|
|
},
|
|
"login": {
|
|
"type": "string"
|
|
},
|
|
"avatarURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"quote": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"currentRoomSlug": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"banUntil": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"guild": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"groups",
|
|
"uid",
|
|
"login",
|
|
"avatarURL",
|
|
"quote",
|
|
"currentRoomSlug",
|
|
"banUntil",
|
|
"guild"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/students/{id}/ban": {
|
|
"post": {
|
|
"operationId": "students-banStudent",
|
|
"summary": "Ban a student by UID or login",
|
|
"description": "Ban a student by UID or by login. If no date is provided, the student will be unbanned.",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"banUntil": {
|
|
"type": "string",
|
|
"description": "The date until the student is banned"
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "The reason of the ban"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The UID or login of the student"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"YAKA",
|
|
"ING1_LYON",
|
|
"ING1_PARIS",
|
|
"ING1_RENNES",
|
|
"ING1_STRASBOURG",
|
|
"ING1_TOULOUSE"
|
|
]
|
|
}
|
|
},
|
|
"uid": {
|
|
"type": "number"
|
|
},
|
|
"login": {
|
|
"type": "string"
|
|
},
|
|
"avatarURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"quote": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"currentRoomSlug": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"banUntil": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"guild": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"groups",
|
|
"uid",
|
|
"login",
|
|
"avatarURL",
|
|
"quote",
|
|
"currentRoomSlug",
|
|
"banUntil",
|
|
"guild"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms": {
|
|
"get": {
|
|
"operationId": "rooms-getRooms",
|
|
"summary": "Get all rooms",
|
|
"description": "List all the rooms available to the student",
|
|
"tags": [
|
|
"Rooms (Optional)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of available rooms",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Room"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"operationId": "rooms-createRoom",
|
|
"summary": "Create a room",
|
|
"description": "Create a new room",
|
|
"tags": [
|
|
"Rooms (Optional)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The name of the room"
|
|
},
|
|
"description": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
],
|
|
"description": "The description of the room"
|
|
},
|
|
"iconURL": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
],
|
|
"description": "The URL of the room's icon"
|
|
},
|
|
"isPublic": {
|
|
"type": "boolean",
|
|
"description": "Whether the room is public or not. Defaults to false"
|
|
},
|
|
"studentsWhitelist": {
|
|
"type": "array",
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "number"
|
|
}
|
|
]
|
|
},
|
|
"description": "The list of students allowed to join the room. Effective only if isPublic is false. Accepts both UIDs and logins. Defaults to an empty array"
|
|
},
|
|
"studentsBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "number"
|
|
}
|
|
]
|
|
},
|
|
"description": "The list of students not allowed to join the room. Effective only if isPublic is true. Accepts both UIDs and logins. Defaults to an empty array"
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"slug": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"iconURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"canvasDimensions": {
|
|
"type": "number"
|
|
},
|
|
"isPublic": {
|
|
"type": "boolean"
|
|
},
|
|
"studentsWhitelist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"studentsBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"ownerUid": {
|
|
"type": "number"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"hidden": {
|
|
"type": "boolean"
|
|
},
|
|
"deleted": {
|
|
"type": "boolean"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
"required": [
|
|
"slug",
|
|
"name",
|
|
"description",
|
|
"iconURL",
|
|
"canvasDimensions",
|
|
"isPublic",
|
|
"studentsWhitelist",
|
|
"studentsBlacklist",
|
|
"ownerUid",
|
|
"password",
|
|
"hidden",
|
|
"deleted",
|
|
"createdAt"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}": {
|
|
"put": {
|
|
"operationId": "rooms-updateRoom",
|
|
"summary": "Update a room",
|
|
"description": "Update a room",
|
|
"tags": [
|
|
"Rooms (Optional)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The name of the room"
|
|
},
|
|
"description": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
],
|
|
"description": "The description of the room"
|
|
},
|
|
"iconURL": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
],
|
|
"description": "The URL of the room's icon"
|
|
},
|
|
"isPublic": {
|
|
"type": "boolean",
|
|
"description": "Whether the room is public or not. Defaults to false"
|
|
},
|
|
"studentsWhitelist": {
|
|
"type": "array",
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "number"
|
|
}
|
|
]
|
|
},
|
|
"description": "The list of students allowed to join the room. Effective only if isPublic is false. Accepts both UIDs and logins. Defaults to an empty array"
|
|
},
|
|
"studentsBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "number"
|
|
}
|
|
]
|
|
},
|
|
"description": "The list of students not allowed to join the room. Effective only if isPublic is true. Accepts both UIDs and logins. Defaults to an empty array"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"slug": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"iconURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"canvasDimensions": {
|
|
"type": "number"
|
|
},
|
|
"isPublic": {
|
|
"type": "boolean"
|
|
},
|
|
"studentsWhitelist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"studentsBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"ownerUid": {
|
|
"type": "number"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"hidden": {
|
|
"type": "boolean"
|
|
},
|
|
"deleted": {
|
|
"type": "boolean"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
"required": [
|
|
"slug",
|
|
"name",
|
|
"description",
|
|
"iconURL",
|
|
"canvasDimensions",
|
|
"isPublic",
|
|
"studentsWhitelist",
|
|
"studentsBlacklist",
|
|
"ownerUid",
|
|
"password",
|
|
"hidden",
|
|
"deleted",
|
|
"createdAt"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"operationId": "rooms-deleteRoom",
|
|
"summary": "Delete a room",
|
|
"description": "Delete a room",
|
|
"tags": [
|
|
"Rooms (Optional)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/config": {
|
|
"get": {
|
|
"operationId": "rooms-getRoomConfig",
|
|
"summary": "Get the room config",
|
|
"description": "Get the room config",
|
|
"tags": [
|
|
"Rooms (Mandatory)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"metadata": {
|
|
"type": "object",
|
|
"properties": {
|
|
"slug": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
]
|
|
},
|
|
"iconURL": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
]
|
|
},
|
|
"canvasDimensions": {
|
|
"type": "number"
|
|
},
|
|
"isPublic": {
|
|
"type": "boolean"
|
|
},
|
|
"studentsWhitelist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"studentsBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"ownerUid": {
|
|
"type": "number"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"palettes": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"slug",
|
|
"name",
|
|
"description",
|
|
"iconURL",
|
|
"canvasDimensions",
|
|
"isPublic"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"settings": {
|
|
"type": "object",
|
|
"properties": {
|
|
"roomColors": {
|
|
"type": "string",
|
|
"pattern": "^(#[0-9a-fA-F]{6})(,#[0-9a-fA-F]{6})*$"
|
|
},
|
|
"defaultCanvas": {
|
|
"type": "string"
|
|
},
|
|
"hideCanvaAtStart": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"roomColors"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"rateLimits": {
|
|
"type": "object",
|
|
"properties": {
|
|
"testsLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getCanvasLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getPixelLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"placePixelLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getRoomsLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getRoomConfigLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"createRoomLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"updateRoomLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"deleteRoomLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getStudentLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"updateStudentLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"sendMessageLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"reportRoomLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [
|
|
"testsLimiter",
|
|
"getCanvasLimiter",
|
|
"getPixelLimiter",
|
|
"placePixelLimiter",
|
|
"getRoomsLimiter",
|
|
"getRoomConfigLimiter",
|
|
"createRoomLimiter",
|
|
"updateRoomLimiter",
|
|
"deleteRoomLimiter",
|
|
"getStudentLimiter",
|
|
"updateStudentLimiter",
|
|
"sendMessageLimiter",
|
|
"reportRoomLimiter"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [
|
|
"metadata",
|
|
"settings"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"operationId": "rooms-changeRoomConfig",
|
|
"summary": "Load another json room config",
|
|
"description": "Load another json room config",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"settings": {
|
|
"type": "object",
|
|
"properties": {
|
|
"roomColors": {
|
|
"type": "string",
|
|
"description": "The colors of the room"
|
|
}
|
|
},
|
|
"additionalProperties": false,
|
|
"description": "The settings to change"
|
|
},
|
|
"events": {
|
|
"type": "object",
|
|
"properties": {
|
|
"colorationEvent": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"description": "The type of the coloration event"
|
|
},
|
|
"groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "The groups of the coloration event"
|
|
},
|
|
"colorsSubSet": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
},
|
|
"description": "The colors subset of the coloration event"
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"radiusEvent": {
|
|
"type": "object",
|
|
"properties": {
|
|
"radius": {
|
|
"type": "number",
|
|
"description": "The radius of the event"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"rateLimitsOverride": {
|
|
"type": "object",
|
|
"properties": {
|
|
"testsLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getCanvasLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getPixelLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"placePixelLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getRoomsLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getRoomConfigLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"createRoomLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"updateRoomLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"deleteRoomLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"getStudentLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"updateStudentLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"sendMessageLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"reportRoomLimiter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": {
|
|
"type": "number"
|
|
},
|
|
"interval": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"limit",
|
|
"interval"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [
|
|
"testsLimiter",
|
|
"getCanvasLimiter",
|
|
"getPixelLimiter",
|
|
"placePixelLimiter",
|
|
"getRoomsLimiter",
|
|
"getRoomConfigLimiter",
|
|
"createRoomLimiter",
|
|
"updateRoomLimiter",
|
|
"deleteRoomLimiter",
|
|
"getStudentLimiter",
|
|
"updateStudentLimiter",
|
|
"sendMessageLimiter",
|
|
"reportRoomLimiter"
|
|
],
|
|
"additionalProperties": false,
|
|
"description": "The rate limits to override"
|
|
}
|
|
},
|
|
"required": [
|
|
"events"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/report": {
|
|
"post": {
|
|
"operationId": "rooms-reportRoom",
|
|
"summary": "Report a room",
|
|
"description": "Report a room",
|
|
"tags": [
|
|
"Misc"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"reason": {
|
|
"type": "string",
|
|
"description": "The reason for the report"
|
|
}
|
|
},
|
|
"required": [
|
|
"reason"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/yeet": {
|
|
"post": {
|
|
"operationId": "rooms-yeetFromRoom",
|
|
"summary": "Yeet a student from a room",
|
|
"description": "Yeet a student from a room",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"slug": {
|
|
"type": "string",
|
|
"description": "The slug of the room. If empty, all rooms will be yeeted"
|
|
},
|
|
"studentsList": {
|
|
"type": "array",
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "number"
|
|
}
|
|
]
|
|
},
|
|
"description": "The list of students to yeet. If empty, all students will be yeeted"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/getGuildProportion": {
|
|
"get": {
|
|
"operationId": "rooms-canvas-getGuildProportion",
|
|
"summary": "Get informations about which guild placed each pixels",
|
|
"description": "Get informations about which guild placed each pixels",
|
|
"tags": [
|
|
"Rooms (Optional)"
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/score": {
|
|
"get": {
|
|
"operationId": "rooms-canvas-getScores",
|
|
"summary": "Get the guild score of a room",
|
|
"description": "Get the guild score of a room",
|
|
"tags": [
|
|
"Rooms (Optional)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"guilds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"points": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"points"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"guilds"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/canvas": {
|
|
"get": {
|
|
"operationId": "rooms-canvas-getCanvas",
|
|
"summary": "Get the canvas of a room",
|
|
"description": "Get the canvas of a room",
|
|
"tags": [
|
|
"Rooms (Mandatory)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"pixels": {
|
|
"type": "string",
|
|
"description": "The pixels of the room"
|
|
}
|
|
},
|
|
"required": [
|
|
"pixels"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/canvas/pixels": {
|
|
"get": {
|
|
"operationId": "rooms-canvas-getPixel",
|
|
"summary": "Get the pixels of a room",
|
|
"description": "Get the pixels of a room",
|
|
"tags": [
|
|
"Rooms (Mandatory)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
},
|
|
{
|
|
"name": "posX",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "number"
|
|
},
|
|
"description": "The X position of the pixel"
|
|
},
|
|
{
|
|
"name": "posY",
|
|
"in": "query",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "number"
|
|
},
|
|
"description": "The Y position of the pixel"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"roomSlug": {
|
|
"type": "string"
|
|
},
|
|
"posX": {
|
|
"type": "number"
|
|
},
|
|
"posY": {
|
|
"type": "number"
|
|
},
|
|
"color": {
|
|
"type": "number"
|
|
},
|
|
"timestamp": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
]
|
|
},
|
|
"placedByUid": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"roomSlug",
|
|
"posX",
|
|
"posY",
|
|
"color",
|
|
"timestamp",
|
|
"placedByUid"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"operationId": "rooms-canvas-placePixel",
|
|
"summary": "Place a pixel in a room",
|
|
"description": "Place a pixel in a room",
|
|
"tags": [
|
|
"Rooms (Mandatory)"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"posX": {
|
|
"type": "number",
|
|
"description": "The X position of the pixel"
|
|
},
|
|
"posY": {
|
|
"type": "number",
|
|
"description": "The Y position of the pixel"
|
|
},
|
|
"color": {
|
|
"type": "number",
|
|
"description": "The color index of the pixel"
|
|
}
|
|
},
|
|
"required": [
|
|
"posX",
|
|
"posY",
|
|
"color"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"roomSlug": {
|
|
"type": "string"
|
|
},
|
|
"posX": {
|
|
"type": "number"
|
|
},
|
|
"posY": {
|
|
"type": "number"
|
|
},
|
|
"color": {
|
|
"type": "number"
|
|
},
|
|
"timestamp": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
]
|
|
},
|
|
"placedByUid": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"enum": [
|
|
"null"
|
|
],
|
|
"nullable": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"roomSlug",
|
|
"posX",
|
|
"posY",
|
|
"color",
|
|
"timestamp",
|
|
"placedByUid"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/canvas/resize": {
|
|
"put": {
|
|
"operationId": "rooms-canvas-resizeCanvas",
|
|
"summary": "Resize the canvas of a room",
|
|
"description": "Resize the canvas of a room",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"newCanvasDimensions": {
|
|
"type": "number",
|
|
"description": "The new size of the room"
|
|
}
|
|
},
|
|
"required": [
|
|
"newCanvasDimensions"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"slug": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"iconURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"canvasDimensions": {
|
|
"type": "number"
|
|
},
|
|
"isPublic": {
|
|
"type": "boolean"
|
|
},
|
|
"studentsWhitelist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"studentsBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"ownerUid": {
|
|
"type": "number"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"hidden": {
|
|
"type": "boolean"
|
|
},
|
|
"deleted": {
|
|
"type": "boolean"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
"required": [
|
|
"slug",
|
|
"name",
|
|
"description",
|
|
"iconURL",
|
|
"canvasDimensions",
|
|
"isPublic",
|
|
"studentsWhitelist",
|
|
"studentsBlacklist",
|
|
"ownerUid",
|
|
"password",
|
|
"hidden",
|
|
"deleted",
|
|
"createdAt"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/canvas/reset": {
|
|
"put": {
|
|
"operationId": "rooms-canvas-resetCanvas",
|
|
"summary": "Reset the canvas of a room",
|
|
"description": "Reset the canvas of a room",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"resetOnDefault": {
|
|
"type": "boolean",
|
|
"description": "Reset the canvas on the default image if exists"
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"slug": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"iconURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"canvasDimensions": {
|
|
"type": "number"
|
|
},
|
|
"isPublic": {
|
|
"type": "boolean"
|
|
},
|
|
"studentsWhitelist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"studentsBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"ownerUid": {
|
|
"type": "number"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"hidden": {
|
|
"type": "boolean"
|
|
},
|
|
"deleted": {
|
|
"type": "boolean"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
},
|
|
"required": [
|
|
"slug",
|
|
"name",
|
|
"description",
|
|
"iconURL",
|
|
"canvasDimensions",
|
|
"isPublic",
|
|
"studentsWhitelist",
|
|
"studentsBlacklist",
|
|
"ownerUid",
|
|
"password",
|
|
"hidden",
|
|
"deleted",
|
|
"createdAt"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/rooms/{slug}/canvas/load": {
|
|
"post": {
|
|
"operationId": "rooms-canvas-loadCanvas",
|
|
"summary": "Load the canvas of a room",
|
|
"description": "Load the canvas of a room",
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"security": [
|
|
{
|
|
"Authorization": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"backupId": {
|
|
"type": "number",
|
|
"description": "The id of the backup"
|
|
}
|
|
},
|
|
"required": [
|
|
"backupId"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
},
|
|
"description": "The slug of the room"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Unauthorized",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InvalidToken": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Invalid token"
|
|
}
|
|
},
|
|
"TokenExpired": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Token expired"
|
|
}
|
|
},
|
|
"Unauthenticated": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "Unauthenticated"
|
|
}
|
|
},
|
|
"Banned": {
|
|
"value": {
|
|
"code": "UNAUTHORIZED",
|
|
"message": "You are banned"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Forbidden",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"NotAdmin": {
|
|
"value": {
|
|
"code": "FORBIDDEN",
|
|
"message": "You are not an admin"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"429": {
|
|
"description": "Too Many Requests",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"TooManyRequests": {
|
|
"value": {
|
|
"code": "TOO_MANY_REQUESTS",
|
|
"message": "Too many requests"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal Server Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Error"
|
|
},
|
|
"examples": {
|
|
"InternalServerError": {
|
|
"value": {
|
|
"code": "INTERNAL_SERVER_ERROR",
|
|
"message": "An error occured"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"securitySchemes": {
|
|
"Authorization": {
|
|
"type": "http",
|
|
"scheme": "bearer"
|
|
}
|
|
},
|
|
"responses": {
|
|
"error": {
|
|
"description": "Error response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"code": {
|
|
"type": "string"
|
|
},
|
|
"issues": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"message"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"message",
|
|
"code"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"schemas": {
|
|
"Room": {
|
|
"type": "object",
|
|
"properties": {
|
|
"slug": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"iconURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"canvasDimensions": {
|
|
"type": "number"
|
|
},
|
|
"isPublic": {
|
|
"type": "boolean"
|
|
},
|
|
"studentsWhitelist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"studentsBlacklist": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"ownerUid": {
|
|
"type": "number"
|
|
},
|
|
"password": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"hidden": {
|
|
"type": "boolean"
|
|
},
|
|
"deleted": {
|
|
"type": "boolean"
|
|
},
|
|
"createdAt": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
},
|
|
"Student": {
|
|
"type": "object",
|
|
"properties": {
|
|
"groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"YAKA",
|
|
"ING1_LYON",
|
|
"ING1_PARIS",
|
|
"ING1_RENNES",
|
|
"ING1_STRASBOURG",
|
|
"ING1_TOULOUSE"
|
|
]
|
|
}
|
|
},
|
|
"uid": {
|
|
"type": "number"
|
|
},
|
|
"login": {
|
|
"type": "string"
|
|
},
|
|
"avatarURL": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"quote": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"currentRoomSlug": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"banUntil": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"nullable": true
|
|
},
|
|
"guild": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"Error": {
|
|
"type": "object",
|
|
"properties": {
|
|
"code": {
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
{
|
|
"name": "Misc"
|
|
},
|
|
{
|
|
"name": "Tests"
|
|
},
|
|
{
|
|
"name": "Rooms (Mandatory)"
|
|
},
|
|
{
|
|
"name": "Rooms (Optional)"
|
|
},
|
|
{
|
|
"name": "Students (Mandatory)"
|
|
},
|
|
{
|
|
"name": "Students (Optional)"
|
|
},
|
|
{
|
|
"name": "Admin"
|
|
}
|
|
]
|
|
} |