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')
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)
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)
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")
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')
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")
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')
def school_to_dict(school): """school to dict """ return { 'schoolname': school.schoolname, 'description': school.description, 'creator': UserHelper.get_name_by_id(school.creator) }
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
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')
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)
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})
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
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
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
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')
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
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 }
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')
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
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})
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
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)
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')