From 70628d89c0b0e0fb4694b57a3657d49eb26abb54 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Tue, 13 Aug 2019 19:52:43 -0700 Subject: Squashed commit of the following: commit 309d3ec01fb2372e67920cdd7b028c0b80c4ebe6 Author: Dessalines Date: Tue Aug 13 19:49:38 2019 -0700 Adding some docs commit da18d304377c96e31a511b11b1a4cf1d0b0f0ab7 Author: Dessalines Date: Tue Aug 13 19:28:46 2019 -0700 Adding save user settings commit 0cd84440f4b35dbc7d7fa825291c783114b327c9 Merge: 3246d5d c148eef Author: Dessalines Date: Tue Aug 13 17:26:25 2019 -0700 Merge branch 'dev' into nsfw commit 3246d5d670d0d5e10310a90c6fd81a7dc9e97e54 Author: Dessalines Date: Sun Aug 11 20:55:09 2019 -0700 nsfw mostly done, except for settings page. --- server/src/api/user.rs | 156 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 113 insertions(+), 43 deletions(-) (limited to 'server/src/api/user.rs') diff --git a/server/src/api/user.rs b/server/src/api/user.rs index 5d5f1a6b..2a6c214a 100644 --- a/server/src/api/user.rs +++ b/server/src/api/user.rs @@ -15,6 +15,13 @@ pub struct Register { password: String, password_verify: String, admin: bool, + show_nsfw: bool, +} + +#[derive(Serialize, Deserialize)] +pub struct SaveUserSettings { + show_nsfw: bool, + auth: String, } #[derive(Serialize, Deserialize)] @@ -151,6 +158,7 @@ impl Perform for Oper { updated: None, admin: data.admin, banned: false, + show_nsfw: data.show_nsfw, }; // Create the user @@ -170,6 +178,7 @@ impl Perform for Oper { title: "The Default Community".to_string(), description: Some("The Default Community".to_string()), category_id: 1, + nsfw: false, creator_id: inserted_user.id, removed: None, deleted: None, @@ -218,24 +227,77 @@ impl Perform for Oper { } } +impl Perform for Oper { + fn perform(&self) -> Result { + let data: &SaveUserSettings = &self.data; + let conn = establish_connection(); + + let claims = match Claims::decode(&data.auth) { + Ok(claims) => claims.claims, + Err(_e) => { + return Err(APIError::err(&self.op, "not_logged_in"))? + } + }; + + let user_id = claims.id; + + let read_user = User_::read(&conn, user_id)?; + + let user_form = UserForm { + name: read_user.name, + fedi_name: read_user.fedi_name, + email: read_user.email, + password_encrypted: read_user.password_encrypted, + preferred_username: read_user.preferred_username, + updated: Some(naive_now()), + admin: read_user.admin, + banned: read_user.banned, + show_nsfw: data.show_nsfw, + }; + + let updated_user = match User_::update(&conn, user_id, &user_form) { + Ok(user) => user, + Err(_e) => { + return Err(APIError::err(&self.op, "couldnt_update_user"))? + } + }; + + // Return the jwt + Ok( + LoginResponse { + op: self.op.to_string(), + jwt: updated_user.jwt() + } + ) + } +} impl Perform for Oper { fn perform(&self) -> Result { let data: &GetUserDetails = &self.data; let conn = establish_connection(); - let user_id: Option = match &data.auth { + let user_claims: Option = match &data.auth { Some(auth) => { match Claims::decode(&auth) { Ok(claims) => { - let user_id = claims.claims.id; - Some(user_id) + Some(claims.claims) } Err(_e) => None } } None => None }; + + let user_id = match &user_claims { + Some(claims) => Some(claims.id), + None => None + }; + + let show_nsfw = match &user_claims { + Some(claims) => claims.show_nsfw, + None => false + }; //TODO add save let sort = SortType::from_str(&data.sort)?; @@ -249,50 +311,56 @@ impl Perform for Oper { // If its saved only, you don't care what creator it was let posts = if data.saved_only { - PostView::list(&conn, - PostListingType::All, - &sort, - data.community_id, - None, - None, - Some(user_details_id), - data.saved_only, - false, - data.page, - data.limit)? + PostView::list( + &conn, + PostListingType::All, + &sort, + data.community_id, + None, + None, + Some(user_details_id), + show_nsfw, + data.saved_only, + false, + data.page, + data.limit)? } else { - PostView::list(&conn, - PostListingType::All, - &sort, - data.community_id, - Some(user_details_id), - None, - user_id, - data.saved_only, - false, - data.page, - data.limit)? + PostView::list( + &conn, + PostListingType::All, + &sort, + data.community_id, + Some(user_details_id), + None, + user_id, + show_nsfw, + data.saved_only, + false, + data.page, + data.limit)? }; let comments = if data.saved_only { - CommentView::list(&conn, - &sort, - None, - None, - None, - Some(user_details_id), - data.saved_only, - data.page, - data.limit)? + CommentView::list( + &conn, + &sort, + None, + None, + None, + Some(user_details_id), + data.saved_only, + data.page, + data.limit)? } else { - CommentView::list(&conn, - &sort, - None, - Some(user_details_id), - None, - user_id, - data.saved_only, - data.page, - data.limit)? + CommentView::list( + &conn, + &sort, + None, + Some(user_details_id), + None, + user_id, + data.saved_only, + data.page, + data.limit)? }; let follows = CommunityFollowerView::for_user(&conn, user_details_id)?; @@ -343,6 +411,7 @@ impl Perform for Oper { updated: Some(naive_now()), admin: data.added, banned: read_user.banned, + show_nsfw: read_user.show_nsfw, }; match User_::update(&conn, data.user_id, &user_form) { @@ -402,6 +471,7 @@ impl Perform for Oper { updated: Some(naive_now()), admin: read_user.admin, banned: data.ban, + show_nsfw: read_user.show_nsfw, }; match User_::update(&conn, data.user_id, &user_form) { -- cgit v1.2.3