[ARVADOS] updated: 1fc1bc4348ea3a1168f6d7bd3391f2449e30d181
git at public.curoverse.com
git at public.curoverse.com
Thu Aug 14 22:55:23 EDT 2014
Summary of changes:
services/api/app/models/arvados_model.rb | 28 +++++++++++++++++++++++-----
services/api/app/models/collection.rb | 19 +++++++++++++++++++
2 files changed, 42 insertions(+), 5 deletions(-)
via 1fc1bc4348ea3a1168f6d7bd3391f2449e30d181 (commit)
via 317952f20cb0d979d35b66bc735d02c2ea69050e (commit)
from a2ef5d0f32746fe06e89737ea5744622fc43e012 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 1fc1bc4348ea3a1168f6d7bd3391f2449e30d181
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date: Thu Aug 14 22:55:11 2014 -0400
3036: Adding pre-validation callback to set the portable_data_hash if necessay.
Added validation callback to check that portable_data_hash matches manifest_text.
diff --git a/services/api/app/models/collection.rb b/services/api/app/models/collection.rb
index b451ad0..72cd0b6 100644
--- a/services/api/app/models/collection.rb
+++ b/services/api/app/models/collection.rb
@@ -3,6 +3,9 @@ class Collection < ArvadosModel
include KindAndEtag
include CommonApiTemplate
+ before_validation :set_portable_data_hash
+ validate :ensure_manifest_matches_hash
+
api_accessible :user, extend: :common do |t|
t.add :data_size
t.add :files
@@ -15,6 +18,22 @@ class Collection < ArvadosModel
t.add :manifest_text
end
+ def set_portable_data_hash
+ if portable_data_hash.nil? or portable_data_hash == "" or
+ (manifest_text_changed? and !portable_data_hash_changed?)
+ portable_data_hash = "#{Digest::MD5.hexdigest(manifest_text)}+#{manifest_text.length}"
+ end
+ true
+ end
+
+ def ensure_manifest_matches_hash
+ unless Digest::MD5.hexdigest(manifest_text) == portable_data_hash
+ errors.add(:portable_data_hash, "does not match hash of manifest_text")
+ return false
+ end
+ true
+ end
+
def redundancy_status
if redundancy_confirmed_as.nil?
'unconfirmed'
commit 317952f20cb0d979d35b66bc735d02c2ea69050e
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date: Thu Aug 14 22:53:24 2014 -0400
3036: ensure_owner_uuid_is_permitted checks that owner_uuid is a User or Group.
Added comments on permission logic.
diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb
index 7f1f1e1..52fe56d 100644
--- a/services/api/app/models/arvados_model.rb
+++ b/services/api/app/models/arvados_model.rb
@@ -175,7 +175,7 @@ class ArvadosModel < ActiveRecord::Base
if new_record? or owner_uuid_changed?
uuid_in_path = {owner_uuid => true, uuid => true}
x = owner_uuid
- while (owner_class = self.class.resource_class_for_uuid(x)) != User
+ while (owner_class = ArvadosModel::resource_class_for_uuid(x)) != User
begin
if x == uuid
# Test for cycles with the new version, not the DB contents
@@ -205,12 +205,24 @@ class ArvadosModel < ActiveRecord::Base
def ensure_owner_uuid_is_permitted
raise PermissionDeniedError if !current_user
+
if new_record? and respond_to? :owner_uuid=
self.owner_uuid ||= current_user.uuid
end
- # Verify permission to write to old owner (unless owner_uuid was
- # nil -- or hasn't changed, in which case the following
- # "permission to write to new owner" block will take care of us)
+
+ rsc_class = ArvadosModel::resource_class_for_uuid owner_uuid
+ unless rsc_class == User or rsc_class == Group
+ errors.add :owner_uuid, "can only be set to User or Group"
+ raise PermissionDeniedError
+ end
+
+ # Verify "write" permission on old owner
+ # default fail unless one of:
+ # owner_uuid did not change
+ # previous owner_uuid is nil
+ # current user is the old owner
+ # current user is this object
+ # current user can_write old owner
unless !owner_uuid_changed? or
owner_uuid_was.nil? or
current_user.uuid == self.owner_uuid_was or
@@ -220,12 +232,18 @@ class ArvadosModel < ActiveRecord::Base
errors.add :owner_uuid, "cannot be changed without write permission on old owner"
raise PermissionDeniedError
end
- # Verify permission to write to new owner
+
+ # Verify "write" permission on new owner
+ # default fail unless one of:
+ # current_user is this object
+ # current user can_write new owner
unless current_user == self or current_user.can? write: owner_uuid
logger.warn "User #{current_user.uuid} tried to modify #{self.class.to_s} #{uuid} but does not have permission to write new owner_uuid #{owner_uuid}"
errors.add :owner_uuid, "cannot be changed without write permission on new owner"
raise PermissionDeniedError
end
+
+ true
end
def ensure_permission_to_save
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list