示例#1
0
    def kick(self, id):
        try:
            id = int(id)
        except (ValueError, TypeError):
            raise HTTPNotFound()

        room = DBSession.query(Room).filter(Room.id == id).one_or_none()
        if room is None:
            raise HTTPNotFound()

        member_id = context.form.get('memberId')
        member = DBSession.query(Member) \
            .filter(Member.reference_id == member_id).one_or_none()
        if member is None:
            raise HTTPStatus('611 Member Not Found')

        is_member = DBSession.query(Member) \
            .filter(
                TargetMember.target_id == id,
                TargetMember.member_id == member.id
            ) \
            .count()
        if not is_member:
            raise HTTPStatus('617 Not A Member')

        DBSession.query(TargetMember) \
            .filter(
                TargetMember.target_id == id,
                TargetMember.member_id == member.id
            ) \
            .delete()
        return room
示例#2
0
文件: member.py 项目: hmnfalahi/tost
    def update(self, id):
        id = int_or_notfound(id)
        user_name = context.form.get('userName')
        email = context.form.get('email')

        member = DBSession.query(Member) \
            .filter(Member.id == id) \
            .one_or_none()

        if member is None:
            raise HTTPNotFound()

        username_exists = DBSession.query(Member) \
            .filter(Member.user_name == user_name) \
            .filter(Member.id != id) \
            .one_or_none()

        if username_exists:
            raise StatusRepetitiveUsername()

        email_exist = DBSession.query(Member) \
            .filter(Member.email == email) \
            .filter(Member.id != id) \
            .one_or_none()

        if email_exist:
            raise StatusRepetitiveEmail()

        member.update_from_request()
        return member
示例#3
0
    def register(self):
        email = context.form.get('email')
        password = context.form.get('password')
        name = context.form.get('name')
        family = context.form.get('family')
        description = context.form.get('description')
        role = 'member'

        member = DBSession.query(Member) \
            .filter(Member.email == email) \
            .one_or_none()

        if DBSession.query(Member.email).filter(Member.email == email).count():
            raise HTTPStatus('601 Email Address Is Already Registered')

        member = Member(
            email=email,
            name=name,
            password=password,
            family=family,
            description=description,
            role=role,
        )
        DBSession.add(member)
        return member
    def test_approve_required_mixin(self):
        # noinspection PyArgumentList
        object1 = ApproveRequiredObject(
            title='object 1',
        )

        DBSession.add(object1)
        DBSession.commit()
        self.assertFalse(object1.is_approved)
        self.assertEqual(DBSession.query(ApproveRequiredObject).filter(ApproveRequiredObject.is_approved).count(), 0)

        object1.is_approved = True
        self.assertTrue(object1.is_approved)
        DBSession.commit()
        object1 = DBSession.query(ApproveRequiredObject).one()
        self.assertTrue(object1.is_approved)

        json = object1.to_dict()
        self.assertIn('isApproved', json)

        self.assertEqual(DBSession.query(ApproveRequiredObject).filter(ApproveRequiredObject.is_approved).count(), 1)
        self.assertEqual(ApproveRequiredObject.filter_approved().count(), 1)

        self.assertFalse(ApproveRequiredObject.import_value(ApproveRequiredObject.is_approved, 'false'))
        self.assertFalse(ApproveRequiredObject.import_value(ApproveRequiredObject.is_approved, 'FALSE'))
        self.assertFalse(ApproveRequiredObject.import_value(ApproveRequiredObject.is_approved, 'False'))
        self.assertTrue(ApproveRequiredObject.import_value(ApproveRequiredObject.is_approved, 'true'))
        self.assertTrue(ApproveRequiredObject.import_value(ApproveRequiredObject.is_approved, 'TRUE'))
        self.assertTrue(ApproveRequiredObject.import_value(ApproveRequiredObject.is_approved, 'True'))

        self.assertEqual(ApproveRequiredObject.import_value(ApproveRequiredObject.title, 'title'), 'title')
