def register(self, params): userData = Users().getOne({Users.email == params['email']}) if (userData == None): #昵称首字母 isChinese = re.compile(u"[\u4e00-\u9fa5]+") isEnglish = re.compile('[a-zA-Z]') nickNameFirstWord = params['nickName'][0] if isChinese.search(nickNameFirstWord): first_word = Pinyin().get_initial(nickNameFirstWord) elif isEnglish.search(nickNameFirstWord): first_word = nickNameFirstWord.upper() else: first_word = '#' data = { 'email': params['email'], 'password': Users.set_password(params['password']), 'nick_name': params['nickName'], 'head_img': params['headImg'], 'first_word': first_word, 'created_at': time.time(), 'updated_at': time.time() } user = Users().add(data) if user == False: return Utils.formatError(Code.BAD_REQUEST, '注册失败') else: result = UsersAuthJWT.authenticate(params['email'], params['password']) return result return Utils.formatError(Code.BAD_REQUEST, '注册失败') return Utils.formatError(Code.BAD_REQUEST, '账号已注册')
def authenticate(email, password): """ 用户登录,登录成功返回token,写将登录时间写入数据库;登录失败返回失败原因 :param password: :return: json """ userInfo = Users().getOne( {Users.email == email}, 'id desc', ('email', 'password', 'id', 'nick_name', 'head_img')) if (userInfo is None): return Utils.formatError(Code.BAD_REQUEST, '找不到用户') else: if (Users.check_password(userInfo['password'], password)): updated_at = int(time.time()) Users().edit({'updated_at': updated_at}, {Users.email == email}) token = UsersAuthJWT.encode_auth_token(userInfo['id'], updated_at) userInfo.pop('password') #删除密码 return Utils.formatBody( { 'token': token.decode(), 'user': userInfo }, '登陆成功') else: return Utils.formatError(Code.BAD_REQUEST, '密码不正确')
def register(params): ''' 注册 ''' filters = {Users.email == params['email']} userData = Users().getOne(filters) if (userData == None): user = Users(email=params['email'], password=Users.set_password(params['password']), status=1) status = user.add(user) if status == True: return BaseController().successData(msg='注册成功') return BaseController().error('注册失败') return BaseController().error('账号已注册')
def groupChatCreate(self, user_info, params): """ 创建聊天群组 @Param dict userInfo @param dict params @return bool """ room_uuid = Utils.unique_id() name = '' now_item = int(time.time()) for id in params['ids']: user_data = Users().getOne({Users.id == id}) name = name + ',' + user_data['nick_name'] userRoomRelationData = { 'user_id': id, 'room_uuid': room_uuid, 'is_alert': 0, 'unread_number': 0, 'updated_at': now_item, 'created_at': now_item } UserRoomRelation().add(userRoomRelationData) room_data = { 'room_uuid': room_uuid, 'last_msg': '', 'type': 1, 'updated_at': now_item, 'created_at': now_item, 'name': name.strip(','), 'user_id': user_info['data']['id'] } room = Room().addByClass(room_data) return {'room_uuid': room_uuid}
def adminUserList(*args, **kwargs): """ 获取用户列表 """ params = kwargs['params'] filters = {Users.nick_name.like('%' + params['keyword'] + '%')} data = Users().getList(filters, Users.updated_at.desc(), (), params['page_no'], params['per_page']) return BaseController().successData(data)
def identify(self, auth_header): """ 用户鉴权 :return: list """ if (auth_header): auth_tokenArr = auth_header.split(" ") if (not auth_tokenArr or auth_tokenArr[0] != 'JWT' or len(auth_tokenArr) != 2): return '请传递正确的验证头信息' else: auth_token = auth_tokenArr[1] payload = self.decode_auth_token(auth_token) if not isinstance(payload, str): user = Users().getOne({Users.id == payload['data']['id']}) if (user is None): return '找不到该用户信息' else: if (user['updated_at'] == payload['data']['updated_at']): result = payload else: return '令牌失效' else: result = payload else: return '没有提供认证令牌' return result
def beg(params, user_info): if user_info['data']['id'] == params['be_focused_user_id']: return Utils.formatError(CONST['CODE']['BAD_REQUEST']['value'], '无法添加自己为新朋友') addressBookdata = AddressBook.getAdddressBookByFocusedUserId( user_info['data']['id'], params['be_focused_user_id']) if addressBookdata != None: return Utils.formatError(CONST['CODE']['BAD_REQUEST']['value'], '已添加') msg_uuid = Utils.unique_id() userData = Users().getOne({Users.id == user_info['data']['id']}) data = { 'data': userData, 'action': 'beg_add', 'msg_uuid': msg_uuid, 'be_focused_user_id': params['be_focused_user_id'], 'focused_user_id': user_info['data']['id'] } socketio.emit('beg', Utils.formatBody(data), namespace='/api', room='@broadcast.' + str(params['be_focused_user_id'])) #,callback=success) #只缓存最新的一条 cache.set('@broadcast.beg' + str(params['be_focused_user_id']), data) return Utils.formatBody({}, msg='发送成功')
def search(params): filters = { Users.nick_name.like('%' + params['keywords'] + '%') | Users.email.like('%' + params['keywords'] + '%') } userList = Users().getAll(filters) data = {"userList": userList} return Utils.formatBody(data)
def adminUserList(*args, **kwargs): """ 获取用户列表 """ params = kwargs['params'] if params['keyword'] != '': filters = {Users.nick_name.like('%' + params['keyword'] + '%')} else: filters = set() data = Users().getList(filters, params['orderBy'] + " " + params['order'], (), params['page_no'], params['per_page']) return BaseController().successData(data)
def authenticate(email, password): """ 用户登录,登录成功返回token,写将登录时间写入数据库;登录失败返回失败原因 :param password: :return: json """ filters = { Users.email == email } userInfo = Users().getOne(filters) userInfoPas = Users().getOne(filters, order = 'id desc', field = ('password',)) if(userInfo is None): return BaseController().error('找不到用户') else: if (Users.check_password(userInfoPas['password'], password)): updated_at = int(time.time()) Users.update(email, updated_at) token = UsersAuthJWT.encode_auth_token(userInfo['id'], updated_at) return BaseController().successData({'token': token.decode(), 'user': userInfo}, '登陆成功') else: return BaseController().error('密码不正确')
def register(params): userData = Users().getOne({Users.email == params['email']}) if (userData == None): #昵称首字母 isChinese = re.compile(u"[\u4e00-\u9fa5]+") isEnglish = re.compile('[a-zA-Z]') nickNameFirstWord = params['nickName'][0] nowTime = time.time() if isChinese.search(nickNameFirstWord): first_word = Pinyin().get_initial(nickNameFirstWord) elif isEnglish.search(nickNameFirstWord): first_word = nickNameFirstWord.upper() else: first_word = '#' data = { 'email': params['email'], 'password': Users.set_password(params['password']), 'nick_name': params['nickName'], 'head_img': params['headImg'], 'first_word': first_word, 'created_at': nowTime, 'updated_at': nowTime } user = Users().add(data) if user == False: return Utils.formatError(CONST['CODE']['BAD_REQUEST']['value'], '注册失败') else: result = UsersAuthJWT.authenticate(params['email'], params['password']) # 发送延时推广进群广告 invite = Invite() invite.setAction("invite") invite.setId(result['data']['user']['id']) # 延时2分钟推送 delayQueue.product(invite.__dict__, 120) return result return Utils.formatError(CONST['CODE']['BAD_REQUEST']['value'], '账号已注册')
def adminIndex(user_info): #获取管理用户总数 admins = Admin().getCount({}) #获取注册用户总数 users = Users().getCount({}) #获取房间总数 rooms = Room().getCount({}) #一周管理用户注册数量 weekAdminData = Admin().getWeekData() #一周注册用户注册数量 weekUsersData = Users().getWeekData() #一周房间总数 weekRoomData = Room().getWeekData() data = { 'panelGroupData': { 'adminCount': admins, 'usersCount': users, 'roomCount': rooms }, 'weekAdminData': weekAdminData, 'weekUsersData': weekUsersData, 'weekRoomData': weekRoomData } return BaseController().successData(data)
def addressBookBeg(params): if params['focused_user_id'] == params['be_focused_user_id']: return BaseController().error(msg='无法添加自己为新朋友') addressBookdata = AddressBook.getAdddressBookByFocusedUserId(params['focused_user_id'], params['be_focused_user_id']) if addressBookdata != None: return BaseController().error(msg='已添加') msg_uuid = Utils.unique_id() userData = Users().getOne({Users.id == params['focused_user_id']}) socketio.emit('beg', Utils.formatBody({ 'data':userData, 'action':'beg_add', 'msg_uuid': msg_uuid, 'be_focused_user_id': params['be_focused_user_id'] }), namespace='/room', room='@broadcast.'+str(params['be_focused_user_id']), callback=success) return BaseController().successData(msg='发送成功')
def chat(message, user_info): """ @param dict message @param dict user_info @return dict """ msg = message['data']['msg'] room_uuid = message['data']['room_uuid'] Type = message['data']['type'] room_data = Room.get(room_uuid) if room_data == None: return Utils.formatError(CONST['CODE']['ROOM_NO_EXIST']['value'], "房间不存在") room_type = room_data.type created_at = message['data']['created_at'] save_action = message['data']['save_action'] user_data = Users().getOne({Users.id == user_info['data']['id']}) return ChatService.sendChatMessage(msg, room_uuid, Type, room_data, room_type, created_at, save_action, user_data)
def add(params, user_info): ''' 添加通讯录 ''' if params['focused_user_id'] == user_info['data']['id']: return Utils.formatError(CONST['CODE']['BAD_REQUEST']['value'], msg='无法添加自己为新朋友') filters = { AddressBook.focused_user_id == params['focused_user_id'], AddressBook.be_focused_user_id == user_info['data']['id'] } addressBookData = AddressBook().getOne(filters) if (addressBookData == None): # 加入房间号 room_uuid = Utils.unique_id() # 建立通讯录关系 status = AddressBook.addRoomAndAddressBook( room_uuid, params['focused_user_id'], user_info['data']['id']) if status == False: return Utils.formatError(CONST['CODE']['BAD_REQUEST']['value'], msg='添加失败') userData = Users().getOne({Users.id == user_info['data']['id']}) #回复被添加用户 socketio.emit('beg', Utils.formatBody({ 'action': 'beg_add_success', 'focused_user_id': user_info['data']['id'], 'nick_name': userData['nick_name'] }), namespace='/api', room='@broadcast.' + str(params['focused_user_id'])) #添加后同步房间 addressBookData = AddressBook.get(room_uuid) for item in addressBookData: roomList = AddressBook.getRoomList( item.be_focused_user_id)['list'] socketio.emit('room', Utils.formatBody(roomList), namespace="/api", room='@broadcast.' + str(item.be_focused_user_id)) return Utils.formatBody({}, msg='添加成功') return Utils.formatError(CONST['CODE']['BAD_REQUEST']['value'], msg='已添加')
def groupChatCreate(params, user_info): """ 创建聊天群组,userInfo.id是群主 @Param dict userInfo @param dict params @return bool """ room_uuid = Utils.unique_id() name = '' userRoomRelationData = { 'user_id': user_info['data']['id'], 'room_uuid': room_uuid, 'is_alert': 0, 'unread_number': 0, 'type':CONST['GROUP']['MASTER']['value'] } UserRoomRelation().add(userRoomRelationData) for id in params['ids']: user_data = Users().getOne({Users.id == id}) name = name + ',' + user_data['nick_name'] userRoomRelationData = { 'user_id': id, 'room_uuid': room_uuid, 'is_alert': 0, 'unread_number': 0 } UserRoomRelation().add(userRoomRelationData) room_data = { 'room_uuid': room_uuid, 'last_msg': '', 'type': CONST['CHAT']['TEXT']['value'], 'name': name.strip(','), 'user_id': user_info['data']['id'] } Room().addByClass(room_data) return {'room_uuid': room_uuid, 'name': name.strip(',')}
def getByNickName(self, keywords): filters = {Users.nick_name.like('%' + keywords + '%')} userList = Users().getAll(filters) data = {"userList": userList} return data
def getInfo(): id = request.json.get('id') filters = {Users.id == id} data = Users().getOne(filters) return BaseController().successData(data)
def edit(data, filters): status = Users().edit(data, filters) return status
def get(params, user_info): #鉴权 user_data = Users().getOne({Users.id == user_info['data']['id']}) return Utils.formatBody(user_data)
def adminUserDelete(*args, **kwargs): """ 删除用户 """ params = kwargs['params'] filters = {Users.id == params['id']} Users().delete(filters) return BaseController().successData()
def chat(self, message, user_info): """ @param dict message @param dict user_info @return dict """ msg = message['data']['msg'] room_uuid = message['data']['room_uuid'] Type = message['data']['type'] room_data = Room.get(room_uuid) room_type = room_data.type created_at = message['data']['created_at'] user_data = Users().getOne({Users.id == user_info['data']['id']}) if room_data != None and room_type == 0: address_book_data = AddressBook.get(room_uuid) #发送消息 emit('chat', Utils.formatBody({ 'msg': msg, 'name': user_data['nick_name'], 'user_id': user_data['id'], 'type': Type, 'head_img': user_data['head_img'], 'room_uuid': room_uuid, 'created_at': created_at }), room=room_uuid) #聊天时同步房间信息 Room.updateLastMsgRoom(room_uuid, msg) #更新聊天提示数字 AddressBook.updateUnreadNumber(room_uuid, user_data['id']) AddressBook.cleanUnreadNumber(room_uuid, user_data['id']) #更新客户端房间信息 for item in address_book_data: roomList = AddressBook.getRoomList( item.be_focused_user_id)['data'] socketio.emit('room', Utils.formatBody(roomList), namespace='/room', room='@broadcast.' + str(item.be_focused_user_id)) elif room_data != None and room_type == 1: user_room_relation_data = UserRoomRelation.get(room_uuid) #发送消息 emit('chat', Utils.formatBody({ 'msg': msg, 'name': user_data['nick_name'], 'user_id': user_data['id'], 'type': Type, 'head_img': user_data['head_img'], 'room_uuid': room_uuid, 'created_at': created_at }), room=room_uuid) #聊天时同步房间信息 Room.updateLastMsgRoom(room_uuid, msg) #更新聊天提示数字 UserRoomRelation.updateUnreadNumber(room_uuid, user_data['id']) UserRoomRelation.cleanUnreadNumber(room_uuid, user_data['id']) #更新客户端房间信息 for item in user_room_relation_data: #if item.user_id != user_id: roomList = UserRoomRelation.getRoomList(item.user_id)['data'] socketio.emit('groupRoom', Utils.formatBody(roomList), namespace='/room', room='@broadcast.' + str(item.user_id)) return Utils.formatBody({'action': "chat"})
def get(user_info): #鉴权 if (user_info['data']): user_data = Users().getOne({Users.id == user_info['data']['id']}) return BaseController().successData(user_data)