Talon/openapi.json
ThetaDev 166e6c1738
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
feat: add website icons
2023-04-01 23:18:46 +02:00

905 lines
22 KiB
JSON

{
"openapi": "3.0.0",
"info": {
"title": "Talon",
"description": "API for the Talon static site management system",
"version": "0.1.0",
"license": {
"name": "MIT License"
}
},
"servers": [],
"tags": [],
"paths": {
"/website/{subdomain}": {
"get": {
"summary": "Get a website",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json; charset=utf-8": {
"schema": {
"$ref": "#/components/schemas/Website"
}
}
}
}
}
},
"put": {
"summary": "Create a new website",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"requestBody": {
"content": {
"application/json; charset=utf-8": {
"schema": {
"$ref": "#/components/schemas/WebsiteNew"
}
}
},
"required": true
},
"responses": {
"200": {
"description": ""
}
},
"security": [
{
"ApiKeyAuthorization": []
}
]
},
"patch": {
"summary": "Update website",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"requestBody": {
"content": {
"application/json; charset=utf-8": {
"schema": {
"$ref": "#/components/schemas/WebsiteUpdate"
}
}
},
"required": true
},
"responses": {
"200": {
"description": ""
}
},
"security": [
{
"ApiKeyAuthorization": []
}
]
},
"delete": {
"summary": "Delete website",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": ""
}
},
"security": [
{
"ApiKeyAuthorization": []
}
]
}
},
"/website/{subdomain}/icon": {
"put": {
"summary": "Upload a website icon",
"description": "Supported image formats: png, jpeg, gif, bmp, ico, tiff,\nwebp, pnm, dds, tga, openexr, farbfeld\n\nMaximum upload size: 5MB, 4000 pixels\n\nIcons are resized to 32x32 pixels.",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"requestBody": {
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
},
"required": true
},
"responses": {
"200": {
"description": ""
}
},
"security": [
{
"ApiKeyAuthorization": []
}
]
},
"delete": {
"summary": "Delete a website icon",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": ""
}
},
"security": [
{
"ApiKeyAuthorization": []
}
]
}
},
"/websites": {
"get": {
"summary": "Get all publicly listed websites",
"description": "Returns all publicly listed websites (visibility != `hidden`)",
"parameters": [
{
"name": "visibility",
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/Visibility"
},
{
"default": "hidden"
}
]
},
"in": "query",
"description": "Mimimum visibility of the websites",
"required": false,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json; charset=utf-8": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Website"
}
}
}
}
}
}
}
},
"/websitesAll": {
"get": {
"summary": "Get all websites",
"description": "Returns all websites from Talon's database (including hidden ones, if the current user\nhas access to them). This endpoint requires authentication (use the `/websites` endpoint\nfor unauthenticated users).",
"parameters": [
{
"name": "visibility",
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/Visibility"
},
{
"default": "hidden"
}
]
},
"in": "query",
"description": "Mimimum visibility of the websites",
"required": false,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json; charset=utf-8": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Website"
}
}
}
}
}
},
"security": [
{
"ApiKeyAuthorization": []
}
]
}
},
"/website/{subdomain}/versions": {
"get": {
"summary": "Get website versions",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json; charset=utf-8": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Version"
}
}
}
}
}
}
}
},
"/website/{subdomain}/version/{version}": {
"get": {
"summary": "Get version",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
},
{
"name": "version",
"schema": {
"type": "integer",
"format": "uint32"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json; charset=utf-8": {
"schema": {
"$ref": "#/components/schemas/Version"
}
}
}
}
}
},
"delete": {
"summary": "Delete version",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
},
{
"name": "version",
"schema": {
"type": "integer",
"format": "uint32"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": ""
}
},
"security": [
{
"ApiKeyAuthorization": []
}
]
}
},
"/website/{subdomain}/version/{version}/files": {
"get": {
"summary": "Get version files",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
},
{
"name": "version",
"schema": {
"type": "integer",
"format": "uint32"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json; charset=utf-8": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/VersionFile"
}
}
}
}
}
}
}
},
"/website/{subdomain}/upload": {
"post": {
"summary": "Upload a new version",
"parameters": [
{
"name": "subdomain",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
},
{
"name": "fallback",
"schema": {
"type": "string"
},
"in": "query",
"description": "Fallback page\n\nThe fallback page gets returned when the requested page does not exist",
"required": false,
"deprecated": false,
"explode": true
},
{
"name": "spa",
"schema": {
"type": "boolean",
"default": false
},
"in": "query",
"description": "SPA mode (return fallback page with OK status)",
"required": false,
"deprecated": false,
"explode": true
},
{
"name": "version_data",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"in": "query",
"description": "Associated version data\n\nThis is an arbitrary string map that can hold build information and other stuff\nand will be displayed in the site info dialog.",
"required": false,
"deprecated": false,
"explode": true
}
],
"requestBody": {
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
},
"required": true
},
"responses": {
"200": {
"description": ""
}
},
"security": [
{
"ApiKeyAuthorization": []
}
]
}
},
"/file/{hash}": {
"get": {
"summary": "Retrieve a file",
"parameters": [
{
"name": "hash",
"schema": {
"type": "string"
},
"in": "path",
"required": true,
"deprecated": false,
"explode": true
}
],
"responses": {
"200": {
"description": "File content",
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
},
"headers": {
"etag": {
"description": "File hash",
"required": true,
"deprecated": false,
"schema": {
"type": "string"
}
},
"last-modified": {
"description": "Date when the file was last modified",
"required": true,
"deprecated": false,
"schema": {
"type": "string"
}
}
}
}
}
}
},
"/info": {
"get": {
"summary": "Get information about your server",
"responses": {
"200": {
"description": "",
"content": {
"application/json; charset=utf-8": {
"schema": {
"$ref": "#/components/schemas/Info"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"Info": {
"type": "object",
"description": "Server information",
"required": [
"stats",
"version",
"start_time"
],
"properties": {
"stats": {
"allOf": [
{
"$ref": "#/components/schemas/Stats"
},
{
"description": "Stats about your instance"
}
]
},
"version": {
"allOf": [
{
"$ref": "#/components/schemas/VersionInfo"
},
{
"description": "Version information"
}
]
},
"start_time": {
"type": "string",
"format": "date-time",
"description": "Start time of the server"
}
}
},
"SourceIcon": {
"type": "string",
"enum": [
"link",
"git",
"github",
"gitlab",
"gitea",
"bitbucket"
]
},
"Stats": {
"type": "object",
"description": "Stats about your Talon instance",
"required": [
"n_websites",
"n_files",
"storage_used"
],
"properties": {
"n_websites": {
"type": "integer",
"format": "uint64",
"description": "Number of websites"
},
"n_files": {
"type": "integer",
"format": "uint64",
"description": "Number of unique files"
},
"storage_used": {
"type": "integer",
"format": "uint64",
"description": "Amount of used storage space (in bytes)"
}
}
},
"Version": {
"type": "object",
"description": "Website version",
"required": [
"id",
"created_at",
"data"
],
"properties": {
"id": {
"type": "integer",
"format": "uint32",
"description": "Version ID"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Version creation date"
},
"data": {
"type": "object",
"description": "Associated version data\n\nThis is an arbitrary string map that can hold build information and other stuff\nand will be displayed in the site info dialog.",
"additionalProperties": {
"type": "string"
}
}
}
},
"VersionFile": {
"type": "object",
"description": "Website file",
"required": [
"path",
"hash"
],
"properties": {
"path": {
"type": "string",
"description": "File path"
},
"hash": {
"type": "string",
"description": "File hash"
},
"mime": {
"type": "string",
"description": "MIME file type"
}
}
},
"VersionInfo": {
"type": "object",
"description": "Information about a Talon version",
"required": [
"version",
"commit",
"commit_date",
"rust_version",
"build_target",
"build_mode"
],
"properties": {
"version": {
"type": "string",
"description": "Talon version"
},
"commit": {
"type": "string",
"description": "Commit hash"
},
"commit_date": {
"type": "string",
"format": "date-time",
"description": "Commit date"
},
"rust_version": {
"type": "string",
"description": "Rust version"
},
"build_target": {
"type": "string",
"description": "Build target (OS and architecture)"
},
"build_mode": {
"type": "string",
"description": "Rust build mode (`debug` / `release`)"
}
}
},
"Visibility": {
"type": "string",
"enum": [
"featured",
"searchable",
"hidden"
]
},
"Website": {
"type": "object",
"description": "Website",
"required": [
"subdomain",
"name",
"created_at",
"visibility",
"has_icon"
],
"properties": {
"subdomain": {
"type": "string",
"description": "Website subdomain"
},
"name": {
"type": "string",
"description": "Website name"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Website creation date"
},
"latest_version": {
"type": "integer",
"format": "uint32",
"description": "Latest version ID"
},
"color": {
"type": "string",
"description": "Color of the page icon\n\nFormat: `#7935df`"
},
"visibility": {
"allOf": [
{
"$ref": "#/components/schemas/Visibility"
},
{
"description": "Visibility of the page in the sidebar menu"
}
]
},
"source_url": {
"type": "string",
"description": "Link to the source of the page"
},
"source_icon": {
"allOf": [
{
"$ref": "#/components/schemas/SourceIcon"
},
{
"description": "Icon for the source link"
}
]
},
"has_icon": {
"type": "boolean",
"description": "Does the website have an icon?"
}
}
},
"WebsiteNew": {
"type": "object",
"description": "Create a new website",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Website name"
},
"color": {
"type": "string",
"description": "Color of the page icon"
},
"visibility": {
"allOf": [
{
"$ref": "#/components/schemas/Visibility"
},
{
"description": "Visibility of the page in the sidebar menu",
"default": "hidden"
}
]
},
"source_url": {
"type": "string",
"description": "Link to the source of the page"
},
"source_icon": {
"allOf": [
{
"$ref": "#/components/schemas/SourceIcon"
},
{
"description": "Icon for the source link"
}
]
}
}
},
"WebsiteUpdate": {
"type": "object",
"description": "Update a website with the contained values\n\nValues set to `None` remain unchanged.",
"properties": {
"name": {
"type": "string",
"description": "Website name"
},
"color": {
"type": "string",
"description": "Color of the page icon"
},
"visibility": {
"allOf": [
{
"$ref": "#/components/schemas/Visibility"
},
{
"description": "Visibility of the page in the sidebar menu"
}
]
},
"source_url": {
"type": "string",
"description": "Link to the source of the page"
},
"source_icon": {
"allOf": [
{
"$ref": "#/components/schemas/SourceIcon"
},
{
"description": "Icon for the source link"
}
]
}
}
}
},
"securitySchemes": {
"ApiKeyAuthorization": {
"type": "apiKey",
"name": "X-API-Key",
"in": "header"
}
}
}
}