|
from spin_sdk import variables |
|
from spin_sdk.http import IncomingHandler, Request, Response, send |
|
from cloudevents.http import from_json |
|
import json |
|
class IncomingHandler(IncomingHandler): |
|
def handle_request(self, request: Request) -> Response: |
|
print(request.method) |
|
if request.method == "OPTIONS": |
|
origin = request.headers.get("WebHook-Request-Origin") |
|
rate = request.headers.get("WebHook-Request-Rate") |
|
if origin is None: |
|
origin= "*" |
|
if rate is None: |
|
rate = 120 |
|
print(rate) |
|
return Response( |
|
200, |
|
{"allow": "post", |
|
"webhook-allowed-origin": origin, |
|
"webhook-request-rate": str(rate)}, |
|
None) |
|
|
|
slack_url = variables.get("slack_webhook_url") |
|
slack_channel = variables.get("slack_channel") |
|
slack_username = variables.get("slack_username") |
|
|
|
json_payload = request.body.decode('utf-8') |
|
event = from_json(json_payload) |
|
message = f"New OCI artifact `{event['subject']}` pushed to `{event.data['request']['host']}` Digest is `{event.data['target']['digest']}`" |
|
print(message) |
|
slack_notification_payload = { |
|
"channel": slack_channel, |
|
"username": slack_username, |
|
"mrkdwn": True, |
|
"text": message |
|
} |
|
|
|
slack_notification = Request("POST", slack_url, { |
|
"content-type": "application/json" |
|
}, bytes(json.dumps(slack_notification_payload), "utf-8")) |
|
|
|
send(slack_notification) |
|
|
|
return Response( |
|
200, |
|
{"content-type": "text/plain"}, |
|
bytes("", "utf-8") |
|
) |