提交所有代码到 qiaoxinjiu 分支
This commit is contained in:
233
app/api/views.py
233
app/api/views.py
@@ -17,6 +17,7 @@ from .controller.rbacController import RbacController
|
||||
from .controller.userController import UserController
|
||||
from .controller.bugController import BugController, BugUploadController
|
||||
from .controller.projectHookController import ProjectHookController
|
||||
from .controller.automationController import AutomationController
|
||||
|
||||
api = Blueprint('api', __name__)
|
||||
|
||||
@@ -27,7 +28,7 @@ def api_before_request():
|
||||
return None
|
||||
token = request.headers.get('accessToken') or request.headers.get('accesstoken') or request.headers.get('Authorization')
|
||||
if not token:
|
||||
return ApiResponse.build_failure(40004, msg='未登录或缺少token!')
|
||||
return ApiResponse.build_failure(40001, msg='缺少token!')
|
||||
return None
|
||||
|
||||
|
||||
@@ -728,6 +729,199 @@ def plan_progress():
|
||||
return ApiResponse.build_success(20000, data=ret)
|
||||
|
||||
|
||||
@api.route('/automation/case/run', methods=['POST'])
|
||||
@login_required
|
||||
@permission_required('automation:run')
|
||||
def automation_case_run():
|
||||
controller = AutomationController(request.get_json() or {})
|
||||
try:
|
||||
ret, err_msg = controller.case_run()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40009, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data=ret)
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/plan/run', methods=['POST'])
|
||||
@login_required
|
||||
@permission_required('automation:run')
|
||||
def automation_plan_run():
|
||||
controller = AutomationController(request.get_json() or {})
|
||||
try:
|
||||
ret, err_msg = controller.plan_run()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40009, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data=ret)
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/list', methods=['GET'])
|
||||
@login_required
|
||||
@permission_required('automation:list')
|
||||
def automation_execution_list():
|
||||
controller = AutomationController(request.args)
|
||||
try:
|
||||
return ApiResponse.build_success(20000, data=controller.execution_list())
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/detail', methods=['GET'])
|
||||
@login_required
|
||||
@permission_required('automation:detail')
|
||||
def automation_execution_detail():
|
||||
controller = AutomationController(request.args)
|
||||
try:
|
||||
ret, err_msg = controller.execution_detail()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40011, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data=ret)
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/case/list', methods=['GET'])
|
||||
@login_required
|
||||
@permission_required('automation:detail')
|
||||
def automation_execution_case_list():
|
||||
controller = AutomationController(request.args)
|
||||
try:
|
||||
ret, err_msg = controller.execution_case_list()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40011, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data=ret)
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/poll', methods=['POST'])
|
||||
@login_required
|
||||
@permission_required('automation:detail')
|
||||
def automation_execution_poll():
|
||||
from ..api.service.jenkinsPollService import JenkinsPollService
|
||||
from ..api.dao.automationDao import AutomationDao
|
||||
|
||||
req_data = request.get_json() or {}
|
||||
execution_id = req_data.get('executionId') or req_data.get('execution_id')
|
||||
|
||||
from ..api.controller.baseCrudController import BaseCrudController
|
||||
controller = BaseCrudController(req_data)
|
||||
|
||||
try:
|
||||
if execution_id:
|
||||
success, msg = JenkinsPollService.poll_jenkins_build_status(controller.session, execution_id)
|
||||
if not success:
|
||||
return ApiResponse.build_failure(40012, msg=msg)
|
||||
execution = AutomationDao.get_execution_by_id(controller.session, execution_id)
|
||||
return ApiResponse.build_success(20000, data=execution.to_dict() if execution else {'id': execution_id, 'message': msg})
|
||||
else:
|
||||
JenkinsPollService.poll_all_pending_executions(controller.session)
|
||||
return ApiResponse.build_success(20000, data={'message': '轮询完成'})
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/case/pull', methods=['GET'])
|
||||
def automation_execution_case_pull():
|
||||
req_data = dict(request.args)
|
||||
req_data['_callback_token'] = request.headers.get('X-CALLBACK-TOKEN', '')
|
||||
controller = AutomationController(req_data)
|
||||
try:
|
||||
ret, err_msg = controller.execution_case_pull()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40011, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data=ret)
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/queued', methods=['POST'])
|
||||
def automation_execution_queued():
|
||||
req_data = request.get_json() or {}
|
||||
req_data['_callback_secret'] = request.headers.get('X-CALLBACK-SECRET', '')
|
||||
controller = AutomationController(req_data)
|
||||
try:
|
||||
ok, err_msg = controller.validate_callback_secret()
|
||||
if not ok:
|
||||
return ApiResponse.build_failure(40004, msg=err_msg)
|
||||
update_id, err_msg = controller.execution_queued()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40012, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data={'id': update_id})
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/start', methods=['POST'])
|
||||
def automation_execution_start():
|
||||
req_data = request.get_json() or {}
|
||||
req_data['_callback_secret'] = request.headers.get('X-CALLBACK-SECRET', '')
|
||||
controller = AutomationController(req_data)
|
||||
try:
|
||||
ok, err_msg = controller.validate_callback_secret()
|
||||
if not ok:
|
||||
return ApiResponse.build_failure(40004, msg=err_msg)
|
||||
update_id, err_msg = controller.execution_start()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40012, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data={'id': update_id})
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/case/result', methods=['POST'])
|
||||
def automation_execution_case_result():
|
||||
req_data = request.get_json() or {}
|
||||
req_data['_callback_secret'] = request.headers.get('X-CALLBACK-SECRET', '')
|
||||
controller = AutomationController(req_data)
|
||||
try:
|
||||
ok, err_msg = controller.validate_callback_secret()
|
||||
if not ok:
|
||||
return ApiResponse.build_failure(40004, msg=err_msg)
|
||||
update_id, err_msg = controller.execution_case_result()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40012, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data={'id': update_id})
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/finish', methods=['POST'])
|
||||
def automation_execution_finish():
|
||||
req_data = request.get_json() or {}
|
||||
req_data['_callback_secret'] = request.headers.get('X-CALLBACK-SECRET', '')
|
||||
controller = AutomationController(req_data)
|
||||
try:
|
||||
ok, err_msg = controller.validate_callback_secret()
|
||||
if not ok:
|
||||
return ApiResponse.build_failure(40004, msg=err_msg)
|
||||
update_id, err_msg = controller.execution_finish()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40012, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data={'id': update_id})
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/automation/execution/abort', methods=['POST'])
|
||||
def automation_execution_abort():
|
||||
req_data = request.get_json() or {}
|
||||
req_data['_callback_secret'] = request.headers.get('X-CALLBACK-SECRET', '')
|
||||
controller = AutomationController(req_data)
|
||||
try:
|
||||
ok, err_msg = controller.validate_callback_secret()
|
||||
if not ok:
|
||||
return ApiResponse.build_failure(40004, msg=err_msg)
|
||||
update_id, err_msg = controller.execution_abort()
|
||||
if err_msg:
|
||||
return ApiResponse.build_failure(40012, msg=err_msg)
|
||||
return ApiResponse.build_success(20000, data={'id': update_id})
|
||||
finally:
|
||||
controller.close_session()
|
||||
|
||||
|
||||
# =========================
|
||||
# 报告接口
|
||||
# =========================
|
||||
@@ -1250,6 +1444,43 @@ def auth_login():
|
||||
controller.close_session()
|
||||
|
||||
|
||||
@api.route('/auth/refresh', methods=['POST'])
|
||||
def auth_refresh():
|
||||
from .utils.authMiddleware import validate_refresh_token, create_token, create_refresh_token, revoke_refresh_token, get_current_user_id
|
||||
|
||||
req_json = request.get_json() or {}
|
||||
refresh_token = req_json.get('refreshToken') or req_json.get('refresh_token')
|
||||
access_token = req_json.get('accessToken') or req_json.get('access_token')
|
||||
|
||||
if refresh_token:
|
||||
user_id = validate_refresh_token(refresh_token)
|
||||
if user_id:
|
||||
revoke_refresh_token(refresh_token)
|
||||
new_token, expire_seconds = create_token(user_id)
|
||||
new_refresh_token, refresh_expire_seconds = create_refresh_token(user_id)
|
||||
return ApiResponse.build_success(20000, data={
|
||||
'token': new_token,
|
||||
'token_type': 'Bearer',
|
||||
'expires_in': expire_seconds,
|
||||
'refresh_token': new_refresh_token,
|
||||
'refresh_expires_in': refresh_expire_seconds
|
||||
})
|
||||
return ApiResponse.build_failure(40001, msg='refresh_token无效或已过期')
|
||||
|
||||
elif access_token:
|
||||
user_id = get_current_user_id(access_token)
|
||||
if user_id:
|
||||
new_token, expire_seconds = create_token(user_id)
|
||||
return ApiResponse.build_success(20000, data={
|
||||
'token': new_token,
|
||||
'token_type': 'Bearer',
|
||||
'expires_in': expire_seconds
|
||||
})
|
||||
return ApiResponse.build_failure(451, msg='access_token无效或已过期')
|
||||
|
||||
return ApiResponse.build_failure(40003, msg='请提供refresh_token或access_token')
|
||||
|
||||
|
||||
@api.route('/bug/list', methods=['GET'])
|
||||
@login_required
|
||||
@permission_required('bug:list')
|
||||
|
||||
Reference in New Issue
Block a user