Add manifest
This commit is contained in:
BIN
src/icon.png
Normal file
BIN
src/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
32
src/main.rs
32
src/main.rs
@@ -1,31 +1,30 @@
|
||||
use std::{
|
||||
env,
|
||||
fs::{File, OpenOptions},
|
||||
fs::OpenOptions,
|
||||
io::{BufRead, BufReader, Write},
|
||||
};
|
||||
|
||||
use maud::{html, Markup, DOCTYPE};
|
||||
use rouille::{input::basic_http_auth, post_input, router, try_or_400, Response};
|
||||
use rouille::{input::basic_http_auth, post_input, router, try_or_400, Request, Response};
|
||||
|
||||
const TASKS: &str = "tasks.txt";
|
||||
|
||||
fn main() {
|
||||
let LOGIN: String = env::var("LOGIN").unwrap();
|
||||
let PASSWORD: String = env::var("PASSWORD").unwrap();
|
||||
let login: String = env::var("LOGIN").unwrap();
|
||||
let password: String = env::var("PASSWORD").unwrap();
|
||||
|
||||
rouille::start_server("0.0.0.0:8000", move |request| {
|
||||
// Authenticate
|
||||
let auth = match basic_http_auth(request) {
|
||||
Some(a) => a,
|
||||
None => return Response::basic_http_auth_login_required("app"),
|
||||
};
|
||||
if auth.login != LOGIN || auth.password != PASSWORD {
|
||||
if !authenticated(&request, &login, &password) {
|
||||
return Response::basic_http_auth_login_required("app");
|
||||
}
|
||||
|
||||
// Route
|
||||
router!(request,
|
||||
(GET) ["/"] => { index() },
|
||||
(GET) ["manifest.json"] => {
|
||||
Response::from_data("application/manifest+json", include_bytes!("manifest.json"))
|
||||
},
|
||||
(GET) ["/icon.png"] => {
|
||||
Response::from_data("image/png", include_bytes!("icon.png"))
|
||||
},
|
||||
(POST) ["/add"] => {
|
||||
let input = try_or_400!(post_input!(request, {
|
||||
task: String,
|
||||
@@ -38,6 +37,13 @@ fn main() {
|
||||
});
|
||||
}
|
||||
|
||||
fn authenticated(request: &Request, login: &str, password: &str) -> bool {
|
||||
match basic_http_auth(request) {
|
||||
Some(a) => a.login == login && a.password == password,
|
||||
None => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn index() -> Response {
|
||||
Response::html(html!(
|
||||
(DOCTYPE)
|
||||
@@ -47,6 +53,8 @@ fn index() -> Response {
|
||||
meta name="viewport" content="width=device-width, initial-scale=1";
|
||||
title { "To-do" }
|
||||
link rel="stylesheet" href="https://unpkg.com/mvp.css@1.17.0";
|
||||
link rel="manifest" href="manifest.json";
|
||||
link rel="icon" href="/icon.png";
|
||||
script src="https://unpkg.com/htmx.org@2.0.3" {}
|
||||
}
|
||||
body {
|
||||
|
11
src/manifest.json
Normal file
11
src/manifest.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"short_name": "To-do",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/icon.png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user