jinaga-server 3.7.4 → 3.7.5
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/http/router.js +188 -57
- package/dist/http/router.js.map +1 -1
- package/package.json +2 -2
- package/src/http/router.ts +218 -60
- package/test/http/errorStatusMappingSpec.ts +351 -0
package/dist/http/router.js
CHANGED
|
@@ -30,7 +30,7 @@ function getOrStream(getMethod, streamMethod) {
|
|
|
30
30
|
.then(response => {
|
|
31
31
|
if (!response) {
|
|
32
32
|
console.log(`[HttpConnection:${connectionId}] Stream method returned null - sending 404`);
|
|
33
|
-
res
|
|
33
|
+
sendRouteMiss(res);
|
|
34
34
|
next();
|
|
35
35
|
}
|
|
36
36
|
else {
|
|
@@ -118,7 +118,7 @@ function getOrStream(getMethod, streamMethod) {
|
|
|
118
118
|
.then(response => {
|
|
119
119
|
if (!response) {
|
|
120
120
|
console.log(`[HttpConnection:${connectionId}] Get method returned null - sending 404`);
|
|
121
|
-
res
|
|
121
|
+
sendRouteMiss(res);
|
|
122
122
|
next();
|
|
123
123
|
}
|
|
124
124
|
else {
|
|
@@ -155,9 +155,14 @@ function getAuthenticate(method) {
|
|
|
155
155
|
function post(parse, method, output) {
|
|
156
156
|
return (req, res, next) => {
|
|
157
157
|
const user = req.user;
|
|
158
|
-
const
|
|
158
|
+
const parsed = parseRequestInput(() => parse(req.body), req, res, next);
|
|
159
|
+
if (!parsed.ok) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const message = parsed.value;
|
|
159
163
|
if (!message) {
|
|
160
|
-
|
|
164
|
+
handleError(new jinaga_1.Invalid(`${MISSING_BODY} ${describeContentType(req)}`), req, res, next);
|
|
165
|
+
return;
|
|
161
166
|
}
|
|
162
167
|
method(user, message, req.params)
|
|
163
168
|
.then(response => {
|
|
@@ -176,8 +181,11 @@ function post(parse, method, output) {
|
|
|
176
181
|
function postCreate(parse, method) {
|
|
177
182
|
return (req, res, next) => {
|
|
178
183
|
const user = req.user;
|
|
179
|
-
const
|
|
180
|
-
|
|
184
|
+
const parsed = parseRequestInput(() => parse(req), req, res, next);
|
|
185
|
+
if (!parsed.ok) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
method(user, parsed.value)
|
|
181
189
|
.then(_ => {
|
|
182
190
|
res.sendStatus(201);
|
|
183
191
|
next();
|
|
@@ -188,45 +196,39 @@ function postCreate(parse, method) {
|
|
|
188
196
|
function postStringCreate(method) {
|
|
189
197
|
return (req, res, next) => {
|
|
190
198
|
const user = req.user;
|
|
191
|
-
const
|
|
192
|
-
if (!
|
|
193
|
-
|
|
194
|
-
res.status(500).send('Expected Content-Type text/plain. Ensure that you have called app.use(express.text()).');
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
method(user, input)
|
|
198
|
-
.then(_ => {
|
|
199
|
-
res.sendStatus(201);
|
|
200
|
-
next();
|
|
201
|
-
})
|
|
202
|
-
.catch(error => handleError(error, req, res, next));
|
|
199
|
+
const parsed = parseRequestInput(() => parseTextBody(req), req, res, next);
|
|
200
|
+
if (!parsed.ok) {
|
|
201
|
+
return;
|
|
203
202
|
}
|
|
203
|
+
method(user, parsed.value)
|
|
204
|
+
.then(_ => {
|
|
205
|
+
res.sendStatus(201);
|
|
206
|
+
next();
|
|
207
|
+
})
|
|
208
|
+
.catch(error => handleError(error, req, res, next));
|
|
204
209
|
};
|
|
205
210
|
}
|
|
206
211
|
function postReadWithStreaming(method) {
|
|
207
212
|
return (req, res, next) => {
|
|
208
213
|
const user = req.user;
|
|
209
|
-
const
|
|
210
|
-
if (!
|
|
211
|
-
|
|
212
|
-
res.status(500).send('Expected Content-Type text/plain. Ensure that you have called app.use(express.text()).');
|
|
214
|
+
const parsed = parseRequestInput(() => parseTextBody(req), req, res, next);
|
|
215
|
+
if (!parsed.ok) {
|
|
216
|
+
return;
|
|
213
217
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
acceptType = preferredType ? String(preferredType) : 'text/plain';
|
|
222
|
-
}
|
|
223
|
-
method(user, input, acceptType)
|
|
224
|
-
.then(({ resultStream, csvMetadata }) => {
|
|
225
|
-
outputReadResults(resultStream, res, acceptType, csvMetadata);
|
|
226
|
-
next();
|
|
227
|
-
})
|
|
228
|
-
.catch(error => handleError(error, req, res, next));
|
|
218
|
+
// Check if Accept header explicitly prefers a specific format
|
|
219
|
+
const acceptHeader = req.get('Accept');
|
|
220
|
+
let acceptType = 'text/plain'; // Default for backward compatibility
|
|
221
|
+
if (acceptHeader && acceptHeader !== '*/*') {
|
|
222
|
+
// Only use req.accepts() when there's a specific preference
|
|
223
|
+
const preferredType = req.accepts(['text/csv', 'application/x-ndjson', 'application/json', 'text/plain']);
|
|
224
|
+
acceptType = preferredType ? String(preferredType) : 'text/plain';
|
|
229
225
|
}
|
|
226
|
+
method(user, parsed.value, acceptType)
|
|
227
|
+
.then(({ resultStream, csvMetadata }) => {
|
|
228
|
+
outputReadResults(resultStream, res, acceptType, csvMetadata);
|
|
229
|
+
next();
|
|
230
|
+
})
|
|
231
|
+
.catch(error => handleError(error, req, res, next));
|
|
230
232
|
};
|
|
231
233
|
}
|
|
232
234
|
function subscriptionOwnerKey(userIdentity) {
|
|
@@ -252,7 +254,7 @@ function inputSaveMessage(req) {
|
|
|
252
254
|
read: (onEnvelopes) => __awaiter(this, void 0, void 0, function* () {
|
|
253
255
|
const message = (0, jinaga_1.parseSaveMessage)(req.body);
|
|
254
256
|
if (!message) {
|
|
255
|
-
throw new
|
|
257
|
+
throw new jinaga_1.Invalid(MISSING_JSON_BODY);
|
|
256
258
|
}
|
|
257
259
|
yield onEnvelopes(message.facts.map(fact => ({
|
|
258
260
|
fact: fact,
|
|
@@ -287,7 +289,9 @@ function outputReadResults(result, res, acceptType, csvMetadata) {
|
|
|
287
289
|
.catch(error => {
|
|
288
290
|
console.error('Error in outputReadResults:', error);
|
|
289
291
|
if (!res.headersSent) {
|
|
290
|
-
res.
|
|
292
|
+
// Without an explicit type, res.send of a string makes Express
|
|
293
|
+
// infer text/html and label an error body as markup.
|
|
294
|
+
res.type("text").status(500).send('Internal server error');
|
|
291
295
|
}
|
|
292
296
|
});
|
|
293
297
|
}
|
|
@@ -432,11 +436,20 @@ class HttpRouter {
|
|
|
432
436
|
factRecords.push(value.declared.fact);
|
|
433
437
|
}
|
|
434
438
|
const userIdentity = serializeUserIdentity(user);
|
|
435
|
-
|
|
439
|
+
const envelopes = factRecords
|
|
436
440
|
.map(fact => ({
|
|
437
441
|
fact: fact,
|
|
438
442
|
signatures: []
|
|
439
|
-
}))
|
|
443
|
+
}));
|
|
444
|
+
try {
|
|
445
|
+
yield this.authorization.save(userIdentity, envelopes);
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
// /write reaches the same authorization path as /save, so it
|
|
449
|
+
// needs the same translation of predecessor-resolution
|
|
450
|
+
// failures into a diagnosable 4xx (issue #182 finding 2).
|
|
451
|
+
throw toSaveAuthorizationError(error, envelopes);
|
|
452
|
+
}
|
|
440
453
|
}));
|
|
441
454
|
}
|
|
442
455
|
feeds(user, input) {
|
|
@@ -815,28 +828,142 @@ class FeedNotFound extends Error {
|
|
|
815
828
|
}
|
|
816
829
|
}
|
|
817
830
|
exports.FeedNotFound = FeedNotFound;
|
|
831
|
+
// Both message shapes below are matched by prose, because jinaga reports a
|
|
832
|
+
// missing predecessor as a plain Error. That is fragile: an upstream wording
|
|
833
|
+
// change silently turns these back into 500s (issue #182 finding 5). The
|
|
834
|
+
// end-to-end cases in test/http/errorStatusMappingSpec.ts drive the real
|
|
835
|
+
// AuthorizationEngine so that drift fails the build.
|
|
836
|
+
//
|
|
837
|
+
// jinaga 6.11.3 landed the typed errors of jinaga.js#234, so the topological
|
|
838
|
+
// sort's failure is now an instanceof check below. One prose pattern remains:
|
|
839
|
+
// specification-runner still reports its missing fact as a plain Error.
|
|
818
840
|
// Authorization rule evaluation reports a missing predecessor as a plain
|
|
819
|
-
// Error of this shape (
|
|
820
|
-
//
|
|
821
|
-
//
|
|
822
|
-
//
|
|
841
|
+
// Error of this shape (specification-runner.ts in jinaga, still untyped as of
|
|
842
|
+
// 6.11.3). It surfaces when the client's save request didn't include the full
|
|
843
|
+
// closure of facts a rule needs to walk. Map it to a diagnosable 4xx instead
|
|
844
|
+
// of an opaque 500 (issue #175).
|
|
823
845
|
const FACT_NOT_DEFINED_PATTERN = /^The fact (\S+):(\S+) is not defined\.$/;
|
|
824
846
|
function toSaveAuthorizationError(error, envelopes) {
|
|
825
|
-
if (error instanceof Error) {
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
847
|
+
if (!(error instanceof Error)) {
|
|
848
|
+
return error;
|
|
849
|
+
}
|
|
850
|
+
const describeBatch = () => {
|
|
851
|
+
const factTypesInBatch = Array.from(new Set(envelopes.map(e => e.fact.type))).join(", ");
|
|
852
|
+
return `${envelopes.length} fact(s) in the request (types: ${factTypesInBatch})`;
|
|
853
|
+
};
|
|
854
|
+
// The batch named a predecessor that is in neither the batch nor storage,
|
|
855
|
+
// so the topological sort could never reach the facts that depend on it.
|
|
856
|
+
// A client data problem, not a server fault (issue #182 finding 1).
|
|
857
|
+
if (error instanceof jinaga_1.PredecessorNotResolvedError) {
|
|
858
|
+
const missing = error.missingPredecessors.map(r => `${r.type}:${r.hash}`);
|
|
859
|
+
const unresolved = error.unresolvedFacts.map(r => `${r.type}:${r.hash}`);
|
|
860
|
+
jinaga_1.Trace.warn(`Save authorization could not resolve ${missing.length} predecessor(s) [${missing.join(", ")}] ` +
|
|
861
|
+
`needed by ${unresolved.length} fact(s) [${unresolved.join(", ")}] among ${describeBatch()}.`);
|
|
862
|
+
const advice = `Send the full closure of predecessors together, or commit the predecessors first.`;
|
|
863
|
+
if (missing.length === 1) {
|
|
864
|
+
return new jinaga_1.Invalid(`The fact ${missing[0]} is named as a predecessor, but it was not found in storage ` +
|
|
865
|
+
`and was not included in the request. ${advice}`);
|
|
866
|
+
}
|
|
867
|
+
if (missing.length > 1) {
|
|
868
|
+
return new jinaga_1.Invalid(`${missing.length} facts are named as predecessors, but they were not found in storage ` +
|
|
869
|
+
`and were not included in the request: ${missing.join(", ")}. ${advice}`);
|
|
834
870
|
}
|
|
871
|
+
// The engine could not attribute the failure to specific references.
|
|
872
|
+
return new jinaga_1.Invalid(`${unresolved.length} fact(s) could not be authorized because one or more predecessors ` +
|
|
873
|
+
`were not found in storage and were not included in the request. ${advice}`);
|
|
874
|
+
}
|
|
875
|
+
const notDefined = FACT_NOT_DEFINED_PATTERN.exec(error.message);
|
|
876
|
+
if (notDefined) {
|
|
877
|
+
const [, factType, factHash] = notDefined;
|
|
878
|
+
jinaga_1.Trace.warn(`Save authorization could not resolve predecessor ${factType}:${factHash} ` +
|
|
879
|
+
`among ${describeBatch()}.`);
|
|
880
|
+
return new jinaga_1.Invalid(`The fact ${factType}:${factHash} is required to authorize this save but was not included in the request. ` +
|
|
881
|
+
`Ensure the full closure of predecessors needed by your authorization rules is sent together.`);
|
|
835
882
|
}
|
|
836
883
|
return error;
|
|
837
884
|
}
|
|
885
|
+
// post() serves both a JSON route (/load) and a text route (/feeds), so its
|
|
886
|
+
// message names no particular parser; the single-content-type entry points
|
|
887
|
+
// keep the specific hint they have always given.
|
|
888
|
+
const MISSING_BODY = 'The request body is empty or could not be read. Ensure that the body parser for this Content-Type is registered.';
|
|
889
|
+
const MISSING_JSON_BODY = 'Ensure that you have called app.use(express.json()).';
|
|
890
|
+
const MISSING_TEXT_BODY = 'Expected Content-Type text/plain. Ensure that you have called app.use(express.text()).';
|
|
891
|
+
// A request body that fails to parse is a client error. Both this module's
|
|
892
|
+
// parseString and jinaga's message parsers signal that by throwing
|
|
893
|
+
// synchronously from the handler, where Express hands it to its default error
|
|
894
|
+
// handler and reports 500. Classify parse failures as Invalid so handleError
|
|
895
|
+
// renders a 400 (issue #182 finding 3).
|
|
896
|
+
function toInvalidInput(error) {
|
|
897
|
+
if (error instanceof jinaga_1.Invalid) {
|
|
898
|
+
return error;
|
|
899
|
+
}
|
|
900
|
+
return new jinaga_1.Invalid(error instanceof Error ? error.message : String(error));
|
|
901
|
+
}
|
|
902
|
+
// /read and /write accept text/plain only, so every unreadable body there has
|
|
903
|
+
// the same cause and deserves the same actionable hint. Checking req.body here
|
|
904
|
+
// rather than deferring to parseString keeps a missing body parser — the common
|
|
905
|
+
// misconfiguration — from being reported with parseString's generic
|
|
906
|
+
// content-type message.
|
|
907
|
+
function parseTextBody(req) {
|
|
908
|
+
const body = req.body;
|
|
909
|
+
if (typeof body !== 'string' || !body) {
|
|
910
|
+
throw new jinaga_1.Invalid(`${MISSING_TEXT_BODY} ${describeContentType(req)}`);
|
|
911
|
+
}
|
|
912
|
+
return body;
|
|
913
|
+
}
|
|
914
|
+
// Naming what arrived turns "check your setup" into something the caller can
|
|
915
|
+
// act on without guessing which end is misconfigured. The value is echoed from
|
|
916
|
+
// the request, so cap it: a real content type is short, and the body should
|
|
917
|
+
// not grow with whatever the caller chose to send.
|
|
918
|
+
const MAX_ECHOED_CONTENT_TYPE = 80;
|
|
919
|
+
function describeContentType(req) {
|
|
920
|
+
const contentType = req.get('Content-Type');
|
|
921
|
+
if (!contentType) {
|
|
922
|
+
return `No Content-Type header was received.`;
|
|
923
|
+
}
|
|
924
|
+
const echoed = contentType.length > MAX_ECHOED_CONTENT_TYPE
|
|
925
|
+
? `${contentType.substring(0, MAX_ECHOED_CONTENT_TYPE)}…`
|
|
926
|
+
: contentType;
|
|
927
|
+
return `Received Content-Type: ${echoed}.`;
|
|
928
|
+
}
|
|
929
|
+
function parseRequestInput(parse, req, res, next) {
|
|
930
|
+
try {
|
|
931
|
+
return { ok: true, value: parse() };
|
|
932
|
+
}
|
|
933
|
+
catch (error) {
|
|
934
|
+
handleError(toInvalidInput(error), req, res, next);
|
|
935
|
+
return { ok: false };
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
// A route miss (no :hash in the URL) is a 404 just like a feed-cache miss,
|
|
939
|
+
// but for a different reason. Send a machine-readable body so a client can
|
|
940
|
+
// always tell "wrong URL" from "re-subscribe via POST /feeds" (issue #182
|
|
941
|
+
// finding 6); handleError sends "feed_not_found" for the latter.
|
|
942
|
+
function sendRouteMiss(res) {
|
|
943
|
+
res.type("text");
|
|
944
|
+
res.status(404).send("not_found");
|
|
945
|
+
}
|
|
946
|
+
// These bodies are diagnostics, not markup, but they quote client-supplied
|
|
947
|
+
// text: a Content-Type header, a fact type named in a parse failure. The
|
|
948
|
+
// response is text/plain and marked nosniff, yet that is the content type
|
|
949
|
+
// saying so — neutralize the characters that could start markup here, at the
|
|
950
|
+
// one place every error body is written, so the guarantee does not rest on a
|
|
951
|
+
// header a proxy or a later edit could change. Quotes are left alone: they
|
|
952
|
+
// only matter inside a tag, which escaping '<' already prevents, and messages
|
|
953
|
+
// quote identifiers routinely.
|
|
954
|
+
const HTML_META_CHARACTERS = {
|
|
955
|
+
"&": "&",
|
|
956
|
+
"<": "<",
|
|
957
|
+
">": ">"
|
|
958
|
+
};
|
|
959
|
+
function sanitizeErrorBody(message) {
|
|
960
|
+
return message.replace(/[&<>]/g, character => HTML_META_CHARACTERS[character]);
|
|
961
|
+
}
|
|
838
962
|
function handleError(error, req, res, next) {
|
|
839
963
|
const requestPath = req.path;
|
|
964
|
+
// Error bodies are plain text built partly from client-supplied input, so
|
|
965
|
+
// stop a browser from sniffing one as markup.
|
|
966
|
+
res.set("X-Content-Type-Options", "nosniff");
|
|
840
967
|
if (error instanceof FeedNotFound) {
|
|
841
968
|
jinaga_1.Trace.warn(`Feed not found: ${error.feedHash} (Path: ${requestPath})`);
|
|
842
969
|
res.type("text");
|
|
@@ -845,17 +972,21 @@ function handleError(error, req, res, next) {
|
|
|
845
972
|
else if (error instanceof jinaga_1.Forbidden) {
|
|
846
973
|
jinaga_1.Trace.warn(`Forbidden: ${error.message} (Path: ${requestPath})`);
|
|
847
974
|
res.type("text");
|
|
848
|
-
res.status(403).send(error.message);
|
|
975
|
+
res.status(403).send(sanitizeErrorBody(error.message));
|
|
849
976
|
}
|
|
850
977
|
else if (error instanceof jinaga_1.Invalid) {
|
|
851
978
|
jinaga_1.Trace.warn(`Invalid: ${error.message} (Path: ${requestPath})`);
|
|
852
979
|
res.type("text");
|
|
853
|
-
res.status(400).send(error.message);
|
|
980
|
+
res.status(400).send(sanitizeErrorBody(error.message));
|
|
854
981
|
}
|
|
855
982
|
else {
|
|
983
|
+
// Classification above is an allow-list, so anything reaching here is
|
|
984
|
+
// unclassified — including genuine internal failures whose message can
|
|
985
|
+
// name internal hosts or credentials. Keep the detail in the trace and
|
|
986
|
+
// send a generic body to the caller (issue #182 finding 4).
|
|
856
987
|
jinaga_1.Trace.error(`Error: ${error.message} (Path: ${requestPath})`);
|
|
857
988
|
res.type("text");
|
|
858
|
-
res.status(500).send(error
|
|
989
|
+
res.status(500).send("Internal server error");
|
|
859
990
|
}
|
|
860
991
|
next();
|
|
861
992
|
}
|
package/dist/http/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jinaga-server",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.5",
|
|
4
4
|
"description": "Data management for web and mobile applications.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"csv-stringify": "^6.6.0",
|
|
51
51
|
"express": "^4.21.2",
|
|
52
|
-
"jinaga": "^6.11.
|
|
52
|
+
"jinaga": "^6.11.3",
|
|
53
53
|
"pg": "^8.13.1"
|
|
54
54
|
}
|
|
55
55
|
}
|
package/src/http/router.ts
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
LoadResponse,
|
|
23
23
|
parseLoadMessage,
|
|
24
24
|
parseSaveMessage,
|
|
25
|
+
PredecessorNotResolvedError,
|
|
25
26
|
ProfileMessage,
|
|
26
27
|
ProjectedResult,
|
|
27
28
|
ReferencesByName,
|
|
@@ -58,7 +59,7 @@ function getOrStream<U>(
|
|
|
58
59
|
.then(response => {
|
|
59
60
|
if (!response) {
|
|
60
61
|
console.log(`[HttpConnection:${connectionId}] Stream method returned null - sending 404`);
|
|
61
|
-
res
|
|
62
|
+
sendRouteMiss(res);
|
|
62
63
|
next();
|
|
63
64
|
}
|
|
64
65
|
else {
|
|
@@ -156,7 +157,7 @@ function getOrStream<U>(
|
|
|
156
157
|
.then(response => {
|
|
157
158
|
if (!response) {
|
|
158
159
|
console.log(`[HttpConnection:${connectionId}] Get method returned null - sending 404`);
|
|
159
|
-
res
|
|
160
|
+
sendRouteMiss(res);
|
|
160
161
|
next();
|
|
161
162
|
}
|
|
162
163
|
else {
|
|
@@ -199,9 +200,14 @@ function post<T, U>(
|
|
|
199
200
|
): Handler {
|
|
200
201
|
return (req, res, next) => {
|
|
201
202
|
const user = <RequestUser>(req as any).user;
|
|
202
|
-
const
|
|
203
|
+
const parsed = parseRequestInput(() => parse(req.body), req, res, next);
|
|
204
|
+
if (!parsed.ok) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const message = parsed.value;
|
|
203
208
|
if (!message) {
|
|
204
|
-
|
|
209
|
+
handleError(new Invalid(`${MISSING_BODY} ${describeContentType(req)}`), req, res, next);
|
|
210
|
+
return;
|
|
205
211
|
}
|
|
206
212
|
method(user, message, req.params)
|
|
207
213
|
.then(response => {
|
|
@@ -224,8 +230,11 @@ function postCreate<T>(
|
|
|
224
230
|
): Handler {
|
|
225
231
|
return (req, res, next) => {
|
|
226
232
|
const user = <RequestUser>(req as any).user;
|
|
227
|
-
const
|
|
228
|
-
|
|
233
|
+
const parsed = parseRequestInput(() => parse(req), req, res, next);
|
|
234
|
+
if (!parsed.ok) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
method(user, parsed.value)
|
|
229
238
|
.then(_ => {
|
|
230
239
|
res.sendStatus(201);
|
|
231
240
|
next();
|
|
@@ -237,19 +246,16 @@ function postCreate<T>(
|
|
|
237
246
|
function postStringCreate(method: (user: RequestUser, message: string) => Promise<void>): Handler {
|
|
238
247
|
return (req, res, next) => {
|
|
239
248
|
const user = <RequestUser>(req as any).user;
|
|
240
|
-
const
|
|
241
|
-
if (!
|
|
242
|
-
|
|
243
|
-
res.status(500).send('Expected Content-Type text/plain. Ensure that you have called app.use(express.text()).');
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
method(user, input)
|
|
247
|
-
.then(_ => {
|
|
248
|
-
res.sendStatus(201);
|
|
249
|
-
next();
|
|
250
|
-
})
|
|
251
|
-
.catch(error => handleError(error, req, res, next));
|
|
249
|
+
const parsed = parseRequestInput(() => parseTextBody(req), req, res, next);
|
|
250
|
+
if (!parsed.ok) {
|
|
251
|
+
return;
|
|
252
252
|
}
|
|
253
|
+
method(user, parsed.value)
|
|
254
|
+
.then(_ => {
|
|
255
|
+
res.sendStatus(201);
|
|
256
|
+
next();
|
|
257
|
+
})
|
|
258
|
+
.catch(error => handleError(error, req, res, next));
|
|
253
259
|
};
|
|
254
260
|
}
|
|
255
261
|
|
|
@@ -261,29 +267,27 @@ function postReadWithStreaming(
|
|
|
261
267
|
): Handler {
|
|
262
268
|
return (req, res, next) => {
|
|
263
269
|
const user = <RequestUser>(req as any).user;
|
|
264
|
-
const
|
|
265
|
-
if (!
|
|
266
|
-
|
|
267
|
-
res.status(500).send('Expected Content-Type text/plain. Ensure that you have called app.use(express.text()).');
|
|
270
|
+
const parsed = parseRequestInput(() => parseTextBody(req), req, res, next);
|
|
271
|
+
if (!parsed.ok) {
|
|
272
|
+
return;
|
|
268
273
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
method(user, input, acceptType)
|
|
281
|
-
.then(({resultStream, csvMetadata}) => {
|
|
282
|
-
outputReadResults(resultStream, res, acceptType, csvMetadata);
|
|
283
|
-
next();
|
|
284
|
-
})
|
|
285
|
-
.catch(error => handleError(error, req, res, next));
|
|
274
|
+
|
|
275
|
+
// Check if Accept header explicitly prefers a specific format
|
|
276
|
+
const acceptHeader = req.get('Accept');
|
|
277
|
+
let acceptType: string = 'text/plain'; // Default for backward compatibility
|
|
278
|
+
|
|
279
|
+
if (acceptHeader && acceptHeader !== '*/*') {
|
|
280
|
+
// Only use req.accepts() when there's a specific preference
|
|
281
|
+
const preferredType = req.accepts(['text/csv', 'application/x-ndjson', 'application/json', 'text/plain']);
|
|
282
|
+
acceptType = preferredType ? String(preferredType) : 'text/plain';
|
|
286
283
|
}
|
|
284
|
+
|
|
285
|
+
method(user, parsed.value, acceptType)
|
|
286
|
+
.then(({resultStream, csvMetadata}) => {
|
|
287
|
+
outputReadResults(resultStream, res, acceptType, csvMetadata);
|
|
288
|
+
next();
|
|
289
|
+
})
|
|
290
|
+
.catch(error => handleError(error, req, res, next));
|
|
287
291
|
};
|
|
288
292
|
}
|
|
289
293
|
|
|
@@ -313,7 +317,7 @@ function inputSaveMessage(req: Request): GraphSource {
|
|
|
313
317
|
read: async (onEnvelopes) => {
|
|
314
318
|
const message = parseSaveMessage(req.body);
|
|
315
319
|
if (!message) {
|
|
316
|
-
throw new
|
|
320
|
+
throw new Invalid(MISSING_JSON_BODY);
|
|
317
321
|
}
|
|
318
322
|
await onEnvelopes(message.facts.map(fact => ({
|
|
319
323
|
fact: fact,
|
|
@@ -358,7 +362,9 @@ function outputReadResults(
|
|
|
358
362
|
.catch(error => {
|
|
359
363
|
console.error('Error in outputReadResults:', error);
|
|
360
364
|
if (!res.headersSent) {
|
|
361
|
-
res.
|
|
365
|
+
// Without an explicit type, res.send of a string makes Express
|
|
366
|
+
// infer text/html and label an error body as markup.
|
|
367
|
+
res.type("text").status(500).send('Internal server error');
|
|
362
368
|
}
|
|
363
369
|
});
|
|
364
370
|
}
|
|
@@ -550,11 +556,19 @@ export class HttpRouter {
|
|
|
550
556
|
}
|
|
551
557
|
|
|
552
558
|
const userIdentity = serializeUserIdentity(user);
|
|
553
|
-
|
|
559
|
+
const envelopes: FactEnvelope[] = factRecords
|
|
554
560
|
.map(fact => ({
|
|
555
561
|
fact: fact,
|
|
556
562
|
signatures: []
|
|
557
|
-
}))
|
|
563
|
+
}));
|
|
564
|
+
try {
|
|
565
|
+
await this.authorization.save(userIdentity, envelopes);
|
|
566
|
+
} catch (error) {
|
|
567
|
+
// /write reaches the same authorization path as /save, so it
|
|
568
|
+
// needs the same translation of predecessor-resolution
|
|
569
|
+
// failures into a diagnosable 4xx (issue #182 finding 2).
|
|
570
|
+
throw toSaveAuthorizationError(error, envelopes);
|
|
571
|
+
}
|
|
558
572
|
});
|
|
559
573
|
}
|
|
560
574
|
|
|
@@ -988,34 +1002,174 @@ export class FeedNotFound extends Error {
|
|
|
988
1002
|
}
|
|
989
1003
|
}
|
|
990
1004
|
|
|
1005
|
+
// Both message shapes below are matched by prose, because jinaga reports a
|
|
1006
|
+
// missing predecessor as a plain Error. That is fragile: an upstream wording
|
|
1007
|
+
// change silently turns these back into 500s (issue #182 finding 5). The
|
|
1008
|
+
// end-to-end cases in test/http/errorStatusMappingSpec.ts drive the real
|
|
1009
|
+
// AuthorizationEngine so that drift fails the build.
|
|
1010
|
+
//
|
|
1011
|
+
// jinaga 6.11.3 landed the typed errors of jinaga.js#234, so the topological
|
|
1012
|
+
// sort's failure is now an instanceof check below. One prose pattern remains:
|
|
1013
|
+
// specification-runner still reports its missing fact as a plain Error.
|
|
1014
|
+
|
|
991
1015
|
// Authorization rule evaluation reports a missing predecessor as a plain
|
|
992
|
-
// Error of this shape (
|
|
993
|
-
//
|
|
994
|
-
//
|
|
995
|
-
//
|
|
1016
|
+
// Error of this shape (specification-runner.ts in jinaga, still untyped as of
|
|
1017
|
+
// 6.11.3). It surfaces when the client's save request didn't include the full
|
|
1018
|
+
// closure of facts a rule needs to walk. Map it to a diagnosable 4xx instead
|
|
1019
|
+
// of an opaque 500 (issue #175).
|
|
996
1020
|
const FACT_NOT_DEFINED_PATTERN = /^The fact (\S+):(\S+) is not defined\.$/;
|
|
997
1021
|
|
|
998
1022
|
function toSaveAuthorizationError(error: any, envelopes: FactEnvelope[]): any {
|
|
999
|
-
if (error instanceof Error) {
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1023
|
+
if (!(error instanceof Error)) {
|
|
1024
|
+
return error;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
const describeBatch = () => {
|
|
1028
|
+
const factTypesInBatch = Array.from(new Set(envelopes.map(e => e.fact.type))).join(", ");
|
|
1029
|
+
return `${envelopes.length} fact(s) in the request (types: ${factTypesInBatch})`;
|
|
1030
|
+
};
|
|
1031
|
+
|
|
1032
|
+
// The batch named a predecessor that is in neither the batch nor storage,
|
|
1033
|
+
// so the topological sort could never reach the facts that depend on it.
|
|
1034
|
+
// A client data problem, not a server fault (issue #182 finding 1).
|
|
1035
|
+
if (error instanceof PredecessorNotResolvedError) {
|
|
1036
|
+
const missing = error.missingPredecessors.map(r => `${r.type}:${r.hash}`);
|
|
1037
|
+
const unresolved = error.unresolvedFacts.map(r => `${r.type}:${r.hash}`);
|
|
1038
|
+
Trace.warn(
|
|
1039
|
+
`Save authorization could not resolve ${missing.length} predecessor(s) [${missing.join(", ")}] ` +
|
|
1040
|
+
`needed by ${unresolved.length} fact(s) [${unresolved.join(", ")}] among ${describeBatch()}.`
|
|
1041
|
+
);
|
|
1042
|
+
const advice = `Send the full closure of predecessors together, or commit the predecessors first.`;
|
|
1043
|
+
if (missing.length === 1) {
|
|
1044
|
+
return new Invalid(
|
|
1045
|
+
`The fact ${missing[0]} is named as a predecessor, but it was not found in storage ` +
|
|
1046
|
+
`and was not included in the request. ${advice}`
|
|
1007
1047
|
);
|
|
1048
|
+
}
|
|
1049
|
+
if (missing.length > 1) {
|
|
1008
1050
|
return new Invalid(
|
|
1009
|
-
|
|
1010
|
-
`
|
|
1051
|
+
`${missing.length} facts are named as predecessors, but they were not found in storage ` +
|
|
1052
|
+
`and were not included in the request: ${missing.join(", ")}. ${advice}`
|
|
1011
1053
|
);
|
|
1012
1054
|
}
|
|
1055
|
+
// The engine could not attribute the failure to specific references.
|
|
1056
|
+
return new Invalid(
|
|
1057
|
+
`${unresolved.length} fact(s) could not be authorized because one or more predecessors ` +
|
|
1058
|
+
`were not found in storage and were not included in the request. ${advice}`
|
|
1059
|
+
);
|
|
1013
1060
|
}
|
|
1061
|
+
|
|
1062
|
+
const notDefined = FACT_NOT_DEFINED_PATTERN.exec(error.message);
|
|
1063
|
+
if (notDefined) {
|
|
1064
|
+
const [, factType, factHash] = notDefined;
|
|
1065
|
+
Trace.warn(
|
|
1066
|
+
`Save authorization could not resolve predecessor ${factType}:${factHash} ` +
|
|
1067
|
+
`among ${describeBatch()}.`
|
|
1068
|
+
);
|
|
1069
|
+
return new Invalid(
|
|
1070
|
+
`The fact ${factType}:${factHash} is required to authorize this save but was not included in the request. ` +
|
|
1071
|
+
`Ensure the full closure of predecessors needed by your authorization rules is sent together.`
|
|
1072
|
+
);
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1014
1075
|
return error;
|
|
1015
1076
|
}
|
|
1016
1077
|
|
|
1078
|
+
// post() serves both a JSON route (/load) and a text route (/feeds), so its
|
|
1079
|
+
// message names no particular parser; the single-content-type entry points
|
|
1080
|
+
// keep the specific hint they have always given.
|
|
1081
|
+
const MISSING_BODY = 'The request body is empty or could not be read. Ensure that the body parser for this Content-Type is registered.';
|
|
1082
|
+
const MISSING_JSON_BODY = 'Ensure that you have called app.use(express.json()).';
|
|
1083
|
+
const MISSING_TEXT_BODY = 'Expected Content-Type text/plain. Ensure that you have called app.use(express.text()).';
|
|
1084
|
+
|
|
1085
|
+
// A request body that fails to parse is a client error. Both this module's
|
|
1086
|
+
// parseString and jinaga's message parsers signal that by throwing
|
|
1087
|
+
// synchronously from the handler, where Express hands it to its default error
|
|
1088
|
+
// handler and reports 500. Classify parse failures as Invalid so handleError
|
|
1089
|
+
// renders a 400 (issue #182 finding 3).
|
|
1090
|
+
function toInvalidInput(error: any): Invalid {
|
|
1091
|
+
if (error instanceof Invalid) {
|
|
1092
|
+
return error;
|
|
1093
|
+
}
|
|
1094
|
+
return new Invalid(error instanceof Error ? error.message : String(error));
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
// /read and /write accept text/plain only, so every unreadable body there has
|
|
1098
|
+
// the same cause and deserves the same actionable hint. Checking req.body here
|
|
1099
|
+
// rather than deferring to parseString keeps a missing body parser — the common
|
|
1100
|
+
// misconfiguration — from being reported with parseString's generic
|
|
1101
|
+
// content-type message.
|
|
1102
|
+
function parseTextBody(req: Request): string {
|
|
1103
|
+
const body = req.body;
|
|
1104
|
+
if (typeof body !== 'string' || !body) {
|
|
1105
|
+
throw new Invalid(`${MISSING_TEXT_BODY} ${describeContentType(req)}`);
|
|
1106
|
+
}
|
|
1107
|
+
return body;
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
// Naming what arrived turns "check your setup" into something the caller can
|
|
1111
|
+
// act on without guessing which end is misconfigured. The value is echoed from
|
|
1112
|
+
// the request, so cap it: a real content type is short, and the body should
|
|
1113
|
+
// not grow with whatever the caller chose to send.
|
|
1114
|
+
const MAX_ECHOED_CONTENT_TYPE = 80;
|
|
1115
|
+
|
|
1116
|
+
function describeContentType(req: Request): string {
|
|
1117
|
+
const contentType = req.get('Content-Type');
|
|
1118
|
+
if (!contentType) {
|
|
1119
|
+
return `No Content-Type header was received.`;
|
|
1120
|
+
}
|
|
1121
|
+
const echoed = contentType.length > MAX_ECHOED_CONTENT_TYPE
|
|
1122
|
+
? `${contentType.substring(0, MAX_ECHOED_CONTENT_TYPE)}…`
|
|
1123
|
+
: contentType;
|
|
1124
|
+
return `Received Content-Type: ${echoed}.`;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
function parseRequestInput<T>(
|
|
1128
|
+
parse: () => T,
|
|
1129
|
+
req: Request,
|
|
1130
|
+
res: Response,
|
|
1131
|
+
next: NextFunction
|
|
1132
|
+
): { ok: true, value: T } | { ok: false } {
|
|
1133
|
+
try {
|
|
1134
|
+
return { ok: true, value: parse() };
|
|
1135
|
+
} catch (error) {
|
|
1136
|
+
handleError(toInvalidInput(error), req, res, next);
|
|
1137
|
+
return { ok: false };
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
// A route miss (no :hash in the URL) is a 404 just like a feed-cache miss,
|
|
1142
|
+
// but for a different reason. Send a machine-readable body so a client can
|
|
1143
|
+
// always tell "wrong URL" from "re-subscribe via POST /feeds" (issue #182
|
|
1144
|
+
// finding 6); handleError sends "feed_not_found" for the latter.
|
|
1145
|
+
function sendRouteMiss(res: Response) {
|
|
1146
|
+
res.type("text");
|
|
1147
|
+
res.status(404).send("not_found");
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
// These bodies are diagnostics, not markup, but they quote client-supplied
|
|
1151
|
+
// text: a Content-Type header, a fact type named in a parse failure. The
|
|
1152
|
+
// response is text/plain and marked nosniff, yet that is the content type
|
|
1153
|
+
// saying so — neutralize the characters that could start markup here, at the
|
|
1154
|
+
// one place every error body is written, so the guarantee does not rest on a
|
|
1155
|
+
// header a proxy or a later edit could change. Quotes are left alone: they
|
|
1156
|
+
// only matter inside a tag, which escaping '<' already prevents, and messages
|
|
1157
|
+
// quote identifiers routinely.
|
|
1158
|
+
const HTML_META_CHARACTERS: { [character: string]: string } = {
|
|
1159
|
+
"&": "&",
|
|
1160
|
+
"<": "<",
|
|
1161
|
+
">": ">"
|
|
1162
|
+
};
|
|
1163
|
+
|
|
1164
|
+
function sanitizeErrorBody(message: string): string {
|
|
1165
|
+
return message.replace(/[&<>]/g, character => HTML_META_CHARACTERS[character]);
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1017
1168
|
function handleError(error: any, req: Request, res: Response, next: NextFunction) {
|
|
1018
1169
|
const requestPath = req.path;
|
|
1170
|
+
// Error bodies are plain text built partly from client-supplied input, so
|
|
1171
|
+
// stop a browser from sniffing one as markup.
|
|
1172
|
+
res.set("X-Content-Type-Options", "nosniff");
|
|
1019
1173
|
if (error instanceof FeedNotFound) {
|
|
1020
1174
|
Trace.warn(`Feed not found: ${error.feedHash} (Path: ${requestPath})`);
|
|
1021
1175
|
res.type("text");
|
|
@@ -1023,15 +1177,19 @@ function handleError(error: any, req: Request, res: Response, next: NextFunction
|
|
|
1023
1177
|
} else if (error instanceof Forbidden) {
|
|
1024
1178
|
Trace.warn(`Forbidden: ${error.message} (Path: ${requestPath})`);
|
|
1025
1179
|
res.type("text");
|
|
1026
|
-
res.status(403).send(error.message);
|
|
1180
|
+
res.status(403).send(sanitizeErrorBody(error.message));
|
|
1027
1181
|
} else if (error instanceof Invalid) {
|
|
1028
1182
|
Trace.warn(`Invalid: ${error.message} (Path: ${requestPath})`);
|
|
1029
1183
|
res.type("text");
|
|
1030
|
-
res.status(400).send(error.message);
|
|
1184
|
+
res.status(400).send(sanitizeErrorBody(error.message));
|
|
1031
1185
|
} else {
|
|
1186
|
+
// Classification above is an allow-list, so anything reaching here is
|
|
1187
|
+
// unclassified — including genuine internal failures whose message can
|
|
1188
|
+
// name internal hosts or credentials. Keep the detail in the trace and
|
|
1189
|
+
// send a generic body to the caller (issue #182 finding 4).
|
|
1032
1190
|
Trace.error(`Error: ${error.message} (Path: ${requestPath})`);
|
|
1033
1191
|
res.type("text");
|
|
1034
|
-
res.status(500).send(error
|
|
1192
|
+
res.status(500).send("Internal server error");
|
|
1035
1193
|
}
|
|
1036
1194
|
next();
|
|
1037
1195
|
}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import express from "express";
|
|
2
|
+
import { AddressInfo } from "net";
|
|
3
|
+
import { Server } from "http";
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
Authorization,
|
|
7
|
+
AuthorizationRules,
|
|
8
|
+
buildModel,
|
|
9
|
+
dehydrateFact,
|
|
10
|
+
DistributionRules,
|
|
11
|
+
FactEnvelope,
|
|
12
|
+
FactManager,
|
|
13
|
+
FactReference,
|
|
14
|
+
FeedCache,
|
|
15
|
+
Invalid,
|
|
16
|
+
MemoryStore,
|
|
17
|
+
NetworkNoOp,
|
|
18
|
+
ObservableSource,
|
|
19
|
+
PassThroughFork,
|
|
20
|
+
PredecessorNotResolvedError,
|
|
21
|
+
User
|
|
22
|
+
} from "jinaga";
|
|
23
|
+
|
|
24
|
+
import { AuthorizationKeystore, SubscriptionAuthorizer } from "../../src/authorization/authorization-keystore";
|
|
25
|
+
import { HttpRouter, RequestUser } from "../../src/http/router";
|
|
26
|
+
import { MemoryKeystore } from "../../src/memory/memory-keystore";
|
|
27
|
+
|
|
28
|
+
class Workspace {
|
|
29
|
+
static Type = "ErrorStatus.Workspace" as const;
|
|
30
|
+
public type = Workspace.Type;
|
|
31
|
+
constructor(public owner: User, public identifier: string) { }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
class Application {
|
|
35
|
+
static Type = "ErrorStatus.Application" as const;
|
|
36
|
+
public type = Application.Type;
|
|
37
|
+
constructor(public workspace: Workspace, public name: string) { }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const model = buildModel(b => b
|
|
41
|
+
.type(User)
|
|
42
|
+
.type(Workspace, w => w.predecessor("owner", User))
|
|
43
|
+
.type(Application, a => a.predecessor("workspace", Workspace))
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const ownerIdentity = { provider: "mock", id: "owner" };
|
|
47
|
+
|
|
48
|
+
const requestUser: RequestUser = {
|
|
49
|
+
provider: ownerIdentity.provider,
|
|
50
|
+
id: ownerIdentity.id,
|
|
51
|
+
profile: {} as any
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
async function createHarness() {
|
|
55
|
+
const store = new MemoryStore();
|
|
56
|
+
const keystore = new MemoryKeystore();
|
|
57
|
+
const ownerFact = await keystore.getOrCreateUserFact(ownerIdentity);
|
|
58
|
+
const owner = new User(ownerFact.fields.publicKey);
|
|
59
|
+
|
|
60
|
+
const factManager = new FactManager(
|
|
61
|
+
new PassThroughFork(store),
|
|
62
|
+
new ObservableSource(store),
|
|
63
|
+
store,
|
|
64
|
+
new NetworkNoOp(),
|
|
65
|
+
[]
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const authorizationRules = new AuthorizationRules(model)
|
|
69
|
+
.any(User.Type)
|
|
70
|
+
.any(Workspace.Type)
|
|
71
|
+
.type(Application, app => app.workspace.owner);
|
|
72
|
+
const authorization = new AuthorizationKeystore(
|
|
73
|
+
factManager, store, keystore, authorizationRules, new DistributionRules([]));
|
|
74
|
+
const router = new HttpRouter(factManager, authorization, new FeedCache(), "*");
|
|
75
|
+
|
|
76
|
+
return { store, authorization, router, owner };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// A batch holding a successor whose predecessors are in neither the batch nor
|
|
80
|
+
// storage. jinaga's AuthorizationEngine detects this in its topological sort
|
|
81
|
+
// and reports it as a plain Error.
|
|
82
|
+
function unclosedBatch(owner: User): FactEnvelope[] {
|
|
83
|
+
const records = dehydrateFact(new Application(new Workspace(owner, "workspace-1"), "application-1"));
|
|
84
|
+
return records
|
|
85
|
+
.filter(fact => fact.type === Application.Type)
|
|
86
|
+
.map(fact => ({ fact, signatures: [] }));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function graphSourceOf(envelopes: FactEnvelope[]) {
|
|
90
|
+
return {
|
|
91
|
+
read: async (onEnvelopes: (envelopes: FactEnvelope[]) => Promise<void>) => {
|
|
92
|
+
await onEnvelopes(envelopes);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// A router whose only job is to reject the authorization call with a chosen
|
|
98
|
+
// error, so the translation can be exercised for a route whose input grammar
|
|
99
|
+
// cannot provoke the error on its own.
|
|
100
|
+
function createRouterWithFailingSave(error: Error): HttpRouter {
|
|
101
|
+
const store = new MemoryStore();
|
|
102
|
+
const factManager = new FactManager(
|
|
103
|
+
new PassThroughFork(store), new ObservableSource(store), store, new NetworkNoOp(), []);
|
|
104
|
+
const keystore = new MemoryKeystore();
|
|
105
|
+
const authorization = {
|
|
106
|
+
getOrCreateUserFact: (identity: any) => keystore.getOrCreateUserFact(identity),
|
|
107
|
+
save: () => Promise.reject(error)
|
|
108
|
+
} as unknown as Authorization & SubscriptionAuthorizer;
|
|
109
|
+
return new HttpRouter(factManager, authorization, new FeedCache(), "*");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async function captureError(action: () => Promise<unknown>): Promise<any> {
|
|
113
|
+
try {
|
|
114
|
+
await action();
|
|
115
|
+
} catch (error) {
|
|
116
|
+
return error;
|
|
117
|
+
}
|
|
118
|
+
throw new Error("Expected the operation to fail, but it succeeded.");
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Issue #182 findings 1 and 2. These drive the real AuthorizationEngine rather
|
|
122
|
+
// than a hand-written message, so the classification is pinned to what jinaga
|
|
123
|
+
// actually throws. That mattered concretely: the original version of this
|
|
124
|
+
// translation matched the engine's prose, and 6.11.3 reworded it one release
|
|
125
|
+
// later — these tests failed rather than letting the 400 regress to a 500 in
|
|
126
|
+
// production. The unresolved-predecessor path is now an instanceof check on
|
|
127
|
+
// the typed error jinaga.js#234 introduced.
|
|
128
|
+
describe("save authorization error translation", () => {
|
|
129
|
+
it("reports an unresolved predecessor from the real engine as a typed error", async () => {
|
|
130
|
+
const { authorization, owner } = await createHarness();
|
|
131
|
+
|
|
132
|
+
const error = await captureError(() =>
|
|
133
|
+
authorization.save(ownerIdentity, unclosedBatch(owner)));
|
|
134
|
+
|
|
135
|
+
// The untranslated baseline: still not an Invalid, so handleError alone
|
|
136
|
+
// would map it to 500 — but now it carries the structured detail the
|
|
137
|
+
// translation reads instead of parsing prose.
|
|
138
|
+
expect(error).toBeInstanceOf(PredecessorNotResolvedError);
|
|
139
|
+
expect(error).not.toBeInstanceOf(Invalid);
|
|
140
|
+
expect(error.missingPredecessors.map((r: FactReference) => r.type)).toContain(Workspace.Type);
|
|
141
|
+
expect(error.unresolvedFacts.map((r: FactReference) => r.type)).toContain(Application.Type);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("translates the unresolved predecessor to Invalid on /save", async () => {
|
|
145
|
+
const { router, owner } = await createHarness();
|
|
146
|
+
|
|
147
|
+
const error = await captureError(() =>
|
|
148
|
+
(router as any).save(requestUser, graphSourceOf(unclosedBatch(owner))));
|
|
149
|
+
|
|
150
|
+
expect(error).toBeInstanceOf(Invalid);
|
|
151
|
+
// Names the predecessor that is actually missing — the structured
|
|
152
|
+
// fields make this possible, where the prose match could only report
|
|
153
|
+
// the successors that failed to sort.
|
|
154
|
+
expect(error.message).toContain(Workspace.Type);
|
|
155
|
+
expect(error.message).toContain("was not found in storage and was not included in the request");
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it("translates the unresolved predecessor to Invalid on /write", async () => {
|
|
159
|
+
// The declaration grammar /write accepts cannot express a dangling
|
|
160
|
+
// predecessor, so the engine error is captured from the reachable
|
|
161
|
+
// /save path and replayed here. The route still needs the translation:
|
|
162
|
+
// it makes the same authorization call, and this keeps both routes
|
|
163
|
+
// reading one upstream error type.
|
|
164
|
+
const { authorization, owner } = await createHarness();
|
|
165
|
+
const engineError = await captureError(() =>
|
|
166
|
+
authorization.save(ownerIdentity, unclosedBatch(owner)));
|
|
167
|
+
|
|
168
|
+
const router = createRouterWithFailingSave(engineError);
|
|
169
|
+
const declaration =
|
|
170
|
+
`let workspace: ${Workspace.Type} = { owner: me, identifier: "workspace-1" }\n` +
|
|
171
|
+
`let application: ${Application.Type} = { workspace: workspace, name: "application-1" }\n`;
|
|
172
|
+
|
|
173
|
+
const error = await captureError(() => (router as any).write(requestUser, declaration));
|
|
174
|
+
|
|
175
|
+
expect(error).toBeInstanceOf(Invalid);
|
|
176
|
+
expect(error.message).toContain("was not found in storage and was not included in the request");
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("still translates the authorization-rule shape fixed by issue #175", async () => {
|
|
180
|
+
const router = createRouterWithFailingSave(
|
|
181
|
+
new Error("The fact ErrorStatus.Workspace:abc123 is not defined."));
|
|
182
|
+
|
|
183
|
+
const error = await captureError(() =>
|
|
184
|
+
(router as any).save(requestUser, graphSourceOf([])));
|
|
185
|
+
|
|
186
|
+
expect(error).toBeInstanceOf(Invalid);
|
|
187
|
+
expect(error.message).toContain("ErrorStatus.Workspace:abc123 is required to authorize this save");
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Issue #182 findings 3 and 4, exercised over real HTTP so the assertions are
|
|
192
|
+
// on the status line a client actually receives.
|
|
193
|
+
describe("HTTP status mapping", () => {
|
|
194
|
+
let server: Server;
|
|
195
|
+
let baseUrl: string;
|
|
196
|
+
|
|
197
|
+
async function listen(app: express.Express) {
|
|
198
|
+
server = app.listen(0);
|
|
199
|
+
await new Promise<void>(resolve => server.once("listening", () => resolve()));
|
|
200
|
+
const port = (server.address() as AddressInfo).port;
|
|
201
|
+
baseUrl = `http://127.0.0.1:${port}`;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
afterEach(async () => {
|
|
205
|
+
if (server) {
|
|
206
|
+
await new Promise<void>(resolve => server.close(() => resolve()));
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
describe("with no body parser registered", () => {
|
|
211
|
+
beforeEach(async () => {
|
|
212
|
+
const { router } = await createHarness();
|
|
213
|
+
const app = express();
|
|
214
|
+
app.use(router.handler);
|
|
215
|
+
await listen(app);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
// Each of these parses the body synchronously in the handler. Express
|
|
219
|
+
// used to hand the throw to its default error handler, reporting the
|
|
220
|
+
// client's malformed request as a 500.
|
|
221
|
+
it.each([
|
|
222
|
+
["/write", "text/plain"],
|
|
223
|
+
["/read", "text/plain"],
|
|
224
|
+
["/feeds", "text/plain"],
|
|
225
|
+
["/load", "application/json"]
|
|
226
|
+
])("answers 400 for %s when the body cannot be read", async (path, contentType) => {
|
|
227
|
+
const response = await fetch(`${baseUrl}${path}`, {
|
|
228
|
+
method: "POST",
|
|
229
|
+
headers: { "Content-Type": contentType },
|
|
230
|
+
body: contentType === "application/json" ? "{}" : "anything"
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
expect(response.status).toBe(400);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
// The text/plain-only routes name the parser the caller is missing,
|
|
237
|
+
// rather than falling back to parseString's generic content-type
|
|
238
|
+
// message.
|
|
239
|
+
it.each(["/write", "/read"])("names express.text() in the 400 body for %s", async (path) => {
|
|
240
|
+
const response = await fetch(`${baseUrl}${path}`, {
|
|
241
|
+
method: "POST",
|
|
242
|
+
headers: { "Content-Type": "text/plain" },
|
|
243
|
+
body: "anything"
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
expect(await response.text()).toContain("express.text()");
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// Saying what arrived tells the caller which end is misconfigured.
|
|
250
|
+
it("names the Content-Type that was received", async () => {
|
|
251
|
+
const response = await fetch(`${baseUrl}/write`, {
|
|
252
|
+
method: "POST",
|
|
253
|
+
headers: { "Content-Type": "application/json" },
|
|
254
|
+
body: "{}"
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
expect(await response.text()).toContain("Received Content-Type: application/json");
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
it("says so when no Content-Type was received", async () => {
|
|
261
|
+
const response = await fetch(`${baseUrl}/write`, {
|
|
262
|
+
method: "POST",
|
|
263
|
+
body: new Blob(["anything"])
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
expect(await response.text()).toContain("No Content-Type header was received");
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// The echoed Content-Type is client-supplied, so it must not be able to
|
|
270
|
+
// carry markup into the body.
|
|
271
|
+
it("neutralizes markup in the echoed Content-Type", async () => {
|
|
272
|
+
const response = await fetch(`${baseUrl}/write`, {
|
|
273
|
+
method: "POST",
|
|
274
|
+
headers: { "Content-Type": "text/plain<script>alert(1)</script>" },
|
|
275
|
+
body: "anything"
|
|
276
|
+
});
|
|
277
|
+
const body = await response.text();
|
|
278
|
+
|
|
279
|
+
expect(response.status).toBe(400);
|
|
280
|
+
expect(body).not.toContain("<script>");
|
|
281
|
+
expect(body).toContain("<script>");
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
it("caps the length of the echoed Content-Type", async () => {
|
|
285
|
+
const response = await fetch(`${baseUrl}/write`, {
|
|
286
|
+
method: "POST",
|
|
287
|
+
headers: { "Content-Type": `text/plain;padding=${"x".repeat(500)}` },
|
|
288
|
+
body: "anything"
|
|
289
|
+
});
|
|
290
|
+
const body = await response.text();
|
|
291
|
+
|
|
292
|
+
expect(response.status).toBe(400);
|
|
293
|
+
expect(body).toContain("…");
|
|
294
|
+
expect(body.length).toBeLessThan(300);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it("marks error responses nosniff", async () => {
|
|
298
|
+
const response = await fetch(`${baseUrl}/write`, {
|
|
299
|
+
method: "POST",
|
|
300
|
+
headers: { "Content-Type": "text/plain" },
|
|
301
|
+
body: "anything"
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
expect(response.status).toBe(400);
|
|
305
|
+
expect(response.headers.get("x-content-type-options")).toBe("nosniff");
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
it("answers 500 without echoing the internal error message", async () => {
|
|
310
|
+
const store = new MemoryStore();
|
|
311
|
+
const factManager = new FactManager(
|
|
312
|
+
new PassThroughFork(store), new ObservableSource(store), store, new NetworkNoOp(), []);
|
|
313
|
+
const secret = "connection to postgres://internal-host:5432 refused";
|
|
314
|
+
const failingAuthorization = {
|
|
315
|
+
load: () => Promise.reject(new Error(secret))
|
|
316
|
+
} as unknown as Authorization & SubscriptionAuthorizer;
|
|
317
|
+
const router = new HttpRouter(factManager, failingAuthorization, new FeedCache(), "*");
|
|
318
|
+
|
|
319
|
+
const app = express();
|
|
320
|
+
app.use(express.json());
|
|
321
|
+
app.use(router.handler);
|
|
322
|
+
await listen(app);
|
|
323
|
+
|
|
324
|
+
const response = await fetch(`${baseUrl}/load`, {
|
|
325
|
+
method: "POST",
|
|
326
|
+
headers: { "Content-Type": "application/json" },
|
|
327
|
+
body: JSON.stringify({ references: [] })
|
|
328
|
+
});
|
|
329
|
+
const body = await response.text();
|
|
330
|
+
|
|
331
|
+
expect(response.status).toBe(500);
|
|
332
|
+
expect(body).toBe("Internal server error");
|
|
333
|
+
expect(body).not.toContain("internal-host");
|
|
334
|
+
// A plain-text body labelled text/html invites a browser to render it.
|
|
335
|
+
expect(response.headers.get("content-type")).toContain("text/plain");
|
|
336
|
+
expect(response.headers.get("x-content-type-options")).toBe("nosniff");
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
it("answers 404 with a distinguishable body for a feed route miss", async () => {
|
|
340
|
+
const { router } = await createHarness();
|
|
341
|
+
const app = express();
|
|
342
|
+
app.use(router.handler);
|
|
343
|
+
await listen(app);
|
|
344
|
+
|
|
345
|
+
// A hash the feed cache has never seen resolves to FeedNotFound, which
|
|
346
|
+
// is a different 404 from the route miss below.
|
|
347
|
+
const cacheMiss = await fetch(`${baseUrl}/feeds/unknownhash`);
|
|
348
|
+
expect(cacheMiss.status).toBe(404);
|
|
349
|
+
expect(await cacheMiss.text()).toBe("feed_not_found");
|
|
350
|
+
});
|
|
351
|
+
});
|