aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJokler <jokler@protonmail.com>2020-02-09 22:19:38 +0100
committerJokler <jokler@protonmail.com>2020-02-22 23:20:10 +0100
commit1e0fb0a8fab5c9f2f8a58c2637830522863ef04f (patch)
treebfad95020178250e59f6fbb05caecb6712343e60
parent2273403d5f7c0e8994d7cefcfe641475e76f1d87 (diff)
downloadpokebot-1e0fb0a8fab5c9f2f8a58c2637830522863ef04f.tar.gz
pokebot-1e0fb0a8fab5c9f2f8a58c2637830522863ef04f.zip
Webserver: Add API documentation and basic css
-rw-r--r--src/web_server.rs12
-rw-r--r--static/fonts/.gitkeep0
-rw-r--r--static/style.css63
-rw-r--r--templates/base.htm1
-rw-r--r--templates/docs/api.htm126
-rw-r--r--templates/index.htm4
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"> &quot;</span><span class="code-string">name</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">MusicBot</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">state</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">Playing</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">volume</span><span class="code-normal">&quot;: </span><span class="code-number">0.5</span><span class="code-normal">,
+</span><span class="code-normal"> &quot;</span><span class="code-string">position</span><span class="code-normal">&quot;: {
+</span><span class="code-normal"> &quot;</span><span class="code-string">secs</span><span class="code-normal">&quot;: </span><span class="code-number">10</span><span class="code-normal">,
+</span><span class="code-normal"> &quot;</span><span class="code-string">nanos</span><span class="code-normal">&quot;: </span><span class="code-number">63573687
+</span><span class="code-normal"> },
+</span><span class="code-normal"> &quot;</span><span class="code-string">currently_playing</span><span class="code-normal">&quot;: {
+</span><span class="code-normal"> &quot;</span><span class="code-string">url</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">&lt;temp_url&gt;</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">webpage_url</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">https://www.youtube.com/watch?v=dQw4w9WgXcQ</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">title</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">Rick Astley - Never Gonna Give You Up (Video)</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">thumbnail</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">duration</span><span class="code-normal">&quot;: {
+</span><span class="code-normal"> &quot;</span><span class="code-string">secs</span><span class="code-normal">&quot;: </span><span class="code-number">212</span><span class="code-normal">,
+</span><span class="code-normal"> &quot;</span><span class="code-string">nanos</span><span class="code-normal">&quot;: </span><span class="code-number">0
+</span><span class="code-normal"> }
+</span><span class="code-normal"> },
+</span><span class="code-normal"> &quot;</span><span class="code-string">playlist</span><span class="code-normal">&quot;: [
+</span><span class="code-normal"> {
+</span><span class="code-normal"> &quot;</span><span class="code-string">url</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">&lt;temp_url&gt;</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">webpage_url</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">https://www.youtube.com/watch?v=dQw4w9WgXcQ</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">title</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">Rick Astley - Never Gonna Give You Up (Video)</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">thumbnail</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">duration</span><span class="code-normal">&quot;: {
+</span><span class="code-normal"> &quot;</span><span class="code-string">secs</span><span class="code-normal">&quot;: </span><span class="code-number">212</span><span class="code-normal">,
+</span><span class="code-normal"> &quot;</span><span class="code-string">nanos</span><span class="code-normal">&quot;: </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"> &quot;</span><span class="code-string">name</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">MusicBot</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">state</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">Playing</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">volume</span><span class="code-normal">&quot;: </span><span class="code-number">0.5</span><span class="code-normal">,
+</span><span class="code-normal"> &quot;</span><span class="code-string">position</span><span class="code-normal">&quot;: {
+</span><span class="code-normal"> &quot;</span><span class="code-string">secs</span><span class="code-normal">&quot;: </span><span class="code-number">142</span><span class="code-normal">,
+</span><span class="code-normal"> &quot;</span><span class="code-string">nanos</span><span class="code-normal">&quot;: </span><span class="code-number">690911766
+</span><span class="code-normal"> },
+</span><span class="code-normal"> &quot;</span><span class="code-string">currently_playing</span><span class="code-normal">&quot;: {
+</span><span class="code-normal"> &quot;</span><span class="code-string">url</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">&lt;temp_url&gt;</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">webpage_url</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">https://www.youtube.com/watch?v=dQw4w9WgXcQ</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">title</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">Rick Astley - Never Gonna Give You Up (Video)</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">thumbnail</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">duration</span><span class="code-normal">&quot;: {
+</span><span class="code-normal"> &quot;</span><span class="code-string">secs</span><span class="code-normal">&quot;: </span><span class="code-number">212</span><span class="code-normal">,
+</span><span class="code-normal"> &quot;</span><span class="code-string">nanos</span><span class="code-normal">&quot;: </span><span class="code-number">0
+</span><span class="code-normal"> }
+</span><span class="code-normal"> },
+</span><span class="code-normal"> &quot;</span><span class="code-string">playlist</span><span class="code-normal">&quot;: [
+</span><span class="code-normal"> {
+</span><span class="code-normal"> &quot;</span><span class="code-string">url</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">&lt;temp_url&gt;</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">webpage_url</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">https://www.youtube.com/watch?v=dQw4w9WgXcQ</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">title</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">Rick Astley - Never Gonna Give You Up (Video)</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">thumbnail</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">duration</span><span class="code-normal">&quot;: {
+</span><span class="code-normal"> &quot;</span><span class="code-string">secs</span><span class="code-normal">&quot;: </span><span class="code-number">212</span><span class="code-normal">,
+</span><span class="code-normal"> &quot;</span><span class="code-string">nanos</span><span class="code-normal">&quot;: </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"> &quot;</span><span class="code-string">error</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">Not Found</span><span class="code-normal">&quot;,
+</span><span class="code-normal"> &quot;</span><span class="code-string">description</span><span class="code-normal">&quot;: &quot;</span><span class="code-string">The requested resource was not found</span><span class="code-normal">&quot;
+</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 %}