moved core functions to web-base crate

This commit is contained in:
JMARyA 2022-11-17 15:01:46 +01:00
parent 9b989745e0
commit 873b91f5fd
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263
7 changed files with 29 additions and 127 deletions

21
Cargo.lock generated
View file

@ -500,9 +500,9 @@ dependencies = [
[[package]]
name = "digest"
version = "0.10.5"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c"
checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
dependencies = [
"block-buffer",
"crypto-common",
@ -642,7 +642,7 @@ dependencies = [
[[package]]
name = "gnupg"
version = "0.1.0"
source = "git+https://git.hydrar.de/jmarya/gnupg-rs#c6938384d522b07c27a0f468e4f0fda737f3b12d"
source = "git+https://git.hydrar.de/jmarya/gnupg-rs#f823922c40b8abe5cb4b5b5e03b18ecb4814854a"
[[package]]
name = "h2"
@ -921,6 +921,7 @@ dependencies = [
"reqwest",
"serde",
"serde_json",
"web-base",
]
[[package]]
@ -1208,9 +1209,9 @@ dependencies = [
[[package]]
name = "reqwest"
version = "0.11.12"
version = "0.11.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc"
checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c"
dependencies = [
"base64",
"bytes",
@ -1712,6 +1713,16 @@ version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
[[package]]
name = "web-base"
version = "0.1.0"
source = "git+https://git.hydrar.de/jmarya/web-base#14c3939c9964323ca9fe7c387742dc37999d30d4"
dependencies = [
"actix-files",
"actix-web",
"reqwest",
]
[[package]]
name = "web-sys"
version = "0.3.60"

View file

@ -12,6 +12,7 @@ chrono = "0.4.22"
env_logger = "0.9.3"
log = "0.4.17"
gnupg = { git = "https://git.hydrar.de/jmarya/gnupg-rs" }
reqwest = "0.11.12"
web-base = { git = "https://git.hydrar.de/jmarya/web-base" }
serde = {version = "1.0.147", features = ["derive"] }
serde_json = "1.0.87"
reqwest = "0.11"

View file

@ -13,26 +13,25 @@ async fn main() -> std::io::Result<()> {
let conf = config::Config::new();
pages::assets::cache_bootstrap().await;
web_base::cache_bootstrap().await;
HttpServer::new(move || {
let logger = actix_web::middleware::Logger::default();
App::new()
let app = App::new()
.wrap(logger)
.app_data(web::Data::new(conf.clone()))
.service(pages::index::index)
// Assets
.service(pages::assets::bootstrap_js)
.service(pages::assets::bootstrap_css)
.service(pages::assets::bootstrap_icons)
.service(pages::assets::bootstrap_font1)
.service(pages::assets::bootstrap_font2)
.service(pages::assets::wallpaper)
.service(pages::assets::me_img)
.service(pages::index::public_key)
.service(pages::index::mirrors)
.service(pages::index::message_page)
.service(pages::index::message_post)
.service(pages::index::message_post);
let app = web_base::bootstrap::assign_pages(app);
app
})
.bind(("0.0.0.0", 8080))?
.run()

View file

@ -1,62 +1,5 @@
use actix_files::NamedFile;
use actix_web::*;
use std::io::Write;
// Bootstrap
async fn download_file(url: &str, file: &str) {
let content = reqwest::get(url).await.expect("couldn't download file");
std::fs::File::create(file)
.unwrap()
.write_all(&content.bytes().await.unwrap())
.unwrap();
}
pub(crate) async fn cache_bootstrap() {
std::fs::create_dir_all("./cache/fonts").expect("couldn't create cache dir");
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css",
"./cache/bootstrap.min.css",
)
.await;
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css",
"./cache/bootstrap-icons.css",
)
.await;
download_file(
"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js",
"./cache/bootstrap.bundle.min.js",
)
.await;
download_file("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/fonts/bootstrap-icons.woff2?8d200481aa7f02a2d63a331fc782cfaf", "./cache/fonts/bootstrap-icons.woff2").await;
download_file("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/fonts/bootstrap-icons.woff?8d200481aa7f02a2d63a331fc782cfaf", "./cache/fonts/bootstrap-icons.woff").await;
}
#[get("/bootstrap.min.css")]
pub(crate) async fn bootstrap_css() -> Result<NamedFile> {
Ok(NamedFile::open("./cache/bootstrap.min.css")?)
}
#[get("/bootstrap-icons.css")]
pub(crate) async fn bootstrap_icons() -> Result<NamedFile> {
Ok(NamedFile::open("./cache/bootstrap-icons.css")?)
}
#[get("/bootstrap.bundle.min.js")]
pub(crate) async fn bootstrap_js() -> Result<NamedFile> {
Ok(NamedFile::open("./cache/bootstrap.bundle.min.js")?)
}
#[get("/fonts/bootstrap-icons.woff2")]
pub(crate) async fn bootstrap_font1(_: HttpRequest) -> Result<NamedFile> {
Ok(NamedFile::open("./cache/fonts/bootstrap-icons.woff2")?)
}
#[get("/fonts/bootstrap-icons.woff")]
pub(crate) async fn bootstrap_font2(_: HttpRequest) -> Result<NamedFile> {
Ok(NamedFile::open("./cache/fonts/bootstrap-icons.woff")?)
}
// Assets

View file

@ -1,51 +0,0 @@
pub fn is_browser(req: &actix_web::HttpRequest) -> bool {
let ua = req
.headers()
.get("user-agent")
.unwrap()
.to_str()
.unwrap()
.to_lowercase();
if ua.contains("chrome") || ua.contains("safari") || ua.contains("firefox") {
return true;
}
return false;
}
pub fn get_host(r: &actix_web::HttpRequest) -> String {
let res = r.headers().get("HOST").unwrap().to_str().unwrap();
return res.to_string();
}
pub fn get_host_address(r: &actix_web::HttpRequest) -> String {
let res = r.headers().get("HOST").unwrap().to_str().unwrap();
let res: Vec<&str> = res.split(":").collect();
let res = res.first().unwrap();
return res.to_string();
}
pub fn is_onion(r: &actix_web::HttpRequest) -> bool {
return get_host_address(r).ends_with("onion");
}
pub fn is_i2p(r: &actix_web::HttpRequest) -> bool {
return get_host_address(r).ends_with("i2p");
}
pub fn dynamic_link(
inner: &str,
normal_link: &str,
onion: Option<&str>,
i2p: Option<&str>,
req: &actix_web::HttpRequest,
) -> String {
if is_onion(req) {
let href = onion.unwrap_or(normal_link);
return format!("<a href={href}> {inner} </a>");
}
if is_i2p(req) {
let href = i2p.unwrap_or(normal_link);
return format!("<a href={href}> {inner} </a>");
}
return format!("<a href={normal_link}> {inner} </a>");
}

View file

@ -28,7 +28,7 @@ pub async fn message_post(r: HttpRequest, f: Form<MessageForm>) -> impl Responde
#[get("/message")]
pub async fn message_page(r: HttpRequest) -> impl Responder {
let config: &web::Data<config::Config> = r.app_data().unwrap();
let host = pages::func::get_host(&r);
let host = web_base::func::get_host(&r);
let resp = format!(
r#"
<div class="container" style="margin-top: 25px"><h1>Message</h1>
@ -50,7 +50,7 @@ pub async fn mirrors(r: HttpRequest) -> impl Responder {
let config: &web::Data<config::Config> = r.app_data().unwrap();
if let Ok(mirror_file) = std::fs::File::open("/config/mirrors.txt") {
let content = std::io::read_to_string(mirror_file).unwrap();
if pages::func::is_browser(&r) {
if web_base::func::is_browser(&r) {
let resp = format!(
r#"
<div style="margin: 25px;">
@ -71,9 +71,9 @@ pub async fn mirrors(r: HttpRequest) -> impl Responder {
#[get("/public_key")]
pub async fn public_key(r: HttpRequest) -> impl Responder {
if pages::func::is_browser(&r) {
if web_base::func::is_browser(&r) {
let config: &web::Data<config::Config> = r.app_data().unwrap();
let host = format!("http://{}", pages::func::get_host(&r));
let host = format!("http://{}", web_base::func::get_host(&r));
let key = std::io::read_to_string(std::fs::File::open("/config/pub.key").unwrap()).unwrap();
let pgp = gnupg::GnuPG::new().unwrap();

View file

@ -1,4 +1,3 @@
pub mod assets;
pub mod func;
pub mod html_fn;
pub mod index;