From 8f8e098521bd5fae9233424949c8abff9a84a33e Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Wed, 16 Feb 2022 17:55:30 +0800 Subject: [PATCH] feat: demo of web api server --- Web.py | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 Web.py diff --git a/Web.py b/Web.py new file mode 100644 index 0000000..cb12477 --- /dev/null +++ b/Web.py @@ -0,0 +1,101 @@ +#!/usr/bin/python +# -*- coding:utf-8 -*- + +from flask import Flask, request + +apiPath = '/' +api = Flask(__name__) + +accessToken = 'dnomd343' + +def httpPostArg(field: str): # 获取HTTP POST参数 + try: + if request.values.get(field) != None: # application/x-www-form-urlencoded + return request.values.get(field) + elif request.json.get(field) != None: # application/json + return request.json.get(field) + elif request.form.get(field) != None: # multipart/form-data + return request.form.get(field) + except: + pass + return None + +def genError(message: str): # 生成JSON错误回复 + return { + 'success': False, + 'message': message + } + +def getAllTask(): # 获取当前所有检测任务 + # TODO: redis query + return [ + '54cd9ba3a8e86f93', + 'f43c9bae21ae8693', + ] + +def getCheckList(): # 获取检测任务列表 + if request.args.get('token') != accessToken: # token无效 + return genError('invalid token') + return { + 'success': True, + 'taskList': getAllTask() + } + +def newCheckTask(): # 新增检测任务 + if httpPostArg('token') != accessToken: # token无效 + return genError('invalid token') + + priority = httpPostArg('priority') # 优先级选项 + if not 'priority' in ['a','b','c','d','e']: + priority = 'c' # 默认优先级 + + checkList = httpPostArg('check') # 检测列表 + if checkList == None: + return genError('missing check list') + for checkMethod in checkList: + if not checkMethod in ['http']: + return genError('unknown check method `' + checkMethod + '`') + + proxyList = httpPostArg('proxy') # 代理列表 + if proxyList == None: + return genError('missing proxy list') + if isinstance(proxyList, str): # 单项任务 + proxyList = [ proxyList ] + + # TODO: decode and filter + # TODO: save to redis and generate checkId + + return { + 'success': True, + 'checkId': '233' + } + +def getTaskInfo(checkId): # 获取任务详情 + # TODO: get task info from redis + return { + 'success': True, + 'checkId': checkId + } + +def deleteTask(checkId): # 删除任务 + # TODO: delete task from redis + return { + 'success': True, + 'checkId': checkId + } + +@api.route(apiPath + '/check', methods = ['GET','POST']) +def apiCheck(): + if request.method == 'GET': + return getCheckList() + elif request.method == 'POST': + return newCheckTask() + +@api.route(apiPath + '/check/', methods = ['GET','DELETE']) +def check_id(checkId): + if request.method == 'GET': + return getTaskInfo(checkId) + elif request.method == 'POST': + return deleteTask(checkId) + +api.run(host = '0.0.0.0', port = 43581, debug = True)