]> Untitled Git - lemmy.git/blob - crates/websocket/src/lib.rs
2a7d1e8f49a554d1f45bb253807c7de3ea4da549
[lemmy.git] / crates / websocket / src / lib.rs
1 #[macro_use]
2 extern crate strum_macros;
3
4 use crate::chat_server::ChatServer;
5 use actix::Addr;
6 use lemmy_db_schema::{source::secret::Secret, utils::DbPool};
7 use lemmy_utils::{error::LemmyError, settings::structs::Settings};
8 use reqwest_middleware::ClientWithMiddleware;
9 use serde::Serialize;
10
11 pub mod chat_server;
12 pub mod handlers;
13 pub mod messages;
14 pub mod routes;
15 pub mod send;
16
17 pub struct LemmyContext {
18   pool: DbPool,
19   chat_server: Addr<ChatServer>,
20   client: ClientWithMiddleware,
21   settings: Settings,
22   secret: Secret,
23 }
24
25 impl LemmyContext {
26   pub fn create(
27     pool: DbPool,
28     chat_server: Addr<ChatServer>,
29     client: ClientWithMiddleware,
30     settings: Settings,
31     secret: Secret,
32   ) -> LemmyContext {
33     LemmyContext {
34       pool,
35       chat_server,
36       client,
37       settings,
38       secret,
39     }
40   }
41   pub fn pool(&self) -> &DbPool {
42     &self.pool
43   }
44   pub fn chat_server(&self) -> &Addr<ChatServer> {
45     &self.chat_server
46   }
47   pub fn client(&self) -> &ClientWithMiddleware {
48     &self.client
49   }
50   pub fn settings(&self) -> Settings {
51     // TODO hacky solution to be able to hotload the settings.
52     Settings::get()
53   }
54   pub fn secret(&self) -> &Secret {
55     &self.secret
56   }
57 }
58
59 impl Clone for LemmyContext {
60   fn clone(&self) -> Self {
61     LemmyContext {
62       pool: self.pool.clone(),
63       chat_server: self.chat_server.clone(),
64       client: self.client.clone(),
65       settings: self.settings.clone(),
66       secret: self.secret.clone(),
67     }
68   }
69 }
70
71 #[derive(Serialize)]
72 struct WebsocketResponse<T> {
73   op: String,
74   data: T,
75 }
76
77 pub fn serialize_websocket_message<OP, Response>(
78   op: &OP,
79   data: &Response,
80 ) -> Result<String, LemmyError>
81 where
82   Response: Serialize,
83   OP: ToString,
84 {
85   let response = WebsocketResponse {
86     op: op.to_string(),
87     data,
88   };
89   Ok(serde_json::to_string(&response)?)
90 }
91
92 #[derive(EnumString, Display, Debug, Clone)]
93 pub enum UserOperation {
94   Login,
95   GetCaptcha,
96   MarkCommentAsRead,
97   SaveComment,
98   CreateCommentLike,
99   CreateCommentReport,
100   ResolveCommentReport,
101   ListCommentReports,
102   CreatePostLike,
103   LockPost,
104   StickyPost,
105   MarkPostAsRead,
106   SavePost,
107   CreatePostReport,
108   ResolvePostReport,
109   ListPostReports,
110   GetReportCount,
111   GetUnreadCount,
112   VerifyEmail,
113   FollowCommunity,
114   GetReplies,
115   GetPersonMentions,
116   MarkPersonMentionAsRead,
117   GetModlog,
118   BanFromCommunity,
119   AddModToCommunity,
120   AddAdmin,
121   GetUnreadRegistrationApplicationCount,
122   ListRegistrationApplications,
123   ApproveRegistrationApplication,
124   BanPerson,
125   GetBannedPersons,
126   Search,
127   ResolveObject,
128   MarkAllAsRead,
129   SaveUserSettings,
130   TransferCommunity,
131   LeaveAdmin,
132   PasswordReset,
133   PasswordChange,
134   MarkPrivateMessageAsRead,
135   UserJoin,
136   GetSiteConfig,
137   SaveSiteConfig,
138   PostJoin,
139   CommunityJoin,
140   ModJoin,
141   ChangePassword,
142   GetSiteMetadata,
143   BlockCommunity,
144   BlockPerson,
145 }
146
147 #[derive(EnumString, Display, Debug, Clone)]
148 pub enum UserOperationCrud {
149   // Site
150   CreateSite,
151   GetSite,
152   EditSite,
153   // Community
154   CreateCommunity,
155   ListCommunities,
156   GetCommunity,
157   EditCommunity,
158   DeleteCommunity,
159   RemoveCommunity,
160   // Post
161   CreatePost,
162   GetPost,
163   GetPosts,
164   EditPost,
165   DeletePost,
166   RemovePost,
167   // Comment
168   CreateComment,
169   GetComment,
170   GetComments,
171   EditComment,
172   DeleteComment,
173   RemoveComment,
174   // User
175   Register,
176   GetPersonDetails,
177   DeleteAccount,
178   // Private Message
179   CreatePrivateMessage,
180   GetPrivateMessages,
181   EditPrivateMessage,
182   DeletePrivateMessage,
183 }
184
185 pub trait OperationType {}
186
187 impl OperationType for UserOperationCrud {}
188
189 impl OperationType for UserOperation {}