Esempio n. 1
0
    def create_bot(cls, bot_data):
        admin = Authenticator.authenticate_team(bot_data.authentication, UserRoles.is_admin)

        try:
            new_client = UserDatabaseClient.add_client()
            new_bot = Bot(
                bot_id=new_client.id,
                name=bot_data.name,
                callback=bot_data.callback,
                token=Authenticator.generate(new_client.id)
            )
            BotDatabaseClient.add_bot(new_bot)
            team_bot = TeamUser(
                user_id=new_client.id,
                team_id=admin.team_id,
                role=TeamRoles.BOT.value
            )
            TeamDatabaseClient.add_team_user(team_bot)
            DatabaseClient.commit()
            cls.logger().info(f"Bot #{new_bot.id} created in team {admin.team_id} with callback url {new_bot.callback} "
                              f"by admin {admin.id}.")
            return SuccessfulUserMessageResponse("Bot created.", UserResponseStatus.OK.value)

        except IntegrityError as exc:
            DatabaseClient.rollback()
            if BotDatabaseClient.get_bot_by_name(bot_data.name) is not None:
                cls.logger().info(f"Failing to create bot {bot_data.name}. Name already in use.", exc)
                return BadRequestUserMessageResponse("Name already in use for other bot.",
                                                     UserResponseStatus.ALREADY_REGISTERED.value)
            else:
                cls.logger().info(f"Failing to create bot {bot_data.name}.")
                return UnsuccessfulClientResponse("Couldn't create bot.")
Esempio n. 2
0
    def create_channel(cls, creation_data):
        user = Authenticator.authenticate_team(creation_data.authentication)

        try:
            new_client = UserDatabaseClient.add_client()
            new_channel = Channel(
                channel_id=new_client.id,
                team_id=user.team_id,
                creator=user.id,
                name=creation_data.name,
                visibility=creation_data.visibility,
                description=creation_data.description,
                welcome_message=creation_data.welcome_message
            )
            ChannelDatabaseClient.add_channel(new_channel)
            new_channel_user = ChannelUser(user_id=user.id, channel_id=new_channel.channel_id)
            ChannelDatabaseClient.add_channel_user(new_channel_user)
            new_chat = Chat(user_id=user.id, chat_id=new_channel.channel_id, team_id=new_channel.team_id)
            MessageDatabaseClient.add_chat(new_chat)
            DatabaseClient.commit()
            channel = ChannelDatabaseClient.get_channel_by_id(new_channel.channel_id)
            cls.logger().info(f"Channel #{new_channel.channel_id} created in team {new_channel.team_id}.")
            cls.logger().info(f"User #{user.id} assigned as channel #{new_channel.channel_id} creator.")
        except IntegrityError:
            DatabaseClient.rollback()
            if ChannelDatabaseClient.get_channel_by_name(creation_data.name) is not None:
                cls.logger().info(f"Failing to create channel {creation_data.name}. Name already in use.")
                return BadRequestChannelMessageResponse(f"Channel name {creation_data.name} already in use.",
                                                        TeamResponseStatus.ALREADY_REGISTERED.value)
            else:
                cls.logger().error(f"Failing to create channel {creation_data.name}.")
                return UnsuccessfulChannelMessageResponse("Couldn't create channel.")
        else:
            return SuccessfulChannelResponse(channel, TeamResponseStatus.CREATED.value)
Esempio n. 3
0
    def create_user(cls, user_data):
        if UserDatabaseClient.get_user_by_username(
                user_data.username) is not None:
            cls.logger().info(
                f"Failing to create user #{user_data.username}. Username already in use."
            )
            return BadRequestUserMessageResponse(
                "Username already in use for other user.",
                UserResponseStatus.ALREADY_REGISTERED.value)
        try:
            new_client = UserDatabaseClient.add_client()
            new_user = User(user_id=new_client.id,
                            username=user_data.username,
                            email=user_data.email,
                            password=hashing.hash(user_data.password),
                            first_name=user_data.first_name,
                            last_name=user_data.last_name,
                            profile_pic=user_data.profile_pic,
                            role=user_data.role or UserRoles.USER.value,
                            token=Authenticator.generate(
                                new_client.id, user_data.password))
            UserDatabaseClient.add_user(new_user)
            DatabaseClient.commit()
            cls.logger().info(f"User #{new_client.id} created.")
            headers = {"auth_token": new_user.token}
            return SuccessfulUserResponse(new_user, headers)

        except IntegrityError as exc:
            DatabaseClient.rollback()
            if UserDatabaseClient.get_user_by_email(
                    user_data.email) is not None:
                cls.logger().info(
                    f"Failing to create user {user_data.username}. Email already in use.",
                    exc)
                return BadRequestUserMessageResponse(
                    "Email already in use for other user.",
                    UserResponseStatus.ALREADY_REGISTERED.value)
            else:
                cls.logger().info(
                    f"Failing to create user #{user_data.username}.")
                return UnsuccessfulClientResponse("Couldn't create user.")
        except:
            DatabaseClient.rollback()
            cls.logger().info(f"Failing to create user #{user_data.username}.")
            return UnsuccessfulClientResponse("Couldn't create user.")
Esempio n. 4
0
    def _login_facebook_user(cls, user_data):
        try:
            facebook_user = FacebookService.get_user_from_facebook(user_data)
            user = UserDatabaseClient.get_user_by_facebook_id(
                facebook_user.facebook_id)

            if user is not None:
                cls.logger().info(
                    f"Logging in Facebook user with Facebook ID #{facebook_user.facebook_id}."
                )
                cls.logger().debug(f"Generating token for user {user.id}")
                user.token = Authenticator.generate(user.id)
                user.online = True
                UserDatabaseClient.update_user(user)
                DatabaseClient.commit()
                cls.logger().info(f"User #{user.id} logged in.")
                headers = {"auth_token": user.token}
                return SuccessfulUserResponse(user, headers)
            else:
                cls.logger().info(
                    f"Creating new Facebook user with Facebook ID #{facebook_user.facebook_id}."
                )
                new_client = UserDatabaseClient.add_client()
                new_user = User(user_id=new_client.id,
                                facebook_id=facebook_user.facebook_id,
                                username=facebook_user.username,
                                email=facebook_user.email,
                                first_name=facebook_user.first_name,
                                last_name=facebook_user.last_name,
                                profile_pic=facebook_user.profile_pic,
                                role=UserRoles.USER.value,
                                token=Authenticator.generate(new_client.id))
                UserDatabaseClient.add_user(new_user)
                DatabaseClient.commit()
                cls.logger().info(f"User #{new_client.id} logged in.")
                headers = {"auth_token": new_user.token}
                return SuccessfulUserResponse(new_user, headers)
        except FacebookWrongTokenError:
            cls.logger().info(
                f"Failing to logging in user with Facebook token #{user_data.facebook_token}."
            )
            return UnsuccessfulClientResponse("Couldn't perform login.")