def remove_token(): #支持两种判断方式 输入邮箱token后验证 #通过邮件里的check标志验证 mail = request.args.get('mail') token = request.args.get('token') check = request.args.get('check') if mail and token: res = database().remove_token(global_config.engine, { "mail": mail, "token": token }) if res: return format_response('ok', '密钥删除成功') else: return format_response('error', '密钥删除失败') elif mail and check: res = database().remove_token(global_config.engine, { "mail": mail, "check": check }) if res: return format_response('ok', '密钥删除成功') else: return format_response('error', '密钥删除失败') else: return format_response('error', '密钥删除失败,信息不全')
def mail_for_reset(): #获取用户的mail地址 给目标用户发送找回邮件 address = request.json["mail"] if mail_to(address): return format_response('ok', '找回邮件已发送') else: return format_response('error', '请求找回错误')
def image_info(): # 根据图片的id获取图片信息 name = request.args.get("name") img = database().get(global_config.engine, 'image', name) if img: return format_response('ok', img) else: return format_response('error', '图片信息获取失败')
def image_delete(): #根据图片的唯一ID删除对应的文件 data = request.json if "namaelist" in data.keys(): database().delete_many(global_config.engine,'image',data["namelist"]) return format_response('ok', '文件删除成功') elif "name" in data.keys(): database().delete(global_config.engine,'image',data["name"]) return format_response('ok','文件删除成功')
def mail_for_reset(): #获取用户的mail地址 给目标用户发送找回邮件 try: address = request.json["mail"] if mail_to(address): return format_response('ok', '找回邮件已发送') else: return format_response('error', '请求找回错误') except Exception as e: print(e.args) return format_response('error', '请求找回错误')
def image_info(): # 根据图片的id获取图片信息 try: name = request.json["name"] img = database().get(global_config.engine,'image',name) if img: return format_response('ok',img) else: return format_response('error','图片信息获取失败') except Exception as e: return format_response('error', '图片信息获取失败')
def image_list(): #支持按需获取图片列表 用于前端的懒加载 try: token = request.args.get('token') if request.args.get('page'): #分页情况 #默认从第一页开始 if global_config.engine == 'sqlite': try: # pages = count_page(all,global_config.image_page) p = Image.query.paginate(1, 10) #暂未实现 return format_response('ok', 10) except: return format_response('error', '获取图片列表错误') else: pass else: #默认返回全部图片列表 #包含图片总数,计算得到的图片分页数 g.data = [] mail = database().get(global_config.engine, 'token', token) if mail: #仅获取当前用户下的图片列表 if global_config.engine == 'sqlite': img_list = database().get_image_list( global_config.engine, mail) for i in img_list: g.data.append(i.info()) elif global_config.engine == 'mongo': img_list = database().get_image_list( global_config.engine, mail) for i in img_list: g.data.append({ "name": i["name"], "path": i["path"], "url": i["url"] }) else: pass else: pass return format_response('ok', g.data) except Exception as e: print((e.args)) return format_response('error', '图片列表加载失败')
def image_format(): name = request.json["name"] try: img = database().get(global_config.engine,'image',name) print(global_config.image_url) res = { "raw": img["name"], "link": "{}{}".format(global_config.image_url,img["name"]), "html": "<img src={}{} alt=image>".format(global_config.image_url,img["name"]), "markdown": "![image]({}{})".format(global_config.image_url,img["name"]) } return format_response('ok',res) except Exception as e: print(e.args) return format_response('error','获取格式化信息失败')
def image_upload(): #保持一个上下文的命名变量 #默认的文件列表是file,这应该与前端保持同步 #没有使用安全命名的方式,因为所有文件名会经过hash计算后重命名 #默认需要登录认证 token = request.args.get("token") files = request.files.getlist('file') path = global_config.image_path if global_config.image_path != '' else os.path.join(os.getcwd(),"images") if token and database().get(global_config.engine,'token',token): #账户存在 try: if not os.path.exists(path): os.mkdir(path) #保证目录的创建 #判断是否有上传文件 if 'file' not in request.files: return format_response('error', '空的上传文件') else: res = database().get(global_config.engine, 'token', token) for f in files: if f.filename: name = rename.rename(f.filename) f.save(os.path.join(path, name)) #数据库操作 try: database().set(global_config.engine, 'image', {"name": name, "mail": res, "path": os.path.join(path, name), "url": "{}{}".format(global_config.image_url, name), "time": generate_time()[0] }) except: return format_response('error', '文件上传失败') return format_response('ok', '文件上传成功') except Exception as e: print(e.args) return format_response('error', '文件上传失败') else: return format_response('error', '无文件上传权限')
def image_delete(): #根据图片的唯一ID删除对应的文件 try: data = request.json if "namaelist" in data.keys(): try: database().delete_many(global_config.engine, 'image', data["namelist"]) return format_response('ok', '文件删除成功') except: return format_response('error', '文件删除失败') elif "name" in data.keys(): try: database().delete(global_config.engine, 'image', data["name"]) return format_response('ok', '文件删除成功') except: return format_response('error', '文件删除失败') except Exception as e: print(e.args) return format_response('error', '文件删除失败')
def image_list(): #支持按需获取图片列表 用于前端的懒加载 try: if request.args.get('page'): #分页情况 #默认从第一页开始 if global_config.engine == 'sqlite': try: # pages = count_page(all,global_config.image_page) p = Image.query.paginate(1,10) #暂未实现 return format_response('ok',10) except: return format_response('error','获取图片列表错误') else: pass else: #默认返回全部图片列表 #包含图片总数,计算得到的图片分页数 g.data = [] if global_config.engine == 'sqlite': img_list = Image.query.all() for i in img_list: g.data.append(i.info()) else: img_list = mongo.db.images.find() for i in img_list: g.data.append({"name": i["name"], "path": i["path"], "url": i["url"]}) return format_response('ok',g.data) except Exception as e: print((e.args)) return format_response('error','图片列表加载失败')
def image_format(): name = request.json["name"] img = database().get(global_config.engine, 'image', name) res = { "raw": img["name"], "link": "{}{}".format(global_config.image_url, img["name"]), "html": "<img src={}{} alt=image>".format(global_config.image_url, img["name"]), "markdown": "![image]({}{})".format(global_config.image_url, img["name"]) } return format_response('ok', res)
def jwt_auth(): if current_app.config["JWT"]: token = request.args.get('token') if token: if token == test_token["token"]: pass else: t = database().get(global_config.engine,'token',token) if t: pass else: return abort(401) else: #你可以使用常规的401权限码也可以使用统一响应码 return format_response('forbidden','401 No Authority') #return abort(401) else: #不使用jwt时跳过认证 pass
def wrapper(*args, **kwargs): try: response = f(*args, **kwargs) return response except Exception as e: log_dir = os.path.join(os.getcwd(), current_app.config['ERROR_LOG_DIR']) if not os.path.exists(log_dir): os.makedirs(log_dir) timestamp = datetime.now().strftime('%Y.%m.%d') logging.basicConfig(level=logging.ERROR, filename=os.path.join(log_dir, timestamp + ".log")) logging.getLogger("werkzeug").setLevel(logging.WARNING) message = '[{}] {} {} {}\n{}'.format( datetime.now().strftime('%Y/%m/%d %H:%M:%S'), request.method, request.url, f.__name__, e) logging.error(message) return format_response('error', '发生了错误')
def init_db(): db.create_all() return format_response('ok', 'database init success')
def remove_token(): #支持两种判断方式 输入邮箱token后验证 #通过邮件里的check标志验证 mail = request.args.get('mail') token = request.args.get('token') check = request.args.get('check') if global_config.engine == 'sqlite': if mail and token: t = Token.query.filter_by(mail=mail).first() try: if t.token == token: #验证成功 db.session.delete(t) db.session.commit() return format_response('ok', '密钥删除成功') else: return format_response('error', '密钥删除失败') except: db.session.rollback() return format_response('error', '密钥删除失败') elif mail and check: t = Token.query.filter_by(mail=mail).first() try: if t.check == check: #验证成功 db.session.delete(t) db.session.commit() return format_response('ok', '密钥删除成功') else: return format_response('error', '密钥删除失败') except: db.session.rollback() return format_response('error', '密钥删除失败') else: return format_response('error', '密钥删除失败,信息不全') else: #mongo if mail and token: t = mongo.db.token.find_one({"mail": mail}) try: if t["token"] == token: #验证成功 mongo.db.token.delete_one({"mail": mail}) return format_response('ok', '密钥删除成功') else: return format_response('error', '密钥删除失败') except: return format_response('error', '密钥删除失败') elif mail and check: t = mongo.db.token.find_one({"mail": mail}) try: if t["check"] == check: #验证成功 mongo.db.token.delete_one({"mail": mail}) return format_response('ok', '密钥删除成功') else: return format_response('error', '密钥删除失败') except: return format_response('error', '密钥删除失败') else: return format_response('error', '密钥删除失败,信息不全')
def init_db(): try: db.create_all() return format_response('ok', 'database init success') except: return format_response('error', 'database init failed')