示例#5
0
    def see(self, id):
        id = int_or_notfound(id)
        member = Member.current()

        message = DBSession.query(Message).get(id)
        if message is None:
            raise HTTPNotFound()

        if message.sender_id == member.id:
            raise HTTPStatus('621 Can Not See Own Message')

        member_message_seen = DBSession.query(MemberMessageSeen) \
            .filter(MemberMessageSeen.member_id == member.id) \
            .filter(MemberMessageSeen.message_id == message.id) \
            .one_or_none()

        if member_message_seen is not None:
            raise HTTPStatus('619 Message Already Seen')

        query = DBSession.query(Message) \
            .filter(Message.target_id == message.target_id) \
            .filter(Message.created_at <= message.created_at) \
            .filter(Message.seen_at == None) \
            .filter(Message.sender_id != member.id) \

        query = Message.filter_by_request(query)

        for m in query:
            m.seen_by.append(member)

        seen_message = message.to_dict()
        seen_message.update({'type': 'seen'})
        queues.push(settings.messaging.workers_queue, seen_message)
        return message
示例#6
0
    def subscribe(self):
        member = Member.current()
        query = DBSession.query(Room)
        requested_rooms = Target.filter_by_request(query).all()

        if len(requested_rooms) >= settings.room.subscription.max_length:
            raise HTTPStatus(
                f'716 Maximum {settings.room.subscription.max_length} Rooms '
                f'To Subscribe At A Time')

        requested_rooms_id = {i.id for i in requested_rooms}

        subscribed_rooms = DBSession.query(TargetMember) \
            .filter(TargetMember.member_id == member.id) \
            .join(Target, Target.id == TargetMember.target_id) \
            .filter(Target.type == 'room') \
            .all()
        subscribed_rooms_id = {i.target_id for i in subscribed_rooms}
        not_subscribed_rooms_id = requested_rooms_id - subscribed_rooms_id

        flush_counter = 0
        for each_room_id in not_subscribed_rooms_id:
            flush_counter += 1
            target_member = TargetMember(target_id=each_room_id,
                                         member_id=member.id)
            DBSession.add(target_member)
            if flush_counter % 10 == 0:
                DBSession.flush()

        not_subscribed_rooms = DBSession.query(Target) \
            .filter(Target.id.in_(not_subscribed_rooms_id))
        return not_subscribed_rooms
示例#7
0
    def test_modified_mixin(self):

        # noinspection PyArgumentList
        instance = ModificationCheckingModel(
            title='test title',
        )

        DBSession.add(instance)
        DBSession.commit()
        self.assertIsNone(instance.modified_at)
        self.assertIsNotNone(instance.created_at)
        self.assertEqual(instance.last_modification_time, instance.created_at)

        instance = DBSession.query(ModificationCheckingModel).one()
        self.assertIsNone(instance.modified_at)
        self.assertIsNotNone(instance.created_at)
        self.assertEqual(instance.last_modification_time, instance.created_at)

        instance.title = 'Edited title'
        DBSession.commit()
        self.assertIsNotNone(instance.modified_at)
        self.assertIsNotNone(instance.created_at)
        self.assertEqual(instance.last_modification_time, instance.modified_at)

        instance = DBSession.query(ModificationCheckingModel).one()
        self.assertIsNotNone(instance.modified_at)
        self.assertIsNotNone(instance.created_at)
        self.assertEqual(instance.last_modification_time, instance.modified_at)
示例#8
0
    def info(self):
        from sharedlists import __version__ as appversion

        users = DBSession.query(User).count()
        lists = DBSession.query(Item.ownerid, Item.list) \
            .group_by(Item.ownerid, Item.list).count()

        result = [
            f'Shared Lists v{appversion}',
            f'Total Lists: {lists}',
            f'Total Users: {users}',
        ]

        me = context.identity.id
        mylists = DBSession.query(Item.ownerid, Item.list) \
            .filter(Item.ownerid == me) \
            .group_by(Item.ownerid, Item.list) \
            .count()
        myitems = DBSession.query(Item.ownerid, Item.list) \
            .filter(Item.ownerid == me) \
            .count()
        result.append(f'My Lists: {mylists}')
        result.append(f'My Items: {myitems}')

        result.append('')
        return CR.join(result)
