// Loosely based on server.js from https://issues.chromium.org/issues/40941179 by R0ng var http = require('http'); var fs = require('fs'); function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } var configJson = `{ "accounts_endpoint": "/accounts.json", "client_metadata_endpoint": "/metadata.json", "id_assertion_endpoint": "/tokens.json", "revocation_endpoint": "/revocation.html", "login_url": "/login.html" }`; var transparent = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='; var realisticAccount = `{ "accounts" : [ { "id": "aotest1234", "email": "alesandro@alesandroortiz.com", "name":"Alesandro Ortiz", "given_name": "Alesandro", "picture": "https://alesandroortiz.com/img/logo-social.png" } ] }`; const defaultHeaders = { 'Content-Type': 'application/json', 'Set-Login': 'logged-in' } var handler = (port) => { return async (req, res) => { var url = req.url; console.info('Requested URL', req.url); if (url == "/.well-known/web-identity") { res.writeHead(200, defaultHeaders); res.end('{"provider_urls": ["http://localhost:'+port+'/config.json"]}'); } else if (url == "/config.json") { res.writeHead(200, defaultHeaders); res.end(configJson); } else if (url == "/accounts.json") { res.writeHead(200, defaultHeaders); res.end(realisticAccount); } else if (url == "/tokens.json") { res.writeHead(200, { ...defaultHeaders, 'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Origin': req.headers.origin }); res.end('{"token" : "123456789"}'); } else if (url == '/metadata.json') { res.writeHead(200, defaultHeaders); } else { res.writeHead(200, {'Content-Type': 'text/html'}); res.end(''); } } } var createServer = (port) => { http.createServer(handler(port)).listen(port, "127.0.0.1"); } createServer(8088); console.log('Server running');