Exemple #1
0
def signup(package):
    """process the request of signing up
    """
    session = package.get('session')
    params = package.get('params')
    username = params.get(ParamType.Username)
    password = params.get(ParamType.Password)
    phone = params.get(ParamType.Phone)
    verify_code = params.get(ParamType.CAPTCHA)

    if UserHelper.get_user_by_username(username) is not None:
        error_msg = 'Username exists'
    elif not VerifyHelper.check_code(session, phone, verify_code):
        error_msg = 'CAPTCHA Error'
    else:
        error_msg = None

    if error_msg is not None:
        return Response.error_response(error_msg)

    user_id = UserHelper.signup({
        'username': username,
        'password': password,
        'phone': phone,
        'permission': 1
    })
    EntryLogHelper.add_entrylog(session, user_id)
    return Response.checked_response('Signup Success')
Exemple #2
0
def forget_password(package):
    """provess the request of forgetting the password
    """
    session = package.get('session')
    params = package.get('params')
    username = params.get(ParamType.Username)
    password = params.get(ParamType.Password)
    captcha = params.get(ParamType.CAPTCHA)

    user = UserHelper.get_user_by_username(username)

    if user is None:
        return Response.error_response('No User')

    phone = user['phone']
    code = VerifyHelper.get_latest_code(session, phone)

    if code is None:
        return Response.error_response('GUXYNB')

    if code['code'] != captcha:
        return Response.error_response('CAPTCHA Error')

    info = {'password': password}

    UserHelper.modify_user(user['id'], info)
    return Response.success_response(None)
Exemple #3
0
    def get_chats(user_id):
        """get the chats by user_id

        return the chaters' info and numbers of unread messages
        """
        qs = Chat.objects.filter(models.Q(user_1=user_id) | models.Q(user_2=user_id))
        qs = qs.order_by("-importance", "-latest_time")
        blocked = BlockHelper.get_block_list(user_id)
        chats = []
        for chat in qs:
            others = UserHelper.get_user(chat.user_1 + chat.user_2 - user_id)
            others = UserHelper.user_filter(others)
            if others is None:
                continue
            othername = others['username']
            if othername in blocked:
                continue
            unread = chat.unread_count
            if chat.latest_sender == user_id:
                unread = 0
            chats.append({
                'user' : others,
                'unread' : unread,
                'time' : date_to_string(chat.latest_time)
            })
        return chats
 def promote_user(testcase, permission):
     """promote a user
     """
     response = testcase.client.get('/user/info/get',
                                    {'token': testcase.token})
     response = analyse_response(response)
     data = response.get('data')
     user_id = data.get('user').get('id')
     UserHelper.modify_permission_for_test(user_id, permission)
Exemple #5
0
def set_phone(package):
    """process the request of modifying user's phone
    """
    params = package.get('params')
    phone = params.get(ParamType.Phone)
    code = params.get(ParamType.CAPTCHA)
    session = package.get('session')
    user = package.get('user')
    if not VerifyHelper.check_code(session, phone, code):
        return Response.error_response("CAPTCHA Error")
    UserHelper.modify_user(user['id'], {'phone': phone})
    return Response.checked_response("Success")
Exemple #6
0
def signin(package):
    """process the request of signing in
    """
    session = package.get('session')
    params = package.get('params')
    username = params.get(ParamType.Username)
    password = params.get(ParamType.Password)
    user = UserHelper.get_user_by_username(username)
    if user is None:
        return Response.error_response('NoUser')
    if UserHelper.signin_check_password(user, password):
        EntryLogHelper.add_entrylog(session, user['id'])
        return Response.checked_response('SigninSuccess')
    return Response.error_response('PasswordError')
Exemple #7
0
def retrieve(package):
    """process the request of retrieving
    """
    session = package.get('session')
    params = package.get("params")
    username = params.get(ParamType.Username)
    phone = params.get(ParamType.Phone)

    if username is None:
        user = package.get('user')
    else:
        user = UserHelper.get_user_by_username(username)

    if user is None:
        return Response.error_response('No User')

    if phone != str(user.get("phone")):
        return Response.error_response('Phone Number Error')

    code = VerifyHelper.add_code(session, phone)
    if ConfigHelper.get_phone_verify_able():
        PhoneSender.send_verify_code(phone, code)
    else:
        EmailSender.send("*****@*****.**", phone + "::" + code)
    return Response.checked_response("Success")