示例#9
0
    def list(self):
        current_user = DBSession.query(Member) \
            .filter(Member.reference_id == context.identity.reference_id) \
            .one()
        query = DBSession.query(Room)
        if not context.identity.is_in_roles('admin'):
            query = query.filter(Room.owner_id == current_user.id)

        return query
示例#10
0
文件: contact.py 项目: Carrene/jaguar
 def list(self):
     current_member = DBSession.query(Member) \
         .filter(Member.reference_id == context.identity.reference_id) \
         .one()
     query = DBSession.query(Member) \
         .filter(
             MemberContact.member_id == current_member.id,
             MemberContact.contact_member_id == Member.id
         )
     return query
示例#11
0
 def is_member(self, target_id):
     return DBSession.query(Member).join(TargetMember) \
         .filter(
             TargetMember.target_id == target_id,
             TargetMember.member_id == self.id
         ) \
         .count()
示例#12
0
    def claim(self):
        email = context.form.get('email')
        email_pattern = r'(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)'
        if not email:
            raise HTTPBadRequest()

        if not re.match(email_pattern, email):
            raise HTTPStatus('701 Invalid email format.')

        if DBSession.query(Member.email).filter(Member.email == email).count():
            raise HTTPStatus(
                '601 The requested email address is already registered.')

        # FIXME: Token should be put in payload
        serializer = \
            itsdangerous.URLSafeTimedSerializer(settings.activation.secret)
        token = serializer.dumps(email)
        DBSession.add(
            ActivationEmail(to=email,
                            subject='Activate your NueMD Coder account',
                            body={
                                'activation_token': token,
                                'activation_url': settings.activation.url
                            }))
        return dict(email=email)
示例#13
0
    def get(self, id):
        int_or_notfound(id)
        business = DBSession.query(Business), get(id)
        if business is None:
            HTTPNotFound()

        return business
示例#14
0
    def get(self, id):
        id = int_or_notfound(id)
        member = DBSession.query(Member).get(id)
        if member is None:
            raise HTTPNotFound()

        return member
示例#15
0
    def verify_token(self, encoded_token):
        principal = CASPrincipal.load(encoded_token)
        member = DBSession.query(Member) \
            .filter(Member.reference_id == principal.reference_id) \
            .one_or_none()
        if not member and not 'HTTP_X_OAUTH2_ACCESS_TOKEN' in context.environ:
            raise HTTPBadRequest()

        access_token = context.environ['HTTP_X_OAUTH2_ACCESS_TOKEN'] \
            if 'HTTP_X_OAUTH2_ACCESS_TOKEN' in context.environ \
            else member.access_token

        cas_member = CASClient().get_member(access_token)
        if cas_member['email'] != principal.email:
            raise HTTPBadRequest()

        if member:
            if member.title != cas_member['title']:
                member.title = cas_member['title']

            if member.first_name != cas_member['firstName']:
                member.first_name = cas_member['firstName']

            if member.avatar != cas_member['avatar']:
                member.avatar = cas_member['avatar']

            if member.last_name != cas_member['lastName']:
                member.last_name = cas_member['lastName']

        DBSession.commit()
        return principal
示例#16
0
    def _get_items(cls, listtitle):
        query = DBSession.query(Item) \
            .filter(Item.ownerid == context.identity.id) \
            .filter(Item.list == listtitle) \
            .order_by(Item.id)

        return [f'{i.title}{CR}' for i in query]
示例#17
0
    def safe_member_lookup(condition):
        member = DBSession.query(Member).filter(condition).one_or_none()

        if member is None:
            raise HTTPStatus('603 Incorrect Email Or Password')

        return member
示例#18
0
    def safe_member_lookup(condition):
        query = DBSession.query(Member)
        member = Member.exclude_deleted(query).filter(condition).one_or_none()
        if member is None:
            raise HTTPBadRequest()

        return member
示例#19
0
    def get(self, id):
        id = int_or_notfound(id)
        card = DBSession.query(Card).get(id)
        if not member:
            raise HTTPNotFound()

        return card
示例#20
0
    def update(self, id):
        id = int_or_notfound(id)
        member = DBSession.query(Member).get(id)
        if member is None:
            raise HTTPNotFound()

        member.update_from_request()
        return member
