]> Untitled Git - lemmy.git/blobdiff - crates/api_crud/src/site/read.rs
Moving settings to Database. (#2492)
[lemmy.git] / crates / api_crud / src / site / read.rs
index d214f7b6e041390102d2f34d175a2402a765a2bc..226e24f341a25567c3aca1170bda217a7c862774 100644 (file)
@@ -1,84 +1,34 @@
 use crate::PerformCrud;
 use actix_web::web::Data;
 use lemmy_api_common::{
-  blocking,
-  build_federated_instances,
-  get_local_user_settings_view_from_jwt_opt,
-  person::Register,
-  site::*,
+  site::{GetSite, GetSiteResponse, MyUserInfo},
+  utils::{blocking, build_federated_instances, get_local_user_settings_view_from_jwt_opt},
 };
-use lemmy_db_views::site_view::SiteView;
-use lemmy_db_views_actor::{
-  community_block_view::CommunityBlockView,
-  community_follower_view::CommunityFollowerView,
-  community_moderator_view::CommunityModeratorView,
-  person_block_view::PersonBlockView,
-  person_view::PersonViewSafe,
+use lemmy_db_schema::source::{actor_language::SiteLanguage, language::Language};
+use lemmy_db_views::structs::{LocalUserDiscussionLanguageView, SiteView};
+use lemmy_db_views_actor::structs::{
+  CommunityBlockView,
+  CommunityFollowerView,
+  CommunityModeratorView,
+  PersonBlockView,
+  PersonViewSafe,
 };
-use lemmy_utils::{version, ConnectionId, LemmyError};
+use lemmy_utils::{error::LemmyError, version, ConnectionId};
 use lemmy_websocket::{messages::GetUsersOnline, LemmyContext};
-use tracing::info;
 
 #[async_trait::async_trait(?Send)]
 impl PerformCrud for GetSite {
   type Response = GetSiteResponse;
 
-  #[tracing::instrument(skip(context, websocket_id))]
+  #[tracing::instrument(skip(context, _websocket_id))]
   async fn perform(
     &self,
     context: &Data<LemmyContext>,
-    websocket_id: Option<ConnectionId>,
+    _websocket_id: Option<ConnectionId>,
   ) -> Result<GetSiteResponse, LemmyError> {
     let data: &GetSite = self;
 
-    let site_view = match blocking(context.pool(), SiteView::read).await? {
-      Ok(site_view) => Some(site_view),
-      // If the site isn't created yet, check the setup
-      Err(_) => {
-        if let Some(setup) = context.settings().setup.as_ref() {
-          let register = Register {
-            username: setup.admin_username.to_owned(),
-            email: setup.admin_email.clone().map(|s| s.into()),
-            password: setup.admin_password.clone().into(),
-            password_verify: setup.admin_password.clone().into(),
-            show_nsfw: true,
-            captcha_uuid: None,
-            captcha_answer: None,
-            honeypot: None,
-            answer: None,
-          };
-          let admin_jwt = register
-            .perform(context, websocket_id)
-            .await?
-            .jwt
-            .expect("jwt is returned from registration on newly created site");
-          info!("Admin {} created", setup.admin_username);
-
-          let create_site = CreateSite {
-            name: setup.site_name.to_owned(),
-            sidebar: setup.sidebar.to_owned(),
-            description: setup.description.to_owned(),
-            icon: setup.icon.to_owned(),
-            banner: setup.banner.to_owned(),
-            enable_downvotes: setup.enable_downvotes,
-            open_registration: setup.open_registration,
-            enable_nsfw: setup.enable_nsfw,
-            community_creation_admin_only: setup.community_creation_admin_only,
-            require_email_verification: setup.require_email_verification,
-            require_application: setup.require_application,
-            application_question: setup.application_question.to_owned(),
-            private_instance: setup.private_instance,
-            default_theme: setup.default_theme.to_owned(),
-            auth: admin_jwt,
-          };
-          create_site.perform(context, websocket_id).await?;
-          info!("Site {} created", setup.site_name);
-          Some(blocking(context.pool(), SiteView::read).await??)
-        } else {
-          None
-        }
-      }
-    };
+    let site_view = blocking(context.pool(), SiteView::read_local).await??;
 
     let admins = blocking(context.pool(), PersonViewSafe::admins).await??;
 
@@ -97,35 +47,39 @@ impl PerformCrud for GetSite {
     .await?
     {
       let person_id = local_user_view.person.id;
+      let local_user_id = local_user_view.local_user.id;
+
       let follows = blocking(context.pool(), move |conn| {
         CommunityFollowerView::for_person(conn, person_id)
       })
       .await?
-      .map_err(LemmyError::from)
-      .map_err(|e| e.with_message("system_err_login"))?;
+      .map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
 
       let person_id = local_user_view.person.id;
       let community_blocks = blocking(context.pool(), move |conn| {
         CommunityBlockView::for_person(conn, person_id)
       })
       .await?
-      .map_err(LemmyError::from)
-      .map_err(|e| e.with_message("system_err_login"))?;
+      .map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
 
       let person_id = local_user_view.person.id;
       let person_blocks = blocking(context.pool(), move |conn| {
         PersonBlockView::for_person(conn, person_id)
       })
       .await?
-      .map_err(LemmyError::from)
-      .map_err(|e| e.with_message("system_err_login"))?;
+      .map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
 
       let moderates = blocking(context.pool(), move |conn| {
         CommunityModeratorView::for_person(conn, person_id)
       })
       .await?
-      .map_err(LemmyError::from)
-      .map_err(|e| e.with_message("system_err_login"))?;
+      .map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
+
+      let discussion_languages = blocking(context.pool(), move |conn| {
+        LocalUserDiscussionLanguageView::read_languages(conn, local_user_id)
+      })
+      .await?
+      .map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
 
       Some(MyUserInfo {
         local_user_view,
@@ -133,17 +87,17 @@ impl PerformCrud for GetSite {
         moderates,
         community_blocks,
         person_blocks,
+        discussion_languages,
       })
     } else {
       None
     };
 
-    let federated_instances = build_federated_instances(
-      context.pool(),
-      &context.settings().federation,
-      &context.settings().hostname,
-    )
-    .await?;
+    let federated_instances =
+      build_federated_instances(&site_view.local_site, context.pool()).await?;
+
+    let all_languages = blocking(context.pool(), Language::read_all).await??;
+    let discussion_languages = blocking(context.pool(), SiteLanguage::read_local).await??;
 
     Ok(GetSiteResponse {
       site_view,
@@ -152,6 +106,8 @@ impl PerformCrud for GetSite {
       version: version::VERSION.to_string(),
       my_user,
       federated_instances,
+      all_languages,
+      discussion_languages,
     })
   }
 }