コード例 #1
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.tid = 1, 2, 3
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'tid'}:
         return E.key
     if not request.session['is_login']:
         return E.auth
     try:
         team = Team.objects.get(id=int(decode(kwargs['tid'])))
     except:
         return E.tid
     try:
         user = User.objects.get(id=int(decode(request.session['uid'])))
         owner = Member.objects.get(member=user, team=team)
         members = Member.objects.filter(team=team)
     except:
         return E.auth
     if owner.auth != 'owner':
         return E.auth
     try:
         for m in members:
             if not send_team_dismiss_message(team=team, mu=m.member):
                 return E.uk
         team.root.move(user.root)
         # 篡位嗷
         record_create(user, team.root)
         team.root.bfs_apply(
             func=lambda f: upd_record_user('create', f, old_user=None, new_user=user)
         )
         team.delete()
     except:
         return E.uk
     return 0
コード例 #2
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.typo, E.exist = 1, 2, 3, 4
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'tid', 'acc'}:
         return E.key
     if not request.session['is_login']:
         return E.auth
     try:
         user1 = User.objects.get(id=int(decode(request.session['uid'])))
         print(1)
         user2 = User.objects.get(acc=kwargs['acc'])
         print(2)
         team = Team.objects.get(id=int(decode(kwargs['tid'])))
         print(3)
         auth = Member.objects.get(member=user1, team=team).auth
         print(4)
     except:
         return E.uk
     if auth == 'member':
         return E.auth
     if Member.objects.filter(member=user2, team=team).exists():
         return E.exist
     try:
         # Member.objects.create(member=user2, team=team, author='member')
         print(111)
         if not send_team_invite_message(team, user1, user2):
             return E.uk
     except:
         return E.uk
     return 0
コード例 #3
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.tid, E.uid = 1, 2, 3, 4
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'tid', 'list'}:
         return E.key
     if not request.session['is_login']:
         return E.auth
     try:
         team = Team.objects.get(id=int(decode(kwargs['tid'])))
     except:
         return E.tid
     try:
         u = User.objects.get(id=int(decode(request.session['uid'])))
         owner = Member.objects.get(member=u, team=team)
     except:
         return E.auth
     if owner.auth != 'owner':
         return E.auth
     for uid in kwargs['list']:
         try:
             u = User.objects.get(id=uid)
             member = Member.objects.get(member=u, team=team)
             member.auth = 'admin' if member.auth == 'member' else 'member'
         except:
             return E.uid
     return 0
コード例 #4
0
 def get(self, request):
     u = User.objects.filter(id=int(decode(request.session['uid'])))
     if not u.exists():
         return False, -1
     u = u.get()
     if dict(request.GET).keys() != {'id', 'type'}:
         return False, 1
     try:
         did = int(decode(request.GET.get('id')))
     except:
         return False, -1
     is_starred = False
     if not Collection.objects.filter(Q(user_id=u.id)
                                      | Q(ent_id=did)).exists():
         is_starred = True
     return is_starred, 0
コード例 #5
0
    def post(self, request):
        E = ED()
        E.u, E.k = -1, 1
        E.au, E.not_found = 2, 3
        if not request.session.get('is_login', False):
            return E.au
        u = User.get_via_encoded_id(request.session['uid'])
        if u is None:
            return E.au
        # todo: 更多权限判断
        kwargs: dict = json.loads(request.body)
        if kwargs.keys() != {'id', 'type'}:
            return E.k

        e = Entity.objects.filter(id=int(decode(kwargs['id'])))
        if not e.exists():
            return E.not_found
        e = e.get()
        if not e.is_deleted:
            return E.not_found
        if e.father.backtrace_deleted:
            return E.not_found
        e.is_deleted = False
        e.save()

        return 0