示例#21
0
文件: member.py 项目: hmnfalahi/tost
    def create(self):
        member_username_check = DBSession.query(Member) \
            .filter(Member.user_name == context.form.get('userName')) \
            .one_or_none()
        if member_username_check is not None:
            raise StatusRepetitiveUsername()

        member_email_check = DBSession.query(Member) \
            .filter(Member.email == context.form.get('email')) \
            .one_or_none()
        if member_email_check is not None:
            raise StatusRepetitiveEmail()

        member = Member()
        member.update_from_request()
        DBSession.add(member)
        return member
示例#22
0
 def to_dict(self):
     result = super().to_dict()
     first_message = DBSession.query(TicketMessage) \
         .filter(TicketMessage.ticket_id == self.id) \
         .order_by(TicketMessage.created_at) \
         .first()
     result['firstMessage'] = first_message.to_dict() if (first_message is not None) else None
     return result
示例#23
0
    def _get_member(self, id):
        id = int_or_notfound(id)

        member = DBSession.query(Member).filter(Member.id == id).one_or_none()
        if member is None:
            raise HTTPNotFound()

        return member
示例#24
0
    def unregister(self, id):
        id = int_or_notfound(id)
        member = DBSession.query(Member).get(id)
        if member is None:
            raise HTTPNotFound()

        DBSession.delete(member)
        return member
示例#25
0
 def list(self):
     query = DBSession.query(Target) \
         .join(TargetMember) \
         .filter(
             Target.id == TargetMember.target_id,
             TargetMember.member_id == context.identity.id
         )
     return query
示例#26
0
    def _get_current_user(cls):
        if not hasattr(context, 'identity') or context.identity is None:
            return None

        principal = context.identity
        return DBSession.query(User) \
            .filter(User.id == principal.payload.get('id')) \
            .one_or_none()
示例#27
0
文件: direct.py 项目: Carrene/jaguar
    def create(self):
        user_id = context.form.get('userId')
        destination = DBSession.query(Member) \
            .filter(Member.id == user_id).one_or_none()
        if destination is None:
            raise HTTPStatus('611 Member Not Found')

        current_user = DBSession.query(Member) \
            .filter(Member.reference_id == context.identity.reference_id) \
            .one()
        is_blocked = DBSession.query(member_block) \
            .filter(or_(
                and_(
                    member_block.c.member_id == user_id,
                    member_block.c.blocked_member_id == current_user.id
                ),
                and_(
                    member_block.c.member_id == current_user.id,
                    member_block.c.blocked_member_id == user_id
                )
            )) \
            .count()
        if is_blocked:
            raise HTTPStatus(
                '613 Not Allowed To Create Direct With This Member')

        source = Member.current()

        cte = select([
            TargetMember.target_id.label('direct_id'),
            func.array_agg(aggregate_order_by(TargetMember.member_id,
                                              TargetMember.member_id),
                           type_=ARRAY(Integer)).label('members')
        ]).group_by(TargetMember.target_id).cte()

        direct = DBSession.query(Direct) \
            .join(cte, cte.c.direct_id == Direct.id) \
            .filter(cte.c.members == sorted([source.id, user_id])) \
            .one_or_none()

        if direct:
            return direct

        direct = Direct(members=[source, destination])
        return direct
示例#28
0
 def reset(self):
     password = context.form.get('password')
     reset_password_token = context.form.get('resetPasswordToken')
     reset_password_token_payload = \
         ResetPasswordToken.load(reset_password_token)
     email = reset_password_token_payload['email']
     member = DBSession.query(Member).filter(Member.email == email).one()
     member.password = password
     return {}
示例#29
0
    def create(self):
        title = context.form.get('title')

        if DBSession.query(Person).filter(Person.title == title).count():
            raise HTTPStatus('600 Already person has existed')

        person = Person(title=context.form.get('title'))
        DBSession.add(person)
        return person
示例#30
0
    def get(self, title: str):
        person = DBSession.query(Person) \
            .filter(Person.title == title) \
            .one_or_none()

        if person is None:
            raise HTTPNotFound()

        return person