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