Send "Unauthorized" message body with 401 responses (refs #42)
This commit is contained in:
		
							parent
							
								
									7aaf3f80f7
								
							
						
					
					
						commit
						9a9a9c79e5
					
				@ -24,12 +24,14 @@ module RemoteStorage
 | 
				
			|||||||
        return true if ["GET", "HEAD"].include?(request_method) && !listing
 | 
					        return true if ["GET", "HEAD"].include?(request_method) && !listing
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      server.halt 401, "Unauthorized" if token.empty?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      authorizations = redis.smembers("authorizations:#{user}:#{token}")
 | 
					      authorizations = redis.smembers("authorizations:#{user}:#{token}")
 | 
				
			||||||
      permission = directory_permission(authorizations, directory)
 | 
					      permission = directory_permission(authorizations, directory)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      server.halt 401 unless permission
 | 
					      server.halt 401, "Unauthorized" unless permission
 | 
				
			||||||
      if ["PUT", "DELETE"].include? request_method
 | 
					      if ["PUT", "DELETE"].include? request_method
 | 
				
			||||||
        server.halt 401 unless permission == "rw"
 | 
					        server.halt 401, "Unauthorized" unless permission == "rw"
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -173,6 +173,29 @@ describe "App" do
 | 
				
			|||||||
      purge_redis
 | 
					      purge_redis
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context "not authorized" do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      describe "with no token" do
 | 
				
			||||||
 | 
					        it "says it's not authorized" do
 | 
				
			||||||
 | 
					          delete "/phil/food/aguacate"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          last_response.status.must_equal 401
 | 
				
			||||||
 | 
					          last_response.body.must_equal "Unauthorized"
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      describe "with wrong token" do
 | 
				
			||||||
 | 
					        it "says it's not authorized" do
 | 
				
			||||||
 | 
					          header "Authorization", "Bearer wrongtoken"
 | 
				
			||||||
 | 
					          delete "/phil/food/aguacate"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          last_response.status.must_equal 401
 | 
				
			||||||
 | 
					          last_response.body.must_equal "Unauthorized"
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context "authorized" do
 | 
					    context "authorized" do
 | 
				
			||||||
      before do
 | 
					      before do
 | 
				
			||||||
        redis.sadd "authorizations:phil:amarillo", [":rw"]
 | 
					        redis.sadd "authorizations:phil:amarillo", [":rw"]
 | 
				
			||||||
@ -248,6 +271,29 @@ describe "App" do
 | 
				
			|||||||
      purge_redis
 | 
					      purge_redis
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context "not authorized" do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      describe "without token" do
 | 
				
			||||||
 | 
					        it "says it's not authorized" do
 | 
				
			||||||
 | 
					          get "/phil/food/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          last_response.status.must_equal 401
 | 
				
			||||||
 | 
					          last_response.body.must_equal "Unauthorized"
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      describe "with wrong token" do
 | 
				
			||||||
 | 
					        it "says it's not authorized" do
 | 
				
			||||||
 | 
					          header "Authorization", "Bearer wrongtoken"
 | 
				
			||||||
 | 
					          get "/phil/food/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          last_response.status.must_equal 401
 | 
				
			||||||
 | 
					          last_response.body.must_equal "Unauthorized"
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context "authorized" do
 | 
					    context "authorized" do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      before do
 | 
					      before do
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user