gitship-agent 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.js +20 -26
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import express from "express";
|
|
2
2
|
import crypto from "crypto";
|
|
3
|
-
import {
|
|
3
|
+
import { getProject, enqueueDeployment, isWebhookDeliveryProcessed, recordWebhookDelivery, } from "gitship-core";
|
|
4
4
|
const app = express();
|
|
5
5
|
const PORT = process.env.PORT || 3000;
|
|
6
6
|
// Middleware to capture raw body for HMAC signature verification
|
|
@@ -22,7 +22,8 @@ function verifyGitHubSignature(rawBody, signatureHeader, secret) {
|
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
app.post("/webhook/github", async (req, res) => {
|
|
25
|
+
app.post("/webhook/github/:projectId", async (req, res) => {
|
|
26
|
+
const { projectId } = req.params;
|
|
26
27
|
const event = req.headers["x-github-event"];
|
|
27
28
|
const signature = req.headers["x-hub-signature-256"];
|
|
28
29
|
const deliveryId = req.headers["x-github-delivery"];
|
|
@@ -30,6 +31,13 @@ app.post("/webhook/github", async (req, res) => {
|
|
|
30
31
|
res.status(200).send("Ignored: Not a push event");
|
|
31
32
|
return;
|
|
32
33
|
}
|
|
34
|
+
// Find matching project in the database
|
|
35
|
+
const project = getProject(projectId);
|
|
36
|
+
if (!project) {
|
|
37
|
+
console.log(`[Webhook] No project found in database for ID: ${projectId}`);
|
|
38
|
+
res.status(404).send(`Error: Project not found for ID ${projectId}`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
33
41
|
// Replay Protection
|
|
34
42
|
if (deliveryId) {
|
|
35
43
|
if (isWebhookDeliveryProcessed(deliveryId)) {
|
|
@@ -44,37 +52,23 @@ app.post("/webhook/github", async (req, res) => {
|
|
|
44
52
|
res.status(400).send("Bad Request: Missing payload details");
|
|
45
53
|
return;
|
|
46
54
|
}
|
|
47
|
-
const owner = payload.repository.owner.login;
|
|
48
|
-
const repo = payload.repository.name;
|
|
49
55
|
const branch = payload.ref.replace("refs/heads/", "");
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
p.branch.toLowerCase() === branch.toLowerCase());
|
|
54
|
-
if (projects.length === 0) {
|
|
55
|
-
console.log(`[Webhook] No matching active project found for ${owner}/${repo} branch ${branch}`);
|
|
56
|
-
res.status(200).send(`Ignored: No active project matching ${owner}/${repo}:${branch}`);
|
|
56
|
+
if (project.branch.toLowerCase() !== branch.toLowerCase()) {
|
|
57
|
+
console.log(`[Webhook] Branch mismatch for project ${project.name}. Expected: ${project.branch}, Received: ${branch}`);
|
|
58
|
+
res.status(200).send(`Ignored: Branch mismatch. Project branch: ${project.branch}, Payload branch: ${branch}`);
|
|
57
59
|
return;
|
|
58
60
|
}
|
|
59
61
|
const rawBody = req.rawBody || Buffer.from(JSON.stringify(req.body));
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
for (const project of projects) {
|
|
63
|
-
if (!verifyGitHubSignature(rawBody, signature, project.webhook_secret)) {
|
|
64
|
-
console.warn(`[Webhook] Signature verification failed for project: ${project.name}`);
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
authorizedCount++;
|
|
68
|
-
const commitSha = payload.after !== "0000000000000000000000000000000000000000" ? payload.after : null;
|
|
69
|
-
const commitMessage = payload.head_commit?.message || "Webhook trigger";
|
|
70
|
-
const author = payload.head_commit?.author?.username || payload.pusher?.name || "github";
|
|
71
|
-
console.log(`[Webhook] Enqueuing deployment for project ${project.name} (commit: ${commitSha})`);
|
|
72
|
-
await enqueueDeployment(project.id, branch, commitSha, commitMessage, author);
|
|
73
|
-
}
|
|
74
|
-
if (authorizedCount === 0) {
|
|
62
|
+
if (!verifyGitHubSignature(rawBody, signature, project.webhook_secret)) {
|
|
63
|
+
console.warn(`[Webhook] Signature verification failed for project: ${project.name}`);
|
|
75
64
|
res.status(401).send("Unauthorized: Signature verification failed");
|
|
76
65
|
return;
|
|
77
66
|
}
|
|
67
|
+
const commitSha = payload.after !== "0000000000000000000000000000000000000000" ? payload.after : null;
|
|
68
|
+
const commitMessage = payload.head_commit?.message || "Webhook trigger";
|
|
69
|
+
const author = payload.head_commit?.author?.username || payload.pusher?.name || "github";
|
|
70
|
+
console.log(`[Webhook] Enqueuing deployment for project ${project.name} (commit: ${commitSha})`);
|
|
71
|
+
await enqueueDeployment(project.id, branch, commitSha, commitMessage, author);
|
|
78
72
|
res.status(202).send("Accepted: Deployment enqueued");
|
|
79
73
|
});
|
|
80
74
|
app.get("/health", (_req, res) => {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAA8B,MAAM,SAAS,CAAC;AACrD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|