def adminChat(message: dict) -> dict: admin_user_info = UsersAuthJWT().adminIdentify( message['Authorization']) if isinstance(admin_user_info, str): return Utils.formatError(CONST['CODE']['ERROR_AUTH_CHECK_TOKEN_FAIL']['value'], admin_user_info) # 整合数据信息 filters = { Admin.id == admin_user_info['data']['id'], } admin_user_info = Admin().getOne(filters) default_img_data = Config().getOne( {Config.type == 'img', Config.code == 'default.img', Config.status == 1}) if default_img_data == None: default_img = 'static/img/about/python.jpg' else: default_img = default_img_data['config'] admin_user_info['nick_name'] = '系统管理-'+admin_user_info['nick_name'] admin_user_info['head_img'] = default_img # 这里后期改成配置的 # 使用0作为系统id 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 = int(time.time()) save_action = message['data']['save_action'] return ChatService.sendChatMessage(msg, room_uuid, Type, room_data, room_type, created_at, save_action, admin_user_info, 1)
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 login(self, data): name = data['name'] #生成一个md5对象 m1 = hashlib.md5() #使用md5对象里的update方法md5转换 m1.update(data['pwd'].encode("utf-8")) pwd = m1.hexdigest() #用户名/邮箱/手机登录 filters = { Admin.name == name, Admin.pwd == pwd, Admin.delete_time == 0 } admin = Admin().getOne(filters, 'add_time desc') if admin == None: filters = { Admin.email == name, Admin.pwd == pwd, Admin.delete_time == 0 } admin = Admin().getOne(filters, 'add_time desc') if admin == None: filters = { Admin.mobile == name, Admin.pwd == pwd, Admin.delete_time == 0 } admin = Admin().getOne(filters, 'add_time desc') if admin != None: #更新登录时间 filters = {Admin.id == admin['id']} update_time = int(time.time()) Admin().edit({Admin.update_time: update_time}, filters) token = UsersAuthJWT.encode_auth_token(admin['id'], update_time) return Utils.formatBody({'token': token, 'user': admin}) return Utils.formatError(CONST['CODE']['ERROR']['value'])
def add(self, data=[]): #添加 if 'update_time' in data.keys(): data['update_time'] = int(time.time()) #判断用户名 if 'name' in data.keys(): filters = {Admin.delete_time == 0, Admin.name == data['name']} adminData = Admin().getOne(filters, 'add_time desc') if adminData != None: return Utils.formatError(CONST['CODE']['ERROR']['value'], '用户名已经存在') #判断手机号码 if 'mobile' in data.keys(): filters = {Admin.delete_time == 0, Admin.mobile == data['mobile']} admin = Admin().getOne(filters, 'add_time desc') if admin: return Utils.formatError(CONST['CODE']['ERROR']['value'], '手机号码已经存在') #判断邮箱 if 'email' in data.keys(): filters = {Admin.delete_time == 0, Admin.email == data['email']} admin = Admin().getOne(filters, Admin.add_time.desc()) if admin: return Utils.formatError(CONST['CODE']['ERROR']['value'], '邮箱已经存在') #生成一个md5对象 m1 = hashlib.md5() #使用md5对象里的update方法md5转换 m1.update(data['pwd'].encode("utf-8")) data['pwd'] = m1.hexdigest() res = Admin().add(data) if res: return Utils.formatBody(msg='添加成功') return Utils.formatError(CONST['CODE']['ERROR']['value'], '添加失败')
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 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 begCache(params, user_info): """ 获取添加好友缓存 """ data = cache.get('@broadcast.beg'+str(user_info['data']['id'])) if data is None: return Utils.formatBody() else: cache.delete('@broadcast.beg'+str(user_info['data']['id'])) return Utils.formatBody(data)
def inner_wrappar(*args, **kwargs): if 'Authorization' in args[0].keys(): result = UsersAuthJWT().adminIdentify(args[0]['Authorization']) else: return Utils.formatError(CONST['CODE']['ERROR_AUTH_CHECK_TOKEN_FAIL']['value'], '令牌失效') kwargs['user_info'] = result if isinstance(result, str): # socketio.emit(name,Utils.formatError(CONST['CODE']['ERROR']['value']_AUTH_CHECK_TOKEN_FAIL, '令牌失效'), room='@api.'+str(request.sid)) return Utils.formatError(CONST['CODE']['ERROR_AUTH_CHECK_TOKEN_FAIL']['value'], '令牌失效') res = func(*args, **kwargs) return res
def create(params, user_info): # 加入房间号 data = ChatService().groupChatCreate(params, user_info) if data: #添加后同步房间 user_room_relation_data = Utils.db_l_to_d(UserRoomRelation.get(data['room_uuid'])) for item in user_room_relation_data: roomList = UserRoomRelation.getRoomList(item['user_id']) socketio.emit('groupRoom', Utils.formatBody(roomList), namespace='/api', room='@broadcast.'+str(item['user_id'])) return Utils.formatBody(data, msg='创建成功') return Utils.formatError(CONST['CODE']['BAD_REQUEST']['value'],msg='创建失败')
def create(user_info, params): # 加入房间号 data = ChatService().groupChatCreate(user_info, params) if data: #添加后同步房间 user_room_relation_data = Utils.db_l_to_d(UserRoomRelation.get(data['room_uuid'])) for item in user_room_relation_data: roomList = UserRoomRelation.getRoomList(item['user_id'])['data'] socketio.emit('groupRoom', Utils.formatBody(roomList), namespace='/room', room='@broadcast.'+str(item['user_id'])) return Utils.formatBody(data, msg='创建成功') return Utils.formatError(Code.BAD_REQUEST,msg='创建失败')
def input(params, user_info): filters = { AddressBook.focused_user_id == user_info['data']['id'], AddressBook.room_uuid == params['room_uuid'] } AddressBook().edit({'is_input': 1}, filters) # 发送消息 data = AddressBook().getOne(filters) data['even'] = params['even'] emit('input', Utils.formatBody(data), room='@broadcast.'+str(data['be_focused_user_id'])) return Utils.formatBody({'action': "input", "data": data})
def upload(): f = request.files['file'] filename = secure_filename(f.filename) if (f and Utils.allowed_file(filename)): file_suffix = f.filename.split('.')[1] path = UPLOAD_FOLDER + Utils.unique_id() + '.' + file_suffix full_path = os.getcwd() + path f.save(full_path) return BaseController().successData(data={ 'path': path, 'name': f.filename }, msg='图片提交成功') return BaseController().error('文件类型不允许')
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 uploadBase64(params): userImg = params['imgDatas'].split(',')[1] typeImg = params['imgDatas'].split(',')[0] if 'png' in typeImg: typeImg = 'png' elif 'gif' in typeImg: typeImg = 'gif' elif 'jpeg' in typeImg: typeImg = 'jpeg' imgdata = base64.b64decode(userImg) path = UPLOAD_FOLDER + Utils.unique_id() + '.' + typeImg file = open(os.getcwd() + path, 'wb') file.write(imgdata) file.close() return Utils.formatBody({'path': path}, '上传成功')
def groupChatCreate(user_info, params): # 加入房间号 data = ChatService().groupChatCreate(user_info, params) if data: #添加后同步房间 user_room_relation_data = Utils.db_l_to_d( UserRoomRelation.get(data['room_uuid'])) for item in user_room_relation_data: roomList = UserRoomRelation.getRoomList(item['user_id']) socketio.emit('groupRoom', Utils.formatBody(roomList), namespace='/api', room='@broadcast.' + str(item['user_id'])) return BaseController().successData(data, msg='创建成功') return BaseController().error(msg='创建失败')
def updateSaveAction(params, user_info): """ 更新是否云端保存 """ filters = { Room.room_uuid == params['room_uuid'] } roomData = Room().getOne(filters) if roomData['type'] == CONST['ROOM']['ALONE']['value']: filters = { AddressBook.room_uuid == params['room_uuid'], AddressBook.be_focused_user_id == user_info['data']['id'] } data = { 'save_action': params['save_action'] } status = AddressBook().edit(data, filters) else: filters = { UserRoomRelation.room_uuid == params['room_uuid'], UserRoomRelation.user_id == user_info['data']['id'] } data = { 'save_action': params['save_action'] } status = UserRoomRelation().edit(data, filters) if status: return Utils.formatBody()
def updateAlert(params, user_info): """ 更新对否提醒 """ filters = { Room.room_uuid == params['room_uuid'] } roomData = Room().getOne(filters) if roomData['type'] == 0: filters = { AddressBook.room_uuid == params['room_uuid'], AddressBook.be_focused_user_id == user_info['data']['id'] } data = { 'is_alert': params['is_alert'] } status = AddressBook().edit(data, filters) else: filters = { UserRoomRelation.room_uuid == params['room_uuid'], UserRoomRelation.user_id == user_info['data']['id'] } data = { 'is_alert': params['is_alert'] } status = UserRoomRelation().edit(data, filters) if status: return Utils.formatBody()
def getByRoomUuid(params, user_info): """ 获取群组或单聊信息 """ filters = { Room.room_uuid == params['room_uuid'] } roomData = Room().getOne(filters) if roomData['type'] == 0: filters = { AddressBook.room_uuid == params['room_uuid'] } data = AddressBook().getList( filters, AddressBook.updated_at.desc()) filters.add( AddressBook.be_focused_user_id == user_info['data']['id'] ) data['room'] = AddressBook().getOne( filters) else: filters = { UserRoomRelation.room_uuid == params['room_uuid'] } data = UserRoomRelation().getList( filters, UserRoomRelation.updated_at.desc()) filters.add( UserRoomRelation.user_id == user_info['data']['id'] ) data['room'] = UserRoomRelation().getOne( filters) return Utils.formatBody(data)
def get(params, user_info): """ 获取通讯录列表 """ filters = { UserRoomRelation.user_id == user_info['data']['id'] } data = UserRoomRelation().getAll(filters, 'updated_at desc') return Utils.formatBody(data)
def getRoomList(user_id): filters = { AddressBook.be_focused_user_id == user_id } data = dBSession.query(AddressBook).order_by(AddressBook.updated_at.desc()).filter(*filters).all() data = Base.formatBody(Utils.db_l_to_d(data)) return data
def getWeekData(self): result = [] dataList = Utils.db_t_d( dBSession.execute( "SELECT count(*) as c, date_format(from_unixtime(add_time),'%Y-%m-%d') as d FROM ht_admin WHERE YEARWEEK(date_format(from_unixtime(add_time),'%Y-%m-%d'),1) = YEARWEEK(now(),1) GROUP BY date_format(from_unixtime(add_time),'%Y-%m-%d');" ).fetchall()) week_list = Utils.getWeekList() for i, week in enumerate(week_list): for data in dataList: if data['d'] == week: result.append(data['c']) dataList.remove(data) break if (len(result)) <= i: result.append(0) return result
def getRoomList(user_id): filters = {AddressBook.be_focused_user_id == user_id} res = dBSession.query(AddressBook).order_by( AddressBook.updated_at.desc()).filter(*filters).all() data = {"list": Utils.db_l_to_d(res)} return data
def inner_wrapper(*args, **kwargs): #18n msgFormat = Utils.validateMsgFormat(name, rules, msg) error = validateSocketDataByName(name, args[0], {name: rules}, {name:msgFormat}, default) if 'error' in error: return json.dumps(error)#socketio.emit('unAuthSend',json.dumps(error), room='@api.'+str(request.sid)) return func(args[0])
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 getRoomList(user_id): # 获取消息房间列表 filters = {UserRoomRelation.user_id == user_id} data = dBSession.query(UserRoomRelation).order_by( UserRoomRelation.updated_at.desc()).filter(*filters).all() data = Base.formatBody(Utils.db_l_to_d(data)) return data
def inner_wrappar(*args, **kwargs): result = UsersAuthJWT().adminIdentify(request.headers.get('Authorization')) kwargs['user_info'] = result if isinstance(result, str): return make_response(jsonify(Utils.formatError(CONST['CODE']['ERROR_AUTH_CHECK_TOKEN_FAIL']['value'], result))) res = func(*args, **kwargs) return res
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 getWeekData(self): result = Utils.db_t_d( dBSession.execute( 'SELECT count(*) as n, (TO_DAYS( NOW( ) ) - TO_DAYS( from_unixtime(created_at))) as `d` FROM ht_users group by TO_DAYS( from_unixtime(created_at)) having d <= :val', { 'val': 6 }).fetchall()) return result
def add(params,user_info): ''' 添加通讯录 ''' if params['focused_user_id'] == user_info['data']['id']: return Utils.formatError(Code.BAD_REQUEST,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(Code.BAD_REQUEST,msg='添加失败') #回复被添加用户 socketio.emit('beg', Utils.formatBody({ 'action':'beg_add_success', 'focused_user_id' : user_info['data']['id'] }), namespace='/room', room='@broadcast.'+str(params['focused_user_id'])) #添加后同步房间 addressBookData = AddressBook.get(room_uuid) for item in addressBookData: 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)) return Utils.formatBody({},msg='添加成功') return Utils.formatError(Code.BAD_REQUEST,msg='已添加')
def upload(params): filename = secure_filename(params['name']) base64Data = params['dataUrl'].split(',')[1] if (base64Data and Utils.allowed_file(filename)): file_suffix = params['name'].split('.')[1] path = UPLOAD_FOLDER + Utils.unique_id() + '.' + file_suffix full_path = os.getcwd() + path f = open(full_path, 'wb') data = base64.b64decode(base64Data) f.write(data) #f.write(params['arrayBuffer']) f.close return Utils.formatBody({ 'path': path, 'name': filename }, msg='上传成功') return Utils.formatError(Code.BAD_REQUEST, '文件类型不允许')