Handle unauthenticated users for likes/comments of private posts

closes #7583
This commit is contained in:
Benjamin Neff 2017-08-27 03:40:31 +02:00 committed by Steffen van Bergerem
parent 350e24863f
commit e31c5ff4dc
No known key found for this signature in database
GPG key ID: 315C9787D548DC6B
5 changed files with 26 additions and 1 deletions

View file

@ -17,6 +17,7 @@
* Fix mixed username and timestamp with LTR/RTL scripts [#7575](https://github.com/diaspora/diaspora/pull/7575) * Fix mixed username and timestamp with LTR/RTL scripts [#7575](https://github.com/diaspora/diaspora/pull/7575)
* Prevent users from zooming in IE Mobile [#7589](https://github.com/diaspora/diaspora/pull/7589) * Prevent users from zooming in IE Mobile [#7589](https://github.com/diaspora/diaspora/pull/7589)
* Fix recipient prefill on contacts and profile page [#7599](https://github.com/diaspora/diaspora/pull/7599) * Fix recipient prefill on contacts and profile page [#7599](https://github.com/diaspora/diaspora/pull/7599)
* Display likes and reshares without login [#7583](https://github.com/diaspora/diaspora/pull/7583)
## Features ## Features
* Ask for confirmation when leaving a submittable comment field [#7530](https://github.com/diaspora/diaspora/pull/7530) * Ask for confirmation when leaving a submittable comment field [#7530](https://github.com/diaspora/diaspora/pull/7530)

View file

@ -11,6 +11,10 @@ class CommentsController < ApplicationController
head :not_found head :not_found
end end
rescue_from Diaspora::NonPublic do
authenticate_user!
end
def create def create
begin begin
comment = comment_service.create(params[:post_id], params[:text]) comment = comment_service.create(params[:post_id], params[:text])

View file

@ -10,6 +10,10 @@ class LikesController < ApplicationController
:mobile, :mobile,
:json :json
rescue_from Diaspora::NonPublic do
authenticate_user!
end
def create def create
like = like_service.create(params[:post_id]) like = like_service.create(params[:post_id])
rescue ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid rescue ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid

View file

@ -4,7 +4,6 @@
describe CommentsController, :type => :controller do describe CommentsController, :type => :controller do
before do before do
allow(@controller).to receive(:current_user).and_return(alice)
sign_in alice, scope: :user sign_in alice, scope: :user
end end
@ -62,6 +61,7 @@ describe CommentsController, :type => :controller do
aspect_to_post = eve.aspects.where(:name => "generic").first aspect_to_post = eve.aspects.where(:name => "generic").first
@post = eve.post :status_message, :text => 'GIANTS', :to => aspect_to_post @post = eve.post :status_message, :text => 'GIANTS', :to => aspect_to_post
allow(@controller).to receive(:current_user).and_return(alice)
expect(alice).not_to receive(:comment) expect(alice).not_to receive(:comment)
post :create, params: comment_hash post :create, params: comment_hash
expect(response.code).to eq("404") expect(response.code).to eq("404")
@ -102,6 +102,7 @@ describe CommentsController, :type => :controller do
it "lets the user delete their comment" do it "lets the user delete their comment" do
comment = alice.comment!(@message, "hey") comment = alice.comment!(@message, "hey")
allow(@controller).to receive(:current_user).and_return(alice)
expect(alice).to receive(:retract).with(comment) expect(alice).to receive(:retract).with(comment)
delete :destroy, params: {post_id: 1, id: comment.id}, format: :js delete :destroy, params: {post_id: 1, id: comment.id}, format: :js
expect(response.status).to eq(204) expect(response.status).to eq(204)
@ -111,6 +112,7 @@ describe CommentsController, :type => :controller do
comment1 = bob.comment!(@message, "hey") comment1 = bob.comment!(@message, "hey")
comment2 = eve.comment!(@message, "hey") comment2 = eve.comment!(@message, "hey")
allow(@controller).to receive(:current_user).and_return(alice)
expect(alice).not_to receive(:retract).with(comment1) expect(alice).not_to receive(:retract).with(comment1)
delete :destroy, params: {post_id: 1, id: comment2.id}, format: :js delete :destroy, params: {post_id: 1, id: comment2.id}, format: :js
expect(response.status).to eq(403) expect(response.status).to eq(403)
@ -154,5 +156,12 @@ describe CommentsController, :type => :controller do
get :index, params: {post_id: message.id}, format: :json get :index, params: {post_id: message.id}, format: :json
expect(response.status).to eq(404) expect(response.status).to eq(404)
end end
it "returns a 401 for a private post when logged out" do
bob.comment!(@message, "hey")
sign_out :user
get :index, params: {post_id: @message.id}, format: :json
expect(response.status).to eq(401)
end
end end
end end

View file

@ -101,6 +101,13 @@ describe LikesController, type: :controller do
get :index, params: {post_id: post.id}, format: :json get :index, params: {post_id: post.id}, format: :json
expect(JSON.parse(response.body).map {|h| h["id"] }).to match_array(post.likes.map(&:id)) expect(JSON.parse(response.body).map {|h| h["id"] }).to match_array(post.likes.map(&:id))
end end
it "returns a 401 for a private post when logged out" do
bob.like!(@message)
sign_out :user
get :index, params: {post_id: @message.id}, format: :json
expect(response.status).to eq(401)
end
end end
describe "#destroy" do describe "#destroy" do