Restructure
This commit is contained in:
parent
683a4b487e
commit
3ff1800869
|
@ -1,17 +1,13 @@
|
|||
import os
|
||||
from os import getenv
|
||||
import hmac
|
||||
from fastapi import Request
|
||||
from fastapi.exceptions import HTTPException
|
||||
from fastapi.param_functions import Header
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
async def check_ref(request: Request):
|
||||
json = await request.json()
|
||||
if json["ref"] and json["ref"] == f"refs/heads/{os.environ.get('BRANCH')}":
|
||||
if json["ref"] and json["ref"] == f"refs/heads/{getenv('BRANCH')}":
|
||||
return
|
||||
raise HTTPException(status_code=403, detail="Invalid branch")
|
||||
raise HTTPException(status_code=202, detail="Invalid branch")
|
||||
|
||||
async def auth_hook(request: Request):
|
||||
try:
|
||||
|
@ -29,7 +25,7 @@ async def auth_hook(request: Request):
|
|||
if sha_name != 'sha1':
|
||||
raise HTTPException(status_code=400, detail="Invalid signature")
|
||||
|
||||
secret_key = os.environ.get('WEBHOOK_SECRET')
|
||||
secret_key = getenv('WEBHOOK_SECRET')
|
||||
if secret_key is None:
|
||||
raise HTTPException(status_code=503, detail="Missing WEBHOOK_SECRET")
|
||||
|
||||
|
@ -42,9 +38,8 @@ async def auth_hook(request: Request):
|
|||
|
||||
async def auth_web(request: Request):
|
||||
token = request._query_params.get("token")
|
||||
if token is None:
|
||||
if token is None or token is "":
|
||||
raise HTTPException(status_code=400, detail="Missing token")
|
||||
print(token, os.environ.get("TOKEN"))
|
||||
if token == os.environ.get("TOKEN"):
|
||||
if token == getenv("TOKEN"):
|
||||
return
|
||||
raise HTTPException(status_code=403, detail="Invalid token")
|
|
@ -0,0 +1,14 @@
|
|||
from fastapi import FastAPI, Request, Depends
|
||||
from fastapi_responses import custom_openapi
|
||||
from app.dependencies import auth_hook, auth_web, check_ref
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.openapi = custom_openapi(app)
|
||||
|
||||
@app.get("/", dependencies=[Depends(auth_web)])
|
||||
@app.post("/", dependencies=[Depends(auth_hook), Depends(check_ref)])
|
||||
async def hook(req: Request):
|
||||
return "Update"
|
||||
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
|
@ -2,17 +2,15 @@ from fastapi import FastAPI, Request, Depends
|
|||
|
||||
from fastapi.testclient import TestClient
|
||||
import hmac
|
||||
|
||||
from starlette.routing import request_response
|
||||
from main import app
|
||||
from auth import auth_hook, auth_web, check_ref
|
||||
from os import environ
|
||||
from app.main import app
|
||||
from app.dependencies import auth_hook, auth_web, check_ref
|
||||
from os import environ, getenv
|
||||
import json
|
||||
|
||||
environ['WEBHOOK_SECRET'] = "dfsgdsjghhgdaehlsdfjhjkdh"
|
||||
environ["BRANCH"] = "master"
|
||||
environ["TOKEN"] = "assdcvfgvh"
|
||||
secret_key = environ.get('WEBHOOK_SECRET')
|
||||
secret_key = getenv('WEBHOOK_SECRET')
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
@ -56,14 +54,14 @@ def test_auth():
|
|||
def test_branch():
|
||||
payload = {"ref": "refs/heads/master"}
|
||||
response = client.post("/test_ref", json= payload)
|
||||
assert response.status_code == 200
|
||||
assert response.status_code == 202
|
||||
|
||||
payload = {"ref": "refs/heads/test"}
|
||||
response = client.post("/test_ref", json= payload)
|
||||
assert response.status_code == 403
|
||||
|
||||
def test_web():
|
||||
response = client.get('/test_web?token={}'.format(environ.get("TOKEN")))
|
||||
response = client.get('/test_web?token={}'.format(getenv("TOKEN")))
|
||||
assert response.status_code == 200
|
||||
|
||||
response = client.get('/test_web')
|
25
src/main.py
25
src/main.py
|
@ -1,25 +0,0 @@
|
|||
from os import environ
|
||||
import os
|
||||
from fastapi import FastAPI, Body, Request, Depends
|
||||
import json
|
||||
from fastapi.exceptions import HTTPException
|
||||
|
||||
from fastapi.param_functions import Header
|
||||
from fastapi_responses import custom_openapi
|
||||
from auth import auth_hook, auth_web, check_ref
|
||||
|
||||
|
||||
if not os.environ.get("DOCKER"):
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.openapi = custom_openapi(app)
|
||||
|
||||
@app.get("/", dependencies=[Depends(auth_web)])
|
||||
@app.post("/", dependencies=[Depends(auth_hook), Depends(check_ref)])
|
||||
async def hook(req: Request):
|
||||
return "Update"
|
||||
|
||||
|
Loading…
Reference in New Issue