diff --git a/api/handlers/collectionshandler.py b/api/handlers/collectionshandler.py index ff8861fae..6f8e55180 100644 --- a/api/handlers/collectionshandler.py +++ b/api/handlers/collectionshandler.py @@ -4,6 +4,7 @@ from .. import config from ..auth import containerauth, always_ok from ..dao import containerstorage +from ..dao import APIStorageException from containerhandler import ContainerHandler diff --git a/api/handlers/containerhandler.py b/api/handlers/containerhandler.py index 66138571b..77b1bd5a9 100644 --- a/api/handlers/containerhandler.py +++ b/api/handlers/containerhandler.py @@ -258,9 +258,10 @@ def put(self, cont_name, **kwargs): if target_parent_container: if cont_name == 'sessions': payload['group'] = target_parent_container['group'] - payload['permissions'] = target_parent_container.get('roles') - if payload['permissions'] is None: - payload['permissions'] = target_parent_container['permissions'] + if cont_name == 'projects': + payload['permissions'] = target_parent_container.get('roles', []) + else: + payload['permissions'] = target_parent_container.get('permissions', []) payload['modified'] = datetime.datetime.utcnow() if payload.get('timestamp'): diff --git a/api/handlers/grouphandler.py b/api/handlers/grouphandler.py index 6c99477b2..390ddf50c 100644 --- a/api/handlers/grouphandler.py +++ b/api/handlers/grouphandler.py @@ -73,6 +73,7 @@ def post(self): payload_validator = validators.payload_from_schema_file(self, 'group.json') payload_validator(payload, 'POST') payload['created'] = payload['modified'] = datetime.datetime.utcnow() + payload['roles'] = [{'_id': self.uid, 'access': 'admin', 'site': self.user_site}] result = mongo_validator(permchecker(self.storage.exec_op))('POST', payload=payload) if result.acknowledged: return {'_id': result.inserted_id} diff --git a/api/handlers/listhandler.py b/api/handlers/listhandler.py index aa1f3a06c..b350a8939 100644 --- a/api/handlers/listhandler.py +++ b/api/handlers/listhandler.py @@ -181,7 +181,7 @@ def _initialize_request(self, cont_name, list_name, _id, query_params=None): else: self.abort(404, 'Element {} not found in container {}'.format(_id, storage.cont_name)) mongo_validator = validators.mongo_from_schema_file(self, config.get('storage_schema_file')) - input_validator = validators.payload_from_schema_file(self, config.get('payload_schema_file')) + input_validator = validators.payload_from_schema_file(self, config.get('input_schema_file')) keycheck = validators.key_check(self, config.get('storage_schema_file')) return container, permchecker, storage, mongo_validator, input_validator, keycheck diff --git a/api/schemas/input/acquisition.json b/api/schemas/input/acquisition.json index 7255c2b61..b7ea7a0ce 100644 --- a/api/schemas/input/acquisition.json +++ b/api/schemas/input/acquisition.json @@ -15,5 +15,6 @@ "timestamp": {"type": "string"}, "timezone": {"type": "string"} }, + "required": ["label"], "additionalProperties": false } diff --git a/api/schemas/input/collection.json b/api/schemas/input/collection.json index 26c213f06..d7ff44efa 100644 --- a/api/schemas/input/collection.json +++ b/api/schemas/input/collection.json @@ -10,5 +10,6 @@ "curator": {"type": "string"} }, + "required": ["label"], "additionalProperties": false } diff --git a/api/schemas/input/container.json b/api/schemas/input/container.json index 41adc1ebf..9428bf0fc 100644 --- a/api/schemas/input/container.json +++ b/api/schemas/input/container.json @@ -4,7 +4,7 @@ "properties": { "_id": {"type": "string"}, "public": {"type": "boolean"}, - "label": {"type": "string"}, + "label": {"type": "string", "minLength": 1, "maxLength": 256}, "metadata": {"type": "object"} } } diff --git a/api/schemas/input/file.json b/api/schemas/input/file.json index 9e3313f42..3e8910f2f 100644 --- a/api/schemas/input/file.json +++ b/api/schemas/input/file.json @@ -3,8 +3,6 @@ "type": "object", "properties": { "name": { "type": "string" }, - "created": {"type": "string", "format": "date-time"}, - "modified": {"type": "string", "format": "date-time"}, "type": { "type": "string" }, "size": { "type": "integer" }, "hash": { "type": "string" }, diff --git a/api/schemas/input/project.json b/api/schemas/input/project.json index 9b7425207..cb3dbdff7 100644 --- a/api/schemas/input/project.json +++ b/api/schemas/input/project.json @@ -10,5 +10,6 @@ "group": {"type": "string"} }, + "required": ["label"], "additionalProperties": false } diff --git a/api/schemas/input/session.json b/api/schemas/input/session.json index 02a55258c..92a1d5027 100644 --- a/api/schemas/input/session.json +++ b/api/schemas/input/session.json @@ -14,5 +14,6 @@ "timezone": {"type": "string"}, "subject": {"$ref": "subject.json"} }, + "required": ["label"], "additionalProperties": false }