diff --git a/lib/remote_storage/swift.rb b/lib/remote_storage/swift.rb index 535947e..b815ca3 100644 --- a/lib/remote_storage/swift.rb +++ b/lib/remote_storage/swift.rb @@ -28,6 +28,7 @@ module RemoteStorage server.halt 401 unless permission if ["PUT", "DELETE"].include? request_method + server.halt 503 if directory_backend(user).match /locked/ server.halt 401 unless permission == "rw" end end diff --git a/spec/swift/app_spec.rb b/spec/swift/app_spec.rb index b4b9d38..ac0b41a 100644 --- a/spec/swift/app_spec.rb +++ b/spec/swift/app_spec.rb @@ -101,6 +101,38 @@ describe "App" do metadata.must_be_empty end end + + describe "directory backend configuration" do + context "locked new backed" do + before do + redis.set "rs_config:dir_backend:phil", "new-locked" + end + + it "responds with 503" do + put "/phil/food/aguacate", "si" + + last_response.status.must_equal 503 + + metadata = redis.hgetall "rs_meta:phil:food/aguacate" + metadata.must_be_empty + end + end + + context "locked legacy backend" do + before do + redis.set "rs_config:dir_backend:phil", "legacy-locked" + end + + it "responds with 503" do + put "/phil/food/aguacate", "si" + + last_response.status.must_equal 503 + + metadata = redis.hgetall "rs_meta:phil:food/aguacate" + metadata.must_be_empty + end + end + end end end