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