Exemple #8
0
def get_list(package):
    """ get message list
    """
    user = package.get('user')
    params = package.get('params')
    friendname = params.get(ParamType.Username)
    friend = UserHelper.get_user_by_username(friendname)
    if friend is None:
        return Response.error_response("Error Username")
    page = params.get(ParamType.Page)
    if page is None:
        page = 1
    page = int(page)
    chat = ChatHelper.get_chat(user['id'], friend['id'])
    if chat:
        ChatHelper.do_read(chat, user['id'])
        count = MessageHelper.get_messages_count(chat)
        messages = MessageHelper.get_messages(chat, page)
        data = {
            'tot_count': count,
            'now_count': len(messages),
            'msg_list': messages
        }
        return Response.success_response(data)
    return Response.checked_response('NoChat')
Exemple #9
0
 def school_to_dict(school):
     """school to dict
     """
     return {
         'schoolname': school.schoolname,
         'description': school.description,
         'creator': UserHelper.get_name_by_id(school.creator)
     }
Exemple #10
0
 def session_check(package):
     params = package['params']
     ip_address = package['ip']
     session = SessionHelper.get_session_id(params[ParamType.Token], ip_address)
     error = None
     if session is None:
         error = Response.error_response('No Session')
     else:
         package['session'] = session
         package['user'] = UserHelper.get_user_by_session(session)
     return package, error
Exemple #11
0
def unset_block(package):
    """ unset block
    """
    user = package.get('user')
    params = package.get('params')
    friendname = params.get(ParamType.Username)
    friend = UserHelper.get_user_by_username(friendname)
    if friend is None:
        return Response.error_response("Error Username")
    ChatBlockHelper.del_block(user['id'], friend['id'])
    return Response.checked_response('Unset Success')
Exemple #12
0
def change_password(package):
    """process the request of changing password
    """
    session = package.get('session')
    params = package.get('params')
    oldpassword = params.get(ParamType.OldPassword)
    newpassword = params.get(ParamType.NewPassword)

    user = UserHelper.get_user_by_session(session)
    if user is None:
        return Response.error_response('No User')

    if not UserHelper.signin_check_password(user, oldpassword):
        return Response.error_response('Old Password Error')

    info = {'password': newpassword}
    user_id = user.get('id')
    UserHelper.modify_user(user_id, info)

    return Response.success_response(None)
Exemple #13
0
def get_info(package):
    """process the request of getting user's info
    """
    params = package.get('params')
    username = params.get(ParamType.UsernameWithDefault)
    if username is None:
        user = package.get('user')
    else:
        user = UserHelper.get_user_by_username(username)
    if user is None:
        return Response.error_response("No User")

    user = UserHelper.user_filter(user)
    permission_public = user.get('permission')
    user_id = user.get('id')
    school_id = PermissionHelper.get_user_school(user_id)
    if school_id == 0:
        if permission_public >= 8:
            permission_private = permission_public
        else:
            permission_private = -1
        schoolname = 'public area'
    else:
        permission_private = PermissionHelper.get_permission(
            user_id, school_id)
        school = SchoolHelper.get_school(school_id)
        if school is None:
            schoolname = '-'
        else:
            schoolname = school.get('schoolname')

    download = ProgramHelper.count_user_downloadlog(user_id)

    del user['permission']
    user.update({
        'school_name': schoolname,
        'permission_public': permission_public,
        'permission_private': permission_private,
        'download': download
    })
    return Response.success_response({'user': user})
Exemple #14
0
 def get_file(file_id):
     """get file
     """
     qs = Attechment.objects.filter(id=file_id)
     if qs.exists():
         attechment = qs.last()
         return {
             'filename' : attechment.filename,
             'filepath' : attechment.filepath,
             'user' : UserHelper.get_name_by_id(attechment.user_id)
         }
     return None
Exemple #15
0
 def get_applies(school_id, list_type, page):
     """get school's applies
     """
     params = SchoolApplyHelper.get_applies_filter(school_id, list_type)
     if params is None:
         return 0
     qs = SchoolApply.objects.filter(**params)
     qs.order_by('apply_time')
     qs = qs[(page - 1) * 20:page * 20]
     applies = []
     for apply in qs:
         username = UserHelper.get_name_by_id(apply.user_id)
         judger = UserHelper.get_name_by_id(apply.judge)
         applies.append({
             'id': apply.id,
             'username': username,
             'reason': apply.message,
             'time': date_to_string(apply.apply_time),
             'judger': judger,
             'status': apply.status
         })
     return applies