コード例 #6
0
ファイル: views.py プロジェクト: aikx/diamond_backend
    def post(self, request):
        errc = EasyDict()
        errc.unknown = -1
        errc.toobig = 3

        file = request.FILES.get("file", None)
        if not file:
            return '', errc.unknown
        u = User.objects.filter(id=int(decode(request.session['uid'])))
        if not u.exists():
            return '', errc.unknown
        u = u.get()

        if file.size > MAX_UPLOADED_FSIZE:
            return '', errc.toobig

        file_name = ''.join(
            [random.choice(string.ascii_letters + string.digits) for _ in range(FNAME_DEFAULT_LEN)]) + '.' + \
                    str(file.name).split(".")[-1]
        file_path = os.path.join(DEFAULT_PROFILE_ROOT, file_name)
        with open(file_path, 'wb') as dest:
            [dest.write(chunk) for chunk in file.chunks()]
        u.portrait = os.path.join(BASE_DIR, file_path)
        try:
            u.save()
        except:
            return '', errc.unknown
        return u.portrait, 0
コード例 #7
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.root = 1, 2, 3
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'fid'}:
         return None, E.key
     if not request.session['is_login']:
         return None, E.auth
     try:
         user = User.objects.get(id=int(decode(request.session['uid'])))
         entity = Entity.get_via_encoded_id(kwargs['fid'])
     except:
         return None, E.uk
     if not entity.can_convert_to_team():
         return None, E.root
     try:
         team = Team.objects.create(root=entity)
         Member.objects.create(member=user, team=team, auth='owner')
         entity.father = None
         entity.name = team.name + ROOT_SUFFIX
         entity.save()
         record_create(user, entity, delete=True)
     except:
         return None, E.uk
     return team.id, 0
コード例 #8
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.tid, E.name, E.intro = 1, 2, 3, 4, 5
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'tid', 'name', 'intro', 'img'}:
         return E.key
     if not request.session['is_login']:
         return E.auth
     try:
         team = Team.objects.get(id=int(decode(kwargs['tid'])))
     except:
         return E.tid
     if not (0 < len(kwargs['name']) <= TEAM_NAME_MAX_LENGTH and str(kwargs['name']).isprintable()):
         return E.name
     if not 0 < len(kwargs['intro']) <= TEAM_INTRO_MAX_LENGTH:
         return E.intro
     team.name = kwargs['name']
     team.intro = kwargs['intro']
     team.portrait = kwargs['img']
     try:
         team.save()
     except:
         return E.uk
     return 0
コード例 #9
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def get(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.tid = 1, 2, 3
     if dict(request.GET).keys() != set():
         return E.key, [], []
     if not request.session['is_login']:
         return E.auth
     uid = int(decode(request.session['uid']))
     try:
         members = Member.objects.filter(member=uid)
     except:
         return E.uk
     my_team = []
     join_team = []
     for m in members:
         if m.auth == 'owner':
             my_team.append({
                 'tid': encode(str(m.team.id)),
                 'name': m.team.name,
                 'intro': m.team.intro,
                 'portrait': m.team.portrait if m.team.portrait else '',
                 'member_count': len(Member.objects.filter(team=m.team))
             })
         else:
             join_team.append({
                 'tid': encode(str(m.team.id)),
                 'name': m.team.name,
                 'intro': m.team.intro,
                 'portrait': m.team.portrait if m.team.portrait else '',
                 'member_count': len(Member.objects.filter(team=m.team))
             })
     return 0, my_team, join_team
コード例 #10
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.exist, E.jid = 1, 2, 3, 4
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'jid', 'result'}:
         return E.key
     if not request.session['is_login']:
         return E.auth
     try:
         msg = Message.objects.get(id=int(decode(kwargs['jid'])))
     except:
         return E.jid
     try:
         team = Team.objects.get(id=msg.related_id)  # 消息里的id未加密
     except:
         return E.uk
     if kwargs['result']:
         if Member.objects.filter(team=team, member=msg.owner).exists():
             return E.exist
         try:
             Member.objects.create(team=team, member=msg.owner, auth='member')
             if not send_team_accept_message(team=team, su=msg.owner, mu=msg.sender, if_accept=True):
                 return E.uk
         except:
             return E.uk
     else:
         if not send_team_accept_message(team=team, su=msg.owner, mu=msg.sender, if_accept=False):
             return E.uk
     return 0
