Restructure
This commit is contained in:
parent
683a4b487e
commit
3ff1800869
|
@ -1,17 +1,13 @@
|
||||||
import os
|
from os import getenv
|
||||||
import hmac
|
import hmac
|
||||||
from fastapi import Request
|
from fastapi import Request
|
||||||
from fastapi.exceptions import HTTPException
|
from fastapi.exceptions import HTTPException
|
||||||
from fastapi.param_functions import Header
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
|
|
||||||
load_dotenv()
|
|
||||||
|
|
||||||
async def check_ref(request: Request):
|
async def check_ref(request: Request):
|
||||||
json = await request.json()
|
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
|
return
|
||||||
raise HTTPException(status_code=403, detail="Invalid branch")
|
raise HTTPException(status_code=202, detail="Invalid branch")
|
||||||
|
|
||||||
async def auth_hook(request: Request):
|
async def auth_hook(request: Request):
|
||||||
try:
|
try:
|
||||||
|
@ -29,7 +25,7 @@ async def auth_hook(request: Request):
|
||||||
if sha_name != 'sha1':
|
if sha_name != 'sha1':
|
||||||
raise HTTPException(status_code=400, detail="Invalid signature")
|
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:
|
if secret_key is None:
|
||||||
raise HTTPException(status_code=503, detail="Missing WEBHOOK_SECRET")
|
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):
|
async def auth_web(request: Request):
|
||||||
token = request._query_params.get("token")
|
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")
|
raise HTTPException(status_code=400, detail="Missing token")
|
||||||
print(token, os.environ.get("TOKEN"))
|
if token == getenv("TOKEN"):
|
||||||
if token == os.environ.get("TOKEN"):
|
|
||||||
return
|
return
|
||||||
raise HTTPException(status_code=403, detail="Invalid token")
|
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
|
from fastapi.testclient import TestClient
|
||||||
import hmac
|
import hmac
|
||||||
|
from app.main import app
|
||||||
from starlette.routing import request_response
|
from app.dependencies import auth_hook, auth_web, check_ref
|
||||||
from main import app
|
from os import environ, getenv
|
||||||
from auth import auth_hook, auth_web, check_ref
|
|
||||||
from os import environ
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
environ['WEBHOOK_SECRET'] = "dfsgdsjghhgdaehlsdfjhjkdh"
|
environ['WEBHOOK_SECRET'] = "dfsgdsjghhgdaehlsdfjhjkdh"
|
||||||
environ["BRANCH"] = "master"
|
environ["BRANCH"] = "master"
|
||||||
environ["TOKEN"] = "assdcvfgvh"
|
environ["TOKEN"] = "assdcvfgvh"
|
||||||
secret_key = environ.get('WEBHOOK_SECRET')
|
secret_key = getenv('WEBHOOK_SECRET')
|
||||||
|
|
||||||
client = TestClient(app)
|
client = TestClient(app)
|
||||||
|
|
||||||
|
@ -56,14 +54,14 @@ def test_auth():
|
||||||
def test_branch():
|
def test_branch():
|
||||||
payload = {"ref": "refs/heads/master"}
|
payload = {"ref": "refs/heads/master"}
|
||||||
response = client.post("/test_ref", json= payload)
|
response = client.post("/test_ref", json= payload)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 202
|
||||||
|
|
||||||
payload = {"ref": "refs/heads/test"}
|
payload = {"ref": "refs/heads/test"}
|
||||||
response = client.post("/test_ref", json= payload)
|
response = client.post("/test_ref", json= payload)
|
||||||
assert response.status_code == 403
|
assert response.status_code == 403
|
||||||
|
|
||||||
def test_web():
|
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
|
assert response.status_code == 200
|
||||||
|
|
||||||
response = client.get('/test_web')
|
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