@cloudsnorkel/cdk-github-runners 0.3.1 → 0.3.2
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/.gitattributes +2 -0
- package/.jsii +5 -5
- package/README.md +7 -7
- package/lib/lambdas/delete-runner/index.js +5151 -2999
- package/lib/lambdas/setup/index.html +37 -0
- package/lib/lambdas/setup/index.js +102 -265
- package/lib/lambdas/status/index.js +5151 -2999
- package/lib/lambdas/token-retriever/index.js +5151 -2999
- package/lib/providers/codebuild.js +1 -1
- package/lib/providers/common.js +3 -3
- package/lib/providers/fargate.js +1 -1
- package/lib/providers/image-builders/codebuild.js +1 -1
- package/lib/providers/image-builders/static.js +1 -1
- package/lib/providers/lambda.js +1 -1
- package/lib/runner.js +1 -1
- package/lib/secrets.js +1 -1
- package/lib/utils.js +2 -2
- package/package.json +29 -12
- package/setup/index.html +12 -0
- package/setup/src/App.svelte +291 -0
- package/setup/src/app.scss +15 -0
- package/setup/src/main.ts +8 -0
- package/setup/src/vite-env.d.ts +2 -0
- package/setup/svelte.config.mjs +7 -0
- package/setup/tsconfig.json +21 -0
- package/setup/tsconfig.node.json +8 -0
- package/setup/vite.config.ts +15 -0
|
@@ -5753,7 +5753,7 @@ var require_lib2 = __commonJS({
|
|
|
5753
5753
|
var trail = encoder.end();
|
|
5754
5754
|
return trail && trail.length > 0 ? Buffer2.concat([res, trail]) : res;
|
|
5755
5755
|
};
|
|
5756
|
-
iconv.decode = function
|
|
5756
|
+
iconv.decode = function decode(buf, encoding, options) {
|
|
5757
5757
|
if (typeof buf === "string") {
|
|
5758
5758
|
if (!iconv.skipDecodeWarning) {
|
|
5759
5759
|
console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");
|
|
@@ -6795,16 +6795,16 @@ var require_lib3 = __commonJS({
|
|
|
6795
6795
|
const options = getNodeRequestOptions(request);
|
|
6796
6796
|
const send = (options.protocol === "https:" ? https : http).request;
|
|
6797
6797
|
const signal = request.signal;
|
|
6798
|
-
let
|
|
6798
|
+
let response2 = null;
|
|
6799
6799
|
const abort = function abort2() {
|
|
6800
6800
|
let error = new AbortError("The user aborted a request.");
|
|
6801
6801
|
reject(error);
|
|
6802
6802
|
if (request.body && request.body instanceof Stream.Readable) {
|
|
6803
6803
|
request.body.destroy(error);
|
|
6804
6804
|
}
|
|
6805
|
-
if (!
|
|
6805
|
+
if (!response2 || !response2.body)
|
|
6806
6806
|
return;
|
|
6807
|
-
|
|
6807
|
+
response2.body.emit("error", error);
|
|
6808
6808
|
};
|
|
6809
6809
|
if (signal && signal.aborted) {
|
|
6810
6810
|
abort();
|
|
@@ -6923,8 +6923,8 @@ var require_lib3 = __commonJS({
|
|
|
6923
6923
|
};
|
|
6924
6924
|
const codings = headers.get("Content-Encoding");
|
|
6925
6925
|
if (!request.compress || request.method === "HEAD" || codings === null || res.statusCode === 204 || res.statusCode === 304) {
|
|
6926
|
-
|
|
6927
|
-
resolve(
|
|
6926
|
+
response2 = new Response(body, response_options);
|
|
6927
|
+
resolve(response2);
|
|
6928
6928
|
return;
|
|
6929
6929
|
}
|
|
6930
6930
|
const zlibOptions = {
|
|
@@ -6933,8 +6933,8 @@ var require_lib3 = __commonJS({
|
|
|
6933
6933
|
};
|
|
6934
6934
|
if (codings == "gzip" || codings == "x-gzip") {
|
|
6935
6935
|
body = body.pipe(zlib.createGunzip(zlibOptions));
|
|
6936
|
-
|
|
6937
|
-
resolve(
|
|
6936
|
+
response2 = new Response(body, response_options);
|
|
6937
|
+
resolve(response2);
|
|
6938
6938
|
return;
|
|
6939
6939
|
}
|
|
6940
6940
|
if (codings == "deflate" || codings == "x-deflate") {
|
|
@@ -6945,19 +6945,19 @@ var require_lib3 = __commonJS({
|
|
|
6945
6945
|
} else {
|
|
6946
6946
|
body = body.pipe(zlib.createInflateRaw());
|
|
6947
6947
|
}
|
|
6948
|
-
|
|
6949
|
-
resolve(
|
|
6948
|
+
response2 = new Response(body, response_options);
|
|
6949
|
+
resolve(response2);
|
|
6950
6950
|
});
|
|
6951
6951
|
return;
|
|
6952
6952
|
}
|
|
6953
6953
|
if (codings == "br" && typeof zlib.createBrotliDecompress === "function") {
|
|
6954
6954
|
body = body.pipe(zlib.createBrotliDecompress());
|
|
6955
|
-
|
|
6956
|
-
resolve(
|
|
6955
|
+
response2 = new Response(body, response_options);
|
|
6956
|
+
resolve(response2);
|
|
6957
6957
|
return;
|
|
6958
6958
|
}
|
|
6959
|
-
|
|
6960
|
-
resolve(
|
|
6959
|
+
response2 = new Response(body, response_options);
|
|
6960
|
+
resolve(response2);
|
|
6961
6961
|
});
|
|
6962
6962
|
writeToStream(req, request);
|
|
6963
6963
|
});
|
|
@@ -7138,8 +7138,8 @@ var require_dist_node5 = __commonJS({
|
|
|
7138
7138
|
var nodeFetch = _interopDefault(require_lib3());
|
|
7139
7139
|
var requestError = require_dist_node4();
|
|
7140
7140
|
var VERSION = "5.6.3";
|
|
7141
|
-
function getBufferResponse(
|
|
7142
|
-
return
|
|
7141
|
+
function getBufferResponse(response2) {
|
|
7142
|
+
return response2.arrayBuffer();
|
|
7143
7143
|
}
|
|
7144
7144
|
function fetchWrapper(requestOptions) {
|
|
7145
7145
|
const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;
|
|
@@ -7155,10 +7155,10 @@ var require_dist_node5 = __commonJS({
|
|
|
7155
7155
|
body: requestOptions.body,
|
|
7156
7156
|
headers: requestOptions.headers,
|
|
7157
7157
|
redirect: requestOptions.redirect
|
|
7158
|
-
}, requestOptions.request)).then(async (
|
|
7159
|
-
url =
|
|
7160
|
-
status =
|
|
7161
|
-
for (const keyAndValue of
|
|
7158
|
+
}, requestOptions.request)).then(async (response2) => {
|
|
7159
|
+
url = response2.url;
|
|
7160
|
+
status = response2.status;
|
|
7161
|
+
for (const keyAndValue of response2.headers) {
|
|
7162
7162
|
headers[keyAndValue[0]] = keyAndValue[1];
|
|
7163
7163
|
}
|
|
7164
7164
|
if ("deprecation" in headers) {
|
|
@@ -7173,7 +7173,7 @@ var require_dist_node5 = __commonJS({
|
|
|
7173
7173
|
if (status < 400) {
|
|
7174
7174
|
return;
|
|
7175
7175
|
}
|
|
7176
|
-
throw new requestError.RequestError(
|
|
7176
|
+
throw new requestError.RequestError(response2.statusText, status, {
|
|
7177
7177
|
response: {
|
|
7178
7178
|
url,
|
|
7179
7179
|
status,
|
|
@@ -7189,13 +7189,13 @@ var require_dist_node5 = __commonJS({
|
|
|
7189
7189
|
url,
|
|
7190
7190
|
status,
|
|
7191
7191
|
headers,
|
|
7192
|
-
data: await getResponseData(
|
|
7192
|
+
data: await getResponseData(response2)
|
|
7193
7193
|
},
|
|
7194
7194
|
request: requestOptions
|
|
7195
7195
|
});
|
|
7196
7196
|
}
|
|
7197
7197
|
if (status >= 400) {
|
|
7198
|
-
const data = await getResponseData(
|
|
7198
|
+
const data = await getResponseData(response2);
|
|
7199
7199
|
const error = new requestError.RequestError(toErrorMessage(data), status, {
|
|
7200
7200
|
response: {
|
|
7201
7201
|
url,
|
|
@@ -7207,7 +7207,7 @@ var require_dist_node5 = __commonJS({
|
|
|
7207
7207
|
});
|
|
7208
7208
|
throw error;
|
|
7209
7209
|
}
|
|
7210
|
-
return getResponseData(
|
|
7210
|
+
return getResponseData(response2);
|
|
7211
7211
|
}).then((data) => {
|
|
7212
7212
|
return {
|
|
7213
7213
|
status,
|
|
@@ -7223,15 +7223,15 @@ var require_dist_node5 = __commonJS({
|
|
|
7223
7223
|
});
|
|
7224
7224
|
});
|
|
7225
7225
|
}
|
|
7226
|
-
async function getResponseData(
|
|
7227
|
-
const contentType =
|
|
7226
|
+
async function getResponseData(response2) {
|
|
7227
|
+
const contentType = response2.headers.get("content-type");
|
|
7228
7228
|
if (/application\/json/.test(contentType)) {
|
|
7229
|
-
return
|
|
7229
|
+
return response2.json();
|
|
7230
7230
|
}
|
|
7231
7231
|
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
|
|
7232
|
-
return
|
|
7232
|
+
return response2.text();
|
|
7233
7233
|
}
|
|
7234
|
-
return getBufferResponse(
|
|
7234
|
+
return getBufferResponse(response2);
|
|
7235
7235
|
}
|
|
7236
7236
|
function toErrorMessage(data) {
|
|
7237
7237
|
if (typeof data === "string")
|
|
@@ -7287,14 +7287,14 @@ var require_dist_node6 = __commonJS({
|
|
|
7287
7287
|
` + data.errors.map((e) => ` - ${e.message}`).join("\n");
|
|
7288
7288
|
}
|
|
7289
7289
|
var GraphqlResponseError = class extends Error {
|
|
7290
|
-
constructor(request2, headers,
|
|
7291
|
-
super(_buildMessageForResponseErrors(
|
|
7290
|
+
constructor(request2, headers, response2) {
|
|
7291
|
+
super(_buildMessageForResponseErrors(response2));
|
|
7292
7292
|
this.request = request2;
|
|
7293
7293
|
this.headers = headers;
|
|
7294
|
-
this.response =
|
|
7294
|
+
this.response = response2;
|
|
7295
7295
|
this.name = "GraphqlResponseError";
|
|
7296
|
-
this.errors =
|
|
7297
|
-
this.data =
|
|
7296
|
+
this.errors = response2.errors;
|
|
7297
|
+
this.data = response2.data;
|
|
7298
7298
|
if (Error.captureStackTrace) {
|
|
7299
7299
|
Error.captureStackTrace(this, this.constructor);
|
|
7300
7300
|
}
|
|
@@ -7332,15 +7332,15 @@ var require_dist_node6 = __commonJS({
|
|
|
7332
7332
|
if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {
|
|
7333
7333
|
requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
|
|
7334
7334
|
}
|
|
7335
|
-
return request2(requestOptions).then((
|
|
7336
|
-
if (
|
|
7335
|
+
return request2(requestOptions).then((response2) => {
|
|
7336
|
+
if (response2.data.errors) {
|
|
7337
7337
|
const headers = {};
|
|
7338
|
-
for (const key of Object.keys(
|
|
7339
|
-
headers[key] =
|
|
7338
|
+
for (const key of Object.keys(response2.headers)) {
|
|
7339
|
+
headers[key] = response2.headers[key];
|
|
7340
7340
|
}
|
|
7341
|
-
throw new GraphqlResponseError(requestOptions, headers,
|
|
7341
|
+
throw new GraphqlResponseError(requestOptions, headers, response2.data);
|
|
7342
7342
|
}
|
|
7343
|
-
return
|
|
7343
|
+
return response2.data.data;
|
|
7344
7344
|
});
|
|
7345
7345
|
}
|
|
7346
7346
|
function withDefaults(request$1, newDefaults) {
|
|
@@ -7566,9 +7566,9 @@ var require_dist_node9 = __commonJS({
|
|
|
7566
7566
|
const start = Date.now();
|
|
7567
7567
|
const requestOptions = octokit.request.endpoint.parse(options);
|
|
7568
7568
|
const path = requestOptions.url.replace(options.baseUrl, "");
|
|
7569
|
-
return request(options).then((
|
|
7570
|
-
octokit.log.info(`${requestOptions.method} ${path} - ${
|
|
7571
|
-
return
|
|
7569
|
+
return request(options).then((response2) => {
|
|
7570
|
+
octokit.log.info(`${requestOptions.method} ${path} - ${response2.status} in ${Date.now() - start}ms`);
|
|
7571
|
+
return response2;
|
|
7572
7572
|
}).catch((error) => {
|
|
7573
7573
|
octokit.log.info(`${requestOptions.method} ${path} - ${error.status} in ${Date.now() - start}ms`);
|
|
7574
7574
|
throw error;
|
|
@@ -7585,7 +7585,7 @@ var require_dist_node10 = __commonJS({
|
|
|
7585
7585
|
"node_modules/@octokit/plugin-paginate-rest/dist-node/index.js"(exports2) {
|
|
7586
7586
|
"use strict";
|
|
7587
7587
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
7588
|
-
var VERSION = "2.
|
|
7588
|
+
var VERSION = "2.21.3";
|
|
7589
7589
|
function ownKeys(object, enumerableOnly) {
|
|
7590
7590
|
var keys = Object.keys(object);
|
|
7591
7591
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -7598,7 +7598,7 @@ var require_dist_node10 = __commonJS({
|
|
|
7598
7598
|
}
|
|
7599
7599
|
function _objectSpread2(target) {
|
|
7600
7600
|
for (var i = 1; i < arguments.length; i++) {
|
|
7601
|
-
var source = arguments[i]
|
|
7601
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
7602
7602
|
i % 2 ? ownKeys(Object(source), true).forEach(function(key) {
|
|
7603
7603
|
_defineProperty(target, key, source[key]);
|
|
7604
7604
|
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {
|
|
@@ -7620,32 +7620,32 @@ var require_dist_node10 = __commonJS({
|
|
|
7620
7620
|
}
|
|
7621
7621
|
return obj;
|
|
7622
7622
|
}
|
|
7623
|
-
function normalizePaginatedListResponse(
|
|
7624
|
-
if (!
|
|
7625
|
-
return _objectSpread2(_objectSpread2({},
|
|
7623
|
+
function normalizePaginatedListResponse(response2) {
|
|
7624
|
+
if (!response2.data) {
|
|
7625
|
+
return _objectSpread2(_objectSpread2({}, response2), {}, {
|
|
7626
7626
|
data: []
|
|
7627
7627
|
});
|
|
7628
7628
|
}
|
|
7629
|
-
const responseNeedsNormalization = "total_count" in
|
|
7629
|
+
const responseNeedsNormalization = "total_count" in response2.data && !("url" in response2.data);
|
|
7630
7630
|
if (!responseNeedsNormalization)
|
|
7631
|
-
return
|
|
7632
|
-
const incompleteResults =
|
|
7633
|
-
const repositorySelection =
|
|
7634
|
-
const totalCount =
|
|
7635
|
-
delete
|
|
7636
|
-
delete
|
|
7637
|
-
delete
|
|
7638
|
-
const namespaceKey = Object.keys(
|
|
7639
|
-
const data =
|
|
7640
|
-
|
|
7631
|
+
return response2;
|
|
7632
|
+
const incompleteResults = response2.data.incomplete_results;
|
|
7633
|
+
const repositorySelection = response2.data.repository_selection;
|
|
7634
|
+
const totalCount = response2.data.total_count;
|
|
7635
|
+
delete response2.data.incomplete_results;
|
|
7636
|
+
delete response2.data.repository_selection;
|
|
7637
|
+
delete response2.data.total_count;
|
|
7638
|
+
const namespaceKey = Object.keys(response2.data)[0];
|
|
7639
|
+
const data = response2.data[namespaceKey];
|
|
7640
|
+
response2.data = data;
|
|
7641
7641
|
if (typeof incompleteResults !== "undefined") {
|
|
7642
|
-
|
|
7642
|
+
response2.data.incomplete_results = incompleteResults;
|
|
7643
7643
|
}
|
|
7644
7644
|
if (typeof repositorySelection !== "undefined") {
|
|
7645
|
-
|
|
7645
|
+
response2.data.repository_selection = repositorySelection;
|
|
7646
7646
|
}
|
|
7647
|
-
|
|
7648
|
-
return
|
|
7647
|
+
response2.data.total_count = totalCount;
|
|
7648
|
+
return response2;
|
|
7649
7649
|
}
|
|
7650
7650
|
function iterator(octokit, route, parameters) {
|
|
7651
7651
|
const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
|
|
@@ -7661,12 +7661,12 @@ var require_dist_node10 = __commonJS({
|
|
|
7661
7661
|
done: true
|
|
7662
7662
|
};
|
|
7663
7663
|
try {
|
|
7664
|
-
const
|
|
7664
|
+
const response2 = await requestMethod({
|
|
7665
7665
|
method,
|
|
7666
7666
|
url,
|
|
7667
7667
|
headers
|
|
7668
7668
|
});
|
|
7669
|
-
const normalizedResponse = normalizePaginatedListResponse(
|
|
7669
|
+
const normalizedResponse = normalizePaginatedListResponse(response2);
|
|
7670
7670
|
url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1];
|
|
7671
7671
|
return {
|
|
7672
7672
|
value: normalizedResponse
|
|
@@ -7713,7 +7713,7 @@ var require_dist_node10 = __commonJS({
|
|
|
7713
7713
|
var composePaginateRest = Object.assign(paginate, {
|
|
7714
7714
|
iterator
|
|
7715
7715
|
});
|
|
7716
|
-
var paginatingEndpoints = ["GET /app/hook/deliveries", "GET /app/installations", "GET /applications/grants", "GET /authorizations", "GET /enterprises/{enterprise}/actions/permissions/organizations", "GET /enterprises/{enterprise}/actions/runner-groups", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners", "GET /enterprises/{enterprise}/actions/runners", "GET /enterprises/{enterprise}/
|
|
7716
|
+
var paginatingEndpoints = ["GET /app/hook/deliveries", "GET /app/installations", "GET /applications/grants", "GET /authorizations", "GET /enterprises/{enterprise}/actions/permissions/organizations", "GET /enterprises/{enterprise}/actions/runner-groups", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners", "GET /enterprises/{enterprise}/actions/runners", "GET /enterprises/{enterprise}/audit-log", "GET /enterprises/{enterprise}/secret-scanning/alerts", "GET /enterprises/{enterprise}/settings/billing/advanced-security", "GET /events", "GET /gists", "GET /gists/public", "GET /gists/starred", "GET /gists/{gist_id}/comments", "GET /gists/{gist_id}/commits", "GET /gists/{gist_id}/forks", "GET /installation/repositories", "GET /issues", "GET /licenses", "GET /marketplace_listing/plans", "GET /marketplace_listing/plans/{plan_id}/accounts", "GET /marketplace_listing/stubbed/plans", "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", "GET /networks/{owner}/{repo}/events", "GET /notifications", "GET /organizations", "GET /orgs/{org}/actions/cache/usage-by-repository", "GET /orgs/{org}/actions/permissions/repositories", "GET /orgs/{org}/actions/runner-groups", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners", "GET /orgs/{org}/actions/runners", "GET /orgs/{org}/actions/secrets", "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", "GET /orgs/{org}/audit-log", "GET /orgs/{org}/blocks", "GET /orgs/{org}/code-scanning/alerts", "GET /orgs/{org}/codespaces", "GET /orgs/{org}/credential-authorizations", "GET /orgs/{org}/dependabot/secrets", "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories", "GET /orgs/{org}/events", "GET /orgs/{org}/external-groups", "GET /orgs/{org}/failed_invitations", "GET /orgs/{org}/hooks", "GET /orgs/{org}/hooks/{hook_id}/deliveries", "GET /orgs/{org}/installations", "GET /orgs/{org}/invitations", "GET /orgs/{org}/invitations/{invitation_id}/teams", "GET /orgs/{org}/issues", "GET /orgs/{org}/members", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", "GET /orgs/{org}/projects", "GET /orgs/{org}/public_members", "GET /orgs/{org}/repos", "GET /orgs/{org}/secret-scanning/alerts", "GET /orgs/{org}/settings/billing/advanced-security", "GET /orgs/{org}/team-sync/groups", "GET /orgs/{org}/teams", "GET /orgs/{org}/teams/{team_slug}/discussions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/invitations", "GET /orgs/{org}/teams/{team_slug}/members", "GET /orgs/{org}/teams/{team_slug}/projects", "GET /orgs/{org}/teams/{team_slug}/repos", "GET /orgs/{org}/teams/{team_slug}/teams", "GET /projects/columns/{column_id}/cards", "GET /projects/{project_id}/collaborators", "GET /projects/{project_id}/columns", "GET /repos/{owner}/{repo}/actions/artifacts", "GET /repos/{owner}/{repo}/actions/caches", "GET /repos/{owner}/{repo}/actions/runners", "GET /repos/{owner}/{repo}/actions/runs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", "GET /repos/{owner}/{repo}/actions/secrets", "GET /repos/{owner}/{repo}/actions/workflows", "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", "GET /repos/{owner}/{repo}/assignees", "GET /repos/{owner}/{repo}/branches", "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", "GET /repos/{owner}/{repo}/code-scanning/alerts", "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", "GET /repos/{owner}/{repo}/code-scanning/analyses", "GET /repos/{owner}/{repo}/codespaces", "GET /repos/{owner}/{repo}/codespaces/devcontainers", "GET /repos/{owner}/{repo}/codespaces/secrets", "GET /repos/{owner}/{repo}/collaborators", "GET /repos/{owner}/{repo}/comments", "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/commits", "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", "GET /repos/{owner}/{repo}/commits/{ref}/status", "GET /repos/{owner}/{repo}/commits/{ref}/statuses", "GET /repos/{owner}/{repo}/contributors", "GET /repos/{owner}/{repo}/dependabot/secrets", "GET /repos/{owner}/{repo}/deployments", "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", "GET /repos/{owner}/{repo}/environments", "GET /repos/{owner}/{repo}/events", "GET /repos/{owner}/{repo}/forks", "GET /repos/{owner}/{repo}/git/matching-refs/{ref}", "GET /repos/{owner}/{repo}/hooks", "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries", "GET /repos/{owner}/{repo}/invitations", "GET /repos/{owner}/{repo}/issues", "GET /repos/{owner}/{repo}/issues/comments", "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/issues/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", "GET /repos/{owner}/{repo}/issues/{issue_number}/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", "GET /repos/{owner}/{repo}/keys", "GET /repos/{owner}/{repo}/labels", "GET /repos/{owner}/{repo}/milestones", "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", "GET /repos/{owner}/{repo}/notifications", "GET /repos/{owner}/{repo}/pages/builds", "GET /repos/{owner}/{repo}/projects", "GET /repos/{owner}/{repo}/pulls", "GET /repos/{owner}/{repo}/pulls/comments", "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", "GET /repos/{owner}/{repo}/releases", "GET /repos/{owner}/{repo}/releases/{release_id}/assets", "GET /repos/{owner}/{repo}/releases/{release_id}/reactions", "GET /repos/{owner}/{repo}/secret-scanning/alerts", "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations", "GET /repos/{owner}/{repo}/stargazers", "GET /repos/{owner}/{repo}/subscribers", "GET /repos/{owner}/{repo}/tags", "GET /repos/{owner}/{repo}/teams", "GET /repos/{owner}/{repo}/topics", "GET /repositories", "GET /repositories/{repository_id}/environments/{environment_name}/secrets", "GET /search/code", "GET /search/commits", "GET /search/issues", "GET /search/labels", "GET /search/repositories", "GET /search/topics", "GET /search/users", "GET /teams/{team_id}/discussions", "GET /teams/{team_id}/discussions/{discussion_number}/comments", "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /teams/{team_id}/discussions/{discussion_number}/reactions", "GET /teams/{team_id}/invitations", "GET /teams/{team_id}/members", "GET /teams/{team_id}/projects", "GET /teams/{team_id}/repos", "GET /teams/{team_id}/teams", "GET /user/blocks", "GET /user/codespaces", "GET /user/codespaces/secrets", "GET /user/emails", "GET /user/followers", "GET /user/following", "GET /user/gpg_keys", "GET /user/installations", "GET /user/installations/{installation_id}/repositories", "GET /user/issues", "GET /user/keys", "GET /user/marketplace_purchases", "GET /user/marketplace_purchases/stubbed", "GET /user/memberships/orgs", "GET /user/migrations", "GET /user/migrations/{migration_id}/repositories", "GET /user/orgs", "GET /user/packages", "GET /user/packages/{package_type}/{package_name}/versions", "GET /user/public_emails", "GET /user/repos", "GET /user/repository_invitations", "GET /user/starred", "GET /user/subscriptions", "GET /user/teams", "GET /users", "GET /users/{username}/events", "GET /users/{username}/events/orgs/{org}", "GET /users/{username}/events/public", "GET /users/{username}/followers", "GET /users/{username}/following", "GET /users/{username}/gists", "GET /users/{username}/gpg_keys", "GET /users/{username}/keys", "GET /users/{username}/orgs", "GET /users/{username}/packages", "GET /users/{username}/projects", "GET /users/{username}/received_events", "GET /users/{username}/received_events/public", "GET /users/{username}/repos", "GET /users/{username}/starred", "GET /users/{username}/subscriptions"];
|
|
7717
7717
|
function isPaginatingEndpoint(arg) {
|
|
7718
7718
|
if (typeof arg === "string") {
|
|
7719
7719
|
return paginatingEndpoints.includes(arg);
|
|
@@ -7877,7 +7877,6 @@ var require_dist_node11 = __commonJS({
|
|
|
7877
7877
|
removeCustomLabelFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],
|
|
7878
7878
|
removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
|
|
7879
7879
|
reviewPendingDeploymentsForRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],
|
|
7880
|
-
setActionsOidcCustomIssuerPolicyForEnterprise: ["PUT /enterprises/{enterprise}/actions/oidc/customization/issuer"],
|
|
7881
7880
|
setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"],
|
|
7882
7881
|
setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],
|
|
7883
7882
|
setCustomLabelsForSelfHostedRunnerForOrg: ["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],
|
|
@@ -8036,7 +8035,11 @@ var require_dist_node11 = __commonJS({
|
|
|
8036
8035
|
getSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}"],
|
|
8037
8036
|
listDevcontainersInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/devcontainers"],
|
|
8038
8037
|
listForAuthenticatedUser: ["GET /user/codespaces"],
|
|
8039
|
-
listInOrganization: ["GET /orgs/{
|
|
8038
|
+
listInOrganization: ["GET /orgs/{org}/codespaces", {}, {
|
|
8039
|
+
renamedParameters: {
|
|
8040
|
+
org_id: "org"
|
|
8041
|
+
}
|
|
8042
|
+
}],
|
|
8040
8043
|
listInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces"],
|
|
8041
8044
|
listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"],
|
|
8042
8045
|
listRepositoriesForSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}/repositories"],
|
|
@@ -8729,7 +8732,7 @@ var require_dist_node11 = __commonJS({
|
|
|
8729
8732
|
updateAuthenticated: ["PATCH /user"]
|
|
8730
8733
|
}
|
|
8731
8734
|
};
|
|
8732
|
-
var VERSION = "5.16.
|
|
8735
|
+
var VERSION = "5.16.2";
|
|
8733
8736
|
function endpointsToMethods(octokit, endpointsMap) {
|
|
8734
8737
|
const newMethods = {};
|
|
8735
8738
|
for (const [scope, endpoints] of Object.entries(endpointsMap)) {
|
|
@@ -8826,7 +8829,7 @@ var require_dist_node12 = __commonJS({
|
|
|
8826
8829
|
|
|
8827
8830
|
// src/lambdas/setup/index.ts
|
|
8828
8831
|
var crypto = __toESM(require("crypto"));
|
|
8829
|
-
var
|
|
8832
|
+
var fs = __toESM(require("fs"));
|
|
8830
8833
|
var import_rest = __toESM(require_dist_node12());
|
|
8831
8834
|
|
|
8832
8835
|
// src/lambdas/helpers.ts
|
|
@@ -8861,152 +8864,46 @@ function baseUrlFromDomain(domain) {
|
|
|
8861
8864
|
}
|
|
8862
8865
|
|
|
8863
8866
|
// src/lambdas/setup/index.ts
|
|
8864
|
-
|
|
8865
|
-
|
|
8866
|
-
|
|
8867
|
-
<head>
|
|
8868
|
-
<meta charset="utf-8"/>
|
|
8869
|
-
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
|
8870
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
|
8871
|
-
<title>Setup GitHub Runners</title>
|
|
8872
|
-
<body>
|
|
8873
|
-
<h1>Setup GitHub Runners</h1>
|
|
8874
|
-
<p>You can choose between creating a new app that will provide authentication for specific repositories, or a personal access token that will provide access to all repositories available to you. Apps are easier to set up and provide more fine-grained access control.</p>
|
|
8875
|
-
<form action="domain?token=${token}" method="post">
|
|
8876
|
-
<fieldset>
|
|
8877
|
-
<legend>GitHub Domain</legend>
|
|
8878
|
-
<p>When using a GitHub Enterprise Server, change this to your own domain like github.mycompany.com.</p>
|
|
8879
|
-
<label for="domain">Domain: </label>
|
|
8880
|
-
<input id="domain" name="domain" value="${domain}">
|
|
8881
|
-
<input type="submit" value="Update">
|
|
8882
|
-
</fieldset>
|
|
8883
|
-
</form>
|
|
8884
|
-
|
|
8885
|
-
<h2>Using App</h2>
|
|
8886
|
-
<p>Choose whether you want a personal app, an organization app, or an existing app created according to the instructions in <a href="https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md">SETUP_GITHUB.md</a>. The scope of the app should match the scope of the repositories you need to provide runners for.</p>
|
|
8887
|
-
<form action="https://${domain}/settings/apps/new?state=${token}" method="post" id="appform">
|
|
8888
|
-
<fieldset>
|
|
8889
|
-
<legend>New Personal App</legend>
|
|
8890
|
-
<input type="hidden" name="manifest" id="manifest">
|
|
8891
|
-
<input type="submit" value="Create">
|
|
8892
|
-
</fieldset>
|
|
8893
|
-
</form>
|
|
8894
|
-
|
|
8895
|
-
<br>
|
|
8896
|
-
<form action="https://${domain}/organizations/ORGANIZATION/settings/apps/new?state=${token}" method="post" id="orgappform">
|
|
8897
|
-
<fieldset>
|
|
8898
|
-
<legend>New Organization App</legend>
|
|
8899
|
-
<label for="org">Organization slug:</label>
|
|
8900
|
-
<input id="org" name="org" value="ORGANIZATION"><br><br>
|
|
8901
|
-
<input type="hidden" name="manifest" id="manifestorg">
|
|
8902
|
-
<input type="submit" value="Create">
|
|
8903
|
-
</fieldset>
|
|
8904
|
-
</form>
|
|
8905
|
-
|
|
8906
|
-
<br>
|
|
8907
|
-
<form action="app?token=${token}" method="post">
|
|
8908
|
-
<fieldset>
|
|
8909
|
-
<p>Existing apps must have <code>actions</code> and <code>administration</code> write permissions. Don't forget to set up the webhook and its secret as described in <a href="https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md">SETUP_GITHUB.md</a>.</p>
|
|
8910
|
-
<legend>Existing App</legend>
|
|
8911
|
-
<input type="hidden" name="domain" id="existingdomain" value="${domain}">
|
|
8912
|
-
<label for="appid">App id:</label>
|
|
8913
|
-
<input type="number" id="appid" name="appid"><br><br>
|
|
8914
|
-
<label for="pk">Private key:</label>
|
|
8915
|
-
<textarea id="pk" name="pk"></textarea><br><br>
|
|
8916
|
-
<input type="submit" value="Set">
|
|
8917
|
-
</fieldset>
|
|
8918
|
-
</form>
|
|
8919
|
-
|
|
8920
|
-
<h2>Using Personal Access Token</h2>
|
|
8921
|
-
<p>The personal token must have the <code>repo</code> scope enable. Don't forget to also create a webhook as described in <a href="https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md">SETUP_GITHUB.md</a>.</p>
|
|
8922
|
-
<form action="pat?token=${token}" method="post">
|
|
8923
|
-
<fieldset>
|
|
8924
|
-
<label for="pat">Token:</label>
|
|
8925
|
-
<input type="hidden" name="domain" id="patdomain" value="${domain}">
|
|
8926
|
-
<input type="password" id="pat" name="pat">
|
|
8927
|
-
<input type="submit" value="Set">
|
|
8928
|
-
</fieldset>
|
|
8929
|
-
</form>
|
|
8930
|
-
|
|
8931
|
-
<script>
|
|
8932
|
-
document.getElementById("manifest").value = JSON.stringify(${manifest});
|
|
8933
|
-
document.getElementById("manifestorg").value = JSON.stringify(${manifest});
|
|
8934
|
-
function setDomainAndOrg() {
|
|
8935
|
-
const domain = document.getElementById("domain").value;
|
|
8936
|
-
const org = document.getElementById("org").value;
|
|
8937
|
-
document.getElementById("appform").action = \`https://\${domain}/settings/apps/new?state=${token}\`;
|
|
8938
|
-
document.getElementById("orgappform").action = \`https://\${domain}/organizations/\${org}/settings/apps/new?state=${token}\`;
|
|
8939
|
-
document.getElementById("existingdomain").value = domain;
|
|
8940
|
-
document.getElementById("patdomain").value = domain;
|
|
8941
|
-
}
|
|
8942
|
-
document.getElementById("domain").onchange = setDomainAndOrg;
|
|
8943
|
-
document.getElementById("org").onchange = setDomainAndOrg;
|
|
8944
|
-
<\/script>
|
|
8945
|
-
</body>
|
|
8946
|
-
</html>
|
|
8947
|
-
`;
|
|
8867
|
+
var nonce = crypto.randomBytes(64).toString("hex");
|
|
8868
|
+
function getHtml(baseUrl, token, domain) {
|
|
8869
|
+
return fs.readFileSync("index.html", "utf-8").replace(/INSERT_WEBHOOK_URL_HERE/g, process.env.WEBHOOK_URL).replace(/INSERT_BASE_URL_HERE/g, baseUrl).replace(/INSERT_TOKEN_HERE/g, token).replace(/INSERT_SECRET_ARN_HERE/g, process.env.SETUP_SECRET_ARN).replace(/INSERT_DOMAIN_HERE/g, domain).replace(/<script/g, `<script nonce="${nonce}"`).replace(/<style/g, `<style nonce="${nonce}"`);
|
|
8948
8870
|
}
|
|
8949
|
-
function
|
|
8950
|
-
return
|
|
8951
|
-
|
|
8952
|
-
|
|
8953
|
-
|
|
8954
|
-
|
|
8955
|
-
redirect_url: `${baseUrl}/complete-new-app`,
|
|
8956
|
-
public: false,
|
|
8957
|
-
default_permissions: {
|
|
8958
|
-
actions: "write",
|
|
8959
|
-
administration: "write"
|
|
8871
|
+
function response(code, body) {
|
|
8872
|
+
return {
|
|
8873
|
+
statusCode: code,
|
|
8874
|
+
headers: {
|
|
8875
|
+
"Content-Type": "text/html",
|
|
8876
|
+
"Content-Security-Policy": `default-src 'nonce-${nonce}'; img-src data:; connect-src 'self'; form-action https:; frame-ancestors 'none'`
|
|
8960
8877
|
},
|
|
8961
|
-
|
|
8962
|
-
|
|
8963
|
-
]
|
|
8964
|
-
});
|
|
8878
|
+
body
|
|
8879
|
+
};
|
|
8965
8880
|
}
|
|
8966
8881
|
async function handleRoot(event, setupToken) {
|
|
8967
8882
|
const setupBaseUrl = `https://${event.requestContext.domainName}`;
|
|
8968
8883
|
const githubSecrets = await getSecretJsonValue(process.env.GITHUB_SECRET_ARN);
|
|
8969
|
-
return
|
|
8970
|
-
statusCode: 200,
|
|
8971
|
-
headers: {
|
|
8972
|
-
"Content-Type": "text/html"
|
|
8973
|
-
},
|
|
8974
|
-
body: getHtml(getManifest(setupBaseUrl), setupToken, githubSecrets.domain)
|
|
8975
|
-
};
|
|
8884
|
+
return response(200, getHtml(setupBaseUrl, setupToken, githubSecrets.domain));
|
|
8976
8885
|
}
|
|
8977
8886
|
function decodeBody(event) {
|
|
8978
8887
|
let body = event.body;
|
|
8979
8888
|
if (event.isBase64Encoded) {
|
|
8980
8889
|
body = Buffer.from(body, "base64").toString("utf-8");
|
|
8981
8890
|
}
|
|
8982
|
-
return
|
|
8891
|
+
return JSON.parse(body);
|
|
8983
8892
|
}
|
|
8984
|
-
async function handleDomain(event
|
|
8893
|
+
async function handleDomain(event) {
|
|
8985
8894
|
const body = decodeBody(event);
|
|
8986
8895
|
if (!body.domain) {
|
|
8987
|
-
return
|
|
8988
|
-
statusCode: 400,
|
|
8989
|
-
headers: {
|
|
8990
|
-
"Content-Type": "text/html"
|
|
8991
|
-
},
|
|
8992
|
-
body: "Invalid domain"
|
|
8993
|
-
};
|
|
8896
|
+
return response(400, "Invalid domain");
|
|
8994
8897
|
}
|
|
8995
8898
|
const githubSecrets = await getSecretJsonValue(process.env.GITHUB_SECRET_ARN);
|
|
8996
8899
|
githubSecrets.domain = body.domain;
|
|
8997
8900
|
await updateSecretValue(process.env.GITHUB_SECRET_ARN, JSON.stringify(githubSecrets));
|
|
8998
|
-
return
|
|
8901
|
+
return response(200, "Domain set");
|
|
8999
8902
|
}
|
|
9000
8903
|
async function handlePat(event) {
|
|
9001
8904
|
const body = decodeBody(event);
|
|
9002
8905
|
if (!body.pat || !body.domain) {
|
|
9003
|
-
return
|
|
9004
|
-
statusCode: 400,
|
|
9005
|
-
headers: {
|
|
9006
|
-
"Content-Type": "text/html"
|
|
9007
|
-
},
|
|
9008
|
-
body: "Invalid personal access token"
|
|
9009
|
-
};
|
|
8906
|
+
return response(400, "Invalid personal access token");
|
|
9010
8907
|
}
|
|
9011
8908
|
await updateSecretValue(process.env.GITHUB_SECRET_ARN, JSON.stringify({
|
|
9012
8909
|
domain: body.domain,
|
|
@@ -9014,24 +8911,12 @@ async function handlePat(event) {
|
|
|
9014
8911
|
personalAuthToken: body.pat
|
|
9015
8912
|
}));
|
|
9016
8913
|
await updateSecretValue(process.env.SETUP_SECRET_ARN, JSON.stringify({ token: "" }));
|
|
9017
|
-
return
|
|
9018
|
-
statusCode: 200,
|
|
9019
|
-
headers: {
|
|
9020
|
-
"Content-Type": "text/html"
|
|
9021
|
-
},
|
|
9022
|
-
body: "Personal access token set"
|
|
9023
|
-
};
|
|
8914
|
+
return response(200, "Personal access token set");
|
|
9024
8915
|
}
|
|
9025
8916
|
async function handleNewApp(event) {
|
|
9026
8917
|
const code = event.queryStringParameters.code;
|
|
9027
8918
|
if (!code) {
|
|
9028
|
-
return
|
|
9029
|
-
statusCode: 400,
|
|
9030
|
-
headers: {
|
|
9031
|
-
"Content-Type": "text/html"
|
|
9032
|
-
},
|
|
9033
|
-
body: "Invalid code"
|
|
9034
|
-
};
|
|
8919
|
+
return response(400, "Invalid code");
|
|
9035
8920
|
}
|
|
9036
8921
|
const githubSecrets = await getSecretJsonValue(process.env.GITHUB_SECRET_ARN);
|
|
9037
8922
|
const baseUrl = baseUrlFromDomain(githubSecrets.domain);
|
|
@@ -9046,24 +8931,12 @@ async function handleNewApp(event) {
|
|
|
9046
8931
|
webhookSecret: newApp.data.webhook_secret
|
|
9047
8932
|
}));
|
|
9048
8933
|
await updateSecretValue(process.env.SETUP_SECRET_ARN, JSON.stringify({ token: "" }));
|
|
9049
|
-
return {
|
|
9050
|
-
statusCode: 200,
|
|
9051
|
-
headers: {
|
|
9052
|
-
"Content-Type": "text/html"
|
|
9053
|
-
},
|
|
9054
|
-
body: `New app set. <a href="${newApp.data.html_url}/installations/new">Install it</a> for your repositories.`
|
|
9055
|
-
};
|
|
8934
|
+
return response(200, `New app set. <a href="${newApp.data.html_url}/installations/new">Install it</a> for your repositories.`);
|
|
9056
8935
|
}
|
|
9057
8936
|
async function handleExistingApp(event) {
|
|
9058
8937
|
const body = decodeBody(event);
|
|
9059
8938
|
if (!body.appid || !body.pk || !body.domain) {
|
|
9060
|
-
return
|
|
9061
|
-
statusCode: 400,
|
|
9062
|
-
headers: {
|
|
9063
|
-
"Content-Type": "text/html"
|
|
9064
|
-
},
|
|
9065
|
-
body: "Missing fields"
|
|
9066
|
-
};
|
|
8939
|
+
return response(400, "Missing fields");
|
|
9067
8940
|
}
|
|
9068
8941
|
await updateSecretValue(process.env.GITHUB_SECRET_ARN, JSON.stringify({
|
|
9069
8942
|
domain: body.domain,
|
|
@@ -9072,13 +8945,7 @@ async function handleExistingApp(event) {
|
|
|
9072
8945
|
}));
|
|
9073
8946
|
await updateSecretValue(process.env.GITHUB_PRIVATE_KEY_SECRET_ARN, body.pk);
|
|
9074
8947
|
await updateSecretValue(process.env.SETUP_SECRET_ARN, JSON.stringify({ token: "" }));
|
|
9075
|
-
return
|
|
9076
|
-
statusCode: 200,
|
|
9077
|
-
headers: {
|
|
9078
|
-
"Content-Type": "text/html"
|
|
9079
|
-
},
|
|
9080
|
-
body: "Existing app set. Don't forget to set up the webhook."
|
|
9081
|
-
};
|
|
8948
|
+
return response(200, "Existing app set. Don't forget to set up the webhook.");
|
|
9082
8949
|
}
|
|
9083
8950
|
exports.handler = async function(event) {
|
|
9084
8951
|
if (!process.env.WEBHOOK_URL) {
|
|
@@ -9086,38 +8953,20 @@ exports.handler = async function(event) {
|
|
|
9086
8953
|
}
|
|
9087
8954
|
const setupToken = (await getSecretJsonValue(process.env.SETUP_SECRET_ARN)).token;
|
|
9088
8955
|
if (!setupToken) {
|
|
9089
|
-
return
|
|
9090
|
-
statusCode: 200,
|
|
9091
|
-
headers: {
|
|
9092
|
-
"Content-Type": "text/html"
|
|
9093
|
-
},
|
|
9094
|
-
body: "Setup already complete. Put a new token in the setup secret if you want to redo it."
|
|
9095
|
-
};
|
|
8956
|
+
return response(200, "Setup already complete. Put a new token in the setup secret if you want to redo it.");
|
|
9096
8957
|
}
|
|
9097
8958
|
if (!event.queryStringParameters) {
|
|
9098
|
-
return
|
|
9099
|
-
statusCode: 403,
|
|
9100
|
-
headers: {
|
|
9101
|
-
"Content-Type": "text/html"
|
|
9102
|
-
},
|
|
9103
|
-
body: "Wrong setup token."
|
|
9104
|
-
};
|
|
8959
|
+
return response(403, "Wrong setup token.");
|
|
9105
8960
|
}
|
|
9106
|
-
const urlToken = event.queryStringParameters.token || event.queryStringParameters.state;
|
|
8961
|
+
const urlToken = event.queryStringParameters.token || event.queryStringParameters.state || "";
|
|
9107
8962
|
if (urlToken.length != setupToken.length || !crypto.timingSafeEqual(Buffer.from(urlToken, "utf-8"), Buffer.from(setupToken, "utf-8"))) {
|
|
9108
|
-
return
|
|
9109
|
-
statusCode: 403,
|
|
9110
|
-
headers: {
|
|
9111
|
-
"Content-Type": "text/html"
|
|
9112
|
-
},
|
|
9113
|
-
body: "Wrong setup token."
|
|
9114
|
-
};
|
|
8963
|
+
return response(403, "Wrong setup token.");
|
|
9115
8964
|
}
|
|
9116
8965
|
try {
|
|
9117
8966
|
if (event.requestContext.http.path == "/") {
|
|
9118
8967
|
return await handleRoot(event, setupToken);
|
|
9119
8968
|
} else if (event.requestContext.http.path == "/domain" && event.requestContext.http.method == "POST") {
|
|
9120
|
-
return await handleDomain(event
|
|
8969
|
+
return await handleDomain(event);
|
|
9121
8970
|
} else if (event.requestContext.http.path == "/pat" && event.requestContext.http.method == "POST") {
|
|
9122
8971
|
return await handlePat(event);
|
|
9123
8972
|
} else if (event.requestContext.http.path == "/complete-new-app" && event.requestContext.http.method == "GET") {
|
|
@@ -9125,22 +8974,10 @@ exports.handler = async function(event) {
|
|
|
9125
8974
|
} else if (event.requestContext.http.path == "/app" && event.requestContext.http.method == "POST") {
|
|
9126
8975
|
return await handleExistingApp(event);
|
|
9127
8976
|
} else {
|
|
9128
|
-
return
|
|
9129
|
-
statusCode: 404,
|
|
9130
|
-
headers: {
|
|
9131
|
-
"Content-Type": "text/html"
|
|
9132
|
-
},
|
|
9133
|
-
body: "Not found"
|
|
9134
|
-
};
|
|
8977
|
+
return response(404, "Not found");
|
|
9135
8978
|
}
|
|
9136
8979
|
} catch (e) {
|
|
9137
|
-
return {
|
|
9138
|
-
statusCode: 500,
|
|
9139
|
-
headers: {
|
|
9140
|
-
"Content-Type": "text/html"
|
|
9141
|
-
},
|
|
9142
|
-
body: `<b>Error:</b> ${e}`
|
|
9143
|
-
};
|
|
8980
|
+
return response(500, `<b>Error:</b> ${e}`);
|
|
9144
8981
|
}
|
|
9145
8982
|
};
|
|
9146
8983
|
/*!
|