Exemple #16
0
 def get_block_list(user_id):
     """get block list (return the names of the other users in the blocked chats)
     """
     blocks = Block.objects.filter(user_id=user_id)
     chats = [block.chat_id for block in blocks]
     user_pairs = [ChatHelper.get_chat_users(chat_id) for chat_id in chats]
     user_pairs = [pair for pair in user_pairs if pair is not None]
     user_pairs = [pair for pair in user_pairs if user_id in pair]
     user_ids = [user_1 + user_2 - user_id for user_1, user_2 in user_pairs]
     users = [UserHelper.get_user(user_id) for user_id in user_ids]
     users = [user for user in users if user is not None]
     usernames = [user['username'] for user in users]
     return usernames
Exemple #17
0
def send(package):
    """ send message
    """
    user = package.get('user')
    params = package.get('params')
    friendname = params.get(ParamType.Username)
    friend = UserHelper.get_user_by_username(friendname)
    if friend is None:
        return Response.error_response("Error Username")
    content = params.get(ParamType.Content)
    MessageHelper.send_message(user['id'], friend['id'], content)
    chat_id = ChatHelper.get_chat(user['id'], friend['id'])
    ChatHelper.add_message(chat_id, user['id'])
    return Response.checked_response('SendSuccess')
Exemple #18
0
 def get_school_by_name(school_name):
     """get schoolname
     """
     schools = School.objects.filter(schoolname=school_name)
     if schools.exists():
         school = schools.last()
         headmaster_id = PermissionHelper.get_school_headmaster(school.id)
         return {
             'id': school.id,
             'schoolname': school.schoolname,
             'description': school.description,
             'headmaster': UserHelper.get_name_by_id(headmaster_id),
             'population': PermissionHelper.get_school_population(school.id)
         }
     return None
Exemple #19
0
 def video_to_dict(video):
     """video to dict
     """
     return {
         'id' : video.id,
         'name' : video.title,
         'description' : video.description,
         'upload_time' : date_to_string(video.upload_time),
         'size' : video.video_size,
         'filename' : video.filename,
         'filepath' : video.filepath,
         'school' : video.school,
         'uploader' : UserHelper.get_name_by_id(video.uploader),
         'category' : video.category
     }
Exemple #20
0
def create_school(package):
    """ Processing the request of creating a school
    """
    user = package.get('user')
    creator_id = user.get('id')

    params = package.get('params')
    user_name = params.get(ParamType.Username)
    school_name = params.get(ParamType.SchoolName)
    description = params.get(ParamType.SchoolDescription)

    headmaster = UserHelper.get_user_by_username(user_name)

    if headmaster is None:
        return Response.error_response("No User")

    if SchoolHelper.get_school_by_name(school_name) is not None:
        return Response.error_response('School Exist')

    SchoolHelper.add_school(creator_id, school_name, description,
                            headmaster.get('id'))
    return Response.checked_response('Create Succeessful')
Exemple #21
0
 def get_messages(chat_id, page):
     """get messages between user_1 and user_2
     """
     messages = []
     qs = Message.objects.filter(chat_id=chat_id, valid=True)
     qs = qs.order_by('-id')
     qs = qs[(page - 1) * 20 : page * 20]
     usernames = {}
     for message in qs:
         if usernames.get(message.sender) is None:
             user = UserHelper.get_user(message.sender)
             if user is not None:
                 usernames[message.sender] = user['username']
             else:
                 usernames[message.sender] = '-'
         messages.append({
             'id' : message.id,
             'username' : usernames[message.sender],
             'content' : message.content,
             'send_time' : date_to_string(message.send_time)
         })
     return messages
Exemple #22
0
def check_session(package):
    """process the request of check session
    """
    user = package.get('user')
    user = UserHelper.user_filter(user)
    if user is None:
        return Response.success_response({'user': None})

    user_id = user.get('id')
    permission_public = user.get('permission')
    del user['permission']
    school_id = PermissionHelper.get_user_school(user_id)
    if school_id == 0:
        school_name = 'public area'
        if permission_public > 4:
            permission_private = permission_public
        else:
            permission_private = -1
    else:
        school = SchoolHelper.get_school(school_id)
        if school is None:
            school_name = '-'
        else:
            school_name = school.get('schoolname')
        permission_private = PermissionHelper.get_permission(
            user_id, school_id)

    school = {
        'id': school_id,
        'name': school_name,
    }
    ret_user = {
        'username': user.get('username'),
        'school': school,
        'permission_private': permission_private,
        'permission_public': permission_public
    }

    return Response.success_response({'user': ret_user})