コード例 #11
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def get(self, request):
     u = User.objects.filter(id=int(decode(request.session['uid'])))
     if not u.exists():
         return 0, -1
     u = u.get()
     count = Message.objects.filter(Q(owner_id=u.id) | Q(is_read=False)).count()
     return count, 0
コード例 #12
0
ファイル: views.py プロジェクト: aikx/diamond_backend
    def get(self, request):
        print(request.GET)
        E = EasyDict()
        E.uk = -1
        E.key, E.auth, E.tid = 1, 2, 3
        if dict(request.GET).keys() != {'tid'}:
            return E.key, '', '', '', '', 0, '', '', [], []
        uid = int(decode(request.session['uid']))
        tid = int(decode(request.GET.get('tid')))
        try:
            user = User.objects.get(id=uid)
        except:
            return E.auth, '', '', '', '', 0, '', '', [], []
        try:
            team = Team.objects.get(id=tid)
        except:
            return E.tid, '', '', '', '', 0, '', '', [], []
        members = Member.objects.filter(team=team)
        if not members.exists():
            return E.tid, '', '', '', '', 0, '', '', [], []
        name = team.name
        intro = team.intro
        portrait = team.portrait if team.portrait else ''
        create_dt = team.create_dt_str
        doc_num = len(team.root.subtree)
        cuid = ''
        cname = ''
        norm = []
        admin = []

        for m in members:
            if m.auth == 'owner':
                cuid = encode(str(m.member.id))
                cname = m.member.name
            elif m.auth == 'admin':
                admin.append({
                    'uid': encode(str(m.member.id)),
                    'name': m.member.name
                })
            else:
                norm.append({
                    'uid': encode(str(m.member.id)),
                    'name': m.member.name
                })
        return 0, name, intro, portrait, create_dt, doc_num, cuid, cname, norm, admin
コード例 #13
0
ファイル: views.py プロジェクト: aikx/diamond_backend
    def get(self, request):
        if dict(request.GET).keys() != {'mid'}:
            return 1, [] * 13
        try:
            mid = int(decode(request.GET.get('mid')))
        except ValueError:
            return -1, [] * 13

        u = User.objects.filter(id=int(decode(request.session['uid'])))

        if not u.exists():
            return -1, [] * 13
        u = u.get()
        msg = Message.objects.filter(id=mid)
        if not msg.exists():
            return -1, [] * 13
        msg = msg.get()
        return 0, msg.is_read, msg.is_process, u.is_dnd, msg.title, msg.portrait, msg.type, encode(msg.related_id) if msg.related_id else '', msg.content, cur_time(), msg.dt_str
コード例 #14
0
ファイル: views.py プロジェクト: aikx/diamond_backend
    def post(self, request):
        if request.session.get('is_login', None):  # 已登录
            try:
                u = User.objects.get(id=int(decode(request.session['uid'])))
            except:
                return 0, -1
            print(1)
            if u.login_date != date.today():
                u.login_date = date.today()
                u.wrong_count = 0
                try:
                    u.save()
                except:
                    return 0, -1
            return 0, 0
        print(2)
        E = EasyDict()
        E.uk = -1
        E.key, E.exist, E.pwd, E.many = 1, 2, 3, 4
        kwargs: dict = json.loads(request.body)
        if kwargs.keys() != {'acc', 'pwd'}:
            return 0, E.key
        print(3)
        u = User.objects.filter(acc=kwargs['acc'])
        if not u.exists():
            return 0, E.exist
        u = u.get()
        print(4)
        if u.login_date != date.today():
            u.login_date = date.today()
            u.wrong_count = 0
            try:
                u.save()
            except:
                return u.wrong_count, E.uk

        if u.wrong_count == MAX_WRONG_PWD:
            return u.wrong_count, E.many
        print(4.5)
        if u.pwd != str(hash_password(kwargs['pwd'])):
            print(5)
            u.wrong_count += 1
            try:
                u.save()
            except:
                return 0, -1
            return u.wrong_count, E.pwd
        print(6)
        request.session['is_login'] = True
        request.session['uid'] = encode(u.id)
        request.session['name'] = u.name
        request.session.save()
        try:
            u.save()
        except:
            return u.wrong_count, E.uk
        return u.wrong_count, 0
