1 use actix_web::web::{Data, Json, Query};
2 use lemmy_api_common::{
5 site::{GetSite, GetSiteResponse, MyUserInfo},
6 utils::{check_user_valid, check_validator_time},
11 actor_language::{LocalUserLanguage, SiteLanguage},
16 use lemmy_db_views::structs::{CustomEmojiView, LocalUserView, SiteView};
17 use lemmy_db_views_actor::structs::{
19 CommunityFollowerView,
20 CommunityModeratorView,
26 error::{LemmyError, LemmyErrorExt, LemmyErrorType},
30 #[tracing::instrument(skip(context))]
31 pub async fn get_site(
33 context: Data<LemmyContext>,
34 ) -> Result<Json<GetSiteResponse>, LemmyError> {
35 let site_view = SiteView::read_local(&mut context.pool()).await?;
37 let admins = PersonView::admins(&mut context.pool()).await?;
39 // Build the local user
40 let my_user = if let Some(local_user_view) =
41 local_user_settings_view_from_jwt_opt(data.auth.as_ref(), &context).await
43 let person_id = local_user_view.person.id;
44 let local_user_id = local_user_view.local_user.id;
46 let follows = CommunityFollowerView::for_person(&mut context.pool(), person_id)
48 .with_lemmy_type(LemmyErrorType::SystemErrLogin)?;
50 let person_id = local_user_view.person.id;
51 let community_blocks = CommunityBlockView::for_person(&mut context.pool(), person_id)
53 .with_lemmy_type(LemmyErrorType::SystemErrLogin)?;
55 let person_id = local_user_view.person.id;
56 let person_blocks = PersonBlockView::for_person(&mut context.pool(), person_id)
58 .with_lemmy_type(LemmyErrorType::SystemErrLogin)?;
60 let moderates = CommunityModeratorView::for_person(&mut context.pool(), person_id)
62 .with_lemmy_type(LemmyErrorType::SystemErrLogin)?;
64 let discussion_languages = LocalUserLanguage::read(&mut context.pool(), local_user_id)
66 .with_lemmy_type(LemmyErrorType::SystemErrLogin)?;
80 let all_languages = Language::read_all(&mut context.pool()).await?;
81 let discussion_languages = SiteLanguage::read_local_raw(&mut context.pool()).await?;
82 let taglines = Tagline::get_all(&mut context.pool(), site_view.local_site.id).await?;
84 CustomEmojiView::get_all(&mut context.pool(), site_view.local_site.id).await?;
86 Ok(Json(GetSiteResponse {
89 version: version::VERSION.to_string(),
98 #[tracing::instrument(skip_all)]
99 async fn local_user_settings_view_from_jwt_opt(
100 jwt: Option<&Sensitive<String>>,
101 context: &LemmyContext,
102 ) -> Option<LocalUserView> {
105 let claims = Claims::decode(jwt.as_ref(), &context.secret().jwt_secret)
108 let local_user_id = LocalUserId(claims.sub);
109 let local_user_view = LocalUserView::read(&mut context.pool(), local_user_id)
113 local_user_view.person.banned,
114 local_user_view.person.ban_expires,
115 local_user_view.person.deleted,
119 check_validator_time(&local_user_view.local_user.validator_time, &claims).ok()?;
121 Some(local_user_view)