diff --git a/api_tests/src/user.spec.ts b/api_tests/src/user.spec.ts index 204dc727f14fb05dc0edc831725c5e92b2827eba..afe21d1a06b13ed732d3ecd185f9a308d285d12a 100644 --- a/api_tests/src/user.spec.ts +++ b/api_tests/src/user.spec.ts @@ -18,6 +18,8 @@ import { saveUserSettingsFederated, setupLogins, } from "./shared"; +import { LemmyHttp } from "lemmy-js-client"; +import { GetPosts } from "lemmy-js-client/dist/types/GetPosts"; beforeAll(async () => { await setupLogins(); @@ -95,3 +97,19 @@ test("Delete user", async () => { expect((await resolvePost(alpha, remotePost)).post).toBeUndefined(); expect((await resolveComment(alpha, remoteComment)).comment).toBeUndefined(); }); + +test("Requests with invalid auth should be treated as unauthenticated", async () => { + let invalid_auth: API = { + client: new LemmyHttp("http://127.0.0.1:8541"), + auth: "invalid", + }; + let site = await getSite(invalid_auth); + expect(site.my_user).toBeUndefined(); + expect(site.site_view).toBeDefined(); + + let form: GetPosts = { + auth: "invalid", + }; + let posts = invalid_auth.client.getPosts(form); + expect((await posts).posts).toBeDefined(); +}); diff --git a/crates/api/src/comment/distinguish.rs b/crates/api/src/comment/distinguish.rs index cf51107f4b6ddebdc3dedc5daf2843700bd8e208..73e1469e3f6de23c1c57e2b637bb892fc4c80f60 100644 --- a/crates/api/src/comment/distinguish.rs +++ b/crates/api/src/comment/distinguish.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentResponse, DistinguishComment}, context::LemmyContext, - utils::{check_community_ban, get_local_user_view_from_jwt, is_mod_or_admin}, + utils::{check_community_ban, is_mod_or_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::{ source::comment::{Comment, CommentUpdateForm}, @@ -23,8 +23,7 @@ impl Perform for DistinguishComment { _websocket_id: Option<ConnectionId>, ) -> Result<CommentResponse, LemmyError> { let data: &DistinguishComment = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let comment_id = data.comment_id; let orig_comment = CommentView::read(context.pool(), comment_id, None).await?; diff --git a/crates/api/src/comment/like.rs b/crates/api/src/comment/like.rs index 6946b60c87aa68a1b5a6d39488dc9d52668eee8a..b6e7e504327da40c0273b143c2a863824a58d216 100644 --- a/crates/api/src/comment/like.rs +++ b/crates/api/src/comment/like.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentResponse, CreateCommentLike}, context::LemmyContext, - utils::{check_community_ban, check_downvotes_enabled, get_local_user_view_from_jwt}, + utils::{check_community_ban, check_downvotes_enabled, local_user_view_from_jwt}, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -30,8 +30,7 @@ impl Perform for CreateCommentLike { ) -> Result<CommentResponse, LemmyError> { let data: &CreateCommentLike = self; let local_site = LocalSite::read(context.pool()).await?; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let mut recipient_ids = Vec::<LocalUserId>::new(); diff --git a/crates/api/src/comment/save.rs b/crates/api/src/comment/save.rs index 03051f6cc8afcc068f4e4a7cde13f0df589fdcd2..d52b3322d668e18815c7fd9374d4d1dea0c3d280 100644 --- a/crates/api/src/comment/save.rs +++ b/crates/api/src/comment/save.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentResponse, SaveComment}, context::LemmyContext, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{ source::comment::{CommentSaved, CommentSavedForm}, @@ -23,8 +23,7 @@ impl Perform for SaveComment { _websocket_id: Option<ConnectionId>, ) -> Result<CommentResponse, LemmyError> { let data: &SaveComment = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let comment_saved_form = CommentSavedForm { comment_id: data.comment_id, diff --git a/crates/api/src/comment_report/create.rs b/crates/api/src/comment_report/create.rs index fe2471ede2d677b2347d8909e16cebcea1728cce..8d016bf53260f33ac4a7cee4a035e8e976dd8988 100644 --- a/crates/api/src/comment_report/create.rs +++ b/crates/api/src/comment_report/create.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentReportResponse, CreateCommentReport}, context::LemmyContext, - utils::{check_community_ban, get_local_user_view_from_jwt, send_new_report_email_to_admins}, + utils::{check_community_ban, local_user_view_from_jwt, send_new_report_email_to_admins}, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -28,8 +28,7 @@ impl Perform for CreateCommentReport { websocket_id: Option<ConnectionId>, ) -> Result<CommentReportResponse, LemmyError> { let data: &CreateCommentReport = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let reason = self.reason.trim(); diff --git a/crates/api/src/comment_report/list.rs b/crates/api/src/comment_report/list.rs index 8aa3fcbcd87a02c9013c518b24301d2736be70a1..2cd9ca1bdff3bb434db3cfde004e318992aa3280 100644 --- a/crates/api/src/comment_report/list.rs +++ b/crates/api/src/comment_report/list.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{ListCommentReports, ListCommentReportsResponse}, context::LemmyContext, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_views::comment_report_view::CommentReportQuery; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -21,8 +21,7 @@ impl Perform for ListCommentReports { _websocket_id: Option<ConnectionId>, ) -> Result<ListCommentReportsResponse, LemmyError> { let data: &ListCommentReports = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let person_id = local_user_view.person.id; let admin = local_user_view.person.admin; diff --git a/crates/api/src/comment_report/resolve.rs b/crates/api/src/comment_report/resolve.rs index f5fd6b124242fd3f4aef0fc08d645a3c31cd2ebf..4ba45481f2d2b5f58d2c0997a45a196b7fff3ba7 100644 --- a/crates/api/src/comment_report/resolve.rs +++ b/crates/api/src/comment_report/resolve.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentReportResponse, ResolveCommentReport}, context::LemmyContext, - utils::{get_local_user_view_from_jwt, is_mod_or_admin}, + utils::{is_mod_or_admin, local_user_view_from_jwt}, websocket::UserOperation, }; use lemmy_db_schema::{source::comment_report::CommentReport, traits::Reportable}; @@ -22,8 +22,7 @@ impl Perform for ResolveCommentReport { websocket_id: Option<ConnectionId>, ) -> Result<CommentReportResponse, LemmyError> { let data: &ResolveCommentReport = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let report_id = data.report_id; let person_id = local_user_view.person.id; diff --git a/crates/api/src/community/add_mod.rs b/crates/api/src/community/add_mod.rs index 7052f7cdf50a6ec792137c59e3aa97aadff29215..80c470de967365bc53fdfd315d561b539c242a86 100644 --- a/crates/api/src/community/add_mod.rs +++ b/crates/api/src/community/add_mod.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{AddModToCommunity, AddModToCommunityResponse}, context::LemmyContext, - utils::{get_local_user_view_from_jwt, is_mod_or_admin}, + utils::{is_mod_or_admin, local_user_view_from_jwt}, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -27,8 +27,7 @@ impl Perform for AddModToCommunity { websocket_id: Option<ConnectionId>, ) -> Result<AddModToCommunityResponse, LemmyError> { let data: &AddModToCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let community_id = data.community_id; diff --git a/crates/api/src/community/ban.rs b/crates/api/src/community/ban.rs index c19df91ff9fc19c514d25a4d3e96c76898906596..47cb6798fa7f01d0be04c2f787181eb8688a980b 100644 --- a/crates/api/src/community/ban.rs +++ b/crates/api/src/community/ban.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{BanFromCommunity, BanFromCommunityResponse}, context::LemmyContext, - utils::{get_local_user_view_from_jwt, is_mod_or_admin, remove_user_data_in_community}, + utils::{is_mod_or_admin, local_user_view_from_jwt, remove_user_data_in_community}, websocket::{ handlers::messages::SendCommunityRoomMessage, serialize_websocket_message, @@ -40,8 +40,7 @@ impl Perform for BanFromCommunity { websocket_id: Option<ConnectionId>, ) -> Result<BanFromCommunityResponse, LemmyError> { let data: &BanFromCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let community_id = data.community_id; let banned_person_id = data.person_id; diff --git a/crates/api/src/community/block.rs b/crates/api/src/community/block.rs index 58dabf1c07a79593351c75b41cf6f235aa09ac75..21112971f127a36a8115a8353926ae46816f458e 100644 --- a/crates/api/src/community/block.rs +++ b/crates/api/src/community/block.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{BlockCommunity, BlockCommunityResponse}, context::LemmyContext, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{ source::{ @@ -26,8 +26,7 @@ impl Perform for BlockCommunity { _websocket_id: Option<ConnectionId>, ) -> Result<BlockCommunityResponse, LemmyError> { let data: &BlockCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let community_id = data.community_id; let person_id = local_user_view.person.id; diff --git a/crates/api/src/community/follow.rs b/crates/api/src/community/follow.rs index b519d214b29e2b21d516a73d071bad926dc8d7b7..9e4efb33f6bc5c908ba7c2cd6bd9e3327fbf7217 100644 --- a/crates/api/src/community/follow.rs +++ b/crates/api/src/community/follow.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{CommunityResponse, FollowCommunity}, context::LemmyContext, - utils::{check_community_ban, check_community_deleted_or_removed, get_local_user_view_from_jwt}, + utils::{check_community_ban, check_community_deleted_or_removed, local_user_view_from_jwt}, }; use lemmy_db_schema::{ source::{ @@ -26,8 +26,7 @@ impl Perform for FollowCommunity { _websocket_id: Option<ConnectionId>, ) -> Result<CommunityResponse, LemmyError> { let data: &FollowCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let community_id = data.community_id; let community = Community::read(context.pool(), community_id).await?; diff --git a/crates/api/src/community/hide.rs b/crates/api/src/community/hide.rs index 8e18115782559dafc037a6821fc7f2b0f8d5b432..e33bf32caecda8d81fd80c9c392c19177447c806 100644 --- a/crates/api/src/community/hide.rs +++ b/crates/api/src/community/hide.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{CommunityResponse, HideCommunity}, context::LemmyContext, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -28,8 +28,7 @@ impl Perform for HideCommunity { let data: &HideCommunity = self; // Verify its a admin (only admin can hide or unhide it) - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; is_admin(&local_user_view)?; let community_form = CommunityUpdateForm::builder() diff --git a/crates/api/src/community/transfer.rs b/crates/api/src/community/transfer.rs index d96ba8488dda0c17789deedf5498eb1ed3e30f19..def3df0fa9d7f7298c1c0e8535c2d28f9b4b5e9c 100644 --- a/crates/api/src/community/transfer.rs +++ b/crates/api/src/community/transfer.rs @@ -4,7 +4,7 @@ use anyhow::Context; use lemmy_api_common::{ community::{GetCommunityResponse, TransferCommunity}, context::LemmyContext, - utils::{get_local_user_view_from_jwt, is_admin, is_top_mod}, + utils::{is_admin, is_top_mod, local_user_view_from_jwt}, }; use lemmy_db_schema::{ source::{ @@ -29,8 +29,7 @@ impl Perform for TransferCommunity { _websocket_id: Option<ConnectionId>, ) -> Result<GetCommunityResponse, LemmyError> { let data: &TransferCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Fetch the community mods let community_id = data.community_id; diff --git a/crates/api/src/local_user/add_admin.rs b/crates/api/src/local_user/add_admin.rs index ad8b67e12358e5c46d733d24eec52127bd96f259..5de584650f0dabc3836b5aa346ec00c1523c731d 100644 --- a/crates/api/src/local_user/add_admin.rs +++ b/crates/api/src/local_user/add_admin.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{AddAdmin, AddAdminResponse}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -27,8 +27,7 @@ impl Perform for AddAdmin { websocket_id: Option<ConnectionId>, ) -> Result<AddAdminResponse, LemmyError> { let data: &AddAdmin = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Make sure user is an admin is_admin(&local_user_view)?; diff --git a/crates/api/src/local_user/ban_person.rs b/crates/api/src/local_user/ban_person.rs index d2b780433af116fae07907f77970d0af0250f165..014f98b8d58c87c6f55c0e7334eafc15b39b1539 100644 --- a/crates/api/src/local_user/ban_person.rs +++ b/crates/api/src/local_user/ban_person.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{BanPerson, BanPersonResponse}, - utils::{get_local_user_view_from_jwt, is_admin, remove_user_data}, + utils::{is_admin, local_user_view_from_jwt, remove_user_data}, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -31,8 +31,7 @@ impl Perform for BanPerson { websocket_id: Option<ConnectionId>, ) -> Result<BanPersonResponse, LemmyError> { let data: &BanPerson = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Make sure user is an admin is_admin(&local_user_view)?; diff --git a/crates/api/src/local_user/block.rs b/crates/api/src/local_user/block.rs index 6dbf7cffa4c9995e87275c03e0a8f0024c2920bd..5a4c9dca06cc24d979904a8e53e88ead8f824143 100644 --- a/crates/api/src/local_user/block.rs +++ b/crates/api/src/local_user/block.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{BlockPerson, BlockPersonResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{ source::person_block::{PersonBlock, PersonBlockForm}, @@ -23,8 +23,7 @@ impl Perform for BlockPerson { _websocket_id: Option<ConnectionId>, ) -> Result<BlockPersonResponse, LemmyError> { let data: &BlockPerson = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let target_id = data.person_id; let person_id = local_user_view.person.id; diff --git a/crates/api/src/local_user/change_password.rs b/crates/api/src/local_user/change_password.rs index 2d0fd30e53763ae18f9303bfa263e0620f0b8ee7..2b486a5ed590111b6e036b3877870902aef42ea7 100644 --- a/crates/api/src/local_user/change_password.rs +++ b/crates/api/src/local_user/change_password.rs @@ -4,7 +4,7 @@ use bcrypt::verify; use lemmy_api_common::{ context::LemmyContext, person::{ChangePassword, LoginResponse}, - utils::{get_local_user_view_from_jwt, password_length_check}, + utils::{local_user_view_from_jwt, password_length_check}, }; use lemmy_db_schema::source::local_user::LocalUser; use lemmy_utils::{claims::Claims, error::LemmyError, ConnectionId}; @@ -20,8 +20,7 @@ impl Perform for ChangePassword { _websocket_id: Option<ConnectionId>, ) -> Result<LoginResponse, LemmyError> { let data: &ChangePassword = self; - let local_user_view = - get_local_user_view_from_jwt(data.auth.as_ref(), context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), context).await?; password_length_check(&data.new_password)?; diff --git a/crates/api/src/local_user/list_banned.rs b/crates/api/src/local_user/list_banned.rs index 3fd19f558bf391c7784e6505a0f652cccd3fa112..e1d0f6e757d0d2befb896c6ad5a817aeb21afc80 100644 --- a/crates/api/src/local_user/list_banned.rs +++ b/crates/api/src/local_user/list_banned.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{BannedPersonsResponse, GetBannedPersons}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_views_actor::structs::PersonView; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -18,8 +18,7 @@ impl Perform for GetBannedPersons { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data: &GetBannedPersons = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Make sure user is an admin is_admin(&local_user_view)?; diff --git a/crates/api/src/local_user/notifications/list_mentions.rs b/crates/api/src/local_user/notifications/list_mentions.rs index c03e9d1679d6fa6b19633fb0969aa5d54e64c455..fbafdb52aa58e2caa338199af8c4762f31301355 100644 --- a/crates/api/src/local_user/notifications/list_mentions.rs +++ b/crates/api/src/local_user/notifications/list_mentions.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{GetPersonMentions, GetPersonMentionsResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_views_actor::person_mention_view::PersonMentionQuery; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -19,8 +19,7 @@ impl Perform for GetPersonMentions { _websocket_id: Option<ConnectionId>, ) -> Result<GetPersonMentionsResponse, LemmyError> { let data: &GetPersonMentions = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let sort = data.sort; let page = data.page; diff --git a/crates/api/src/local_user/notifications/list_replies.rs b/crates/api/src/local_user/notifications/list_replies.rs index 585db5e95d0a304e6bdce8bbe92855d0f3e4f611..797b6f8d464329710d0bfed46eb27134123f6309 100644 --- a/crates/api/src/local_user/notifications/list_replies.rs +++ b/crates/api/src/local_user/notifications/list_replies.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{GetReplies, GetRepliesResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_views_actor::comment_reply_view::CommentReplyQuery; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -19,8 +19,7 @@ impl Perform for GetReplies { _websocket_id: Option<ConnectionId>, ) -> Result<GetRepliesResponse, LemmyError> { let data: &GetReplies = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let sort = data.sort; let page = data.page; diff --git a/crates/api/src/local_user/notifications/mark_all_read.rs b/crates/api/src/local_user/notifications/mark_all_read.rs index 2515715bdcc356e7db93a87cf9f75f7bd2e3996c..dfda897a9a578bcdff38a76dddf95ed8c3d0df37 100644 --- a/crates/api/src/local_user/notifications/mark_all_read.rs +++ b/crates/api/src/local_user/notifications/mark_all_read.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{GetRepliesResponse, MarkAllAsRead}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::source::{ comment_reply::CommentReply, @@ -23,8 +23,7 @@ impl Perform for MarkAllAsRead { _websocket_id: Option<ConnectionId>, ) -> Result<GetRepliesResponse, LemmyError> { let data: &MarkAllAsRead = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let person_id = local_user_view.person.id; // Mark all comment_replies as read diff --git a/crates/api/src/local_user/notifications/mark_mention_read.rs b/crates/api/src/local_user/notifications/mark_mention_read.rs index a3a75d929d84d5f3616ccf0edd3095ab4f645a02..80781e72a2beefa6cb6b4e901555dd89b2f3402b 100644 --- a/crates/api/src/local_user/notifications/mark_mention_read.rs +++ b/crates/api/src/local_user/notifications/mark_mention_read.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{MarkPersonMentionAsRead, PersonMentionResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{ source::person_mention::{PersonMention, PersonMentionUpdateForm}, @@ -23,8 +23,7 @@ impl Perform for MarkPersonMentionAsRead { _websocket_id: Option<ConnectionId>, ) -> Result<PersonMentionResponse, LemmyError> { let data: &MarkPersonMentionAsRead = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let person_mention_id = data.person_mention_id; let read_person_mention = PersonMention::read(context.pool(), person_mention_id).await?; diff --git a/crates/api/src/local_user/notifications/mark_reply_read.rs b/crates/api/src/local_user/notifications/mark_reply_read.rs index 3921e769df50f995352e5abbb9a717dd1a491316..1e3fad19dcf637de9894a010f27908be67fdc736 100644 --- a/crates/api/src/local_user/notifications/mark_reply_read.rs +++ b/crates/api/src/local_user/notifications/mark_reply_read.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{CommentReplyResponse, MarkCommentReplyAsRead}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{ source::comment_reply::{CommentReply, CommentReplyUpdateForm}, @@ -23,8 +23,7 @@ impl Perform for MarkCommentReplyAsRead { _websocket_id: Option<ConnectionId>, ) -> Result<CommentReplyResponse, LemmyError> { let data = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let comment_reply_id = data.comment_reply_id; let read_comment_reply = CommentReply::read(context.pool(), comment_reply_id).await?; diff --git a/crates/api/src/local_user/notifications/unread_count.rs b/crates/api/src/local_user/notifications/unread_count.rs index 715ccd286ec3c18c62fe34b60880c73f25e4cf4b..523e9a73febf505f507f4a743869676987f48c3b 100644 --- a/crates/api/src/local_user/notifications/unread_count.rs +++ b/crates/api/src/local_user/notifications/unread_count.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{GetUnreadCount, GetUnreadCountResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_views::structs::PrivateMessageView; use lemmy_db_views_actor::structs::{CommentReplyView, PersonMentionView}; @@ -20,8 +20,7 @@ impl Perform for GetUnreadCount { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let person_id = local_user_view.person.id; diff --git a/crates/api/src/local_user/report_count.rs b/crates/api/src/local_user/report_count.rs index b59a06490d12de616671f156d33cdd4bfec7d25e..b2f4912cc102819e4ae2fe709b09f2c16eea3695 100644 --- a/crates/api/src/local_user/report_count.rs +++ b/crates/api/src/local_user/report_count.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{GetReportCount, GetReportCountResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_views::structs::{CommentReportView, PostReportView, PrivateMessageReportView}; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -19,8 +19,7 @@ impl Perform for GetReportCount { _websocket_id: Option<ConnectionId>, ) -> Result<GetReportCountResponse, LemmyError> { let data: &GetReportCount = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let person_id = local_user_view.person.id; let admin = local_user_view.person.admin; diff --git a/crates/api/src/local_user/save_settings.rs b/crates/api/src/local_user/save_settings.rs index 0221d0ce207658c8154e09244de0e8f5efd1906c..a04086125c72462e8f263b82f7fbf0b95aca2d63 100644 --- a/crates/api/src/local_user/save_settings.rs +++ b/crates/api/src/local_user/save_settings.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, person::{LoginResponse, SaveUserSettings}, - utils::{get_local_user_view_from_jwt, send_verification_email}, + utils::{local_user_view_from_jwt, send_verification_email}, }; use lemmy_db_schema::{ source::{ @@ -39,8 +39,7 @@ impl Perform for SaveUserSettings { _websocket_id: Option<ConnectionId>, ) -> Result<LoginResponse, LemmyError> { let data: &SaveUserSettings = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let site_view = SiteView::read_local(context.pool()).await?; let avatar = diesel_option_overwrite_to_url(&data.avatar)?; diff --git a/crates/api/src/post/feature.rs b/crates/api/src/post/feature.rs index e1dd1e3d8bc5e7f76cabea8269c86091c9dac8e9..6d9f05f071386ade154919c2f144e696326839a0 100644 --- a/crates/api/src/post/feature.rs +++ b/crates/api/src/post/feature.rs @@ -6,9 +6,9 @@ use lemmy_api_common::{ utils::{ check_community_ban, check_community_deleted_or_removed, - get_local_user_view_from_jwt, is_admin, is_mod_or_admin, + local_user_view_from_jwt, }, websocket::UserOperation, }; @@ -33,8 +33,7 @@ impl Perform for FeaturePost { websocket_id: Option<ConnectionId>, ) -> Result<PostResponse, LemmyError> { let data: &FeaturePost = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let post_id = data.post_id; let orig_post = Post::read(context.pool(), post_id).await?; diff --git a/crates/api/src/post/like.rs b/crates/api/src/post/like.rs index 9fa480a5b5f509544667ad6a086cace08e1bf9eb..2413a983cafbfc905a37a9148dfb71975d293935 100644 --- a/crates/api/src/post/like.rs +++ b/crates/api/src/post/like.rs @@ -7,7 +7,7 @@ use lemmy_api_common::{ check_community_ban, check_community_deleted_or_removed, check_downvotes_enabled, - get_local_user_view_from_jwt, + local_user_view_from_jwt, mark_post_as_read, }, websocket::UserOperation, @@ -32,8 +32,7 @@ impl Perform for CreatePostLike { websocket_id: Option<ConnectionId>, ) -> Result<PostResponse, LemmyError> { let data: &CreatePostLike = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; // Don't do a downvote if site has downvotes disabled diff --git a/crates/api/src/post/lock.rs b/crates/api/src/post/lock.rs index cd7db90841daec7e780c27b5ad9fa922b1c73c5e..4264364002d6eeacaa6c10cb9cfe23d331824ff8 100644 --- a/crates/api/src/post/lock.rs +++ b/crates/api/src/post/lock.rs @@ -6,8 +6,8 @@ use lemmy_api_common::{ utils::{ check_community_ban, check_community_deleted_or_removed, - get_local_user_view_from_jwt, is_mod_or_admin, + local_user_view_from_jwt, }, websocket::UserOperation, }; @@ -31,8 +31,7 @@ impl Perform for LockPost { websocket_id: Option<ConnectionId>, ) -> Result<PostResponse, LemmyError> { let data: &LockPost = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let post_id = data.post_id; let orig_post = Post::read(context.pool(), post_id).await?; diff --git a/crates/api/src/post/mark_read.rs b/crates/api/src/post/mark_read.rs index 858d71d2211efcb5c0d0ee9ef0864649d9287434..e53d7a78ffbfb33f896100b997dbc36a55ad29b0 100644 --- a/crates/api/src/post/mark_read.rs +++ b/crates/api/src/post/mark_read.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, post::{MarkPostAsRead, PostResponse}, - utils::{get_local_user_view_from_jwt, mark_post_as_read, mark_post_as_unread}, + utils::{local_user_view_from_jwt, mark_post_as_read, mark_post_as_unread}, }; use lemmy_db_views::structs::PostView; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -19,8 +19,7 @@ impl Perform for MarkPostAsRead { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let post_id = data.post_id; let person_id = local_user_view.person.id; diff --git a/crates/api/src/post/save.rs b/crates/api/src/post/save.rs index e0c7c8168381a2c240388d0c1b966f73050318c0..f3ef6319cd9dde4720b52b498dee38fcc10797e7 100644 --- a/crates/api/src/post/save.rs +++ b/crates/api/src/post/save.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, post::{PostResponse, SavePost}, - utils::{get_local_user_view_from_jwt, mark_post_as_read}, + utils::{local_user_view_from_jwt, mark_post_as_read}, }; use lemmy_db_schema::{ source::post::{PostSaved, PostSavedForm}, @@ -23,8 +23,7 @@ impl Perform for SavePost { _websocket_id: Option<ConnectionId>, ) -> Result<PostResponse, LemmyError> { let data: &SavePost = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let post_saved_form = PostSavedForm { post_id: data.post_id, diff --git a/crates/api/src/post_report/create.rs b/crates/api/src/post_report/create.rs index 423f8b8142171a4ed96ee043119b48c5d08cb4f0..092f1cd8d8d10c05001d625b86a931727a97c11f 100644 --- a/crates/api/src/post_report/create.rs +++ b/crates/api/src/post_report/create.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, post::{CreatePostReport, PostReportResponse}, - utils::{check_community_ban, get_local_user_view_from_jwt, send_new_report_email_to_admins}, + utils::{check_community_ban, local_user_view_from_jwt, send_new_report_email_to_admins}, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -28,8 +28,7 @@ impl Perform for CreatePostReport { websocket_id: Option<ConnectionId>, ) -> Result<PostReportResponse, LemmyError> { let data: &CreatePostReport = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let reason = self.reason.trim(); diff --git a/crates/api/src/post_report/list.rs b/crates/api/src/post_report/list.rs index 2feed7ed2ea90c62f04f974e120c3459fea980fa..f592704242807de1f83b045a4a65956a420a540f 100644 --- a/crates/api/src/post_report/list.rs +++ b/crates/api/src/post_report/list.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, post::{ListPostReports, ListPostReportsResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_views::post_report_view::PostReportQuery; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -21,8 +21,7 @@ impl Perform for ListPostReports { _websocket_id: Option<ConnectionId>, ) -> Result<ListPostReportsResponse, LemmyError> { let data: &ListPostReports = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let person_id = local_user_view.person.id; let admin = local_user_view.person.admin; diff --git a/crates/api/src/post_report/resolve.rs b/crates/api/src/post_report/resolve.rs index 0426262df0f1e6e477d16cd8fa14a145cc0e5a2b..80290b2a35fae0bda649ad8cefccdd9f5000d4b7 100644 --- a/crates/api/src/post_report/resolve.rs +++ b/crates/api/src/post_report/resolve.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, post::{PostReportResponse, ResolvePostReport}, - utils::{get_local_user_view_from_jwt, is_mod_or_admin}, + utils::{is_mod_or_admin, local_user_view_from_jwt}, websocket::UserOperation, }; use lemmy_db_schema::{source::post_report::PostReport, traits::Reportable}; @@ -22,8 +22,7 @@ impl Perform for ResolvePostReport { websocket_id: Option<ConnectionId>, ) -> Result<PostReportResponse, LemmyError> { let data: &ResolvePostReport = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let report_id = data.report_id; let person_id = local_user_view.person.id; diff --git a/crates/api/src/private_message/mark_read.rs b/crates/api/src/private_message/mark_read.rs index ba5cf8eaa74cda6b329caea0f57a9dfa1bea0136..bf373e99c0dc4d5b4457ba7d26cdecfce74207b6 100644 --- a/crates/api/src/private_message/mark_read.rs +++ b/crates/api/src/private_message/mark_read.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, private_message::{MarkPrivateMessageAsRead, PrivateMessageResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -23,8 +23,7 @@ impl Perform for MarkPrivateMessageAsRead { websocket_id: Option<ConnectionId>, ) -> Result<PrivateMessageResponse, LemmyError> { let data: &MarkPrivateMessageAsRead = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Checking permissions let private_message_id = data.private_message_id; diff --git a/crates/api/src/private_message_report/create.rs b/crates/api/src/private_message_report/create.rs index 2a132b6f4d8879ad67dd800a672971d175fd20d3..a9ca0291d8e4d14f8c760f57d7f03e9facbc8cd7 100644 --- a/crates/api/src/private_message_report/create.rs +++ b/crates/api/src/private_message_report/create.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, private_message::{CreatePrivateMessageReport, PrivateMessageReportResponse}, - utils::{get_local_user_view_from_jwt, send_new_report_email_to_admins}, + utils::{local_user_view_from_jwt, send_new_report_email_to_admins}, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -28,8 +28,7 @@ impl Perform for CreatePrivateMessageReport { context: &Data<LemmyContext>, websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&self.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&self.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let reason = self.reason.trim(); diff --git a/crates/api/src/private_message_report/list.rs b/crates/api/src/private_message_report/list.rs index 98c2d92698c1790533a45c6048e5b4fef8657bdb..69b3dbf94b787cc876a887aa1f7498903b35b608 100644 --- a/crates/api/src/private_message_report/list.rs +++ b/crates/api/src/private_message_report/list.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, private_message::{ListPrivateMessageReports, ListPrivateMessageReportsResponse}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_views::private_message_report_view::PrivateMessageReportQuery; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -18,8 +18,7 @@ impl Perform for ListPrivateMessageReports { context: &Data<LemmyContext>, _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&self.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&self.auth, context).await?; is_admin(&local_user_view)?; diff --git a/crates/api/src/private_message_report/resolve.rs b/crates/api/src/private_message_report/resolve.rs index 9fe014c0f836463cc2f01f8e2005a15498bb7a17..09e3b251a07fc84a8049fac5e853b929f0107150 100644 --- a/crates/api/src/private_message_report/resolve.rs +++ b/crates/api/src/private_message_report/resolve.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, private_message::{PrivateMessageReportResponse, ResolvePrivateMessageReport}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -24,8 +24,7 @@ impl Perform for ResolvePrivateMessageReport { context: &Data<LemmyContext>, websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&self.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&self.auth, context).await?; is_admin(&local_user_view)?; diff --git a/crates/api/src/site/leave_admin.rs b/crates/api/src/site/leave_admin.rs index 4cec5fc4ad1958665ec14fc0f4b1572c375f53dd..a7c0941d132e574f31e506a53d3a7a9c99b3776c 100644 --- a/crates/api/src/site/leave_admin.rs +++ b/crates/api/src/site/leave_admin.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, site::{GetSiteResponse, LeaveAdmin}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::{ source::{ @@ -30,8 +30,7 @@ impl Perform for LeaveAdmin { _websocket_id: Option<ConnectionId>, ) -> Result<GetSiteResponse, LemmyError> { let data: &LeaveAdmin = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; is_admin(&local_user_view)?; diff --git a/crates/api/src/site/mod_log.rs b/crates/api/src/site/mod_log.rs index ec3ee0f70b5d19d6decc13e50112787785963fe9..dcb5f5edf5aa2386d5bed5923257f050f04a6204 100644 --- a/crates/api/src/site/mod_log.rs +++ b/crates/api/src/site/mod_log.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, site::{GetModlog, GetModlogResponse}, - utils::{check_private_instance, get_local_user_view_from_jwt_opt, is_admin, is_mod_or_admin}, + utils::{check_private_instance, is_admin, is_mod_or_admin, local_user_view_from_jwt_opt}, }; use lemmy_db_schema::{ newtypes::{CommunityId, PersonId}, @@ -43,9 +43,7 @@ impl Perform for GetModlog { ) -> Result<GetModlogResponse, LemmyError> { let data: &GetModlog = self; - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; check_private_instance(&local_user_view, &local_site)?; diff --git a/crates/api/src/site/purge/comment.rs b/crates/api/src/site/purge/comment.rs index 9664a6288482086a8e1c37a34bd079b8c3778534..f4ba4509740cbdaa5ee88729370bdb4a4b333efb 100644 --- a/crates/api/src/site/purge/comment.rs +++ b/crates/api/src/site/purge/comment.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, site::{PurgeComment, PurgeItemResponse}, - utils::{get_local_user_view_from_jwt, is_top_admin}, + utils::{is_top_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::{ source::{ @@ -25,8 +25,7 @@ impl Perform for PurgeComment { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data: &Self = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Only let the top admin purge an item is_top_admin(context.pool(), local_user_view.person.id).await?; diff --git a/crates/api/src/site/purge/community.rs b/crates/api/src/site/purge/community.rs index abc4ff3284aa5e4bc73b29a92daf31ddb170a476..5bdf62e75bb154187da9d9d646281bec1296aeeb 100644 --- a/crates/api/src/site/purge/community.rs +++ b/crates/api/src/site/purge/community.rs @@ -4,7 +4,7 @@ use lemmy_api_common::{ context::LemmyContext, request::purge_image_from_pictrs, site::{PurgeCommunity, PurgeItemResponse}, - utils::{get_local_user_view_from_jwt, is_top_admin, purge_image_posts_for_community}, + utils::{is_top_admin, local_user_view_from_jwt, purge_image_posts_for_community}, }; use lemmy_db_schema::{ source::{ @@ -26,8 +26,7 @@ impl Perform for PurgeCommunity { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data: &Self = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Only let the top admin purge an item is_top_admin(context.pool(), local_user_view.person.id).await?; diff --git a/crates/api/src/site/purge/person.rs b/crates/api/src/site/purge/person.rs index 94c80a9286935cd6fc66f65dcaec01c639461c17..896dc783cf8032b61cfa48938d9d1592af91946e 100644 --- a/crates/api/src/site/purge/person.rs +++ b/crates/api/src/site/purge/person.rs @@ -4,7 +4,7 @@ use lemmy_api_common::{ context::LemmyContext, request::purge_image_from_pictrs, site::{PurgeItemResponse, PurgePerson}, - utils::{get_local_user_view_from_jwt, is_top_admin, purge_image_posts_for_person}, + utils::{is_top_admin, local_user_view_from_jwt, purge_image_posts_for_person}, }; use lemmy_db_schema::{ source::{ @@ -26,8 +26,7 @@ impl Perform for PurgePerson { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data: &Self = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Only let the top admin purge an item is_top_admin(context.pool(), local_user_view.person.id).await?; diff --git a/crates/api/src/site/purge/post.rs b/crates/api/src/site/purge/post.rs index 27f908188beca73aeb79a461849f178150459d1d..c04fc5601849850a22f5de8f354adcc12780412b 100644 --- a/crates/api/src/site/purge/post.rs +++ b/crates/api/src/site/purge/post.rs @@ -4,7 +4,7 @@ use lemmy_api_common::{ context::LemmyContext, request::purge_image_from_pictrs, site::{PurgeItemResponse, PurgePost}, - utils::{get_local_user_view_from_jwt, is_top_admin}, + utils::{is_top_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::{ source::{ @@ -26,8 +26,7 @@ impl Perform for PurgePost { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data: &Self = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Only let the top admin purge an item is_top_admin(context.pool(), local_user_view.person.id).await?; diff --git a/crates/api/src/site/registration_applications/approve.rs b/crates/api/src/site/registration_applications/approve.rs index 61a6868995079374a72742cfa11cce2143b455a7..edba7f2b85cc4bd42ab72390c6f0faa2ec3db680 100644 --- a/crates/api/src/site/registration_applications/approve.rs +++ b/crates/api/src/site/registration_applications/approve.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, site::{ApproveRegistrationApplication, RegistrationApplicationResponse}, - utils::{get_local_user_view_from_jwt, is_admin, send_application_approved_email}, + utils::{is_admin, local_user_view_from_jwt, send_application_approved_email}, }; use lemmy_db_schema::{ source::{ @@ -26,8 +26,7 @@ impl Perform for ApproveRegistrationApplication { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let app_id = data.id; diff --git a/crates/api/src/site/registration_applications/list.rs b/crates/api/src/site/registration_applications/list.rs index 7be2e2e8e5580fb71a5ece2297e24622e940356f..b5a366e1666953e15d2f123ac263a9fa5ebe5178 100644 --- a/crates/api/src/site/registration_applications/list.rs +++ b/crates/api/src/site/registration_applications/list.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, site::{ListRegistrationApplications, ListRegistrationApplicationsResponse}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::source::local_site::LocalSite; use lemmy_db_views::registration_application_view::RegistrationApplicationQuery; @@ -20,8 +20,7 @@ impl Perform for ListRegistrationApplications { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; // Make sure user is an admin diff --git a/crates/api/src/site/registration_applications/unread_count.rs b/crates/api/src/site/registration_applications/unread_count.rs index fe33d17c8f19677e80ee4cbdbff3bfb877c00156..72490e480399537414d2aa4627c1a5a9f81906cf 100644 --- a/crates/api/src/site/registration_applications/unread_count.rs +++ b/crates/api/src/site/registration_applications/unread_count.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, site::{GetUnreadRegistrationApplicationCount, GetUnreadRegistrationApplicationCountResponse}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::source::local_site::LocalSite; use lemmy_db_views::structs::RegistrationApplicationView; @@ -19,8 +19,7 @@ impl Perform for GetUnreadRegistrationApplicationCount { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; // Only let admins do this diff --git a/crates/api/src/websocket.rs b/crates/api/src/websocket.rs index 522991ae9621273c306198d97e864764bab80053..0552c1906c3501fea8e014c3e5996aa922bce5f1 100644 --- a/crates/api/src/websocket.rs +++ b/crates/api/src/websocket.rs @@ -2,7 +2,7 @@ use crate::Perform; use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, websocket::{ handlers::join_rooms::{JoinCommunityRoom, JoinModRoom, JoinPostRoom, JoinUserRoom}, structs::{ @@ -30,8 +30,7 @@ impl Perform for UserJoin { websocket_id: Option<ConnectionId>, ) -> Result<UserJoinResponse, LemmyError> { let data: &UserJoin = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; if let Some(id) = websocket_id { context.chat_server().do_send(JoinUserRoom { diff --git a/crates/api_common/src/utils.rs b/crates/api_common/src/utils.rs index 75f878fc426d3b68f102d3ce9450ae447ed21a50..522a3564793cba6b76c373788d0b71d7023f3973 100644 --- a/crates/api_common/src/utils.rs +++ b/crates/api_common/src/utils.rs @@ -1,6 +1,12 @@ -use crate::{request::purge_image_from_pictrs, sensitive::Sensitive, site::FederatedInstances}; +use crate::{ + context::LemmyContext, + request::purge_image_from_pictrs, + sensitive::Sensitive, + site::FederatedInstances, +}; use anyhow::Context; use chrono::NaiveDateTime; +use futures::try_join; use lemmy_db_schema::{ impls::person::is_banned, newtypes::{CommunityId, DbUrl, LocalUserId, PersonId, PostId}, @@ -16,7 +22,6 @@ use lemmy_db_schema::{ person_block::PersonBlock, post::{Post, PostRead, PostReadForm}, registration_application::RegistrationApplication, - secret::Secret, }, traits::{Crud, Readable}, utils::DbPool, @@ -141,18 +146,16 @@ pub async fn mark_post_as_unread( .map_err(|e| LemmyError::from_error_message(e, "couldnt_mark_post_as_read")) } -// TODO: this should simply take LemmyContext as param #[tracing::instrument(skip_all)] -pub async fn get_local_user_view_from_jwt( +pub async fn local_user_view_from_jwt( jwt: &str, - pool: &DbPool, - secret: &Secret, + context: &LemmyContext, ) -> Result<LocalUserView, LemmyError> { - let claims = Claims::decode(jwt, &secret.jwt_secret) + let claims = Claims::decode(jwt, &context.secret().jwt_secret) .map_err(|e| e.with_message("not_logged_in"))? .claims; let local_user_id = LocalUserId(claims.sub); - let local_user_view = LocalUserView::read(pool, local_user_id).await?; + let local_user_view = LocalUserView::read(context.pool(), local_user_id).await?; check_user_valid( local_user_view.person.banned, local_user_view.person.ban_expires, @@ -164,6 +167,14 @@ pub async fn get_local_user_view_from_jwt( Ok(local_user_view) } +#[tracing::instrument(skip_all)] +pub async fn local_user_view_from_jwt_opt( + jwt: Option<&Sensitive<String>>, + context: &LemmyContext, +) -> Option<LocalUserView> { + local_user_view_from_jwt(jwt?, context).await.ok() +} + /// Checks if user's token was issued before user's password reset. pub fn check_validator_time( validator_time: &NaiveDateTime, @@ -177,44 +188,6 @@ pub fn check_validator_time( } } -#[tracing::instrument(skip_all)] -pub async fn get_local_user_view_from_jwt_opt( - jwt: Option<&Sensitive<String>>, - pool: &DbPool, - secret: &Secret, -) -> Result<Option<LocalUserView>, LemmyError> { - match jwt { - Some(jwt) => Ok(Some(get_local_user_view_from_jwt(jwt, pool, secret).await?)), - None => Ok(None), - } -} - -#[tracing::instrument(skip_all)] -pub async fn get_local_user_settings_view_from_jwt_opt( - jwt: Option<&Sensitive<String>>, - pool: &DbPool, - secret: &Secret, -) -> Result<Option<LocalUserView>, LemmyError> { - match jwt { - Some(jwt) => { - let claims = Claims::decode(jwt.as_ref(), &secret.jwt_secret) - .map_err(|e| e.with_message("not_logged_in"))? - .claims; - let local_user_id = LocalUserId(claims.sub); - let local_user_view = LocalUserView::read(pool, local_user_id).await?; - check_user_valid( - local_user_view.person.banned, - local_user_view.person.ban_expires, - local_user_view.person.deleted, - )?; - - check_validator_time(&local_user_view.local_user.validator_time, &claims)?; - - Ok(Some(local_user_view)) - } - None => Ok(None), - } -} pub fn check_user_valid( banned: bool, ban_expires: Option<NaiveDateTime>, @@ -314,9 +287,11 @@ pub async fn build_federated_instances( ) -> Result<Option<FederatedInstances>, LemmyError> { if local_site.federation_enabled { // TODO I hate that this requires 3 queries - let linked = Instance::linked(pool).await?; - let allowed = Instance::allowlist(pool).await?; - let blocked = Instance::blocklist(pool).await?; + let (linked, allowed, blocked) = try_join!( + Instance::linked(pool), + Instance::allowlist(pool), + Instance::blocklist(pool) + )?; Ok(Some(FederatedInstances { linked, diff --git a/crates/api_crud/src/comment/create.rs b/crates/api_crud/src/comment/create.rs index 103c71ce64b3e3c8b08d8f3a366a199063788966..8909444d247280862569f547bb89c3a449690dc7 100644 --- a/crates/api_crud/src/comment/create.rs +++ b/crates/api_crud/src/comment/create.rs @@ -8,9 +8,9 @@ use lemmy_api_common::{ check_community_deleted_or_removed, check_post_deleted_or_removed, generate_local_apub_endpoint, - get_local_user_view_from_jwt, get_post, local_site_to_slur_regex, + local_user_view_from_jwt, EndpointType, }, websocket::UserOperationCrud, @@ -46,8 +46,7 @@ impl PerformCrud for CreateComment { websocket_id: Option<ConnectionId>, ) -> Result<CommentResponse, LemmyError> { let data: &CreateComment = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let content_slurs_removed = remove_slurs( diff --git a/crates/api_crud/src/comment/delete.rs b/crates/api_crud/src/comment/delete.rs index a96b4cc7ab69134a3a2f20015de287a37fac4ca4..cde4ab6292510c35fc30bd4d52d4f1630d3f4047 100644 --- a/crates/api_crud/src/comment/delete.rs +++ b/crates/api_crud/src/comment/delete.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentResponse, DeleteComment}, context::LemmyContext, - utils::{check_community_ban, get_local_user_view_from_jwt}, + utils::{check_community_ban, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -27,8 +27,7 @@ impl PerformCrud for DeleteComment { websocket_id: Option<ConnectionId>, ) -> Result<CommentResponse, LemmyError> { let data: &DeleteComment = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let comment_id = data.comment_id; let orig_comment = CommentView::read(context.pool(), comment_id, None).await?; diff --git a/crates/api_crud/src/comment/read.rs b/crates/api_crud/src/comment/read.rs index c0136f06cb28b8e24cbb9449bd9151eb96936bc3..bd37eb77cdffca62124c246b0d883508a6550586 100644 --- a/crates/api_crud/src/comment/read.rs +++ b/crates/api_crud/src/comment/read.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentResponse, GetComment}, context::LemmyContext, - utils::{check_private_instance, get_local_user_view_from_jwt_opt}, + utils::{check_private_instance, local_user_view_from_jwt_opt}, }; use lemmy_db_schema::source::local_site::LocalSite; use lemmy_db_views::structs::CommentView; @@ -20,9 +20,7 @@ impl PerformCrud for GetComment { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data = self; - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; check_private_instance(&local_user_view, &local_site)?; diff --git a/crates/api_crud/src/comment/remove.rs b/crates/api_crud/src/comment/remove.rs index add01aa30a67e740b29cf7d371c50f4febbeaedc..b8834df8d69ac4dbde26deec96b351acf1bc5533 100644 --- a/crates/api_crud/src/comment/remove.rs +++ b/crates/api_crud/src/comment/remove.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentResponse, RemoveComment}, context::LemmyContext, - utils::{check_community_ban, get_local_user_view_from_jwt, is_mod_or_admin}, + utils::{check_community_ban, is_mod_or_admin, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -28,8 +28,7 @@ impl PerformCrud for RemoveComment { websocket_id: Option<ConnectionId>, ) -> Result<CommentResponse, LemmyError> { let data: &RemoveComment = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let comment_id = data.comment_id; let orig_comment = CommentView::read(context.pool(), comment_id, None).await?; diff --git a/crates/api_crud/src/comment/update.rs b/crates/api_crud/src/comment/update.rs index 1d6d0869dde73d1ed1de30221ff18e21e2cc84bd..e74d5c4edd0acff3d3a4a83397c9a9616e027970 100644 --- a/crates/api_crud/src/comment/update.rs +++ b/crates/api_crud/src/comment/update.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ comment::{CommentResponse, EditComment}, context::LemmyContext, - utils::{check_community_ban, get_local_user_view_from_jwt, local_site_to_slur_regex}, + utils::{check_community_ban, local_site_to_slur_regex, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -37,8 +37,7 @@ impl PerformCrud for EditComment { websocket_id: Option<ConnectionId>, ) -> Result<CommentResponse, LemmyError> { let data: &EditComment = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let comment_id = data.comment_id; diff --git a/crates/api_crud/src/community/create.rs b/crates/api_crud/src/community/create.rs index e2e80b8492bbd3448c91b4b7647a1cf2d4ba44f7..fbc557b723a9fffdef2286562f051f5d80918dea 100644 --- a/crates/api_crud/src/community/create.rs +++ b/crates/api_crud/src/community/create.rs @@ -9,9 +9,9 @@ use lemmy_api_common::{ generate_inbox_url, generate_local_apub_endpoint, generate_shared_inbox_url, - get_local_user_view_from_jwt, is_admin, local_site_to_slur_regex, + local_user_view_from_jwt, EndpointType, }, }; @@ -52,8 +52,7 @@ impl PerformCrud for CreateCommunity { _websocket_id: Option<ConnectionId>, ) -> Result<CommunityResponse, LemmyError> { let data: &CreateCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let site_view = SiteView::read_local(context.pool()).await?; let local_site = site_view.local_site; diff --git a/crates/api_crud/src/community/delete.rs b/crates/api_crud/src/community/delete.rs index 7ce685d8ba871e4d06b91b827ce319e127267f44..9909f5cdd099d1e4f6793f37553a2f36d8b6b330 100644 --- a/crates/api_crud/src/community/delete.rs +++ b/crates/api_crud/src/community/delete.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{CommunityResponse, DeleteCommunity}, context::LemmyContext, - utils::{get_local_user_view_from_jwt, is_top_mod}, + utils::{is_top_mod, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -24,8 +24,7 @@ impl PerformCrud for DeleteCommunity { websocket_id: Option<ConnectionId>, ) -> Result<CommunityResponse, LemmyError> { let data: &DeleteCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Fetch the community mods let community_id = data.community_id; diff --git a/crates/api_crud/src/community/list.rs b/crates/api_crud/src/community/list.rs index ef4c46d81f75163668c3b2ba7db1a23b0fd11cbd..e620e16068042a5193acd3bad835af956aa160a1 100644 --- a/crates/api_crud/src/community/list.rs +++ b/crates/api_crud/src/community/list.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{ListCommunities, ListCommunitiesResponse}, context::LemmyContext, - utils::{check_private_instance, get_local_user_view_from_jwt_opt, is_admin}, + utils::{check_private_instance, is_admin, local_user_view_from_jwt_opt}, }; use lemmy_db_schema::source::local_site::LocalSite; use lemmy_db_views_actor::community_view::CommunityQuery; @@ -20,9 +20,7 @@ impl PerformCrud for ListCommunities { _websocket_id: Option<ConnectionId>, ) -> Result<ListCommunitiesResponse, LemmyError> { let data: &ListCommunities = self; - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; let is_admin = local_user_view.as_ref().map(|luv| is_admin(luv).is_ok()); diff --git a/crates/api_crud/src/community/remove.rs b/crates/api_crud/src/community/remove.rs index f791476227b758beef5d57a68a3a7e381a34d43b..9a905b87438948d88017972c1132ea26a2a82e4b 100644 --- a/crates/api_crud/src/community/remove.rs +++ b/crates/api_crud/src/community/remove.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{CommunityResponse, RemoveCommunity}, context::LemmyContext, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -26,8 +26,7 @@ impl PerformCrud for RemoveCommunity { websocket_id: Option<ConnectionId>, ) -> Result<CommunityResponse, LemmyError> { let data: &RemoveCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Verify its an admin (only an admin can remove a community) is_admin(&local_user_view)?; diff --git a/crates/api_crud/src/community/update.rs b/crates/api_crud/src/community/update.rs index 200c5f2c83898401ac8d08c2c66717a81edbabf5..9d56ce8a1c8584250d0893f82bc6645fd4e3d4ac 100644 --- a/crates/api_crud/src/community/update.rs +++ b/crates/api_crud/src/community/update.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ community::{CommunityResponse, EditCommunity}, context::LemmyContext, - utils::{get_local_user_view_from_jwt, local_site_to_slur_regex}, + utils::{local_site_to_slur_regex, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -34,8 +34,7 @@ impl PerformCrud for EditCommunity { websocket_id: Option<ConnectionId>, ) -> Result<CommunityResponse, LemmyError> { let data: &EditCommunity = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let icon = diesel_option_overwrite_to_url(&data.icon)?; diff --git a/crates/api_crud/src/custom_emoji/create.rs b/crates/api_crud/src/custom_emoji/create.rs index 42b6c5d916dd67f35c595b818b4b67f4c76b8896..33337945158c4cfd6dff9104305c9aac7a1ed75c 100644 --- a/crates/api_crud/src/custom_emoji/create.rs +++ b/crates/api_crud/src/custom_emoji/create.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, custom_emoji::{CreateCustomEmoji, CustomEmojiResponse}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::source::{ custom_emoji::{CustomEmoji, CustomEmojiInsertForm}, @@ -24,8 +24,7 @@ impl PerformCrud for CreateCustomEmoji { _websocket_id: Option<ConnectionId>, ) -> Result<CustomEmojiResponse, LemmyError> { let data: &CreateCustomEmoji = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; // Make sure user is an admin diff --git a/crates/api_crud/src/custom_emoji/delete.rs b/crates/api_crud/src/custom_emoji/delete.rs index db8c973ec741712d5be613c25ccf04cf548e4768..dcca883920ace29dac7609cdfcf6a14a39d8c678 100644 --- a/crates/api_crud/src/custom_emoji/delete.rs +++ b/crates/api_crud/src/custom_emoji/delete.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, custom_emoji::{DeleteCustomEmoji, DeleteCustomEmojiResponse}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::source::custom_emoji::CustomEmoji; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -19,8 +19,7 @@ impl PerformCrud for DeleteCustomEmoji { _websocket_id: Option<ConnectionId>, ) -> Result<DeleteCustomEmojiResponse, LemmyError> { let data: &DeleteCustomEmoji = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Make sure user is an admin is_admin(&local_user_view)?; diff --git a/crates/api_crud/src/custom_emoji/update.rs b/crates/api_crud/src/custom_emoji/update.rs index 6233cbe3c53126104519d083333ec5d868230f91..67a2bed9f45c70affd5c6258db10cb39c069270a 100644 --- a/crates/api_crud/src/custom_emoji/update.rs +++ b/crates/api_crud/src/custom_emoji/update.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, custom_emoji::{CustomEmojiResponse, EditCustomEmoji}, - utils::{get_local_user_view_from_jwt, is_admin}, + utils::{is_admin, local_user_view_from_jwt}, }; use lemmy_db_schema::source::{ custom_emoji::{CustomEmoji, CustomEmojiUpdateForm}, @@ -24,8 +24,7 @@ impl PerformCrud for EditCustomEmoji { _websocket_id: Option<ConnectionId>, ) -> Result<CustomEmojiResponse, LemmyError> { let data: &EditCustomEmoji = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; // Make sure user is an admin diff --git a/crates/api_crud/src/post/create.rs b/crates/api_crud/src/post/create.rs index 1a88518472fa9608acbe2f5eb2afea83b9326e29..e0c1a5d13aa743adcb0ca1cf89c90acdc3f77c1c 100644 --- a/crates/api_crud/src/post/create.rs +++ b/crates/api_crud/src/post/create.rs @@ -8,9 +8,9 @@ use lemmy_api_common::{ check_community_ban, check_community_deleted_or_removed, generate_local_apub_endpoint, - get_local_user_view_from_jwt, honeypot_check, local_site_to_slur_regex, + local_user_view_from_jwt, mark_post_as_read, EndpointType, }, @@ -50,8 +50,7 @@ impl PerformCrud for CreatePost { websocket_id: Option<ConnectionId>, ) -> Result<PostResponse, LemmyError> { let data: &CreatePost = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let slur_regex = local_site_to_slur_regex(&local_site); diff --git a/crates/api_crud/src/post/delete.rs b/crates/api_crud/src/post/delete.rs index fae5b0096213654078919b35fd685561a1fbf6ae..82efeaa17634b47d2eab722a22fdc821fdafb592 100644 --- a/crates/api_crud/src/post/delete.rs +++ b/crates/api_crud/src/post/delete.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, post::{DeletePost, PostResponse}, - utils::{check_community_ban, check_community_deleted_or_removed, get_local_user_view_from_jwt}, + utils::{check_community_ban, check_community_deleted_or_removed, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -23,8 +23,7 @@ impl PerformCrud for DeletePost { websocket_id: Option<ConnectionId>, ) -> Result<PostResponse, LemmyError> { let data: &DeletePost = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let post_id = data.post_id; let orig_post = Post::read(context.pool(), post_id).await?; diff --git a/crates/api_crud/src/post/read.rs b/crates/api_crud/src/post/read.rs index eadb6d11ae8d0a9a058da2d518b606923c3bd429..cda2f65b667a1019739eacba26fcc2befd41a88a 100644 --- a/crates/api_crud/src/post/read.rs +++ b/crates/api_crud/src/post/read.rs @@ -5,8 +5,8 @@ use lemmy_api_common::{ post::{GetPost, GetPostResponse}, utils::{ check_private_instance, - get_local_user_view_from_jwt_opt, is_mod_or_admin_opt, + local_user_view_from_jwt_opt, mark_post_as_read, }, websocket::handlers::online_users::GetPostUsersOnline, @@ -31,9 +31,7 @@ impl PerformCrud for GetPost { _websocket_id: Option<ConnectionId>, ) -> Result<GetPostResponse, LemmyError> { let data: &GetPost = self; - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; check_private_instance(&local_user_view, &local_site)?; diff --git a/crates/api_crud/src/post/remove.rs b/crates/api_crud/src/post/remove.rs index b53a468e95eb5306f8e5d198fa34d5bbcda4d807..9081d911ee401a04b949d2869ba345f4ef57898e 100644 --- a/crates/api_crud/src/post/remove.rs +++ b/crates/api_crud/src/post/remove.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, post::{PostResponse, RemovePost}, - utils::{check_community_ban, get_local_user_view_from_jwt, is_mod_or_admin}, + utils::{check_community_ban, is_mod_or_admin, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -26,8 +26,7 @@ impl PerformCrud for RemovePost { websocket_id: Option<ConnectionId>, ) -> Result<PostResponse, LemmyError> { let data: &RemovePost = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let post_id = data.post_id; let orig_post = Post::read(context.pool(), post_id).await?; diff --git a/crates/api_crud/src/post/update.rs b/crates/api_crud/src/post/update.rs index 8f5c442fcf853a80eb515e31a75003592c971f50..2bd101c0995e696df761b64b11545abe466f92d8 100644 --- a/crates/api_crud/src/post/update.rs +++ b/crates/api_crud/src/post/update.rs @@ -4,7 +4,7 @@ use lemmy_api_common::{ context::LemmyContext, post::{EditPost, PostResponse}, request::fetch_site_data, - utils::{check_community_ban, get_local_user_view_from_jwt, local_site_to_slur_regex}, + utils::{check_community_ban, local_site_to_slur_regex, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -36,8 +36,7 @@ impl PerformCrud for EditPost { websocket_id: Option<ConnectionId>, ) -> Result<PostResponse, LemmyError> { let data: &EditPost = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let data_url = data.url.as_ref(); diff --git a/crates/api_crud/src/private_message/create.rs b/crates/api_crud/src/private_message/create.rs index 48fa840236c2306de54d071e85cd931c0810e0ab..6fd3690089b4d0f2d9327a73373d264b89e34ecf 100644 --- a/crates/api_crud/src/private_message/create.rs +++ b/crates/api_crud/src/private_message/create.rs @@ -7,8 +7,8 @@ use lemmy_api_common::{ check_person_block, generate_local_apub_endpoint, get_interface_language, - get_local_user_view_from_jwt, local_site_to_slur_regex, + local_user_view_from_jwt, send_email_to_user, EndpointType, }, @@ -39,8 +39,7 @@ impl PerformCrud for CreatePrivateMessage { websocket_id: Option<ConnectionId>, ) -> Result<PrivateMessageResponse, LemmyError> { let data: &CreatePrivateMessage = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let content_slurs_removed = remove_slurs( diff --git a/crates/api_crud/src/private_message/delete.rs b/crates/api_crud/src/private_message/delete.rs index e6a643a7fae80ac84726afc1b64cbf5e416d4395..f494edffad95013b9517dbbf5c37e61b63f81052 100644 --- a/crates/api_crud/src/private_message/delete.rs +++ b/crates/api_crud/src/private_message/delete.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, private_message::{DeletePrivateMessage, PrivateMessageResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -23,8 +23,7 @@ impl PerformCrud for DeletePrivateMessage { websocket_id: Option<ConnectionId>, ) -> Result<PrivateMessageResponse, LemmyError> { let data: &DeletePrivateMessage = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; // Checking permissions let private_message_id = data.private_message_id; diff --git a/crates/api_crud/src/private_message/read.rs b/crates/api_crud/src/private_message/read.rs index c9a3775337810fd3134cdb35ae6c6090bc0126d5..da2bc690bfbb88787dfdac08c65ea1a693a874ee 100644 --- a/crates/api_crud/src/private_message/read.rs +++ b/crates/api_crud/src/private_message/read.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, private_message::{GetPrivateMessages, PrivateMessagesResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_views::private_message_view::PrivateMessageQuery; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -19,8 +19,7 @@ impl PerformCrud for GetPrivateMessages { _websocket_id: Option<ConnectionId>, ) -> Result<PrivateMessagesResponse, LemmyError> { let data: &GetPrivateMessages = self; - let local_user_view = - get_local_user_view_from_jwt(data.auth.as_ref(), context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), context).await?; let person_id = local_user_view.person.id; let page = data.page; diff --git a/crates/api_crud/src/private_message/update.rs b/crates/api_crud/src/private_message/update.rs index 6a6bfa21831539d3a7b5b3600d96d9edf3afd975..a485a509323bcfc3b541e97ee12cfe9639d682b6 100644 --- a/crates/api_crud/src/private_message/update.rs +++ b/crates/api_crud/src/private_message/update.rs @@ -3,7 +3,7 @@ use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, private_message::{EditPrivateMessage, PrivateMessageResponse}, - utils::{get_local_user_view_from_jwt, local_site_to_slur_regex}, + utils::{local_site_to_slur_regex, local_user_view_from_jwt}, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -31,8 +31,7 @@ impl PerformCrud for EditPrivateMessage { websocket_id: Option<ConnectionId>, ) -> Result<PrivateMessageResponse, LemmyError> { let data: &EditPrivateMessage = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; // Checking permissions diff --git a/crates/api_crud/src/site/create.rs b/crates/api_crud/src/site/create.rs index d45caaa8a4e8751ef0569ffacea6c06813ab02db..0f3e8c56a7141feaf1b411a5f02e5381333c2e20 100644 --- a/crates/api_crud/src/site/create.rs +++ b/crates/api_crud/src/site/create.rs @@ -6,10 +6,10 @@ use lemmy_api_common::{ site::{CreateSite, SiteResponse}, utils::{ generate_site_inbox_url, - get_local_user_view_from_jwt, is_admin, local_site_rate_limit_to_rate_limit_config, local_site_to_slur_regex, + local_user_view_from_jwt, site_description_length_check, }, }; @@ -52,8 +52,7 @@ impl PerformCrud for CreateSite { return Err(LemmyError::from_message("site_already_exists")); }; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let sidebar = diesel_option_overwrite(&data.sidebar); let description = diesel_option_overwrite(&data.description); diff --git a/crates/api_crud/src/site/read.rs b/crates/api_crud/src/site/read.rs index fc74ecaebc597f1966499adce44880c99b440649..1e40cabdd548d7b3b0effc31632f24669023b932 100644 --- a/crates/api_crud/src/site/read.rs +++ b/crates/api_crud/src/site/read.rs @@ -2,16 +2,20 @@ use crate::PerformCrud; use actix_web::web::Data; use lemmy_api_common::{ context::LemmyContext, + sensitive::Sensitive, site::{GetSite, GetSiteResponse, MyUserInfo}, - utils::get_local_user_settings_view_from_jwt_opt, + utils::{check_user_valid, check_validator_time}, websocket::handlers::online_users::GetUsersOnline, }; -use lemmy_db_schema::source::{ - actor_language::{LocalUserLanguage, SiteLanguage}, - language::Language, - tagline::Tagline, +use lemmy_db_schema::{ + newtypes::LocalUserId, + source::{ + actor_language::{LocalUserLanguage, SiteLanguage}, + language::Language, + tagline::Tagline, + }, }; -use lemmy_db_views::structs::{CustomEmojiView, SiteView}; +use lemmy_db_views::structs::{CustomEmojiView, LocalUserView, SiteView}; use lemmy_db_views_actor::structs::{ CommunityBlockView, CommunityFollowerView, @@ -19,7 +23,7 @@ use lemmy_db_views_actor::structs::{ PersonBlockView, PersonView, }; -use lemmy_utils::{error::LemmyError, version, ConnectionId}; +use lemmy_utils::{claims::Claims, error::LemmyError, version, ConnectionId}; #[async_trait::async_trait(?Send)] impl PerformCrud for GetSite { @@ -40,12 +44,8 @@ impl PerformCrud for GetSite { let online = context.chat_server().send(GetUsersOnline).await?; // Build the local user - let my_user = if let Some(local_user_view) = get_local_user_settings_view_from_jwt_opt( - data.auth.as_ref(), - context.pool(), - context.secret(), - ) - .await? + let my_user = if let Some(local_user_view) = + local_user_settings_view_from_jwt_opt(data.auth.as_ref(), context).await { let person_id = local_user_view.person.id; let local_user_id = local_user_view.local_user.id; @@ -102,3 +102,32 @@ impl PerformCrud for GetSite { }) } } + +#[tracing::instrument(skip_all)] +async fn local_user_settings_view_from_jwt_opt( + jwt: Option<&Sensitive<String>>, + context: &LemmyContext, +) -> Option<LocalUserView> { + match jwt { + Some(jwt) => { + let claims = Claims::decode(jwt.as_ref(), &context.secret().jwt_secret) + .ok()? + .claims; + let local_user_id = LocalUserId(claims.sub); + let local_user_view = LocalUserView::read(context.pool(), local_user_id) + .await + .ok()?; + check_user_valid( + local_user_view.person.banned, + local_user_view.person.ban_expires, + local_user_view.person.deleted, + ) + .ok()?; + + check_validator_time(&local_user_view.local_user.validator_time, &claims).ok()?; + + Some(local_user_view) + } + None => None, + } +} diff --git a/crates/api_crud/src/site/update.rs b/crates/api_crud/src/site/update.rs index 03ff590132212fcdab812b1f8ed6728b0b0fbee2..693be6904627ec5a796e9d84656b08714d727f88 100644 --- a/crates/api_crud/src/site/update.rs +++ b/crates/api_crud/src/site/update.rs @@ -4,10 +4,10 @@ use lemmy_api_common::{ context::LemmyContext, site::{EditSite, SiteResponse}, utils::{ - get_local_user_view_from_jwt, is_admin, local_site_rate_limit_to_rate_limit_config, local_site_to_slur_regex, + local_user_view_from_jwt, site_description_length_check, }, websocket::UserOperationCrud, @@ -46,8 +46,7 @@ impl PerformCrud for EditSite { websocket_id: Option<ConnectionId>, ) -> Result<SiteResponse, LemmyError> { let data: &EditSite = self; - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; let site_view = SiteView::read_local(context.pool()).await?; let local_site = site_view.local_site; let site = site_view.site; diff --git a/crates/api_crud/src/user/delete.rs b/crates/api_crud/src/user/delete.rs index b49695eaca5c02265a818225417b9617a2d9df78..731f90721c1fa98b3c5b0735142ae825012b4753 100644 --- a/crates/api_crud/src/user/delete.rs +++ b/crates/api_crud/src/user/delete.rs @@ -4,7 +4,7 @@ use bcrypt::verify; use lemmy_api_common::{ context::LemmyContext, person::{DeleteAccount, DeleteAccountResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_utils::{error::LemmyError, ConnectionId}; @@ -19,8 +19,7 @@ impl PerformCrud for DeleteAccount { _websocket_id: Option<ConnectionId>, ) -> Result<Self::Response, LemmyError> { let data = self; - let local_user_view = - get_local_user_view_from_jwt(data.auth.as_ref(), context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), context).await?; // Verify the password let valid: bool = verify( diff --git a/crates/apub/src/activities/block/mod.rs b/crates/apub/src/activities/block/mod.rs index a1315bb78facfa3f6acece87752943854f759d49..a791ea40e74d53a1bb1967c444969a9b253ac380 100644 --- a/crates/apub/src/activities/block/mod.rs +++ b/crates/apub/src/activities/block/mod.rs @@ -16,7 +16,7 @@ use lemmy_api_common::{ community::{BanFromCommunity, BanFromCommunityResponse}, context::LemmyContext, person::{BanPerson, BanPersonResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{ source::{community::Community, person::Person, site::Site}, @@ -138,8 +138,7 @@ impl SendActivity for BanPerson { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let person = Person::read(context.pool(), request.person_id).await?; let site = SiteOrCommunity::Site(SiteView::read_local(context.pool()).await?.site.into()); let expires = request.expires.map(naive_from_unix); @@ -182,8 +181,7 @@ impl SendActivity for BanFromCommunity { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community: ApubCommunity = Community::read(context.pool(), request.community_id) .await? .into(); diff --git a/crates/apub/src/activities/community/collection_add.rs b/crates/apub/src/activities/community/collection_add.rs index dfab0baf6637c18f4325f29b4cb00d2969af2454..afe8387f2c6e68e5e9e4bb7eba572afed69df7b1 100644 --- a/crates/apub/src/activities/community/collection_add.rs +++ b/crates/apub/src/activities/community/collection_add.rs @@ -29,7 +29,7 @@ use lemmy_api_common::{ community::{AddModToCommunity, AddModToCommunityResponse}, context::LemmyContext, post::{FeaturePost, PostResponse}, - utils::{generate_featured_url, generate_moderators_url, get_local_user_view_from_jwt}, + utils::{generate_featured_url, generate_moderators_url, local_user_view_from_jwt}, }; use lemmy_db_schema::{ impls::community::CollectionType, @@ -177,8 +177,7 @@ impl SendActivity for AddModToCommunity { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community: ApubCommunity = Community::read(context.pool(), request.community_id) .await? .into(); @@ -214,8 +213,7 @@ impl SendActivity for FeaturePost { response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; // Deprecated, for backwards compatibility with 0.17 CreateOrUpdatePage::send( &response.post_view.post, diff --git a/crates/apub/src/activities/community/lock_page.rs b/crates/apub/src/activities/community/lock_page.rs index 498c3a324983b0028396a89b65ecd5da82a123ea..26326efcbd9a810d8c3c4d7e091dee414b85fde6 100644 --- a/crates/apub/src/activities/community/lock_page.rs +++ b/crates/apub/src/activities/community/lock_page.rs @@ -27,7 +27,7 @@ use activitypub_federation::{ use lemmy_api_common::{ context::LemmyContext, post::{LockPost, PostResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{ source::{ @@ -115,8 +115,7 @@ impl SendActivity for LockPost { response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; // For backwards compat with 0.17 CreateOrUpdatePage::send( &response.post_view.post, diff --git a/crates/apub/src/activities/community/report.rs b/crates/apub/src/activities/community/report.rs index 9830be13fb9f3be4751549512d8bffbb6d2c621b..aaa1e5108140bbe1a3df89d1a678bc9e14239241 100644 --- a/crates/apub/src/activities/community/report.rs +++ b/crates/apub/src/activities/community/report.rs @@ -16,7 +16,7 @@ use lemmy_api_common::{ comment::{CommentReportResponse, CreateCommentReport}, context::LemmyContext, post::{CreatePostReport, PostReportResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -39,8 +39,7 @@ impl SendActivity for CreatePostReport { response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; Report::send( ObjectId::from(response.post_report_view.post.ap_id.clone()), &local_user_view.person.into(), @@ -61,8 +60,7 @@ impl SendActivity for CreateCommentReport { response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; Report::send( ObjectId::from(response.comment_report_view.comment.ap_id.clone()), &local_user_view.person.into(), diff --git a/crates/apub/src/activities/community/update.rs b/crates/apub/src/activities/community/update.rs index 85581e2a168ba092aa543d199892168a93467f24..5cf1881a3b7c1869a07b3f86e26714a1f5cc0e28 100644 --- a/crates/apub/src/activities/community/update.rs +++ b/crates/apub/src/activities/community/update.rs @@ -20,7 +20,7 @@ use activitypub_federation::{ use lemmy_api_common::{ community::{CommunityResponse, EditCommunity, HideCommunity}, context::LemmyContext, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, websocket::UserOperationCrud, }; use lemmy_db_schema::{source::community::Community, traits::Crud}; @@ -36,8 +36,7 @@ impl SendActivity for EditCommunity { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community = Community::read(context.pool(), request.community_id).await?; UpdateCommunity::send(community.into(), &local_user_view.person.into(), context).await } @@ -123,8 +122,7 @@ impl SendActivity for HideCommunity { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community = Community::read(context.pool(), request.community_id).await?; UpdateCommunity::send(community.into(), &local_user_view.person.into(), context).await } diff --git a/crates/apub/src/activities/deletion/delete_user.rs b/crates/apub/src/activities/deletion/delete_user.rs index e5c1021ccd547a10fc2b0b3b26ab4d92d726ca99..11be132e85af95a3a1261c8767038207abec4da4 100644 --- a/crates/apub/src/activities/deletion/delete_user.rs +++ b/crates/apub/src/activities/deletion/delete_user.rs @@ -14,7 +14,7 @@ use activitypub_federation::{ use lemmy_api_common::{ context::LemmyContext, person::{DeleteAccount, DeleteAccountResponse}, - utils::{delete_user_account, get_local_user_view_from_jwt}, + utils::{delete_user_account, local_user_view_from_jwt}, }; use lemmy_utils::error::LemmyError; use url::Url; @@ -28,8 +28,7 @@ impl SendActivity for DeleteAccount { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let actor: ApubPerson = local_user_view.person.into(); delete_user_account( actor.id, diff --git a/crates/apub/src/activities/deletion/mod.rs b/crates/apub/src/activities/deletion/mod.rs index 690b1d3a36422c22aeb9468722de68f6a44cb66e..ea6f4a67d5457ff14d689549eda27130b70dcf97 100644 --- a/crates/apub/src/activities/deletion/mod.rs +++ b/crates/apub/src/activities/deletion/mod.rs @@ -34,7 +34,7 @@ use lemmy_api_common::{ context::LemmyContext, post::{DeletePost, PostResponse, RemovePost}, private_message::{DeletePrivateMessage, PrivateMessageResponse}, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, websocket::UserOperationCrud, }; use lemmy_db_schema::{ @@ -64,8 +64,7 @@ impl SendActivity for DeletePost { response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community = Community::read(context.pool(), response.post_view.community.id).await?; let deletable = DeletableObjects::Post(response.post_view.post.clone().into()); send_apub_delete_in_community( @@ -89,8 +88,7 @@ impl SendActivity for RemovePost { response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community = Community::read(context.pool(), response.post_view.community.id).await?; let deletable = DeletableObjects::Post(response.post_view.post.clone().into()); send_apub_delete_in_community( @@ -132,8 +130,7 @@ impl SendActivity for RemoveComment { response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let comment = Comment::read(context.pool(), request.comment_id).await?; let community = Community::read(context.pool(), response.comment_view.community.id).await?; let deletable = DeletableObjects::Comment(comment.into()); @@ -158,8 +155,7 @@ impl SendActivity for DeletePrivateMessage { response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; send_apub_delete_private_message( &local_user_view.person.into(), response.private_message_view.private_message.clone(), @@ -179,8 +175,7 @@ impl SendActivity for DeleteCommunity { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community = Community::read(context.pool(), request.community_id).await?; let deletable = DeletableObjects::Community(community.clone().into()); send_apub_delete_in_community( @@ -204,8 +199,7 @@ impl SendActivity for RemoveCommunity { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community = Community::read(context.pool(), request.community_id).await?; let deletable = DeletableObjects::Community(community.clone().into()); send_apub_delete_in_community( diff --git a/crates/apub/src/activities/following/follow.rs b/crates/apub/src/activities/following/follow.rs index 4e2acd518f530c02f9a5679d101674801b07e9a8..8a785da05ab8660601a1696d42da7297e7c7d1d9 100644 --- a/crates/apub/src/activities/following/follow.rs +++ b/crates/apub/src/activities/following/follow.rs @@ -24,7 +24,7 @@ use activitypub_federation::{ use lemmy_api_common::{ community::{BlockCommunity, BlockCommunityResponse}, context::LemmyContext, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{ source::{ @@ -138,8 +138,7 @@ impl SendActivity for BlockCommunity { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let community = Community::read(context.pool(), request.community_id).await?; UndoFollow::send(&local_user_view.person.into(), &community.into(), context).await } diff --git a/crates/apub/src/activities/following/mod.rs b/crates/apub/src/activities/following/mod.rs index 5b9d98b42437d07c37025940e4e5f951bc7755d5..a4c2fd673d5d1ef92a8e92163196ca63ce178c23 100644 --- a/crates/apub/src/activities/following/mod.rs +++ b/crates/apub/src/activities/following/mod.rs @@ -7,7 +7,7 @@ use activitypub_federation::config::Data; use lemmy_api_common::{ community::{CommunityResponse, FollowCommunity}, context::LemmyContext, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, }; use lemmy_db_schema::{source::community::Community, traits::Crud}; use lemmy_utils::error::LemmyError; @@ -25,8 +25,7 @@ impl SendActivity for FollowCommunity { _response: &Self::Response, context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&request.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&request.auth, context).await?; let person = local_user_view.person.clone().into(); let community: ApubCommunity = Community::read(context.pool(), request.community_id) .await? diff --git a/crates/apub/src/activities/voting/mod.rs b/crates/apub/src/activities/voting/mod.rs index 89832148ff3f0e45b961cb7161e50f88433199e9..60015b137c368ea0b49de82d8234286fa4333e2b 100644 --- a/crates/apub/src/activities/voting/mod.rs +++ b/crates/apub/src/activities/voting/mod.rs @@ -15,7 +15,7 @@ use lemmy_api_common::{ context::LemmyContext, post::{CreatePostLike, PostResponse}, sensitive::Sensitive, - utils::get_local_user_view_from_jwt, + utils::local_user_view_from_jwt, websocket::UserOperation, }; use lemmy_db_schema::{ @@ -85,7 +85,7 @@ async fn send_activity( context: &Data<LemmyContext>, ) -> Result<(), LemmyError> { let community = Community::read(context.pool(), community_id).await?.into(); - let local_user_view = get_local_user_view_from_jwt(jwt, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(jwt, context).await?; let actor = Person::read(context.pool(), local_user_view.person.id) .await? .into(); diff --git a/crates/apub/src/api/list_comments.rs b/crates/apub/src/api/list_comments.rs index bc0010ab5286aa2380f29395a2b852ad8ba26ba5..f697a735833e7d304fba0fde888bfb055c56ad42 100644 --- a/crates/apub/src/api/list_comments.rs +++ b/crates/apub/src/api/list_comments.rs @@ -7,7 +7,7 @@ use activitypub_federation::config::Data; use lemmy_api_common::{ comment::{GetComments, GetCommentsResponse}, context::LemmyContext, - utils::{check_private_instance, get_local_user_view_from_jwt_opt}, + utils::{check_private_instance, local_user_view_from_jwt_opt}, }; use lemmy_db_schema::{ source::{comment::Comment, community::Community, local_site::LocalSite}, @@ -27,9 +27,7 @@ impl PerformApub for GetComments { _websocket_id: Option<ConnectionId>, ) -> Result<GetCommentsResponse, LemmyError> { let data: &GetComments = self; - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; check_private_instance(&local_user_view, &local_site)?; diff --git a/crates/apub/src/api/list_posts.rs b/crates/apub/src/api/list_posts.rs index 7859f75472de943f6bf826449319261dfe39b4c1..58c31b2e652a8a50a8ffbce95646751e7cd7b3f1 100644 --- a/crates/apub/src/api/list_posts.rs +++ b/crates/apub/src/api/list_posts.rs @@ -7,7 +7,7 @@ use activitypub_federation::config::Data; use lemmy_api_common::{ context::LemmyContext, post::{GetPosts, GetPostsResponse}, - utils::{check_private_instance, get_local_user_view_from_jwt_opt, is_mod_or_admin_opt}, + utils::{check_private_instance, is_mod_or_admin_opt, local_user_view_from_jwt_opt}, }; use lemmy_db_schema::source::{community::Community, local_site::LocalSite}; use lemmy_db_views::post_view::PostQuery; @@ -24,9 +24,7 @@ impl PerformApub for GetPosts { _websocket_id: Option<ConnectionId>, ) -> Result<GetPostsResponse, LemmyError> { let data: &GetPosts = self; - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; check_private_instance(&local_user_view, &local_site)?; diff --git a/crates/apub/src/api/read_community.rs b/crates/apub/src/api/read_community.rs index e01c7bdaf06cf59bfde1baa7c915544c43767490..53469cf84b6daef322c1b18a1448d55589f68c28 100644 --- a/crates/apub/src/api/read_community.rs +++ b/crates/apub/src/api/read_community.rs @@ -7,7 +7,7 @@ use activitypub_federation::config::Data; use lemmy_api_common::{ community::{GetCommunity, GetCommunityResponse}, context::LemmyContext, - utils::{check_private_instance, get_local_user_view_from_jwt_opt, is_mod_or_admin_opt}, + utils::{check_private_instance, is_mod_or_admin_opt, local_user_view_from_jwt_opt}, websocket::handlers::online_users::GetCommunityUsersOnline, }; use lemmy_db_schema::source::{ @@ -30,9 +30,7 @@ impl PerformApub for GetCommunity { _websocket_id: Option<ConnectionId>, ) -> Result<GetCommunityResponse, LemmyError> { let data: &GetCommunity = self; - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; if data.name.is_none() && data.id.is_none() { diff --git a/crates/apub/src/api/read_person.rs b/crates/apub/src/api/read_person.rs index 95d9ecc08b4b1fb9e4fb010db2bf35534adb90fb..9d453acee5d91aa79371e231717f880396462378 100644 --- a/crates/apub/src/api/read_person.rs +++ b/crates/apub/src/api/read_person.rs @@ -3,7 +3,7 @@ use activitypub_federation::config::Data; use lemmy_api_common::{ context::LemmyContext, person::{GetPersonDetails, GetPersonDetailsResponse}, - utils::{check_private_instance, get_local_user_view_from_jwt_opt, is_admin}, + utils::{check_private_instance, is_admin, local_user_view_from_jwt_opt}, }; use lemmy_db_schema::{ source::{local_site::LocalSite, person::Person}, @@ -30,9 +30,7 @@ impl PerformApub for GetPersonDetails { return Err(LemmyError::from_message("no_id_given")); } - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; let is_admin = local_user_view.as_ref().map(|luv| is_admin(luv).is_ok()); diff --git a/crates/apub/src/api/resolve_object.rs b/crates/apub/src/api/resolve_object.rs index f0cb15e36e6929a21c7c87161e4bd8317f53733f..193494ddbae2422fa0377eb487a4b2a7ddf0087c 100644 --- a/crates/apub/src/api/resolve_object.rs +++ b/crates/apub/src/api/resolve_object.rs @@ -7,7 +7,7 @@ use diesel::NotFound; use lemmy_api_common::{ context::LemmyContext, site::{ResolveObject, ResolveObjectResponse}, - utils::{check_private_instance, get_local_user_view_from_jwt}, + utils::{check_private_instance, local_user_view_from_jwt}, }; use lemmy_db_schema::{newtypes::PersonId, source::local_site::LocalSite, utils::DbPool}; use lemmy_db_views::structs::{CommentView, PostView}; @@ -24,8 +24,7 @@ impl PerformApub for ResolveObject { context: &Data<LemmyContext>, _websocket_id: Option<ConnectionId>, ) -> Result<ResolveObjectResponse, LemmyError> { - let local_user_view = - get_local_user_view_from_jwt(&self.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&self.auth, context).await?; let local_site = LocalSite::read(context.pool()).await?; let person_id = local_user_view.person.id; check_private_instance(&Some(local_user_view), &local_site)?; diff --git a/crates/apub/src/api/search.rs b/crates/apub/src/api/search.rs index 212e037fd7555c30bca8e382514f431525f9bec3..6cbd6b1e5f5b8b489ee34466fa85cf8526820706 100644 --- a/crates/apub/src/api/search.rs +++ b/crates/apub/src/api/search.rs @@ -7,7 +7,7 @@ use activitypub_federation::config::Data; use lemmy_api_common::{ context::LemmyContext, site::{Search, SearchResponse}, - utils::{check_private_instance, get_local_user_view_from_jwt_opt, is_admin}, + utils::{check_private_instance, is_admin, local_user_view_from_jwt_opt}, }; use lemmy_db_schema::{ source::{community::Community, local_site::LocalSite}, @@ -30,9 +30,7 @@ impl PerformApub for Search { ) -> Result<SearchResponse, LemmyError> { let data: &Search = self; - let local_user_view = - get_local_user_view_from_jwt_opt(data.auth.as_ref(), context.pool(), context.secret()) - .await?; + let local_user_view = local_user_view_from_jwt_opt(data.auth.as_ref(), context).await; let local_site = LocalSite::read(context.pool()).await?; check_private_instance(&local_user_view, &local_site)?; diff --git a/crates/routes/src/images.rs b/crates/routes/src/images.rs index cd6555d7d1e40acd6d3500f0eda594e14c16d12f..9b7801f2a18894d1d29161f154d03659f3d0fcb7 100644 --- a/crates/routes/src/images.rs +++ b/crates/routes/src/images.rs @@ -11,7 +11,7 @@ use actix_web::{ HttpResponse, }; use futures::stream::{Stream, StreamExt}; -use lemmy_api_common::{context::LemmyContext, utils::get_local_user_view_from_jwt}; +use lemmy_api_common::{context::LemmyContext, utils::local_user_view_from_jwt}; use lemmy_db_schema::source::local_site::LocalSite; use lemmy_utils::{claims::Claims, rate_limit::RateLimitCell, REQWEST_TIMEOUT}; use reqwest::Body; @@ -136,7 +136,7 @@ async fn full_res( let jwt = req .cookie("jwt") .expect("No auth header for picture access"); - if get_local_user_view_from_jwt(jwt.value(), context.pool(), context.secret()) + if local_user_view_from_jwt(jwt.value(), &context) .await .is_err() {