def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to add user.

        URL: user/
        """

        try:

            self.log.info('Add User')

            # User permission
            if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag  of XML request.')

            user_map = networkapi_map.get('user')
            if user_map is None:
                return self.response_error(3, u'There is no value to the user tag  of XML request.')

            # Get XML data
            username = user_map.get('user')
            password = user_map.get('password')
            name = user_map.get('name')
            email = user_map.get('email')
            user_ldap = user_map.get('user_ldap')

            # Valid username
            if not is_valid_string_minsize(username, 3) or not is_valid_string_maxsize(username, 45):
                self.log.error(
                    u'Parameter user is invalid. Value: %s', username)
                raise InvalidValueError(None, 'user', username)

            # Valid pwd
            if not is_valid_string_minsize(password, 3) or not is_valid_string_maxsize(password, 45):
                self.log.error(u'Parameter password is invalid. Value: ****')
                raise InvalidValueError(None, 'password', '****')

            # Valid name
            if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 200):
                self.log.error(u'Parameter name is invalid. Value: %s', name)
                raise InvalidValueError(None, 'name', name)

            # Valid email
            if not is_valid_string_minsize(email, 3) or not is_valid_string_maxsize(email, 200) or not is_valid_email(email):
                self.log.error(u'Parameter email is invalid. Value: %s', email)
                raise InvalidValueError(None, 'email', email)

            # Valid LDAP username
            if user_ldap is not None:
                if not is_valid_string_minsize(user_ldap, 3) or not is_valid_string_maxsize(user_ldap, 45):
                    self.log.error(
                        u'Parameter user_ldap is invalid. Value: %s', user_ldap)
                    raise InvalidValueError(None, 'user_ldap', user_ldap)

            try:
                Usuario.get_by_user(username)
                raise UsuarioNameDuplicatedError(
                    None, u'Já existe um usuário com o valor user %s.' % username)
            except UsuarioNotFoundError:
                pass

            usr = Usuario()

            # set variables
            usr.user = username
            usr.pwd = Usuario.encode_password(password)
            usr.nome = name
            usr.email = email
            usr.ativo = True
            usr.user_ldap = user_ldap

            try:
                # save User
                usr.save()
            except Exception, e:
                self.log.error(u'Failed to save the user.')
                raise UsuarioError(e, u'Failed to save the user.')

            perm_map = dict()
            perm_map['usuario'] = model_to_dict(
                usr, exclude=['user', 'nome', 'pwd', 'name', 'email'])

            return self.response(dumps_networkapi(perm_map))
Exemple #2
0
    def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to add user.

        URL: user/
        """

        try:

            self.log.info('Add User')

            # User permission
            if not has_perm(user, AdminPermission.USER_ADMINISTRATION,
                            AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(
                    3,
                    u'There is no value to the networkapi tag  of XML request.'
                )

            user_map = networkapi_map.get('user')
            if user_map is None:
                return self.response_error(
                    3, u'There is no value to the user tag  of XML request.')

            # Get XML data
            username = user_map.get('user')
            password = user_map.get('password')
            name = user_map.get('name')
            email = user_map.get('email')
            user_ldap = user_map.get('user_ldap')

            # Valid username
            if not is_valid_string_minsize(
                    username, 3) or not is_valid_string_maxsize(username, 45):
                self.log.error(u'Parameter user is invalid. Value: %s',
                               username)
                raise InvalidValueError(None, 'user', username)

            # Valid pwd
            if not is_valid_string_minsize(
                    password, 3) or not is_valid_string_maxsize(password, 45):
                self.log.error(u'Parameter password is invalid. Value: ****')
                raise InvalidValueError(None, 'password', '****')

            # Valid name
            if not is_valid_string_minsize(
                    name, 3) or not is_valid_string_maxsize(name, 200):
                self.log.error(u'Parameter name is invalid. Value: %s', name)
                raise InvalidValueError(None, 'name', name)

            # Valid email
            if not is_valid_string_minsize(
                    email, 3) or not is_valid_string_maxsize(
                        email, 200) or not is_valid_email(email):
                self.log.error(u'Parameter email is invalid. Value: %s', email)
                raise InvalidValueError(None, 'email', email)

            # Valid LDAP username
            if user_ldap is not None:
                if not is_valid_string_minsize(
                        user_ldap, 3) or not is_valid_string_maxsize(
                            user_ldap, 45):
                    self.log.error(
                        u'Parameter user_ldap is invalid. Value: %s',
                        user_ldap)
                    raise InvalidValueError(None, 'user_ldap', user_ldap)

            try:
                Usuario.get_by_user(username)
                raise UsuarioNameDuplicatedError(
                    None,
                    u'Já existe um usuário com o valor user %s.' % username)
            except UsuarioNotFoundError:
                pass

            usr = Usuario()

            # set variables
            usr.user = username
            usr.pwd = Usuario.encode_password(password)
            usr.nome = name
            usr.email = email
            usr.ativo = True
            usr.user_ldap = user_ldap

            try:
                # save User
                usr.save()
            except Exception, e:
                self.log.error(u'Failed to save the user.')
                raise UsuarioError(e, u'Failed to save the user.')

            perm_map = dict()
            perm_map['usuario'] = model_to_dict(
                usr, exclude=['user', 'nome', 'pwd', 'name', 'email'])

            return self.response(dumps_networkapi(perm_map))
    def handle_put(self, request, user, *args, **kwargs):
        """Treat requests PUT to edit User.

        URL: user/<id_user>/
        """
        try:

            self.log.info('Edit User')

            # User permission
            if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            id_user = kwargs.get('id_user')

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format

            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag  of XML request.')

            user_map = networkapi_map.get('user')
            if user_map is None:
                return self.response_error(3, u'There is no value to the user tag  of XML request.')

            # Get XML data
            username = user_map.get('user')
            password = user_map.get('password')
            name = user_map.get('name')
            email = user_map.get('email')
            active = user_map.get('active')
            user_ldap = user_map.get('user_ldap')

            # Valid ID User
            if not is_valid_int_greater_zero_param(id_user):
                self.log.error(
                    u'The id_user parameter is not a valid value: %s.', id_user)
                raise InvalidValueError(None, 'id_user', id_user)

            # Valid username
            if not is_valid_string_minsize(username, 3) or not is_valid_string_maxsize(username, 45):
                self.log.error(
                    u'Parameter user is invalid. Value: %s', username)
                raise InvalidValueError(None, 'user', username)

            # Valid pwd
            if not is_valid_string_minsize(password, 3) or not is_valid_string_maxsize(password, 45):
                self.log.error(u'Parameter password is invalid. Value: ****')
                raise InvalidValueError(None, 'password', '****')

            # Valid name
            if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 200):
                self.log.error(u'Parameter name is invalid. Value: %s', name)
                raise InvalidValueError(None, 'name', name)

            # Valid email
            if not is_valid_string_minsize(email, 3) or not is_valid_string_maxsize(email, 200) or not is_valid_email(email):
                self.log.error(u'Parameter email is invalid. Value: %s', email)
                raise InvalidValueError(None, 'email', email)

            # Valid active
            if not is_valid_boolean_param(active):
                self.log.error(
                    u'The active parameter is not a valid value: %s.', active)
                raise InvalidValueError(None, 'active', active)

            # Valid LDAP username
            if not is_valid_string_minsize(user_ldap, 3, False) or not is_valid_string_maxsize(user_ldap, 45, False):
                self.log.error(
                    u'Parameter user_ldap is invalid. Value: %s', user_ldap)
                raise InvalidValueError(None, 'user_ldap', user_ldap)

            # Find User by ID to check if it exist
            usr = Usuario.get_by_pk(id_user)

            with distributedlock(LOCK_USER % id_user):

                try:
                    if usr.user.lower() != username.lower():
                        Usuario.get_by_user(username)
                        raise UsuarioNameDuplicatedError(
                            None, u'Já existe um usuário com o valor user %s.' % username)
                except UsuarioNotFoundError:
                    pass

                # set variables
                usr.user = username
                usr.pwd = password
                usr.nome = name
                usr.email = email
                usr.ativo = convert_string_or_int_to_boolean(active)
                usr.user_ldap = user_ldap

                try:
                    # update User
                    usr.save()
                except Exception, e:
                    self.log.error(u'Failed to update the user.')
                    raise UsuarioError(e, u'Failed to update the user.')

                return self.response(dumps_networkapi({}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_put(self, request, user, *args, **kwargs):
        """Treat requests PUT to edit User.

        URL: user/<id_user>/
        """
        try:

            self.log.info('Edit User')

            # User permission
            if not has_perm(user, AdminPermission.USER_ADMINISTRATION,
                            AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            id_user = kwargs.get('id_user')

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format

            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(
                    3,
                    u'There is no value to the networkapi tag  of XML request.'
                )

            user_map = networkapi_map.get('user')
            if user_map is None:
                return self.response_error(
                    3, u'There is no value to the user tag  of XML request.')

            # Get XML data
            username = user_map.get('user')
            password = user_map.get('password')
            name = user_map.get('name')
            email = user_map.get('email')
            active = user_map.get('active')
            user_ldap = user_map.get('user_ldap')

            # Valid ID User
            if not is_valid_int_greater_zero_param(id_user):
                self.log.error(
                    u'The id_user parameter is not a valid value: %s.',
                    id_user)
                raise InvalidValueError(None, 'id_user', id_user)

            # Valid username
            if not is_valid_string_minsize(
                    username, 3) or not is_valid_string_maxsize(username, 45):
                self.log.error(u'Parameter user is invalid. Value: %s',
                               username)
                raise InvalidValueError(None, 'user', username)

            # Valid pwd
            if not is_valid_string_minsize(
                    password, 3) or not is_valid_string_maxsize(password, 45):
                self.log.error(u'Parameter password is invalid. Value: ****')
                raise InvalidValueError(None, 'password', '****')

            # Valid name
            if not is_valid_string_minsize(
                    name, 3) or not is_valid_string_maxsize(name, 200):
                self.log.error(u'Parameter name is invalid. Value: %s', name)
                raise InvalidValueError(None, 'name', name)

            # Valid email
            if not is_valid_string_minsize(
                    email, 3) or not is_valid_string_maxsize(
                        email, 200) or not is_valid_email(email):
                self.log.error(u'Parameter email is invalid. Value: %s', email)
                raise InvalidValueError(None, 'email', email)

            # Valid active
            if not is_valid_boolean_param(active):
                self.log.error(
                    u'The active parameter is not a valid value: %s.', active)
                raise InvalidValueError(None, 'active', active)

            # Valid LDAP username
            if not is_valid_string_minsize(
                    user_ldap, 3, False) or not is_valid_string_maxsize(
                        user_ldap, 45, False):
                self.log.error(u'Parameter user_ldap is invalid. Value: %s',
                               user_ldap)
                raise InvalidValueError(None, 'user_ldap', user_ldap)

            # Find User by ID to check if it exist
            usr = Usuario.get_by_pk(id_user)

            with distributedlock(LOCK_USER % id_user):

                try:
                    if usr.user.lower() != username.lower():
                        Usuario.get_by_user(username)
                        raise UsuarioNameDuplicatedError(
                            None,
                            u'Já existe um usuário com o valor user %s.' %
                            username)
                except UsuarioNotFoundError:
                    pass

                # set variables
                usr.user = username
                usr.pwd = password
                usr.nome = name
                usr.email = email
                usr.ativo = convert_string_or_int_to_boolean(active)
                usr.user_ldap = user_ldap

                try:
                    # update User
                    usr.save()
                except Exception, e:
                    self.log.error(u'Failed to update the user.')
                    raise UsuarioError(e, u'Failed to update the user.')

                return self.response(dumps_networkapi({}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)