Split NeoPass dev server into main/backing servers
This commit is contained in:
parent
e04387a533
commit
58e6b46b42
3 changed files with 104 additions and 4 deletions
|
@ -1,8 +1,23 @@
|
|||
#!/usr/bin/env node
|
||||
/**
|
||||
* A test NeoPass server! This is a very lean, hacky implementation, designed
|
||||
* to just see the basic OAuth interactions Work At All.
|
||||
*
|
||||
* First, we have a "backing server", which is a `oauth2-mock-server` instance
|
||||
* that's easy to spin up and have perform OAuth for us. We give it a hardcoded
|
||||
* development-only key, and it just auto-grants permissions!
|
||||
*
|
||||
* We also have a "main server", which obeys the actual NeoPass API: the
|
||||
* backing server isn't configurable with stuff like paths, so we use the main
|
||||
* server to proxy from the paths in the NeoPass spec to the paths the backing
|
||||
* server uses.
|
||||
*/
|
||||
|
||||
const urlLib = require("node:url");
|
||||
const { OAuth2Server } = require("oauth2-mock-server");
|
||||
const express = require("express");
|
||||
|
||||
async function main() {
|
||||
async function startBackingServer(port) {
|
||||
const server = new OAuth2Server();
|
||||
await server.issuer.keys.add({
|
||||
// A key we generated for the NeoPass test server. It's okay for its
|
||||
|
@ -21,8 +36,38 @@ async function main() {
|
|||
n: "svVfGU4NGcfBCmQiIOW5uzg5SAN2CWSIQSstnhqZoCdjy5OoKpKVR8O9TbDvxixrvkFyAav90Q0Xse8iFTcjfCKuqINYiuYMXhCvfBlc_DVVOQca9pMpN03LaDofd5Ll4_BFTtt1nSPahwWU7xDM-Bkkh_TcS2qS4N2xbpEGi0q0ZkrJN4WyiDBC2k9WbK-YHr4Rj4JKypFVSeBIrjxVPmlPzgfqlLGGIB0l92SnJDXDMlkWcCCTyLgqSBM04nkxGDSykq_ei76qCdRd7b10wMBaoS9DeBThAyHpur2LoPdH3gxbcwoWExi-jPlNP1LdKVZD8b95OY3CRyMAAMGdKQ",
|
||||
});
|
||||
|
||||
await server.start(8585, "localhost");
|
||||
console.log("Started NeoPass server at: ", server.issuer.url);
|
||||
await server.start(port, "localhost");
|
||||
console.log(`Started NeoPass backing server at: ${server.issuer.url}`);
|
||||
}
|
||||
|
||||
async function startMainServer(port) {
|
||||
const fetch = await import("node-fetch");
|
||||
|
||||
const app = express();
|
||||
app.use(express.raw());
|
||||
|
||||
app.get("/", (req, res) => res.end("NeoPass development server for DTI!"));
|
||||
|
||||
app.get("/oauth2/auth", (req, res) => {
|
||||
const query = urlLib.parse(req.url).query;
|
||||
res.redirect(`http://localhost:8686/authorize?${query}`);
|
||||
});
|
||||
|
||||
app.post("/oauth2/token", (req, res) => {
|
||||
// For POST requests, the HTTP spec doesn't allow a redirect to a POST,
|
||||
// so we proxy the request instead.
|
||||
// TODO: Actually do that! For now we just log it.
|
||||
console.log(req.body);
|
||||
res.end("owo");
|
||||
});
|
||||
|
||||
await new Promise((resolve) => app.listen(port, resolve));
|
||||
console.log(`Started NeoPass main server at: http://localhost:${port}`);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await startBackingServer(8686);
|
||||
await startMainServer(8585);
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
|
|
|
@ -35,7 +35,9 @@
|
|||
"eslint-plugin-jsx-a11y": "^6.8.0",
|
||||
"eslint-plugin-react": "^7.33.2",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"express": "^4.18.3",
|
||||
"husky": "^8.0.3",
|
||||
"node-fetch": "^3.3.2",
|
||||
"oauth2-mock-server": "^7.1.1",
|
||||
"prettier": "^3.0.3",
|
||||
"typescript": "^5.2.2"
|
||||
|
|
55
yarn.lock
55
yarn.lock
|
@ -2363,6 +2363,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"data-uri-to-buffer@npm:^4.0.0":
|
||||
version: 4.0.1
|
||||
resolution: "data-uri-to-buffer@npm:4.0.1"
|
||||
checksum: 20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"debug@npm:2.6.9":
|
||||
version: 2.6.9
|
||||
resolution: "debug@npm:2.6.9"
|
||||
|
@ -2896,7 +2903,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"express@npm:^4.18.2":
|
||||
"express@npm:^4.18.2, express@npm:^4.18.3":
|
||||
version: 4.18.3
|
||||
resolution: "express@npm:4.18.3"
|
||||
dependencies:
|
||||
|
@ -2978,6 +2985,16 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4":
|
||||
version: 3.2.0
|
||||
resolution: "fetch-blob@npm:3.2.0"
|
||||
dependencies:
|
||||
node-domexception: "npm:^1.0.0"
|
||||
web-streams-polyfill: "npm:^3.0.3"
|
||||
checksum: 60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"file-entry-cache@npm:^6.0.1":
|
||||
version: 6.0.1
|
||||
resolution: "file-entry-cache@npm:6.0.1"
|
||||
|
@ -3064,6 +3081,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"formdata-polyfill@npm:^4.0.10":
|
||||
version: 4.0.10
|
||||
resolution: "formdata-polyfill@npm:4.0.10"
|
||||
dependencies:
|
||||
fetch-blob: "npm:^3.1.2"
|
||||
checksum: 5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"forwarded@npm:0.2.0":
|
||||
version: 0.2.0
|
||||
resolution: "forwarded@npm:0.2.0"
|
||||
|
@ -3449,12 +3475,14 @@ __metadata:
|
|||
eslint-plugin-jsx-a11y: "npm:^6.8.0"
|
||||
eslint-plugin-react: "npm:^7.33.2"
|
||||
eslint-plugin-react-hooks: "npm:^4.6.0"
|
||||
express: "npm:^4.18.3"
|
||||
framer-motion: "npm:^4.1.11"
|
||||
graphql: "npm:^15.5.0"
|
||||
graphql-tag: "npm:^2.12.6"
|
||||
husky: "npm:^8.0.3"
|
||||
immer: "npm:^9.0.6"
|
||||
lru-cache: "npm:^6.0.0"
|
||||
node-fetch: "npm:^3.3.2"
|
||||
oauth2-mock-server: "npm:^7.1.1"
|
||||
prettier: "npm:^3.0.3"
|
||||
react: "npm:^18.2.0"
|
||||
|
@ -4038,6 +4066,24 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"node-domexception@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "node-domexception@npm:1.0.0"
|
||||
checksum: 5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"node-fetch@npm:^3.3.2":
|
||||
version: 3.3.2
|
||||
resolution: "node-fetch@npm:3.3.2"
|
||||
dependencies:
|
||||
data-uri-to-buffer: "npm:^4.0.0"
|
||||
fetch-blob: "npm:^3.1.4"
|
||||
formdata-polyfill: "npm:^4.0.10"
|
||||
checksum: f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"oauth2-mock-server@npm:^7.1.1":
|
||||
version: 7.1.1
|
||||
resolution: "oauth2-mock-server@npm:7.1.1"
|
||||
|
@ -5256,6 +5302,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"web-streams-polyfill@npm:^3.0.3":
|
||||
version: 3.3.3
|
||||
resolution: "web-streams-polyfill@npm:3.3.3"
|
||||
checksum: 64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"which-boxed-primitive@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "which-boxed-primitive@npm:1.0.2"
|
||||
|
|
Loading…
Reference in a new issue