コード例 #15
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'mid'}:
         return 1,
     msg = Message.objects.filter(id=int(decode(kwargs['mid'])))
     if not msg.exists():
         return -1,
     msg = msg.get()
     msg.is_read = True
     msg.save()
     return 0,
コード例 #16
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'is_dnd'}:
         return 1,
     u = User.objects.filter(id=int(decode(request.session['uid'])))
     if not u.exists():
         return -1,
     u = u.get()
     u.is_dnd = kwargs['is_dnd']
     u.save()
     return 0,
コード例 #17
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def get(self, request):
     if not request.session.get('is_login', None):
         return '', '', '', '', 2
     try:
         uid = int(decode(request.session.get('uid', None)))
     except:
         return '', '', '', '', -1
     u = User.objects.filter(id=uid)
     if not u.exists():
         return '', '', '', '', -1
     u = u.get()
     return u.name, u.portrait, u.acc, encode(u.id), 0
コード例 #18
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.tid, E.exist, E.uid = 1, 2, 3, 4, 5
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'tid', 'uid'}:
         return E.key
     if not request.session['is_login']:
         return E.auth
     try:
         user1 = User.objects.get(id=int(decode(request.session['uid'])))
         user2 = User.objects.get(id=int(decode(kwargs['uid'])))
         team = Team.objects.get(id=int(decode(kwargs['tid'])))
         auth = Member.objects.get(member=user1, team=team).auth
     except:
         return E.uk
     if auth == 'member':
         return E.auth
     try:
         u = Member.objects.filter(member=user2, team=team)
     except:
         return E.uk
     if not u.exists():
         return E.exist
     try:
         if not send_team_out_message(team, user2):
             return E.uk
         old_user = u.get().member
         team.root.bfs_apply(
             func=lambda ent: upd_record_user(
                 auth='create', ent=ent,
                 old_user=old_user,
                 new_user=team.owner
             )
         )
         
         u.delete()
     except:
         return E.uk
     return 0
コード例 #19
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.tid, E.exist = 1, 2, 3, 4
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'tid'}:
         return E.key
     if not request.session['is_login']:
         return E.auth
     try:
         team = Team.objects.get(id=int(decode(kwargs['tid'])))
         user = User.objects.get(id=int(decode(request.session['uid'])))
     except:
         return E.tid
     try:
         m = Member.objects.get(team=team, member=user)
     except:
         return E.exist
     try:
         m.delete()
     except:
         return E.uk
     return 0
