]> Untitled Git - lemmy.git/blobdiff - crates/websocket/src/lib.rs
Removing the site creator, adding leave_admin. Fixes #1808 (#2052)
[lemmy.git] / crates / websocket / src / lib.rs
index 2144ffefb1c33fec62912a45a975f17138f68aa3..324562180b0854d9ff897a5ce5ece6f8de0e1219 100644 (file)
@@ -4,35 +4,42 @@ extern crate strum_macros;
 use crate::chat_server::ChatServer;
 use actix::Addr;
 use background_jobs::QueueHandle;
-use lemmy_db_queries::DbPool;
-use lemmy_utils::LemmyError;
-use reqwest::Client;
+use lemmy_db_schema::{source::secret::Secret, DbPool};
+use lemmy_utils::{settings::structs::Settings, LemmyError};
+use reqwest_middleware::ClientWithMiddleware;
 use serde::Serialize;
 
 pub mod chat_server;
 pub mod handlers;
 pub mod messages;
 pub mod routes;
+pub mod send;
 
 pub struct LemmyContext {
-  pub pool: DbPool,
-  pub chat_server: Addr<ChatServer>,
-  pub client: Client,
-  pub activity_queue: QueueHandle,
+  pool: DbPool,
+  chat_server: Addr<ChatServer>,
+  client: ClientWithMiddleware,
+  activity_queue: QueueHandle,
+  settings: Settings,
+  secret: Secret,
 }
 
 impl LemmyContext {
   pub fn create(
     pool: DbPool,
     chat_server: Addr<ChatServer>,
-    client: Client,
+    client: ClientWithMiddleware,
     activity_queue: QueueHandle,
+    settings: Settings,
+    secret: Secret,
   ) -> LemmyContext {
     LemmyContext {
       pool,
       chat_server,
       client,
       activity_queue,
+      settings,
+      secret,
     }
   }
   pub fn pool(&self) -> &DbPool {
@@ -41,12 +48,19 @@ impl LemmyContext {
   pub fn chat_server(&self) -> &Addr<ChatServer> {
     &self.chat_server
   }
-  pub fn client(&self) -> &Client {
+  pub fn client(&self) -> &ClientWithMiddleware {
     &self.client
   }
   pub fn activity_queue(&self) -> &QueueHandle {
     &self.activity_queue
   }
+  pub fn settings(&self) -> Settings {
+    // TODO hacky solution to be able to hotload the settings.
+    Settings::get()
+  }
+  pub fn secret(&self) -> &Secret {
+    &self.secret
+  }
 }
 
 impl Clone for LemmyContext {
@@ -56,6 +70,8 @@ impl Clone for LemmyContext {
       chat_server: self.chat_server.clone(),
       client: self.client.clone(),
       activity_queue: self.activity_queue.clone(),
+      settings: self.settings.clone(),
+      secret: self.secret.clone(),
     }
   }
 }
@@ -66,12 +82,13 @@ struct WebsocketResponse<T> {
   data: T,
 }
 
-pub fn serialize_websocket_message<Response>(
-  op: &UserOperation,
+pub fn serialize_websocket_message<OP, Response>(
+  op: &OP,
   data: &Response,
 ) -> Result<String, LemmyError>
 where
   Response: Serialize,
+  OP: ToString,
 {
   let response = WebsocketResponse {
     op: op.to_string(),
@@ -80,74 +97,101 @@ where
   Ok(serde_json::to_string(&response)?)
 }
 
-#[derive(EnumString, ToString, Debug, Clone)]
+#[derive(EnumString, Display, Debug, Clone)]
 pub enum UserOperation {
   Login,
-  Register,
   GetCaptcha,
-  CreateCommunity,
-  CreatePost,
-  ListCommunities,
-  ListCategories,
-  GetPost,
-  GetCommunity,
-  CreateComment,
-  EditComment,
-  DeleteComment,
-  RemoveComment,
   MarkCommentAsRead,
   SaveComment,
   CreateCommentLike,
   CreateCommentReport,
   ResolveCommentReport,
   ListCommentReports,
-  GetPosts,
   CreatePostLike,
-  EditPost,
-  DeletePost,
-  RemovePost,
   LockPost,
   StickyPost,
+  MarkPostAsRead,
   SavePost,
   CreatePostReport,
   ResolvePostReport,
   ListPostReports,
   GetReportCount,
-  EditCommunity,
-  DeleteCommunity,
-  RemoveCommunity,
+  GetUnreadCount,
+  VerifyEmail,
   FollowCommunity,
-  GetFollowedCommunities,
-  GetUserDetails,
   GetReplies,
-  GetUserMentions,
-  MarkUserMentionAsRead,
+  GetPersonMentions,
+  MarkPersonMentionAsRead,
   GetModlog,
   BanFromCommunity,
   AddModToCommunity,
-  CreateSite,
-  EditSite,
-  GetSite,
   AddAdmin,
-  BanUser,
+  GetUnreadRegistrationApplicationCount,
+  ListRegistrationApplications,
+  ApproveRegistrationApplication,
+  BanPerson,
+  GetBannedPersons,
   Search,
+  ResolveObject,
   MarkAllAsRead,
   SaveUserSettings,
   TransferCommunity,
-  TransferSite,
-  DeleteAccount,
+  LeaveAdmin,
   PasswordReset,
   PasswordChange,
-  CreatePrivateMessage,
-  EditPrivateMessage,
-  DeletePrivateMessage,
   MarkPrivateMessageAsRead,
-  GetPrivateMessages,
   UserJoin,
-  GetComments,
   GetSiteConfig,
   SaveSiteConfig,
   PostJoin,
   CommunityJoin,
   ModJoin,
+  ChangePassword,
+  GetSiteMetadata,
+  BlockCommunity,
+  BlockPerson,
 }
+
+#[derive(EnumString, Display, Debug, Clone)]
+pub enum UserOperationCrud {
+  // Site
+  CreateSite,
+  GetSite,
+  EditSite,
+  // Community
+  CreateCommunity,
+  ListCommunities,
+  GetCommunity,
+  EditCommunity,
+  DeleteCommunity,
+  RemoveCommunity,
+  // Post
+  CreatePost,
+  GetPost,
+  GetPosts,
+  EditPost,
+  DeletePost,
+  RemovePost,
+  // Comment
+  CreateComment,
+  GetComment,
+  GetComments,
+  EditComment,
+  DeleteComment,
+  RemoveComment,
+  // User
+  Register,
+  GetPersonDetails,
+  DeleteAccount,
+  // Private Message
+  CreatePrivateMessage,
+  GetPrivateMessages,
+  EditPrivateMessage,
+  DeletePrivateMessage,
+}
+
+pub trait OperationType {}
+
+impl OperationType for UserOperationCrud {}
+
+impl OperationType for UserOperation {}