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