From 076246e4d0a7a8a7b17ec06fe99cf3883a880e10 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Thu, 21 Oct 2021 14:19:23 -0600 Subject: [PATCH] docs: sync error messages to docs --- README.md | 31 +++++++++++++++---------------- lib/errors.js | 44 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 27d28f0..442c39a 100644 --- a/README.md +++ b/README.md @@ -279,22 +279,21 @@ SemVer Compatibility: - `message` is **NOT** included in the semver compatibility guarantee (we intend to make them more client-friendly), neither is `detail` at this time (but it will be once we decide on what it should be). - `details` may be added to, but not subtracted from -| Hint | Code | Status | Message (truncated) | -| ------------------- | --------------- | ------ | ------------------------------------------------ | -| (developer error) | DEVELOPER_ERROR | 500 | test... | -| (bad gateway) | BAD_GATEWAY | 502 | The token could not be verified because our s... | -| (insecure issuer) | MALFORMED_JWT | 400 | The token could not be verified because our s... | -| (parse error) | MALFORMED_JWT | 400 | The auth token is malformed.... | -| (no issuer) | MALFORMED_JWT | 400 | The token could not be verified because it do... | -| (malformed exp) | MALFORMED_JWT | 400 | The auth token could not be verified because ... | -| (expired) | INVALID_JWT | 401 | The auth token is expired. To try again, go t... | -| (inactive) | INVALID_JWT | 401 | The auth token isn't valid yet. It's activati... | -| (bad signature) | INVALID_JWT | 401 | The auth token did not pass verification beca... | -| (jwk not found old) | INVALID_JWT | 401 | The auth token did not pass verification beca... | -| (jwk not found) | INVALID_JWT | 401 | The auth token did not pass verification beca... | -| (no jwkws uri) | INVALID_JWT | 401 | The auth token did not pass verification beca... | -| (unknown issuer) | INVALID_JWT | 401 | The auth token did not pass verification beca... | -| (failed claims) | INVALID_JWT | 401 | The auth token did not pass verification beca... | +| Hint | Code | Status | Message (truncated) | +| ----------------- | ------------- | ------ | ------------------------------------------------------ | +| bad gateway | BAD_GATEWAY | 502 | The auth token could not be verified because our se... | +| insecure issuer | MALFORMED_JWT | 400 | The auth token could not be verified because our se... | +| parse error | MALFORMED_JWT | 400 | The auth token could not be verified because it is ... | +| no issuer | MALFORMED_JWT | 400 | The auth token could not be verified because it doe... | +| malformed exp | MALFORMED_JWT | 400 | The auth token could not be verified because it's e... | +| expired | INVALID_JWT | 401 | The auth token is expired. To try again, go to the ... | +| inactive | INVALID_JWT | 401 | The auth token isn't valid yet. It's activation dat... | +| bad signature | INVALID_JWT | 401 | The auth token did not pass verification because it... | +| jwk not found old | INVALID_JWT | 401 | The auth token did not pass verification because ou... | +| jwk not found | INVALID_JWT | 401 | The auth token did not pass verification because ou... | +| no jwkws uri | INVALID_JWT | 401 | The auth token did not pass verification because it... | +| unknown issuer | INVALID_JWT | 401 | The auth token did not pass verification because it... | +| failed claims | INVALID_JWT | 401 | The auth token did not pass verification because it... | # Change Log diff --git a/lib/errors.js b/lib/errors.js index 1692844..572a14c 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -76,7 +76,7 @@ module.exports = { }, BAD_GATEWAY: function (err) { var msg = - "The token could not be verified because our server encountered a network error (or a bad gateway) when connecting to its issuing server."; + "The auth token could not be verified because our server encountered a network error (or a bad gateway) when connecting to its issuing server."; var details = []; if (err.message) { details.push("error.message = " + err.message); @@ -103,7 +103,7 @@ module.exports = { "DEBUG: Set ENV 'KEYFETCH_ALLOW_INSECURE_HTTP=true' to allow insecure issuers (for testing)." ]; var msg = - 'The token could not be verified because our server could connect to its issuing server ("iss") securely.'; + 'The auth token could not be verified because our server could connect to its issuing server ("iss") securely.'; return create(old, msg, E_MALFORMED, 400, details); }, /** @@ -112,7 +112,7 @@ module.exports = { */ PARSE_ERROR: function (jwt) { var old = "could not parse jwt: '" + jwt + "'"; - var msg = "The auth token is malformed."; + var msg = "The auth token could not be verified because it is malformed."; var details = ["jwt = " + JSON.stringify(jwt)]; return create(old, msg, E_MALFORMED, 400, details); }, @@ -122,7 +122,7 @@ module.exports = { */ NO_ISSUER: function (iss) { var old = "'iss' is not defined"; - var msg = 'The token could not be verified because it doesn\'t specify an issuer ("iss").'; + var msg = 'The auth token could not be verified because it doesn\'t specify an issuer ("iss").'; var details = ["jwt.claims.iss = " + JSON.stringify(iss)]; return create(old, msg, E_MALFORMED, 400, details); }, @@ -226,17 +226,45 @@ var Errors = module.exports; // for README if (require.main === module) { - console.info("| Hint | Code | Status | Message (truncated) |"); - console.info("| ---- | ---- | ------ | ------------------- |"); + let maxWidth = 54; + let header = ["Hint", "Code", "Status", "Message (truncated)"]; + let widths = header.map(function (v) { + return Math.min(maxWidth, String(v).length); + }); + let rows = []; Object.keys(module.exports).forEach(function (k) { //@ts-ignore var E = module.exports[k]; var e = E("test"); var code = e.code; - var msg = e.message.slice(0, 45); + var msg = e.message; var hint = k.toLowerCase().replace(/_/g, " "); - console.info(`| (${hint}) | ${code} | ${e.status} | ${msg}... |`); + widths[0] = Math.max(widths[0], String(hint).length); + widths[1] = Math.max(widths[1], String(code).length); + widths[2] = Math.max(widths[2], String(e.status).length); + widths[3] = Math.min(maxWidth, Math.max(widths[3], String(msg).length)); + rows.push([hint, code, e.status, msg]); }); + rows.forEach(function (cols, i) { + let cells = cols.map(function (col, i) { + if (col.length > maxWidth) { + col = col.slice(0, maxWidth - 3); + col += "..."; + } + return String(col).padEnd(widths[i], " "); + }); + let out = `| ${cells[0]} | ${cells[1]} | ${cells[2]} | ${cells[3].slice(0, widths[3])} |`; + //out = out.replace(/\| /g, " ").replace(/\|/g, ""); + console.info(out); + if (i === 0) { + cells = cols.map(function (col, i) { + return "-".padEnd(widths[i], "-"); + }); + console.info(`| ${cells[0]} | ${cells[1]} | ${cells[2]} | ${cells[3]} |`); + } + }); + console.log(); console.log(Errors.MALFORMED_EXP()); + console.log(); console.log(JSON.stringify(Errors.MALFORMED_EXP(), null, 2)); }