206 lines
5.5 KiB
YAML
206 lines
5.5 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: TheAdversary api
|
|
description: TheAdversary api
|
|
version: 1.0.0
|
|
servers:
|
|
- url: 'http://localhost:8080'
|
|
paths:
|
|
/api/login:
|
|
post:
|
|
summary: Login to an author account
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
username:
|
|
type: string
|
|
description: Username of the user / author which logs in
|
|
password:
|
|
type: string
|
|
description: Password of the user
|
|
responses:
|
|
200:
|
|
description: Logged in
|
|
headers:
|
|
Set-Cookie:
|
|
schema:
|
|
type: string
|
|
description: The session_id cookie to authenticate
|
|
401:
|
|
description: Login failed
|
|
|
|
/api/recent:
|
|
get:
|
|
summary: Get recent articles
|
|
parameters:
|
|
- in: query
|
|
name: limit
|
|
schema:
|
|
type: integer
|
|
description: Limit of recent articles to return
|
|
responses:
|
|
200:
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
articles:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ArticleSummary'
|
|
|
|
/api/search:
|
|
get:
|
|
summary: Search all articles
|
|
parameters:
|
|
- in: query
|
|
name: q
|
|
schema:
|
|
type: string
|
|
description: Name of the article to search
|
|
- in: query
|
|
name: from
|
|
schema:
|
|
type: string
|
|
description: A RFC3339 formatted date to start searching when articles are older than specified
|
|
- in: query
|
|
name: to
|
|
schema:
|
|
type: string
|
|
description: A RFC3339 formatted date to stop searching when articles are older than specified
|
|
- in: query
|
|
name: limit
|
|
schema:
|
|
type: integer
|
|
description: Limit of articles to return
|
|
responses:
|
|
200:
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
articles:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ArticleSummary'
|
|
|
|
/api/upload:
|
|
post:
|
|
summary: "Uploads a new article"
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
title:
|
|
type: string
|
|
description: "Name of the article. Must be unique"
|
|
summary:
|
|
type: string
|
|
description: A short overview summary of the article
|
|
image:
|
|
type: string
|
|
description: Link to a preview image
|
|
nullable: true
|
|
tags:
|
|
type: array
|
|
description: Tags the article should have. If the tag does not exist, a new one is created automatically
|
|
items:
|
|
$ref: '#/components/schemas/Tag'
|
|
content:
|
|
type: string
|
|
description: The article itself, formatted as markdown
|
|
security:
|
|
- cookie: []
|
|
|
|
responses:
|
|
201:
|
|
description: The article was created
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ArticleSummary'
|
|
401:
|
|
description: Not authorized
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ApiError'
|
|
409:
|
|
description: A article with the same title already exists
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ApiError'
|
|
|
|
components:
|
|
schemas:
|
|
ApiError:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
description: Error message
|
|
ArticleSummary:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: number
|
|
description: The article id
|
|
title:
|
|
type: string
|
|
description: Title of the article
|
|
summary:
|
|
type: string
|
|
description: A short overview summary of the article
|
|
author:
|
|
$ref: '#/components/schemas/Author'
|
|
image:
|
|
type: string
|
|
description: Link to a preview image
|
|
nullable: true
|
|
tags:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Tag'
|
|
link:
|
|
type: string
|
|
description: Link to the article itself
|
|
Author:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: number
|
|
description: Id of the author
|
|
name:
|
|
type: string
|
|
description: The author name
|
|
information:
|
|
type: string
|
|
description: Further information about the author
|
|
nullable: true
|
|
Tag:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: number
|
|
description: The tag id
|
|
name:
|
|
type: string
|
|
description: Name of the tag
|
|
securitySchemes:
|
|
cookie:
|
|
type: apiKey
|
|
in: cookie
|
|
name: session_id
|