Esempio n. 1
0
	def create(self, request: 'th_Request') -> responses.Response:
		validator = validation.Dict({
			"room_id": validation.Integer(),
			"user_id": validation.Integer()
		}, allow_undefined_keys=not self._strict_requests)
		try:
			# Validation
			try: validator.validate(request.body)
			except validation.Error as ve: return responses.Unprocessable(ve.errors)

			room_id = request.body["room_id"]
			user_id = request.body["user_id"]

			# Query for authorization
			try: orm_room = self._m_rooms.get(room_id)
			except NoResultFound: return responses.NotFoundByID("room_id")

			# Authorization
			auth_response = self._s_auth.authorize(Action.ROOMS_USERS_CREATE, request.user, orm_room.user_id)
			if not isinstance(auth_response, responses.OKEmpty): return auth_response

			# Query
			try:
				self._m_rooms_users.create(room_id, user_id)
				return responses.Created()
			except IntegrityError: return responses.NotFoundByID("user_id")
		except SQLAlchemyError as sqlae:
			return responses.DatabaseException(sqlae)
Esempio n. 2
0
	def create(self, request: 'th_Request') -> responses.Response:
		validator = validation.Dict({
			"user_id": validation.Integer(),
			"reason": validation.String(length_min=orm.UsersBans.REASON_LEN_MIN, length_max=orm.UsersBans.REASON_LEN_MAX)
		}, allow_undefined_keys=not self._strict_requests)
		try:
			# Validation
			try: validator.validate(request.body)
			except validation.Error as ve: return responses.Unprocessable(ve.errors)

			# Authorization
			auth_response = self._s_auth.authorize(Action.USERS_BANS_CREATE, request.user)
			if not isinstance(auth_response, responses.OKEmpty): return auth_response

			# Get the user's ID from request (Which gets it's user info from a token)
			if not isinstance(request.user, Registered): return responses.UnauthorizedNotLoggedIn()
			user: Registered = request.user

			# Query
			try:
				self._m_users_bans.create(request.body["user_id"], user.user_id, request.body["reason"])
				return responses.Created()
			except IntegrityError: return responses.NotFoundByID("user_id")
		except SQLAlchemyError as sqlae:
			return responses.DatabaseException(sqlae)
Esempio n. 3
0
	def create(self, request: 'th_Request') -> responses.Response:
		validator = validation.Dict({
			"title": validation.String(length_min=orm.Rooms.TITLE_LEN_MIN, length_max=orm.Rooms.TITLE_LEN_MAX),
			"is_public": validation.Boolean()
		})
		try:
			# Validation
			try: validator.validate(request.body)
			except validation.Error as ve: return responses.Unprocessable(ve.errors)

			# Authorization
			auth_response = self._s_auth.authorize(Action.ROOMS_CREATE, request.user)
			if not isinstance(auth_response, responses.OKEmpty): return auth_response

			# Get the user's ID from request (Which gets it's user info from a token)
			if not isinstance(request.user, Registered): return responses.UnauthorizedNotLoggedIn()
			user: Registered = request.user

			# Query
			try:
				self._m_rooms.create(user.user_id, request.body["is_public"], request.body["title"])
				return responses.Created()
			except IntegrityError: return responses.NotFoundByID("user_id")
		except SQLAlchemyError as sqlae:
			return responses.DatabaseException(sqlae)
Esempio n. 4
0
    def create(self, request: 'th_Request') -> responses.Response:
        validator = validation.Dict(
            {
                "room_id":
                validation.Integer(),
                "content":
                validation.String(length_min=orm.Posts.CONTENT_LEN_MIN,
                                  length_max=orm.Posts.CONTENT_LEN_MAX)
            },
            allow_undefined_keys=not self._strict_requests)
        try:
            print(request.body)
            # Validation
            try:
                validator.validate(request.body)
            except validation.Error as ve:
                return responses.Unprocessable(ve.errors)

            room_id = request.body["room_id"]

            # Queries for authorization
            try:
                orm_room = self._m_rooms.get(room_id)
            except NoResultFound:
                return responses.NotFoundByID("room_id")
            orm_room_users = self._m_rooms_users.get_all_by_room(orm_room.id)

            # Get the user's ID from request (Which gets it's user info from a token)
            if not isinstance(request.user, Registered):
                return responses.UnauthorizedNotLoggedIn()
            user: Registered = request.user

            # Authorize
            if orm_room.is_public:
                auth_response = self._s_auth.authorize(
                    Action.POSTS_CREATE_PUBLIC, request.user)
            else:
                allowed_ids = [orm_room.user_id] + [
                    orm_ru.user_id for orm_ru in orm_room_users
                ]
                auth_response = self._s_auth.authorize(Action.POSTS_CREATE,
                                                       request.user,
                                                       allowed_ids)
            if not isinstance(auth_response, responses.OKEmpty):
                return auth_response

            # Query
            try:
                self._m_posts.create(room_id, user.user_id,
                                     request.body["content"])
                return responses.Created()
            except IntegrityError:
                return responses.NotFoundByID("user_id")
        except SQLAlchemyError as sqlae:
            return responses.DatabaseException(sqlae)
Esempio n. 5
0
    def create(self, request: 'th_Request') -> responses.Response:
        validator = validation.Dict(
            {
                "name":
                validation.String(length_min=orm.Users.NAME_LEN_MIN,
                                  length_max=orm.Users.NAME_LEN_MAX),
                "login":
                validation.String(length_min=orm.Users.LOGIN_LEN_MIN,
                                  length_max=orm.Users.LOGIN_LEN_MAX),
                "password":
                validation.String(length_min=orm.Users.PASSWORD_LEN_MIN,
                                  length_max=orm.Users.PASSWORD_LEN_MAX)
            },
            allow_undefined_keys=not self._strict_requests)
        try:
            # Authorization
            auth_response = self._s_auth.authorize(Action.USERS_CREATE,
                                                   request.user)
            if not isinstance(auth_response, responses.OKEmpty):
                return auth_response

            # Validation
            try:
                validator.validate(request.body)
            except validation.Error as ve:
                return responses.Unprocessable(ve.errors)

            # Hash password
            try:
                passhash = self._password_hasher.hash(request.body["password"])
            except HashingError as he:
                return responses.InternalException(
                    he, {"password": ["Could not be hashed"]})

            # Query
            try:
                self._m_users.create(Roles.USER.id_, request.body["login"],
                                     request.body["name"], passhash)
                return responses.Created()
            except IntegrityError:
                return responses.ConflictID("login")
        except SQLAlchemyError as sqlae:
            return responses.DatabaseException(sqlae)