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)
        })
Ejemplo n.º 2
0
    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()
        })
Ejemplo n.º 3
0
    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()
        })
Ejemplo n.º 4
0
    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)})
Ejemplo n.º 5
0
    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'
            }
        })
Ejemplo n.º 10
0
    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()
        })
Ejemplo n.º 11
0
    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'
            }
        })
Ejemplo n.º 12
0
    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'
            }
        })
Ejemplo n.º 15
0
    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()})
Ejemplo n.º 18
0
    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()})
Ejemplo n.º 20
0
    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)
        })