コード例 #20
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def get(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.tid = 1, 2, 3
     if dict(request.GET).keys() != {'tid'}:
         return '', E.key
     if not request.session['is_login']:
         return 'none', E.auth
     uid = int(decode(request.session['uid']))
     tid = int(decode(request.GET.get('tid')))
     try:
         user = User.objects.get(id=uid)
     except:
         return '', E.uk
     try:
         team = Team.objects.get(id=tid)
     except:
         return '', E.tid
     try:
         identity = Member.objects.get(team=team, member=user).auth
     except:
         return 'none', 0
     return identity, 0
コード例 #21
0
    def post(self, request):
        u = User.objects.filter(id=int(decode(request.session['uid'])))
        if not u.exists():
            return -1
        u = u.get()
        kwargs: dict = json.loads(request.body)
        if kwargs.keys() != {'id', 'type', 'is_starred'}:
            return 1,

        ent = Entity.get_via_encoded_id(kwargs['id'])
        if ent is None:
            return 3

        if kwargs['is_starred']:
            try:
                Collection.objects.create(user=u, ent=ent)
            except:
                return -1
            return 0
        else:
            Collection.objects.filter(
                ent=ent, user_id=int(decode(request.session['uid']))).delete()
            return 0
コード例 #22
0
ファイル: views.py プロジェクト: aikx/diamond_backend
    def get(self, request):
        if dict(request.GET).keys() != {'page', 'each'}:
            return 1, [], 0, ''
        try:
            page = int(request.GET.get('page'))
            each = int(request.GET.get('each'))
        except ValueError:
            return -1, [], 0, ''

        u = User.objects.filter(id=int(decode(request.session['uid'])))
        if not u.exists():
            return -1, [], 0, ''
        u = u.get()
        messages = Message.objects.filter(owner_id=u.id).order_by('dt')[(page - 1) * each: page * each]
        msg = []
        for message in messages:
            msg.append({
                'mid': encode(message.id),
                'dt': message.dt_str,
            })
        return 0, cur_time(), len(msg), msg
コード例 #23
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     E = EasyDict()
     E.uk = -1
     E.key, E.auth, E.name = 1, 2, 3
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'name'}:
         return E.key
     if not request.session['is_login']:
         return E.auth
     try:
         owner = User.objects.get(id=int(decode(request.session['uid'])))
     except:
         return E.auth
     if not (0 <= len(str(kwargs['name'])) <= TEAM_NAME_MAX_LENGTH and str(kwargs['name']).isprintable()):
         return E.name
     try:
         # 创建新根文件夹
         root = Entity.locate_root(kwargs['name'])
         team = Team.objects.create(name=kwargs['name'], root=root)
         Member.objects.create(team=team, member=owner, auth='owner')
     except:
         return E.uk
     return 0
コード例 #24
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     if not request.session['is_login']:
         return 2,
     kwargs: dict = json.loads(request.body)
     if kwargs.keys() != {'name', 'img'}:
         return 1,
     if not CHECK_NAME(kwargs['name']):
         return 3,
     try:
         uid = int(decode(request.session.get('uid', None)))
     except:
         return -1
     u = User.objects.filter(id=uid)
     if not u.exists():
         return -1
     u = u.get()
     u.name = kwargs['name']
     u.portrait = kwargs['img'].replace('\\\\', '\\')
     try:
         u.save()
     except:
         return -1
     return 0
コード例 #25
0
    def post(self, request):
        E = ED()
        E.u, E.k = -1, 1
        E.au, E.not_found = 2, 3
        if not request.session.get('is_login', False):
            return E.au
        u = User.get_via_encoded_id(request.session['uid'])
        if u is None:
            return E.au
        # todo: 更多权限判断
        kwargs: dict = json.loads(request.body)
        if kwargs.keys() != {'id', 'type'}:
            return E.k

        e = Entity.objects.filter(id=int(decode(kwargs['id'])))
        if not e.exists():
            return E.not_found
        ent: Entity = e.get()
        if not ent.is_deleted:
            return E.not_found

        [so.delete() for so in ent.subtree]

        return 0
コード例 #26
0
 def get_via_encoded_id(encoded_id):
     q = Message.objects.filter(id=int(decode(encoded_id)))
     return q.get() if q.exists() else None
コード例 #27
0
ファイル: views.py プロジェクト: aikx/diamond_backend
 def post(self, request):
     u = User.objects.filter(id=int(decode(request.session['uid'])))
     if not u.exists():
         return -1, False
     u = u.get()
     return 0, u.is_dnd
コード例 #28
0
ファイル: models.py プロジェクト: aikx/diamond_backend
 def get_via_encoded_id(encoded_id):
     t: QuerySet = Team.objects.filter(id=int(decode(encoded_id)))
     return t.get() if t.exists() else None
コード例 #29
0
ファイル: models.py プロジェクト: aikx/diamond_backend
 def get_via_encoded_id(encoded_id):
     m: QuerySet = Member.objects.filter(id=int(decode(encoded_id)))
     return m.get() if m.exists() else None
コード例 #30
0
 def get_via_encoded_id(encoded_id):
     u = User.objects.filter(id=int(decode(encoded_id)))
     return u.get() if u.exists() else None