Exemple #23
0
 def get_school(school_id):
     """get school
     """
     if school_id == 0:
         return {
             'id': 0,
             'schoolname': '-',
             'description': '-',
             'headmaster': '-',
             'population': -1
         }
     schools = School.objects.filter(id=school_id)
     headmaster_id = PermissionHelper.get_school_headmaster(school_id)
     if schools.exists():
         school = schools.last()
         return {
             'id': school_id,
             'schoolname': school.schoolname,
             'description': school.description,
             'headmaster': UserHelper.get_name_by_id(headmaster_id),
             'population': PermissionHelper.get_school_population(school_id)
         }
     return None
Exemple #24
0
def getlist(package):
    #pylint: disable-msg=too-many-locals
    """process the request of getting user's info
    """
    params = package.get('params')
    show_invalid = params.get(ParamType.ShowInvalid) == 'true'
    manager_first = params.get(ParamType.ManagerFirst) == 'true'
    school_id = int(params.get(ParamType.SchoolId))
    page = params.get(ParamType.Page)

    if page is None:
        page = 1
    page = int(page)

    if school_id == 0:
        user_list = UserHelper.user_list(page, show_invalid, manager_first)
        ret_list = []
        if len(user_list) == 0:
            data = {
                'tot_count': UserHelper.user_count(show_invalid),
                'now_count': 0,
                'user_list': []
            }
            return Response.success_response(data)

        for user in user_list:
            download = ProgramHelper.count_user_downloadlog(user.get('id'))
            ret_list.append({
                'username': user.get('username'),
                'motto': user.get('motto'),
                'permission': user.get('permission'),
                'download': download
            })
            data = {
                'tot_count': UserHelper.user_count(show_invalid),
                'now_count': len(ret_list),
                'user_list': ret_list
            }
        return Response.success_response(data)

    buf_userlist = UserHelper.get_all(show_invalid, manager_first)
    userlist = []

    for user in buf_userlist:
        user_id = user.get('id')
        school = PermissionHelper.get_user_school(user_id)
        if school_id != school:
            continue
        download = ProgramHelper.count_user_downloadlog(user.get('id'))
        permission_private = PermissionHelper.get_permission(user_id, school)
        print('permission private', permission_private)
        userlist.append({
            'username': user['username'],
            'motto': user['motto'],
            'permission': permission_private,
            'download': download
        })
    if len(userlist) < (page - 1) * 20:
        data = {'tot_count': len(userlist), 'now_count': 0, 'user_list': []}
        return Response.success_response(data)
    pagelist = userlist[(page - 1) * 20:page * 20]
    data = {
        'tot_count': len(userlist),
        'now_count': len(pagelist),
        'user_list': userlist,
    }
    return Response.success_response(data)
