diff options
| author | Jokler <jokler@protonmail.com> | 2020-02-09 22:19:38 +0100 |
|---|---|---|
| committer | Jokler <jokler@protonmail.com> | 2020-02-22 23:20:10 +0100 |
| commit | 1e0fb0a8fab5c9f2f8a58c2637830522863ef04f (patch) | |
| tree | bfad95020178250e59f6fbb05caecb6712343e60 | |
| parent | 2273403d5f7c0e8994d7cefcfe641475e76f1d87 (diff) | |
| download | pokebot-1e0fb0a8fab5c9f2f8a58c2637830522863ef04f.tar.gz pokebot-1e0fb0a8fab5c9f2f8a58c2637830522863ef04f.zip | |
Webserver: Add API documentation and basic css
| -rw-r--r-- | src/web_server.rs | 12 | ||||
| -rw-r--r-- | static/fonts/.gitkeep | 0 | ||||
| -rw-r--r-- | static/style.css | 63 | ||||
| -rw-r--r-- | templates/base.htm | 1 | ||||
| -rw-r--r-- | templates/docs/api.htm | 126 | ||||
| -rw-r--r-- | templates/index.htm | 4 |
6 files changed, 206 insertions, 0 deletions
diff --git a/src/web_server.rs b/src/web_server.rs index 0342a38..0097fb1 100644 --- a/src/web_server.rs +++ b/src/web_server.rs @@ -5,6 +5,8 @@ use actix::{Addr, SyncArbiter}; use actix_web::{ get, http::header, middleware::Logger, post, web, App, HttpResponse, HttpServer, Responder, }; +use askama::actix_web::TemplateIntoResponse; +use askama::Template; use serde::{Deserialize, Serialize}; use crate::bot::MasterBot; @@ -41,6 +43,7 @@ pub async fn start(args: WebServerArgs) -> std::io::Result<()> { .service(api::get_bot_list) .service(api::get_bot), ) + .service(web::scope("/docs").service(get_api_docs)) .service(actix_files::Files::new("/static", "static/")) }) .bind(args.bind_address)? @@ -93,6 +96,15 @@ async fn get_bot( } } +#[derive(Template)] +#[template(path = "docs/api.htm")] +struct ApiDocsTemplate; + +#[get("/api")] +async fn get_api_docs() -> impl Responder { + ApiDocsTemplate.into_response() +} + mod filters { use std::time::Duration; diff --git a/static/fonts/.gitkeep b/static/fonts/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/static/fonts/.gitkeep diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..09a985c --- /dev/null +++ b/static/style.css @@ -0,0 +1,63 @@ +@font-face { + font-family: 'roboto-regular'; + src: url('fonts/Roboto-Regular.ttf') format('truetype'); +} + +@font-face { + font-family: 'roboto-light'; + src: url('fonts/Roboto-Light.ttf') format('truetype'); +} + +@font-face { + font-family: 'roboto-bold'; + src: url('fonts/Roboto-Bold.ttf') format('truetype'); +} + +body { + background-color: #151515; +} + +main { + margin: auto; + max-width: 800px; + padding: 1em; + background-color: #202020; + color: #eee; + font-family: 'roboto-regular', Arial; +} + +nav > a { + font-size: 1.4rem; +} + +a, a:visited { + color: #eee; +} + +a:hover { + color: #ccc; +} + +pre { + font-size: 0.9rem; + font-family: monospace; + background-color: #151515; + overflow: auto; + padding: 1em; +} + +.code-background { + background-color: #151515; +} + +.code-normal { + color: #c0c5ce; +} + +.code-string { + color:#a3be8c; +} + +.code-number { + color: #d08770; +} diff --git a/templates/base.htm b/templates/base.htm index 7810f21..b8b2f49 100644 --- a/templates/base.htm +++ b/templates/base.htm @@ -4,6 +4,7 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> + <link href="/static/style.css" rel="stylesheet"> <title>{% block title %}{{ title }} - PokeBot{% endblock %}</title> </head> <body> diff --git a/templates/docs/api.htm b/templates/docs/api.htm new file mode 100644 index 0000000..a973272 --- /dev/null +++ b/templates/docs/api.htm @@ -0,0 +1,126 @@ +{% extends "base.htm" %} + +{% block title %}API Documentation{% endblock %} + +{% block content %} +<h1>API Documentation</h1> +<nav> + <a href="/">Bots</a> + <a href="/docs/api">API</a> +</nav> + +<h2>Bot list</h2> +<p>Show a list of all bots.</p> + +<p><b>URL</b>: <span class="code-background">/api/bots</span></p> +<p><b>Method</b>: <span class="code-background">GET</span></p> +<p><b>Auth required</b>: <span class="code-background">NO</span></p> + +<h3>Success Response</h3> + +<p><b>Code</b>: <span class="code-background">200 OK</span></p> + +<h3>Content example</h3> + +<!-- Generated with syntect and adjusted --> +<pre> +<span class="code-normal">[ +</span><span class="code-normal"> { +</span><span class="code-normal"> "</span><span class="code-string">name</span><span class="code-normal">": "</span><span class="code-string">MusicBot</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">state</span><span class="code-normal">": "</span><span class="code-string">Playing</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">volume</span><span class="code-normal">": </span><span class="code-number">0.5</span><span class="code-normal">, +</span><span class="code-normal"> "</span><span class="code-string">position</span><span class="code-normal">": { +</span><span class="code-normal"> "</span><span class="code-string">secs</span><span class="code-normal">": </span><span class="code-number">10</span><span class="code-normal">, +</span><span class="code-normal"> "</span><span class="code-string">nanos</span><span class="code-normal">": </span><span class="code-number">63573687 +</span><span class="code-normal"> }, +</span><span class="code-normal"> "</span><span class="code-string">currently_playing</span><span class="code-normal">": { +</span><span class="code-normal"> "</span><span class="code-string">url</span><span class="code-normal">": "</span><span class="code-string"><temp_url></span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">webpage_url</span><span class="code-normal">": "</span><span class="code-string">https://www.youtube.com/watch?v=dQw4w9WgXcQ</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">title</span><span class="code-normal">": "</span><span class="code-string">Rick Astley - Never Gonna Give You Up (Video)</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">thumbnail</span><span class="code-normal">": "</span><span class="code-string">https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">duration</span><span class="code-normal">": { +</span><span class="code-normal"> "</span><span class="code-string">secs</span><span class="code-normal">": </span><span class="code-number">212</span><span class="code-normal">, +</span><span class="code-normal"> "</span><span class="code-string">nanos</span><span class="code-normal">": </span><span class="code-number">0 +</span><span class="code-normal"> } +</span><span class="code-normal"> }, +</span><span class="code-normal"> "</span><span class="code-string">playlist</span><span class="code-normal">": [ +</span><span class="code-normal"> { +</span><span class="code-normal"> "</span><span class="code-string">url</span><span class="code-normal">": "</span><span class="code-string"><temp_url></span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">webpage_url</span><span class="code-normal">": "</span><span class="code-string">https://www.youtube.com/watch?v=dQw4w9WgXcQ</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">title</span><span class="code-normal">": "</span><span class="code-string">Rick Astley - Never Gonna Give You Up (Video)</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">thumbnail</span><span class="code-normal">": "</span><span class="code-string">https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">duration</span><span class="code-normal">": { +</span><span class="code-normal"> "</span><span class="code-string">secs</span><span class="code-normal">": </span><span class="code-number">212</span><span class="code-normal">, +</span><span class="code-normal"> "</span><span class="code-string">nanos</span><span class="code-normal">": </span><span class="code-number">0 +</span><span class="code-normal"> } +</span><span class="code-normal"> } +</span><span class="code-normal"> ] +</span><span class="code-normal"> } +</span><span class="code-normal">] +</span></pre> + + +<h2>Show Bot</h2> +<p>Show a specific bot.</p> + +<p><b>URL</b>: <span class="code-background">/api/bots/:botname</span></p> +<p><b>Method</b>: <span class="code-background">GET</span></p> +<p><b>Auth required</b>: <span class="code-background">NO</span></p> + +<h3>Success Response</h3> +<p><b>Code</b>: <span class="code-background">200 OK</span></p> + +<h3>Content example</h3> + +<!-- Generated with syntect and adjusted --> +<pre> +<span class="code-normal">{ +</span><span class="code-normal"> "</span><span class="code-string">name</span><span class="code-normal">": "</span><span class="code-string">MusicBot</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">state</span><span class="code-normal">": "</span><span class="code-string">Playing</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">volume</span><span class="code-normal">": </span><span class="code-number">0.5</span><span class="code-normal">, +</span><span class="code-normal"> "</span><span class="code-string">position</span><span class="code-normal">": { +</span><span class="code-normal"> "</span><span class="code-string">secs</span><span class="code-normal">": </span><span class="code-number">142</span><span class="code-normal">, +</span><span class="code-normal"> "</span><span class="code-string">nanos</span><span class="code-normal">": </span><span class="code-number">690911766 +</span><span class="code-normal"> }, +</span><span class="code-normal"> "</span><span class="code-string">currently_playing</span><span class="code-normal">": { +</span><span class="code-normal"> "</span><span class="code-string">url</span><span class="code-normal">": "</span><span class="code-string"><temp_url></span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">webpage_url</span><span class="code-normal">": "</span><span class="code-string">https://www.youtube.com/watch?v=dQw4w9WgXcQ</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">title</span><span class="code-normal">": "</span><span class="code-string">Rick Astley - Never Gonna Give You Up (Video)</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">thumbnail</span><span class="code-normal">": "</span><span class="code-string">https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">duration</span><span class="code-normal">": { +</span><span class="code-normal"> "</span><span class="code-string">secs</span><span class="code-normal">": </span><span class="code-number">212</span><span class="code-normal">, +</span><span class="code-normal"> "</span><span class="code-string">nanos</span><span class="code-normal">": </span><span class="code-number">0 +</span><span class="code-normal"> } +</span><span class="code-normal"> }, +</span><span class="code-normal"> "</span><span class="code-string">playlist</span><span class="code-normal">": [ +</span><span class="code-normal"> { +</span><span class="code-normal"> "</span><span class="code-string">url</span><span class="code-normal">": "</span><span class="code-string"><temp_url></span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">webpage_url</span><span class="code-normal">": "</span><span class="code-string">https://www.youtube.com/watch?v=dQw4w9WgXcQ</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">title</span><span class="code-normal">": "</span><span class="code-string">Rick Astley - Never Gonna Give You Up (Video)</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">thumbnail</span><span class="code-normal">": "</span><span class="code-string">https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">duration</span><span class="code-normal">": { +</span><span class="code-normal"> "</span><span class="code-string">secs</span><span class="code-normal">": </span><span class="code-number">212</span><span class="code-normal">, +</span><span class="code-normal"> "</span><span class="code-string">nanos</span><span class="code-normal">": </span><span class="code-number">0 +</span><span class="code-normal"> } +</span><span class="code-normal"> } +</span><span class="code-normal"> ] +</span><span class="code-normal">} +</span></pre> + +<h3>Error Response</h3> + +<p><b>Condition</b>: If ':botname' is not connected to TeamSpeak.</p> + +<p><b>Code</b>: <span class="code-background">404 NOT FOUND</span></p> + +<b>Content</b>: + +<!-- Generated with syntect and adjusted --> +<pre> +<span class="code-normal">{ +</span><span class="code-normal"> "</span><span class="code-string">error</span><span class="code-normal">": "</span><span class="code-string">Not Found</span><span class="code-normal">", +</span><span class="code-normal"> "</span><span class="code-string">description</span><span class="code-normal">": "</span><span class="code-string">The requested resource was not found</span><span class="code-normal">" +</span><span class="code-normal">} +</span></pre> + +{% endblock %} diff --git a/templates/index.htm b/templates/index.htm index 3183b52..eed31f3 100644 --- a/templates/index.htm +++ b/templates/index.htm @@ -8,6 +8,10 @@ <input type="hidden" placeholder="Enter front end" name="front-end" value="tmtu"> <button type="submit">tmtu-mode</button> </form> +<nav> + <a href="/">Bots</a> + <a href="/docs/api">API</a> +</nav> <ul> {% for bot in bots %} |
