rustream/routes/
basics.rs1use std::collections::HashMap;
2use std::path::Path;
3use std::sync::Arc;
4
5use actix_web::{HttpRequest, HttpResponse, web};
6use actix_web::http::StatusCode;
7use fernet::Fernet;
8
9use crate::{constant, routes, squire};
10
11#[get("/health")]
18pub async fn health() -> HttpResponse {
19 HttpResponse::Ok()
20 .content_type("application/json")
21 .json("Healthy")
22}
23
24#[get("/")]
37pub async fn root(request: HttpRequest,
38 session: web::Data<Arc<constant::Session>>,
39 metadata: web::Data<Arc<constant::MetaData>>,
40 template: web::Data<Arc<minijinja::Environment<'static>>>) -> HttpResponse {
41 let (_host, _last_accessed) = squire::custom::log_connection(&request, &session);
42 let index = template.get_template("index").unwrap();
43 HttpResponse::build(StatusCode::OK)
44 .content_type("text/html; charset=utf-8")
45 .body(index.render(minijinja::context!(version => &metadata.pkg_version)).unwrap())
46}
47
48#[get("/profile")]
63pub async fn profile(request: HttpRequest,
64 fernet: web::Data<Arc<Fernet>>,
65 session: web::Data<Arc<constant::Session>>,
66 metadata: web::Data<Arc<constant::MetaData>>,
67 config: web::Data<Arc<squire::settings::Config>>,
68 template: web::Data<Arc<minijinja::Environment<'static>>>) -> HttpResponse {
69 let auth_response = squire::authenticator::verify_token(&request, &config, &fernet, &session);
70 if !auth_response.ok {
71 return routes::auth::failed_auth(auth_response, &config);
72 }
73 let (_host, last_accessed) = squire::custom::log_connection(&request, &session);
74 let index = template.get_template("profile").unwrap();
75 let mut access_map = HashMap::new();
76 if !last_accessed.is_empty() {
77 let filepath = Path::new(&last_accessed);
78 let extn = filepath.extension().unwrap().to_str().unwrap();
79 let name = filepath.iter().last().unwrap().to_string_lossy().to_string();
80 let path = format!("/stream/{}", &last_accessed);
81 let font = if last_accessed.contains(constant::SECURE_INDEX) {
82 "fa-solid fa-lock".to_string()
83 } else {
84 squire::content::get_file_font(extn)
85 };
86 access_map = HashMap::from([
87 ("name", name), ("font", font), ("path", path)
88 ]);
89 }
90 HttpResponse::build(StatusCode::OK)
91 .content_type("text/html; charset=utf-8")
92 .body(index.render(minijinja::context!(
93 version => &metadata.pkg_version,
94 user => &auth_response.username,
95 time_left => &auth_response.time_left,
96 file => access_map,
97 )).unwrap())
98}