def post(self, organisation_id): """Create a service. At this stage a basic data validation is applied. Service Model is responsible for more detailed validation. It will: * on success: return a service object containing id and rev * on validation failure: return an errors object * on saving to DB: raise an CouchDB exception """ if not self.user.is_user(organisation_id): raise HTTPError(403, 'Forbidden') data = self.get_json_body(required=['name', 'location', 'service_type']) data['created_by'] = self.user.id data['organisation_id'] = organisation_id service = yield perch.Service.create(user=self.user, **data) msg = ("created service, organisation id: {}, service_id: {}, data: {}" .format(organisation_id, service.id, data)) audit_log.info(self, msg) if service.state == State.pending: yield email.send_create_request_emails(self.user, service) self.finish({ 'status': 200, 'data': service.clean(user=self.user) })
def post(self): """Create user""" data = self.get_json_body() try: password = data.pop('password') except KeyError: errors = [{ 'field': 'password', 'message': 'user "password" is missing' }] # check for other validation errors try: yield perch.User(**data).validate() except exceptions.ValidationError as exc: errors.extend(exc.args[0]) raise HTTPError(400, errors) try: user = yield perch.User.create(self.user, password, **data) except exceptions.ValidationError as exc: raise HTTPError(400, exc.args[0]) audit_log.info(self, "user created, user_id: {}".format(user.id)) # only send verification email if hash exists if (getattr(user, 'verification_hash', None)) is not None: audit_log.info(self, "send verification email to user_id: {}".format(user.id)) yield email.send_verification_email(user) self.finish({ 'status': 200, 'data': user.clean() })
def post(self, user_id): """ Create User-Organisation relationship """ data = self.get_json_body(required=['organisation_id']) organisation_id = data['organisation_id'] pre_verified = data.get('pre_verified', False) try: organisation = yield perch.Organisation.get(organisation_id) except couch.NotFound: raise HTTPError(400, 'Organisation does not exist') if organisation.state != State.approved: raise HTTPError(400, 'Organisation is not approved') user_org = yield perch.UserOrganisation.create( user=self.user, id=organisation_id, user_id=user_id, pre_verified=pre_verified ) user = user_org.parent msg = ("created user-organisation link, user id: {}, " "organisation id: {}".format(user_id, organisation_id)) audit_log.info(self, msg) if not (self.user.is_reseller() and data.get('pre_verified', False)): yield email.send_join_request_emails(user, organisation) self.finish({ 'status': 200, 'data': user.clean() })
def post(self, organisation_id): """Create a service. At this stage a basic data validation is applied. Service Model is responsible for more detailed validation. It will: * on success: return a service object containing id and rev * on validation failure: return an errors object * on saving to DB: raise an CouchDB exception """ if not self.user.is_user(organisation_id): raise HTTPError(403, 'Forbidden') data = self.get_json_body( required=['name', 'location', 'service_type']) data['created_by'] = self.user.id data['organisation_id'] = organisation_id service = yield perch.Service.create(user=self.user, **data) msg = ("created service, organisation id: {}, service_id: {}, data: {}" .format(organisation_id, service.id, data)) audit_log.info(self, msg) if service.state == State.pending: yield email.send_create_request_emails(self.user, service) self.finish({'status': 200, 'data': service.clean(user=self.user)})
def delete(self, user_id): """Delete a user""" user = yield perch.User.get(user_id) yield user.update(self.user, state=State.deactivated.name) audit_log.info(self, "deactivated user, user id: {}".format(user_id)) self.finish({ 'status': 200, 'data': {'message': 'user deactivated'} })
def post(self, service_id): """Add new client secret for service""" secret = yield perch.OAuthSecret.create(self.user, client_id=service_id) msg = ("client secret for service created, service id: {}" .format(service_id)) audit_log.info(self, msg) self.finish({ 'status': 200, 'data': secret.id })
def delete(self, service_id): """Delete all service secret credentials""" yield perch.OAuthSecret.delete_all_secrets(self.user, service_id) audit_log.info(self, "all service secrets deleted, service id: {}".format(service_id)) self.finish({ 'status': 200, 'data': { 'message': 'secrets deleted' } })
def delete(self, service_id): """Delete a service""" service = yield perch.Service.get(service_id) yield service.update(self.user, state=State.deactivated.name) audit_log.info(self, "deactivated service, service id: {}".format(service_id)) self.finish({ 'status': 200, 'data': { 'message': 'service deactivated' } })
def delete(self, service_id, secret): """Delete given client secret for service""" secret = yield perch.OAuthSecret.get(secret) yield secret.delete(self.user) audit_log.info(self, "secret for service deleted, service id: {}".format(service_id)) self.finish({ 'status': 200, 'data': { 'message': 'secret deleted' } })
def delete(self, user_id, organisation_id): """ Delete a user's organisation """ user_org = yield perch.UserOrganisation.get([user_id, organisation_id]) yield user_org.update(self.user, state=State.deactivated.name) msg = ("deactivated user-organisation relation, user id: {}, " "organisation id: {}".format(user_id, organisation_id)) audit_log.info(self, msg) self.finish({ 'status': 200, 'data': user_org.parent.clean() })
def delete(self, service_id): """Delete a service""" service = yield perch.Service.get(service_id) yield service.update(self.user, state=State.deactivated.name) audit_log.info( self, "deactivated service, service id: {}".format(service_id)) self.finish({ 'status': 200, 'data': { 'message': 'service deactivated' } })
def put(self, user_id): """Verify a user based on verification hash""" body = self.get_json_body(required=['verification_hash']) try: user = yield perch.User.verify(user_id, body.get('verification_hash')) except exceptions.ValidationError as exc: raise HTTPError(400, exc.args[0]) audit_log.info(self, "user verified, user id: {}".format(user_id)) self.finish({ 'status': 200, 'data': user.clean() })
def delete(self, organisation_id): """Delete an organisation""" organisation = yield perch.Organisation.get(organisation_id) yield organisation.update(self.user, state=State.deactivated.name) yield perch.User.remove_organisation_from_all(organisation_id) audit_log.info(self, "organisation deactivated, organisation id:{}" .format(organisation_id)) self.finish({ 'status': 200, 'data': { 'message': 'organisation deactivated' } })
def delete(self, organisation_id): """Delete an organisation""" organisation = yield perch.Organisation.get(organisation_id) yield organisation.update(self.user, state=State.deactivated.name) yield perch.User.remove_organisation_from_all(organisation_id) audit_log.info( self, "organisation deactivated, organisation id:{}".format( organisation_id)) self.finish({ 'status': 200, 'data': { 'message': 'organisation deactivated' } })
def put(self, user_id): """Update a user""" data = self.get_json_body() user = yield perch.User.get(user_id) try: yield user.update(self.user, **data) except exceptions.ValidationError as exc: raise HTTPError(400, exc.args[0]) msg = "updated user, user id: {}, data: {}".format(user_id, data) audit_log.info(self, msg) self.finish({ 'status': 200, 'data': user.clean() })
def post(self): """Create an organisation""" data = self.get_json_body() data['created_by'] = self.user.id try: organisation = yield perch.Organisation.create(self.user, **data) except exceptions.ValidationError as exc: raise HTTPError(400, exc.args[0]) msg = ("organisation created, organisation id:{}, data: {}" .format(organisation.id, data)) audit_log.info(self, msg) if not (self.user.is_reseller() and data.get('pre_verified', False)): yield email.send_create_request_emails(self.user, organisation) self.finish({'status': 200, 'data': organisation.clean()})
def post(self): """Create an organisation""" data = self.get_json_body() data['created_by'] = self.user.id try: organisation = yield perch.Organisation.create(self.user, **data) except exceptions.ValidationError as exc: raise HTTPError(400, exc.args[0]) msg = ("organisation created, organisation id:{}, data: {}".format( organisation.id, data)) audit_log.info(self, msg) if not (self.user.is_reseller() and data.get('pre_verified', False)): yield email.send_create_request_emails(self.user, organisation) self.finish({'status': 200, 'data': organisation.clean()})
def put(self, service_id): """Update a service""" data = self.get_json_body() service = yield perch.Service.get(service_id) yield service.update(self.user, **data) msg = ("updated service, service id: {}, data: {}".format( service_id, data)) audit_log.info(self, msg) if 'state' in data: creator = yield perch.User.get(service.created_by) yield email.send_request_update_email(creator, service, service.state, self.user, 'create') self.finish({'status': 200, 'data': service.clean(user=self.user)})
def put(self, organisation_id): """Update an organisation""" data = self.get_json_body() try: organisation = yield perch.Organisation.get(organisation_id) except couch.NotFound: raise HTTPError(404, 'Not Found') yield organisation.update(self.user, **data) audit_log.info( self, "organisation updated, organisation_id:{}".format(organisation_id)) if 'state' in data: creator = yield perch.User.get(organisation.created_by) yield email.send_request_update_email(creator, organisation, organisation.state, self.user, 'create') self.finish({'status': 200, 'data': organisation.clean()})
def put(self, user_id): """Change the user password""" body = self.get_json_body(required=['previous', 'password']) try: user = yield perch.User.get(user_id) except couch.NotFound: raise HTTPError(403, 'Forbidden') try: yield user.change_password(body['previous'], body['password']) except exceptions.Unauthorized: raise HTTPError(401, 'Unauthorized') audit_log.info(self, "user password changed, user id: {}".format(user_id)) self.finish({ 'status': 200, 'data': { 'message': 'password changed' } })
def put(self, organisation_id): """Update an organisation""" data = self.get_json_body() try: organisation = yield perch.Organisation.get(organisation_id) except couch.NotFound: raise HTTPError(404, 'Not Found') yield organisation.update(self.user, **data) audit_log.info(self, "organisation updated, organisation_id:{}".format(organisation_id)) if 'state' in data: creator = yield perch.User.get(organisation.created_by) yield email.send_request_update_email( creator, organisation, organisation.state, self.user, 'create') self.finish({'status': 200, 'data': organisation.clean()})
def put(self, service_id): """Update a service""" data = self.get_json_body() service = yield perch.Service.get(service_id) yield service.update(self.user, **data) msg = ("updated service, service id: {}, data: {}" .format(service_id, data)) audit_log.info(self, msg) if 'state' in data: creator = yield perch.User.get(service.created_by) yield email.send_request_update_email( creator, service, service.state, self.user, 'create') self.finish({ 'status': 200, 'data': service.clean(user=self.user) })