@kaitranntt/ccs 8.4.0-dev.7 → 8.4.0-dev.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/commands/bar/bar-server-probe.d.ts +8 -0
- package/dist/commands/bar/bar-server-probe.d.ts.map +1 -1
- package/dist/commands/bar/bar-server-probe.js +50 -9
- package/dist/commands/bar/bar-server-probe.js.map +1 -1
- package/dist/commands/bar/launch-subcommand.d.ts.map +1 -1
- package/dist/commands/bar/launch-subcommand.js +34 -10
- package/dist/commands/bar/launch-subcommand.js.map +1 -1
- package/dist/utils/bar-auth-token.d.ts +4 -0
- package/dist/utils/bar-auth-token.d.ts.map +1 -0
- package/dist/utils/bar-auth-token.js +60 -0
- package/dist/utils/bar-auth-token.js.map +1 -0
- package/dist/web-server/routes/index.d.ts.map +1 -1
- package/dist/web-server/routes/index.js +6 -0
- package/dist/web-server/routes/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,6 +23,14 @@ export declare function resolveBarPort(ccsDir: string): number | null;
|
|
|
23
23
|
* Each probe speaks raw HTTP/1.1 over a socket and resolves on the status line,
|
|
24
24
|
* which lets discovery distinguish a live-but-auth-protected server (401/403)
|
|
25
25
|
* from a healthy one (200) without depending on a higher-level HTTP client.
|
|
26
|
+
*
|
|
27
|
+
* Token authentication: the probe does NOT send the token in the request.
|
|
28
|
+
* The real CCS Bar server reads the token from the 0600 file and includes it
|
|
29
|
+
* unconditionally in the x-ccs-bar-token response header. The probe then checks
|
|
30
|
+
* that the echoed value matches the locally-read token. A rogue loopback process
|
|
31
|
+
* that has not read the 0600 file cannot produce the correct value, so a 200
|
|
32
|
+
* without a matching token header is rejected. Sending the token in the request
|
|
33
|
+
* would defeat this — any process could echo what it received.
|
|
26
34
|
*/
|
|
27
35
|
export declare function defaultFindRunningServer(ccsDir: string): Promise<DashboardInfo | null>;
|
|
28
36
|
//# sourceMappingURL=bar-server-probe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-server-probe.d.ts","sourceRoot":"","sources":["../../../src/commands/bar/bar-server-probe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"bar-server-probe.d.ts","sourceRoot":"","sources":["../../../src/commands/bar/bar-server-probe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA0BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS5D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA6F5F"}
|
|
@@ -33,6 +33,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
33
33
|
exports.defaultFindRunningServer = exports.resolveBarPort = void 0;
|
|
34
34
|
const fs = __importStar(require("fs"));
|
|
35
35
|
const path = __importStar(require("path"));
|
|
36
|
+
const bar_auth_token_1 = require("../../utils/bar-auth-token");
|
|
36
37
|
/**
|
|
37
38
|
* Read the port recorded in an existing bar.json.
|
|
38
39
|
* Returns null when the file is absent or malformed.
|
|
@@ -75,41 +76,81 @@ exports.resolveBarPort = resolveBarPort;
|
|
|
75
76
|
* Each probe speaks raw HTTP/1.1 over a socket and resolves on the status line,
|
|
76
77
|
* which lets discovery distinguish a live-but-auth-protected server (401/403)
|
|
77
78
|
* from a healthy one (200) without depending on a higher-level HTTP client.
|
|
79
|
+
*
|
|
80
|
+
* Token authentication: the probe does NOT send the token in the request.
|
|
81
|
+
* The real CCS Bar server reads the token from the 0600 file and includes it
|
|
82
|
+
* unconditionally in the x-ccs-bar-token response header. The probe then checks
|
|
83
|
+
* that the echoed value matches the locally-read token. A rogue loopback process
|
|
84
|
+
* that has not read the 0600 file cannot produce the correct value, so a 200
|
|
85
|
+
* without a matching token header is rejected. Sending the token in the request
|
|
86
|
+
* would defeat this — any process could echo what it received.
|
|
78
87
|
*/
|
|
79
88
|
async function defaultFindRunningServer(ccsDir) {
|
|
80
89
|
ensureLoopbackNoProxy();
|
|
90
|
+
const token = (0, bar_auth_token_1.getOrCreateBarAuthToken)(ccsDir);
|
|
81
91
|
async function probe(url) {
|
|
82
92
|
const net = await Promise.resolve().then(() => __importStar(require('net')));
|
|
83
93
|
const parsed = new URL(url);
|
|
84
94
|
const port = Number(parsed.port);
|
|
85
95
|
const host = parsed.hostname.replace(/^\[|\]$/g, '');
|
|
86
96
|
return new Promise((resolve) => {
|
|
87
|
-
let
|
|
97
|
+
let rawResponse = '';
|
|
88
98
|
let settled = false;
|
|
89
|
-
const finish = (statusCode = 0) => {
|
|
99
|
+
const finish = (statusCode = 0, headerSection = '') => {
|
|
90
100
|
if (settled)
|
|
91
101
|
return;
|
|
92
102
|
settled = true;
|
|
93
|
-
// Tear down the socket the moment
|
|
103
|
+
// Tear down the socket the moment we have enough to decide. The summary
|
|
94
104
|
// endpoint only needs the status code for liveness, so a non-CCS
|
|
95
105
|
// loopback service that streams forever cannot block discovery from
|
|
96
106
|
// returning a higher-priority hit.
|
|
97
107
|
socket.destroy();
|
|
98
108
|
const authRequired = statusCode === 401 || statusCode === 403;
|
|
99
|
-
|
|
109
|
+
if (authRequired) {
|
|
110
|
+
resolve({ ok: true, authRequired: true });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (statusCode === 200) {
|
|
114
|
+
// Accept only when the server includes the correct token in the
|
|
115
|
+
// response without having received it in the request. Only the real
|
|
116
|
+
// CCS Bar process (which owns the 0600 file) can produce this value.
|
|
117
|
+
const echoMatch = headerSection.match(new RegExp(`${bar_auth_token_1.BAR_AUTH_TOKEN_HEADER}:\\s*([^\\r\\n]+)`, 'i'));
|
|
118
|
+
const echoedToken = echoMatch ? echoMatch[1].trim() : '';
|
|
119
|
+
resolve({ ok: echoedToken === token, authRequired: false });
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
resolve({ ok: false, authRequired: false });
|
|
100
123
|
};
|
|
101
124
|
const socket = net.connect({ host, port }, () => {
|
|
125
|
+
// Do NOT include the token in the request — sending the secret to the
|
|
126
|
+
// party being authenticated lets any reflector trivially pass the check.
|
|
102
127
|
socket.write(`GET ${parsed.pathname}${parsed.search} HTTP/1.1\r\nHost: ${parsed.host}\r\nConnection: close\r\n\r\n`);
|
|
103
128
|
});
|
|
104
129
|
socket.setTimeout(1500, () => finish());
|
|
105
130
|
socket.on('data', (chunk) => {
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
if (
|
|
109
|
-
|
|
131
|
+
rawResponse += chunk.toString('utf8');
|
|
132
|
+
const statusMatch = rawResponse.match(/^HTTP\/\d(?:\.\d)?\s+(\d{3})/);
|
|
133
|
+
if (statusMatch) {
|
|
134
|
+
const code = Number(statusMatch[1]);
|
|
135
|
+
// For non-200 we can finish on the status line alone.
|
|
136
|
+
if (code !== 200) {
|
|
137
|
+
finish(code, rawResponse);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// For 200 we need the headers section to extract the token.
|
|
141
|
+
if (rawResponse.includes('\r\n\r\n')) {
|
|
142
|
+
finish(code, rawResponse.split('\r\n\r\n')[0]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
110
145
|
});
|
|
111
146
|
socket.on('error', () => finish());
|
|
112
|
-
socket.on('end', () =>
|
|
147
|
+
socket.on('end', () => {
|
|
148
|
+
const statusMatch = rawResponse.match(/^HTTP\/\d(?:\.\d)?\s+(\d{3})/);
|
|
149
|
+
if (statusMatch)
|
|
150
|
+
finish(Number(statusMatch[1]), rawResponse);
|
|
151
|
+
else
|
|
152
|
+
finish();
|
|
153
|
+
});
|
|
113
154
|
});
|
|
114
155
|
}
|
|
115
156
|
const barJsonPort = resolveBarPort(ccsDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-server-probe.js","sourceRoot":"","sources":["../../../src/commands/bar/bar-server-probe.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;
|
|
1
|
+
{"version":3,"file":"bar-server-probe.js","sourceRoot":"","sources":["../../../src/commands/bar/bar-server-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/bar/launch-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"launch-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/bar/launch-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAUlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,wBAAwB,IAAI,yBAAyB,EACrD,cAAc,IAAI,eAAe,EAClC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQ1E,OAAO,EAAE,yBAAyB,IAAI,wBAAwB,EAAE,CAAC;AACjE,OAAO,EAAE,eAAe,IAAI,cAAc,EAAE,CAAC;AAM7C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACvD;;;OAGG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE;;;OAGG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IAC5E;;;OAGG;IACH,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD;;OAEG;IACH,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1E,sEAAsE;IACtE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,qEAAqE;IACrE,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,oFAAoF;IACpF,cAAc,EAAE,MAAM,CAAC;CACxB;AAkCD;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAIhD;AAuGD,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE,OAAO,CAAC,UAAU,CAAM,GAC7B,OAAO,CAAC,IAAI,CAAC,CA0If"}
|
|
@@ -45,6 +45,7 @@ const fs = __importStar(require("fs"));
|
|
|
45
45
|
const os = __importStar(require("os"));
|
|
46
46
|
const path = __importStar(require("path"));
|
|
47
47
|
const config_loader_facade_1 = require("../../config/config-loader-facade");
|
|
48
|
+
const bar_auth_token_1 = require("../../utils/bar-auth-token");
|
|
48
49
|
const bar_paths_1 = require("./bar-paths");
|
|
49
50
|
const bar_server_probe_1 = require("./bar-server-probe");
|
|
50
51
|
Object.defineProperty(exports, "defaultFindRunningServer", { enumerable: true, get: function () { return bar_server_probe_1.defaultFindRunningServer; } });
|
|
@@ -93,38 +94,61 @@ function isAuthRequiredStatus(statusCode) {
|
|
|
93
94
|
}
|
|
94
95
|
async function defaultWaitForServerLive(baseUrl) {
|
|
95
96
|
const net = await Promise.resolve().then(() => __importStar(require('net')));
|
|
97
|
+
const token = (0, bar_auth_token_1.getOrCreateBarAuthToken)();
|
|
96
98
|
const INTERVAL_MS = 250;
|
|
97
99
|
const TIMEOUT_MS = 10000;
|
|
98
100
|
const deadline = Date.now() + TIMEOUT_MS;
|
|
99
101
|
async function probe() {
|
|
100
102
|
const url = new URL(`${baseUrl}/api/bar/summary`);
|
|
101
103
|
return new Promise((resolve) => {
|
|
102
|
-
let
|
|
104
|
+
let rawResponse = '';
|
|
103
105
|
let settled = false;
|
|
104
|
-
const finish = (statusCode = null) => {
|
|
106
|
+
const finish = (statusCode = null, headerSection = '') => {
|
|
105
107
|
if (settled)
|
|
106
108
|
return;
|
|
107
109
|
settled = true;
|
|
108
110
|
socket.destroy();
|
|
109
|
-
|
|
111
|
+
if (statusCode === 200) {
|
|
112
|
+
const echoMatch = headerSection.match(new RegExp(`${bar_auth_token_1.BAR_AUTH_TOKEN_HEADER}:\\s*([^\\r\\n]+)`, 'i'));
|
|
113
|
+
const echoedToken = echoMatch ? echoMatch[1].trim() : '';
|
|
114
|
+
resolve({ statusCode, tokenMatched: echoedToken === token });
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
resolve({ statusCode, tokenMatched: false });
|
|
110
118
|
};
|
|
111
119
|
const socket = net.connect({ host: url.hostname.replace(/^\[|\]$/g, ''), port: Number(url.port) }, () => {
|
|
120
|
+
// Do NOT include the token in the request — sending the secret to the
|
|
121
|
+
// party being authenticated lets any reflector trivially pass the check.
|
|
112
122
|
socket.write(`GET ${url.pathname}${url.search} HTTP/1.1\r\nHost: ${url.host}\r\nConnection: close\r\n\r\n`);
|
|
113
123
|
});
|
|
114
124
|
socket.setTimeout(1500, () => finish());
|
|
115
125
|
socket.on('data', (chunk) => {
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
if (
|
|
119
|
-
|
|
126
|
+
rawResponse += chunk.toString('utf8');
|
|
127
|
+
const statusMatch = rawResponse.match(/^HTTP\/\d(?:\.\d)?\s+(\d{3})/);
|
|
128
|
+
if (statusMatch) {
|
|
129
|
+
const code = Number(statusMatch[1]);
|
|
130
|
+
if (code !== 200) {
|
|
131
|
+
finish(code, rawResponse);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (rawResponse.includes('\r\n\r\n')) {
|
|
135
|
+
finish(code, rawResponse.split('\r\n\r\n')[0]);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
120
138
|
});
|
|
121
139
|
socket.on('error', () => finish());
|
|
122
|
-
socket.on('end', () =>
|
|
140
|
+
socket.on('end', () => {
|
|
141
|
+
const statusMatch = rawResponse.match(/^HTTP\/\d(?:\.\d)?\s+(\d{3})/);
|
|
142
|
+
if (statusMatch)
|
|
143
|
+
finish(Number(statusMatch[1]), rawResponse);
|
|
144
|
+
else
|
|
145
|
+
finish();
|
|
146
|
+
});
|
|
123
147
|
});
|
|
124
148
|
}
|
|
125
149
|
while (Date.now() < deadline) {
|
|
126
|
-
const statusCode = await probe();
|
|
127
|
-
if (statusCode === 200)
|
|
150
|
+
const { statusCode, tokenMatched } = await probe();
|
|
151
|
+
if (statusCode === 200 && tokenMatched)
|
|
128
152
|
return;
|
|
129
153
|
if (statusCode !== null && isAuthRequiredStatus(statusCode)) {
|
|
130
154
|
throw new BarServerAuthRequiredError(baseUrl, statusCode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch-subcommand.js","sourceRoot":"","sources":["../../../src/commands/bar/launch-subcommand.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAE7B,4EAA8D;AAC9D,2CAMqB;AAErB,yDAG4B;AASU,yGAXR,2CAAyB,OAWO;AAClC,+FAXR,iCAAe,OAWO;AAgD1C,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,KAAK,UAAU,cAAc,CAAC,IAAsC;IAClE,MAAM,OAAO,GAAG,CAAC,wDAAa,UAAU,GAAC,CAAC,CAAC,OAAO,CAAC;IACnD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,SAAS,0BAA0B,CAAC,IAAY,EAAE,OAAe;IAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,eAAe,CAAmC,CAAC;IAE7E,+CAA+C;IAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;QAC/F,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;QAC/B,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE;QACjB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,8DAA8D;IAC9D,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAa,0BAA2B,SAAQ,KAAK;IACnD,YAAY,OAAe,EAAE,UAAkB;QAC7C,KAAK,CAAC,qBAAqB,OAAO,4CAA4C,UAAU,GAAG,CAAC,CAAC;QAC7F,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AALD,gEAKC;AAED,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAAe;IACrD,MAAM,GAAG,GAAG,wDAAa,KAAK,GAAC,CAAC;IAChC,MAAM,WAAW,GAAG,GAAG,CAAC;IACxB,MAAM,UAAU,GAAG,KAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAEzC,KAAK,UAAU,KAAK;QAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,kBAAkB,CAAC,CAAC;QAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,
|
|
1
|
+
{"version":3,"file":"launch-subcommand.js","sourceRoot":"","sources":["../../../src/commands/bar/launch-subcommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar-auth-token.d.ts","sourceRoot":"","sources":["../../src/utils/bar-auth-token.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAGvD,wBAAgB,mBAAmB,CAAC,MAAM,SAAc,GAAG,MAAM,CAEhE;AAMD,wBAAgB,uBAAuB,CAAC,MAAM,SAAc,GAAG,MAAM,CAgBpE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.getOrCreateBarAuthToken = exports.getBarAuthTokenPath = exports.BAR_AUTH_TOKEN_HEADER = void 0;
|
|
30
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
31
|
+
const fs = __importStar(require("fs"));
|
|
32
|
+
const path = __importStar(require("path"));
|
|
33
|
+
const config_loader_facade_1 = require("../config/config-loader-facade");
|
|
34
|
+
exports.BAR_AUTH_TOKEN_HEADER = 'x-ccs-bar-token';
|
|
35
|
+
const TOKEN_BYTE_LENGTH = 32;
|
|
36
|
+
function getBarAuthTokenPath(ccsDir = (0, config_loader_facade_1.getCcsDir)()) {
|
|
37
|
+
return path.join(ccsDir, 'bar', '.auth-token');
|
|
38
|
+
}
|
|
39
|
+
exports.getBarAuthTokenPath = getBarAuthTokenPath;
|
|
40
|
+
function isValidToken(token) {
|
|
41
|
+
return /^[a-f0-9]{64}$/i.test(token);
|
|
42
|
+
}
|
|
43
|
+
function getOrCreateBarAuthToken(ccsDir = (0, config_loader_facade_1.getCcsDir)()) {
|
|
44
|
+
const tokenPath = getBarAuthTokenPath(ccsDir);
|
|
45
|
+
try {
|
|
46
|
+
const token = fs.readFileSync(tokenPath, 'utf8').trim();
|
|
47
|
+
if (isValidToken(token)) {
|
|
48
|
+
return token;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Missing or unreadable tokens are regenerated below.
|
|
53
|
+
}
|
|
54
|
+
const token = crypto_1.default.randomBytes(TOKEN_BYTE_LENGTH).toString('hex');
|
|
55
|
+
fs.mkdirSync(path.dirname(tokenPath), { recursive: true });
|
|
56
|
+
fs.writeFileSync(tokenPath, `${token}\n`, { mode: 0o600 });
|
|
57
|
+
return token;
|
|
58
|
+
}
|
|
59
|
+
exports.getOrCreateBarAuthToken = getOrCreateBarAuthToken;
|
|
60
|
+
//# sourceMappingURL=bar-auth-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar-auth-token.js","sourceRoot":"","sources":["../../src/utils/bar-auth-token.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA4B;AAC5B,uCAAyB;AACzB,2CAA6B;AAC7B,yEAA2D;AAE9C,QAAA,qBAAqB,GAAG,iBAAiB,CAAC;AACvD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,SAAgB,mBAAmB,CAAC,MAAM,GAAG,IAAA,gCAAS,GAAE;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AAFD,kDAEC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAAM,GAAG,IAAA,gCAAS,GAAE;IAC1D,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,gBAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAhBD,0DAgBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web-server/routes/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web-server/routes/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqCH,eAAO,MAAM,SAAS,4CAAW,CAAC"}
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.apiRoutes = void 0;
|
|
13
13
|
const express_1 = require("express");
|
|
14
14
|
const auth_middleware_1 = require("../middleware/auth-middleware");
|
|
15
|
+
const bar_auth_token_1 = require("../../utils/bar-auth-token");
|
|
15
16
|
// Import domain routers
|
|
16
17
|
const profile_routes_1 = __importDefault(require("./profile-routes"));
|
|
17
18
|
const account_routes_1 = __importDefault(require("./account-routes"));
|
|
@@ -63,6 +64,11 @@ exports.apiRoutes.use((req, res, next) => {
|
|
|
63
64
|
// Exact segment match so a future sibling like '/barbaz' isn't accidentally gated.
|
|
64
65
|
if (req.path === '/bar' || req.path.startsWith('/bar/')) {
|
|
65
66
|
if ((0, auth_middleware_1.requireLocalAccessWhenAuthDisabled)(req, res, BAR_LOCAL_ACCESS_ERROR)) {
|
|
67
|
+
// Echo the token unconditionally so the probe can verify it without
|
|
68
|
+
// having sent the secret in the request. Only the real CCS Bar process
|
|
69
|
+
// (which owns the 0600 file) can produce this value — a rogue loopback
|
|
70
|
+
// process that hasn't read the file cannot replicate it.
|
|
71
|
+
res.setHeader(bar_auth_token_1.BAR_AUTH_TOKEN_HEADER, (0, bar_auth_token_1.getOrCreateBarAuthToken)());
|
|
66
72
|
next();
|
|
67
73
|
}
|
|
68
74
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web-server/routes/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,qCAAiC;AACjC,mEAAmF;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web-server/routes/index.ts"],"names":[],"mappings":"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"}
|