Want to contribute? Fork me on Codeberg.org!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.4 KiB

2 years ago
use std::ops::Deref;
use reqwest::StatusCode;
use rocket::{http::{CookieJar, Status}, State, Response};
2 years ago
use rocket_dyn_templates::{context, Template};
use crate::{
cookies::LANG_COOKIE,
i18n::DEFAULT as DEFAULT_LANG,
models::{Settings, SessionUser, Database, DatabaseError},
2 years ago
utils::AcceptLanguage,
};
#[get("/users/<user>")]
pub async fn get_user(
user: String,
cookies: &CookieJar<'_>,
settings: &State<Settings>,
database: &State<Database>,
accept_language: AcceptLanguage,
) -> Result<Template, Status> {
let profile_user = match database.get_user_by_name(&user) {
Ok(profile_user) => profile_user,
Err(DatabaseError::Rusqlite(rusqlite::Error::QueryReturnedNoRows)) => return Err(Status::NotFound),
Err(error) => {
eprintln!("{:?}", error);
return Err(Status::InternalServerError);
},
};
Ok(Template::render(
2 years ago
"user",
context! {
profile_user,
2 years ago
submissions: database.get_submissions_by_user_name(&user).unwrap(),
settings: settings.deref(),
lang: cookies
.get(LANG_COOKIE)
.map(|cookie| vec![cookie.value().to_owned()])
.or(accept_language.0)
.unwrap_or_else(|| vec![DEFAULT_LANG.to_owned()]),
user: SessionUser::get(cookies).await.unwrap(),
},
))
2 years ago
}