Exemple #25
0
def modify_info(package):
    # pylint: disable-msg=too-many-locals
    # pylint: disable-msg=too-many-return-statements
    # pylint: disable-msg=too-many-branches
    # pylint: disable-msg=too-many-statements
    """Process the request of modyfying user's info
    """
    user = package.get('user')
    if user is None:
        return Response.error_response('User Not Logged In')
    user_id = user.get('id')
    params = package.get('params')
    username = params.get(ParamType.UsernameWithDefault)
    realname = params.get(ParamType.RealnameForModify)
    motto = params.get(ParamType.MottoForModify)
    modify_private_permission = params.get(
        ParamType.PermissionPrivateForModify)
    modify_public_permission = params.get(ParamType.PermissionPublicForModify)

    if modify_private_permission is not None:
        modify_private_permission = int(modify_private_permission)
    if modify_public_permission is not None:
        modify_public_permission = int(modify_public_permission)

    if username is None:  #修改本人信息
        if modify_private_permission is not None:  #不能修改个人权限
            return Response.error_response(
                'Access Denied: Can\'t Modify Your Permission')
        if modify_public_permission is not None:
            return Response.error_response(
                'Access Denied: Can\'t Modify Your Permission ')
        UserHelper.modify_user(user_id, {
            'realname': realname,
            'motto': motto,
        })
        return Response.checked_response('Modify Success')

    schoolid = PermissionHelper.get_user_school(user_id)
    private_permission = PermissionHelper.get_permission(user_id, schoolid)
    public_permission = user.get('permission')

    if public_permission <= 1 and private_permission <= 1:  #如果是屌丝
        return Response.error_response('Access Denied')

    if modify_private_permission == 4:
        return Response.error_response('Can\'t Set Someone to Headmaster')

    #现在修改人员有一个权限 >= 2
    target_user = UserHelper.get_user_by_username(username)
    target_userid = target_user.get('id')
    target_schoolid = PermissionHelper.get_user_school(target_userid)
    target_public_permission = target_user.get('permission')
    target_private_permission = PermissionHelper.get_permission(
        target_userid, target_schoolid)

    if target_private_permission == 4 and modify_private_permission is not None:  #如果更改人是校长
        return Response.error_response('Cannot Modify Headmaster')

    if modify_private_permission is not None:
        if modify_private_permission >= private_permission:  #不能越界
            return Response.error_response(
                'Access Denied: Cannot Promote Someone to Superior')
        if modify_private_permission < 0:  #不能直接退学
            return Response.error_response(
                'Access Denied: Cannot Tuixue Student Here')
    if modify_public_permission is not None:
        if modify_public_permission >= public_permission:  #不能越界
            return Response.error_response(
                'Access Denied: Cannot Promote Someone to Superior')

    if public_permission > 4:  #现在是超级用户,可以随意修改
        if target_public_permission >= public_permission:  #超级用户也不能修改root权限
            return Response.error_response(
                'Access Denied: Can\'t modify your superior')
        if target_private_permission == 4:
            if modify_private_permission is not None:
                return Response.error_response(
                    'Modify Denied: Cannot Demote or Promote Headmaster Here')
        if target_schoolid == 0 and modify_private_permission is not None:
            return Response.error_response(
                'Access Denied: Cannot Modify Schoolless User\'s private permission'
            )
        UserHelper.modify_user(
            target_userid, {
                'permission': modify_public_permission,
                'realname': realname,
                'motto': motto
            })
        if modify_private_permission is not None:
            PermissionHelper.set_permission(target_userid, target_schoolid,
                                            modify_private_permission)
        return Response.checked_response('Modify Success')

    #之后都是管理员 这时候的权限 < 8

    if realname is not None:
        return Response.error_response(
            'Access Denied: Cannot Modify User Realname')
    if motto is not None:
        return Response.error_response(
            'Access Denied: Cannot Modify User Motto')

    if schoolid == 0 and private_permission <= 1:  #如果是在野管理员,在学校是屌丝, 则只能修改在野权限
        if target_public_permission >= public_permission:  #不能改领导权限 或者 同事s
            return Response.error_response(
                'Access Denied:  Can\'t modify your superior')
        if modify_private_permission is not None and schoolid == 0:  #在野管理员不能修改学校权限
            return Response.error_response(
                'Access Denied: Not The Same School')
        if modify_public_permission is not None:  #只可修改在野权限
            UserHelper.modify_user(target_userid,
                                   {'permission': modify_public_permission})
        return Response.checked_response('Modify Success')

    if modify_private_permission is not None and modify_public_permission is not None:
        if private_permission < 2 or public_permission < 2:
            return Response.error_response('Access Denied: Permission Error')
        if target_private_permission >= private_permission:
            return Response.error_response(
                'Access Denied: Cannot Modify Your Superior')
        if target_public_permission >= public_permission:
            return Response.error_response(
                'Access Denied: Cannot Modify Your Superior')
        UserHelper.modify_user(target_userid,
                               {'permission': modify_public_permission})
        if modify_private_permission is not None:
            PermissionHelper.set_permission(target_userid, target_schoolid,
                                            modify_private_permission)
        return Response.checked_response('Modify Success')

    #现在完全是在野屌丝
    if target_private_permission >= private_permission:  #不能该领导权限 或者 同事
        return Response.error_response(
            'Access Denied: Can\'t modify your superior')
    #现在是有学校的管理员
    if target_schoolid != schoolid:  #不是一个学校
        return Response.error_response('Access Denied: Not The Same School')
    if modify_public_permission is not None:  #不能改变在野权限
        return Response.error_response(
            'Access Denied: Can\'t modify public permission')
    if modify_private_permission is not None:
        PermissionHelper.set_permission(target_userid, target_schoolid,
                                        modify_private_permission)
    return Response.checked_response('Modify Success')