diff options
Diffstat (limited to 'server/src/api')
-rw-r--r-- | server/src/api/community.rs | 30 | ||||
-rw-r--r-- | server/src/api/post.rs | 44 | ||||
-rw-r--r-- | server/src/api/site.rs | 6 | ||||
-rw-r--r-- | server/src/api/user.rs | 106 |
4 files changed, 123 insertions, 63 deletions
diff --git a/server/src/api/community.rs b/server/src/api/community.rs index ca73de49..74058488 100644 --- a/server/src/api/community.rs +++ b/server/src/api/community.rs @@ -22,7 +22,8 @@ pub struct CreateCommunity { name: String, title: String, description: Option<String>, - category_id: i32 , + category_id: i32, + nsfw: bool, auth: String } @@ -86,6 +87,7 @@ pub struct EditCommunity { category_id: i32, removed: Option<bool>, deleted: Option<bool>, + nsfw: bool, reason: Option<String>, expires: Option<i64>, auth: String @@ -194,6 +196,7 @@ impl Perform<CommunityResponse> for Oper<CreateCommunity> { creator_id: user_id, removed: None, deleted: None, + nsfw: data.nsfw, updated: None, }; @@ -291,6 +294,7 @@ impl Perform<CommunityResponse> for Oper<EditCommunity> { creator_id: user_id, removed: data.removed.to_owned(), deleted: data.deleted.to_owned(), + nsfw: data.nsfw, updated: Some(naive_now()) }; @@ -333,22 +337,38 @@ impl Perform<ListCommunitiesResponse> for Oper<ListCommunities> { let data: &ListCommunities = &self.data; let conn = establish_connection(); - let user_id: Option<i32> = match &data.auth { + let user_claims: Option<Claims> = 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 + }; let sort = SortType::from_str(&data.sort)?; - let communities: Vec<CommunityView> = CommunityView::list(&conn, &sort, user_id, None, data.page, data.limit)?; + let communities: Vec<CommunityView> = CommunityView::list( + &conn, + &sort, + user_id, + show_nsfw, + None, + data.page, + data.limit)?; // Return the jwt Ok( diff --git a/server/src/api/post.rs b/server/src/api/post.rs index df6ea852..35363a17 100644 --- a/server/src/api/post.rs +++ b/server/src/api/post.rs @@ -6,6 +6,7 @@ pub struct CreatePost { name: String, url: Option<String>, body: Option<String>, + nsfw: bool, community_id: i32, auth: String } @@ -73,6 +74,7 @@ pub struct EditPost { body: Option<String>, removed: Option<bool>, deleted: Option<bool>, + nsfw: bool, locked: Option<bool>, reason: Option<String>, auth: String @@ -123,6 +125,7 @@ impl Perform<PostResponse> for Oper<CreatePost> { creator_id: user_id, removed: None, deleted: None, + nsfw: data.nsfw, locked: None, updated: None }; @@ -219,40 +222,50 @@ impl Perform<GetPostsResponse> for Oper<GetPosts> { let data: &GetPosts = &self.data; let conn = establish_connection(); - let user_id: Option<i32> = match &data.auth { + let user_claims: Option<Claims> = 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 + }; let type_ = PostListingType::from_str(&data.type_)?; let sort = SortType::from_str(&data.sort)?; - let posts = match PostView::list(&conn, - type_, - &sort, - data.community_id, - None, - None, - user_id, - false, - false, - data.page, - data.limit) { + let posts = match PostView::list( + &conn, + type_, + &sort, + data.community_id, + None, + None, + user_id, + show_nsfw, + false, + false, + data.page, + data.limit) { Ok(posts) => posts, Err(_e) => { return Err(APIError::err(&self.op, "couldnt_get_posts"))? } }; - // Return the jwt Ok( GetPostsResponse { op: self.op.to_string(), @@ -381,6 +394,7 @@ impl Perform<PostResponse> for Oper<EditPost> { community_id: data.community_id, removed: data.removed.to_owned(), deleted: data.deleted.to_owned(), + nsfw: data.nsfw, locked: data.locked.to_owned(), updated: Some(naive_now()) }; diff --git a/server/src/api/site.rs b/server/src/api/site.rs index 09af742f..8f094aac 100644 --- a/server/src/api/site.rs +++ b/server/src/api/site.rs @@ -277,6 +277,8 @@ impl Perform<SearchResponse> for Oper<Search> { let mut communities = Vec::new(); let mut users = Vec::new(); + // TODO no clean / non-nsfw searching rn + match type_ { SearchType::Posts => { posts = PostView::list( @@ -287,6 +289,7 @@ impl Perform<SearchResponse> for Oper<Search> { None, Some(data.q.to_owned()), None, + true, false, false, data.page, @@ -309,6 +312,7 @@ impl Perform<SearchResponse> for Oper<Search> { &conn, &sort, None, + true, Some(data.q.to_owned()), data.page, data.limit)?; @@ -330,6 +334,7 @@ impl Perform<SearchResponse> for Oper<Search> { None, Some(data.q.to_owned()), None, + true, false, false, data.page, @@ -348,6 +353,7 @@ impl Perform<SearchResponse> for Oper<Search> { &conn, &sort, None, + true, Some(data.q.to_owned()), data.page, data.limit)?; diff --git a/server/src/api/user.rs b/server/src/api/user.rs index 5d5f1a6b..b8f7408b 100644 --- a/server/src/api/user.rs +++ b/server/src/api/user.rs @@ -15,6 +15,7 @@ pub struct Register { password: String, password_verify: String, admin: bool, + show_nsfw: bool, } #[derive(Serialize, Deserialize)] @@ -151,6 +152,7 @@ impl Perform<LoginResponse> for Oper<Register> { updated: None, admin: data.admin, banned: false, + show_nsfw: data.show_nsfw, }; // Create the user @@ -170,6 +172,7 @@ impl Perform<LoginResponse> for Oper<Register> { 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, @@ -224,18 +227,27 @@ impl Perform<GetUserDetailsResponse> for Oper<GetUserDetails> { let data: &GetUserDetails = &self.data; let conn = establish_connection(); - let user_id: Option<i32> = match &data.auth { + let user_claims: Option<Claims> = 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 +261,56 @@ impl Perform<GetUserDetailsResponse> for Oper<GetUserDetails> { // 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 +361,7 @@ impl Perform<AddAdminResponse> for Oper<AddAdmin> { 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 +421,7 @@ impl Perform<BanUserResponse> for Oper<BanUser> { 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) { |