From 494f7d86a805325e55556b38daff267786a62f49 Mon Sep 17 00:00:00 2001 From: Evan Feenstra Date: Mon, 23 Nov 2020 14:51:37 -0800 Subject: [PATCH] auto-unlock, post unlock for voltage --- app.ts | 62 +++------------ dist/app.js | 61 ++++----------- dist/app.js.map | 2 +- dist/src/auth.js | 129 ++++++++++++++++++++++++++++++++ dist/src/auth.js.map | 1 + dist/src/grpc/index.js | 2 +- dist/src/grpc/index.js.map | 2 +- dist/src/utils/lightning.js | 19 ++++- dist/src/utils/lightning.js.map | 2 +- dist/src/utils/macaroon.js | 22 ++++++ dist/src/utils/macaroon.js.map | 1 + dist/src/utils/unlock.js | 45 +++++++++++ dist/src/utils/unlock.js.map | 1 + package-lock.json | 5 ++ package.json | 1 + src/auth.ts | 124 ++++++++++++++++++++++++++++++ src/grpc/index.ts | 2 +- src/utils/lightning.ts | 21 +++++- src/utils/macaroon.ts | 20 +++++ src/utils/unlock.ts | 34 +++++++++ 20 files changed, 451 insertions(+), 105 deletions(-) create mode 100644 dist/src/auth.js create mode 100644 dist/src/auth.js.map create mode 100644 dist/src/utils/macaroon.js create mode 100644 dist/src/utils/macaroon.js.map create mode 100644 dist/src/utils/unlock.js create mode 100644 dist/src/utils/unlock.js.map create mode 100644 src/auth.ts create mode 100644 src/utils/macaroon.ts create mode 100644 src/utils/unlock.ts diff --git a/app.ts b/app.ts index 2796e48..a25368d 100644 --- a/app.ts +++ b/app.ts @@ -3,17 +3,15 @@ import * as bodyParser from 'body-parser' import * as helmet from 'helmet' import * as cookieParser from 'cookie-parser' import * as cors from 'cors' -import * as crypto from 'crypto' import * as path from 'path' -import {models} from './src/models' import logger from './src/utils/logger' import {pingHubInterval, checkInvitesHubInterval} from './src/hub' import {setupDatabase, setupDone} from './src/utils/setup' import * as controllers from './src/controllers' import * as socket from './src/utils/socket' import * as network from './src/network' +import {authModule, unlocker} from './src/auth' -let server: any = null const env = process.env.NODE_ENV || 'development'; const config = require(path.join(__dirname, 'config/app.json'))[env]; const port = process.env.PORT || config.node_http_port || 3001 @@ -86,53 +84,17 @@ async function setupApp(){ console.log(`Node listening on ${port}.`); }); - controllers.set(app); - - socket.connect(server) -} - -async function authModule(req, res, next) { - if ( - req.path == '/app' || - req.path == '/' || - req.path == '/info' || - req.path == '/action' || - req.path == '/contacts/tokens' || - req.path == '/latest' || - req.path.startsWith('/static') || - req.path == '/contacts/set_dev' - ) { - next() - return - } - - if (process.env.HOSTING_PROVIDER==='true'){ - // const domain = process.env.INVITE_SERVER - const host = req.headers.origin - console.log('=> host:', host) - const referer = req.headers.referer - console.log('=> referer:', referer) - if (req.path === '/invoices') { - next() - return - } - } - - const token = req.headers['x-user-token'] || req.cookies['x-user-token'] - - if (token == null) { - res.writeHead(401, 'Access invalid for user', {'Content-Type' : 'text/plain'}); - res.end('Invalid credentials'); + // start all routes! + if(!config.unlock) { + controllers.set(app); + socket.connect(server) } else { - const user = await models.Contact.findOne({ where: { isOwner: true }}) - const hashedToken = crypto.createHash('sha256').update(token).digest('base64'); - if (user.authToken == null || user.authToken != hashedToken) { - res.writeHead(401, 'Access invalid for user', {'Content-Type' : 'text/plain'}); - res.end('Invalid credentials'); - } else { - next(); - } + app.post('/unlock', async function(req,res){ + const ok = await unlocker(req,res) + if(ok) { + controllers.set(app); + socket.connect(server) + } + }) } } - -export default server diff --git a/dist/app.js b/dist/app.js index a045ea4..e8a0327 100644 --- a/dist/app.js +++ b/dist/app.js @@ -14,16 +14,14 @@ const bodyParser = require("body-parser"); const helmet = require("helmet"); const cookieParser = require("cookie-parser"); const cors = require("cors"); -const crypto = require("crypto"); const path = require("path"); -const models_1 = require("./src/models"); const logger_1 = require("./src/utils/logger"); const hub_1 = require("./src/hub"); const setup_1 = require("./src/utils/setup"); const controllers = require("./src/controllers"); const socket = require("./src/utils/socket"); const network = require("./src/network"); -let server = null; +const auth_1 = require("./src/auth"); const env = process.env.NODE_ENV || 'development'; const config = require(path.join(__dirname, 'config/app.json'))[env]; const port = process.env.PORT || config.node_http_port || 3001; @@ -86,7 +84,7 @@ function setupApp() { })); app.use(cookieParser()); if (env != 'development') { - app.use(authModule); + app.use(auth_1.authModule); } app.use('/static', express.static('public')); app.get('/app', (req, res) => res.send('INDEX')); @@ -96,51 +94,22 @@ function setupApp() { /* eslint-disable no-console */ console.log(`Node listening on ${port}.`); }); - controllers.set(app); - socket.connect(server); - }); -} -function authModule(req, res, next) { - return __awaiter(this, void 0, void 0, function* () { - if (req.path == '/app' || - req.path == '/' || - req.path == '/info' || - req.path == '/action' || - req.path == '/contacts/tokens' || - req.path == '/latest' || - req.path.startsWith('/static') || - req.path == '/contacts/set_dev') { - next(); - return; - } - if (process.env.HOSTING_PROVIDER === 'true') { - // const domain = process.env.INVITE_SERVER - const host = req.headers.origin; - console.log('=> host:', host); - const referer = req.headers.referer; - console.log('=> referer:', referer); - if (req.path === '/invoices') { - next(); - return; - } - } - const token = req.headers['x-user-token'] || req.cookies['x-user-token']; - if (token == null) { - res.writeHead(401, 'Access invalid for user', { 'Content-Type': 'text/plain' }); - res.end('Invalid credentials'); + // start all routes! + if (!config.unlock) { + controllers.set(app); + socket.connect(server); } else { - const user = yield models_1.models.Contact.findOne({ where: { isOwner: true } }); - const hashedToken = crypto.createHash('sha256').update(token).digest('base64'); - if (user.authToken == null || user.authToken != hashedToken) { - res.writeHead(401, 'Access invalid for user', { 'Content-Type': 'text/plain' }); - res.end('Invalid credentials'); - } - else { - next(); - } + app.post('/unlock', function (req, res) { + return __awaiter(this, void 0, void 0, function* () { + const ok = yield auth_1.unlocker(req, res); + if (ok) { + controllers.set(app); + socket.connect(server); + } + }); + }); } }); } -exports.default = server; //# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/dist/app.js.map b/dist/app.js.map index 12605bb..7cbc04a 100644 --- a/dist/app.js.map +++ b/dist/app.js.map @@ -1 +1 @@ -{"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"app.js","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/auth.js b/dist/src/auth.js new file mode 100644 index 0000000..51f9811 --- /dev/null +++ b/dist/src/auth.js @@ -0,0 +1,129 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const crypto = require("crypto"); +const models_1 = require("./models"); +const crypto_js_1 = require("crypto-js"); +const path = require("path"); +const res_1 = require("./utils/res"); +const macaroon_1 = require("./utils/macaroon"); +const fs = require('fs'); +const env = process.env.NODE_ENV || 'development'; +const config = require(path.join(__dirname, 'config/app.json'))[env]; +function unlocker(req, res) { + return __awaiter(this, void 0, void 0, function* () { + const { password } = req.body; + if (!password) { + res_1.failure(res, 'no password'); + return false; + } + const encMacPath = config.encrypted_macaroon_path; + if (!encMacPath) { + res_1.failure(res, 'no macaroon path'); + return false; + } + let hexMac; + try { + var encMac = fs.readFileSync(config.encrypted_macaroon_path); + if (!encMac) { + res_1.failure(res, 'no macaroon'); + return false; + } + const decMac = decryptMacaroon(password, encMac); + if (!decMac) { + res_1.failure(res, 'failed to decrypt macaroon'); + return false; + } + hexMac = base64ToHex(decMac); + } + catch (e) { + res_1.failure(res, e); + return false; + } + if (hexMac) { + macaroon_1.setInMemoryMacaroon(hexMac); + res_1.success(res, 'success!'); + return true; + } + else { + res_1.failure(res, 'failed to set macaroon in memory'); + return false; + } + }); +} +exports.unlocker = unlocker; +function authModule(req, res, next) { + return __awaiter(this, void 0, void 0, function* () { + if (req.path == '/app' || + req.path == '/' || + req.path == '/info' || + req.path == '/action' || + req.path == '/contacts/tokens' || + req.path == '/latest' || + req.path.startsWith('/static') || + req.path == '/contacts/set_dev') { + next(); + return; + } + if (process.env.HOSTING_PROVIDER === 'true') { + // const domain = process.env.INVITE_SERVER + const host = req.headers.origin; + console.log('=> host:', host); + const referer = req.headers.referer; + console.log('=> referer:', referer); + if (req.path === '/invoices') { + next(); + return; + } + } + const token = req.headers['x-user-token'] || req.cookies['x-user-token']; + if (token == null) { + res.writeHead(401, 'Access invalid for user', { 'Content-Type': 'text/plain' }); + res.end('Invalid credentials'); + } + else { + const user = yield models_1.models.Contact.findOne({ where: { isOwner: true } }); + const hashedToken = crypto.createHash('sha256').update(token).digest('base64'); + if (user.authToken == null || user.authToken != hashedToken) { + res.writeHead(401, 'Access invalid for user', { 'Content-Type': 'text/plain' }); + res.end('Invalid credentials'); + } + else { + next(); + } + } + }); +} +exports.authModule = authModule; +function decryptMacaroon(password, macaroon) { + try { + const decrypted = crypto_js_1.default.AES.decrypt(macaroon || '', password).toString(crypto_js_1.default.enc.Base64); + const decryptResult = atob(decrypted); + return decryptResult; + } + catch (e) { + console.error('cipher mismatch, macaroon decryption failed'); + console.error(e); + return ''; + } +} +function base64ToHex(str) { + const raw = atob(str); + let result = ''; + for (let i = 0; i < raw.length; i++) { + const hex = raw.charCodeAt(i).toString(16); + result += (hex.length === 2 ? hex : '0' + hex); + } + return result.toUpperCase(); +} +exports.base64ToHex = base64ToHex; +const atob = a => Buffer.from(a, 'base64').toString('binary'); +//# sourceMappingURL=auth.js.map \ No newline at end of file diff --git a/dist/src/auth.js.map b/dist/src/auth.js.map new file mode 100644 index 0000000..fafeb7b --- /dev/null +++ b/dist/src/auth.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/grpc/index.js b/dist/src/grpc/index.js index 2f94b84..3bcd997 100644 --- a/dist/src/grpc/index.js +++ b/dist/src/grpc/index.js @@ -98,7 +98,7 @@ function subscribeInvoices(parseKeysendInvoice) { }); }); call.on('status', function (status) { - console.log("Status", status); + console.log("Status", status.code, status); // The server is unavailable, trying to reconnect. if (status.code == ERR_CODE_UNAVAILABLE || status.code == ERR_CODE_STREAM_REMOVED) { i = 0; diff --git a/dist/src/grpc/index.js.map b/dist/src/grpc/index.js.map index b022968..b88c2d1 100644 --- a/dist/src/grpc/index.js.map +++ b/dist/src/grpc/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/grpc/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/grpc/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAgC;AAChC,0CAAyC;AACzC,gCAAsD;AACtD,2CAA0C;AAC1C,+CAA8C;AAC9C,kDAAgD;AAChD,sCAAqC;AACrC,iCAAgC;AAChC,4CAAoC;AAEpC,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAC/B,MAAM,uBAAuB,GAAG,CAAC,CAAA;AAEjC,SAAgB,iBAAiB,CAAC,mBAAmB;IACpD,OAAO,IAAI,OAAO,CAAC,CAAM,OAAO,EAAC,MAAM,EAAC,EAAE;QACzC,MAAM,SAAS,GAAG,MAAM,yBAAa,EAAE,CAAA;QAEvC,IAAI,IAAI,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAA;QACxC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,UAAe,QAAQ;;gBACtC,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE;oBACpC,OAAM;iBACN;gBACD,iDAAiD;gBACjD,IAAG,QAAQ,CAAC,UAAU,EAAE;oBACvB,mBAAmB,CAAC,QAAQ,CAAC,CAAA;iBAC7B;qBAAM;oBAEN,IAAI,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBAC5E,IAAI,WAAW,GAAG,EAAE,CAAC;oBACrB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAClE,IAAI,GAAG,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnD,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,cAAc,EAAE;4BACzC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;4BAC3B,MAAM;yBACN;qBACD;oBAED,IAAI,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC;oBAE3D,MAAM,OAAO,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAS,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAA;oBAChJ,IAAI,OAAO,IAAI,IAAI,EAAE;wBACpB,+EAA+E;wBAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAA;wBAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;wBACvC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAG,MAAM,EAAC;4BACzC,iBAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;yBAC3B;wBACD,MAAM,CAAC,QAAQ,CAAC;4BACf,IAAI,EAAE,iBAAiB;4BACvB,QAAQ,EAAE,EAAC,OAAO,EAAE,MAAM,EAAC;yBAC3B,CAAC,CAAA;wBACF,MAAM,eAAM,CAAC,OAAO,CAAC,MAAM,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,IAAI,EAAE,mBAAS,CAAC,aAAa,CAAC,OAAO;4BACrC,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC;4BAChC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC;4BACrC,WAAW,EAAE,WAAW;4BACxB,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;4BAC1B,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC;4BAChC,MAAM,EAAE,mBAAS,CAAC,QAAQ,CAAC,SAAS;4BACpC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;4BAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;yBAC/B,CAAC,CAAA;wBACF,OAAM;qBACN;oBACD,eAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,mBAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;oBAE9F,MAAM,IAAI,GAAG,MAAM,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;oBACzE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oBAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;oBAE5D,MAAM,OAAO,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,MAAM,CAAC;wBAC3C,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,IAAI,EAAE,mBAAS,CAAC,aAAa,CAAC,OAAO;wBACrC,MAAM,EAAE,QAAQ;wBAChB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC;wBAChC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC;wBACrC,WAAW,EAAE,WAAW;wBACxB,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;wBAC1B,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC;wBAChC,MAAM,EAAE,mBAAS,CAAC,QAAQ,CAAC,SAAS;wBACpC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;wBAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;qBAC/B,CAAC,CAAA;oBAEF,MAAM,MAAM,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;oBAExE,MAAM,CAAC,QAAQ,CAAC;wBACf,IAAI,EAAE,SAAS;wBACf,QAAQ,EAAE,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;qBACxD,CAAC,CAAA;oBAEF,sBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;iBAC/C;YACF,CAAC;SAAA,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAS,MAAM;YAChC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3C,kDAAkD;YAClD,IAAI,MAAM,CAAC,IAAI,IAAI,oBAAoB,IAAI,MAAM,CAAC,IAAI,IAAI,uBAAuB,EAAE;gBAClF,CAAC,GAAG,CAAC,CAAA;gBACL,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;aAC9B;iBAAM;gBACN,OAAO,CAAC,MAAM,CAAC,CAAC;aAChB;QACF,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAS,GAAG;YAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,aAAa,EAAC,GAAG,EAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,GAAG,CAAC,IAAI,IAAI,oBAAoB,IAAI,GAAG,CAAC,IAAI,IAAI,uBAAuB,EAAE;gBAC5E,CAAC,GAAG,CAAC,CAAA;gBACL,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;aAC9B;iBAAM;gBACN,MAAM,CAAC,GAAG,CAAC,CAAA;aACX;QACF,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;YACd,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;YACpC,oCAAoC;YACpC,CAAC,GAAG,CAAC,CAAA;YACL,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QACF,UAAU,CAAC,GAAE,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,CAAA;QACd,CAAC,EAAC,GAAG,CAAC,CAAA;IACP,CAAC,CAAA,CAAC,CAAA;AACH,CAAC;AAlHD,8CAkHC;AAED,IAAI,CAAC,GAAG,CAAC,CAAA;AACT,IAAI,GAAG,GAAG,CAAC,CAAA;AACX,SAAe,cAAc,CAAC,QAAe;;QAC5C,GAAG,GAAG,QAAQ,CAAA;QACd,CAAC,EAAE,CAAA;QACH,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAA;QACrD,IAAI;YACH,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAA;YACrC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAA;SAC3C;QAAC,OAAM,CAAC,EAAE;YACV,UAAU,CAAC,GAAO,EAAE;gBACnB,IAAG,GAAG,KAAG,QAAQ,EAAE,EAAE,iDAAiD;oBACrE,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAA;iBAC9B;YACF,CAAC,CAAA,EAAC,IAAI,CAAC,CAAA;SACP;IACF,CAAC;CAAA"} \ No newline at end of file diff --git a/dist/src/utils/lightning.js b/dist/src/utils/lightning.js index 062e19c..957d900 100644 --- a/dist/src/utils/lightning.js +++ b/dist/src/utils/lightning.js @@ -17,6 +17,7 @@ const sha = require("js-sha256"); const crypto = require("crypto"); const path = require("path"); const constants_1 = require("../constants"); +const macaroon_1 = require("./macaroon"); // var protoLoader = require('@grpc/proto-loader') const env = process.env.NODE_ENV || 'development'; const config = require(path.join(__dirname, '../../config/app.json'))[env]; @@ -29,8 +30,7 @@ var walletUnlocker = null; const loadCredentials = () => { var lndCert = fs.readFileSync(config.tls_location); var sslCreds = grpc.credentials.createSsl(lndCert); - var m = fs.readFileSync(config.macaroon_location); - var macaroon = m.toString('hex'); + var macaroon = macaroon_1.getMacaroon(); var metadata = new grpc.Metadata(); metadata.add('macaroon', macaroon); var macaroonCreds = grpc.credentials.createFromMetadataGenerator((_args, callback) => { @@ -87,6 +87,21 @@ const loadWalletUnlocker = () => { } }; exports.loadWalletUnlocker = loadWalletUnlocker; +const unlockWallet = (wallet_password) => __awaiter(void 0, void 0, void 0, function* () { + return new Promise(function (resolve, reject) { + return __awaiter(this, void 0, void 0, function* () { + let wu = yield loadWalletUnlocker(); + wu.unlockWallet({ wallet_password }, (err, response) => { + if (err) { + reject(err); + return; + } + resolve(response); + }); + }); + }); +}); +exports.unlockWallet = unlockWallet; const getHeaders = (req) => { return { "X-User-Token": req.headers['x-user-token'], diff --git a/dist/src/utils/lightning.js.map b/dist/src/utils/lightning.js.map index e20b9da..1def7bd 100644 --- a/dist/src/utils/lightning.js.map +++ b/dist/src/utils/lightning.js.map @@ -1 +1 @@ -{"version":3,"file":"lightning.js","sourceRoot":"","sources":["../../../src/utils/lightning.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lightning.js","sourceRoot":"","sources":["../../../src/utils/lightning.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/utils/macaroon.js b/dist/src/utils/macaroon.js new file mode 100644 index 0000000..32e222a --- /dev/null +++ b/dist/src/utils/macaroon.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const path = require("path"); +const env = process.env.NODE_ENV || 'development'; +const config = require(path.join(__dirname, '../../config/app.json'))[env]; +let inMemoryMacaroon = ''; // hex encoded +function getMacaroon() { + if (config.unlock) { + return inMemoryMacaroon; + } + else { + const m = fs.readFileSync(config.macaroon_location); + return m.toString('hex'); + } +} +exports.getMacaroon = getMacaroon; +function setInMemoryMacaroon(mac) { + inMemoryMacaroon = mac; +} +exports.setInMemoryMacaroon = setInMemoryMacaroon; +//# sourceMappingURL=macaroon.js.map \ No newline at end of file diff --git a/dist/src/utils/macaroon.js.map b/dist/src/utils/macaroon.js.map new file mode 100644 index 0000000..3358a80 --- /dev/null +++ b/dist/src/utils/macaroon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"macaroon.js","sourceRoot":"","sources":["../../../src/utils/macaroon.ts"],"names":[],"mappings":";;AAAA,yBAAwB;AACxB,6BAA4B;AAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAClD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE1E,IAAI,gBAAgB,GAAW,EAAE,CAAC,CAAC,cAAc;AAEjD,SAAgB,WAAW;IACzB,IAAG,MAAM,CAAC,MAAM,EAAE;QAChB,OAAO,gBAAgB,CAAA;KACxB;SAAM;QACL,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACnD,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC1B;AACH,CAAC;AAPD,kCAOC;AAED,SAAgB,mBAAmB,CAAC,GAAU;IAC5C,gBAAgB,GAAG,GAAG,CAAA;AACxB,CAAC;AAFD,kDAEC"} \ No newline at end of file diff --git a/dist/src/utils/unlock.js b/dist/src/utils/unlock.js new file mode 100644 index 0000000..1d9280d --- /dev/null +++ b/dist/src/utils/unlock.js @@ -0,0 +1,45 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const path = require("path"); +const lightning_1 = require("./lightning"); +const fs = require('fs'); +const readline = require('readline'); +const env = process.env.NODE_ENV || 'development'; +const config = require(path.join(__dirname, '../../config/app.json'))[env]; +// /relay/.lnd/.lndpwd +function tryToUnlockLND() { + return __awaiter(this, void 0, void 0, function* () { + const p = config.lnd_pwd; + if (!p) + return; + var pwd = getFirstLine(config.lnd_pwd); + if (!pwd) + return; + yield lightning_1.unlockWallet(pwd); + }); +} +exports.tryToUnlockLND = tryToUnlockLND; +function getFirstLine(pathToFile) { + return __awaiter(this, void 0, void 0, function* () { + const readable = fs.createReadStream(pathToFile); + const reader = readline.createInterface({ input: readable }); + const line = yield new Promise((resolve) => { + reader.on('line', (line) => { + reader.close(); + resolve(line); + }); + }); + readable.close(); + return line; + }); +} +//# sourceMappingURL=unlock.js.map \ No newline at end of file diff --git a/dist/src/utils/unlock.js.map b/dist/src/utils/unlock.js.map new file mode 100644 index 0000000..520d844 --- /dev/null +++ b/dist/src/utils/unlock.js.map @@ -0,0 +1 @@ +{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../../src/utils/unlock.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,6BAA4B;AAC5B,2CAA0C;AAC1C,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAErC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAClD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE1E,sBAAsB;AAEtB,SAAsB,cAAc;;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAA;QACxB,IAAI,CAAC,CAAC;YAAE,OAAM;QAEd,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,IAAG,CAAC,GAAG;YAAE,OAAM;QAEf,MAAM,wBAAY,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;CAAA;AARD,wCAQC;AAED,SAAe,YAAY,CAAC,UAAU;;QAClC,MAAM,QAAQ,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACvC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvB,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;CAAA"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 08b2b66..819f25b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1600,6 +1600,11 @@ "randomfill": "^1.0.3" } }, + "crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", diff --git a/package.json b/package.json index 3a6c3e7..6c1355a 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "cron": "^1.7.2", "cron-parser": "^2.13.0", "crypto-browserify": "^3.12.0", + "crypto-js": "^4.0.0", "dateformat": "^3.0.3", "decamelize": "^3.1.1", "express": "^4.16.4", diff --git a/src/auth.ts b/src/auth.ts new file mode 100644 index 0000000..8747f90 --- /dev/null +++ b/src/auth.ts @@ -0,0 +1,124 @@ +import * as crypto from 'crypto' +import { models } from './models' +import cryptoJS from 'crypto-js' +import * as path from 'path' +import { success, failure } from './utils/res' +import {setInMemoryMacaroon} from './utils/macaroon' +const fs = require('fs') + +const env = process.env.NODE_ENV || 'development'; +const config = require(path.join(__dirname, 'config/app.json'))[env]; + +export async function unlocker(req, res): Promise { + const { password } = req.body + if(!password) { + failure(res, 'no password') + return false + } + + const encMacPath = config.encrypted_macaroon_path + if(!encMacPath) { + failure(res, 'no macaroon path') + return false + } + + let hexMac:string + + try { + + var encMac = fs.readFileSync(config.encrypted_macaroon_path); + if(!encMac) { + failure(res, 'no macaroon') + return false + } + + const decMac = decryptMacaroon(password, encMac) + if(!decMac) { + failure(res, 'failed to decrypt macaroon') + return false + } + + hexMac = base64ToHex(decMac) + + } catch(e) { + failure(res, e) + return false + } + + if(hexMac) { + setInMemoryMacaroon(hexMac) + success(res, 'success!') + return true + } else { + failure(res, 'failed to set macaroon in memory') + return false + } +} + +export async function authModule(req, res, next) { + if ( + req.path == '/app' || + req.path == '/' || + req.path == '/info' || + req.path == '/action' || + req.path == '/contacts/tokens' || + req.path == '/latest' || + req.path.startsWith('/static') || + req.path == '/contacts/set_dev' + ) { + next() + return + } + + if (process.env.HOSTING_PROVIDER === 'true') { + // const domain = process.env.INVITE_SERVER + const host = req.headers.origin + console.log('=> host:', host) + const referer = req.headers.referer + console.log('=> referer:', referer) + if (req.path === '/invoices') { + next() + return + } + } + + const token = req.headers['x-user-token'] || req.cookies['x-user-token'] + + if (token == null) { + res.writeHead(401, 'Access invalid for user', { 'Content-Type': 'text/plain' }); + res.end('Invalid credentials'); + } else { + const user = await models.Contact.findOne({ where: { isOwner: true } }) + const hashedToken = crypto.createHash('sha256').update(token).digest('base64'); + if (user.authToken == null || user.authToken != hashedToken) { + res.writeHead(401, 'Access invalid for user', { 'Content-Type': 'text/plain' }); + res.end('Invalid credentials'); + } else { + next(); + } + } +} + +function decryptMacaroon(password: string, macaroon: string) { + try { + const decrypted = cryptoJS.AES.decrypt(macaroon || '', password).toString(cryptoJS.enc.Base64) + const decryptResult = atob(decrypted) + return decryptResult + } catch (e) { + console.error('cipher mismatch, macaroon decryption failed') + console.error(e) + return '' + } +} + +export function base64ToHex (str) { + const raw = atob(str) + let result = '' + for (let i = 0; i < raw.length; i++) { + const hex = raw.charCodeAt(i).toString(16) + result += (hex.length === 2 ? hex : '0' + hex) + } + return result.toUpperCase() +} + +const atob = a => Buffer.from(a, 'base64').toString('binary') diff --git a/src/grpc/index.ts b/src/grpc/index.ts index 875dd7f..9d99c02 100644 --- a/src/grpc/index.ts +++ b/src/grpc/index.ts @@ -95,7 +95,7 @@ export function subscribeInvoices(parseKeysendInvoice) { } }); call.on('status', function(status) { - console.log("Status", status); + console.log("Status", status.code, status); // The server is unavailable, trying to reconnect. if (status.code == ERR_CODE_UNAVAILABLE || status.code == ERR_CODE_STREAM_REMOVED) { i = 0 diff --git a/src/utils/lightning.ts b/src/utils/lightning.ts index 679c15c..8999c3d 100644 --- a/src/utils/lightning.ts +++ b/src/utils/lightning.ts @@ -6,6 +6,7 @@ import * as sha from 'js-sha256' import * as crypto from 'crypto' import * as path from 'path' import constants from '../constants' +import {getMacaroon} from './macaroon' // var protoLoader = require('@grpc/proto-loader') const env = process.env.NODE_ENV || 'development'; @@ -20,8 +21,7 @@ var walletUnlocker = null; const loadCredentials = () => { var lndCert = fs.readFileSync(config.tls_location); var sslCreds = grpc.credentials.createSsl(lndCert); - var m = fs.readFileSync(config.macaroon_location); - var macaroon = m.toString('hex'); + var macaroon = getMacaroon() var metadata = new grpc.Metadata() metadata.add('macaroon', macaroon) var macaroonCreds = grpc.credentials.createFromMetadataGenerator((_args, callback) => { @@ -76,6 +76,22 @@ const loadWalletUnlocker = () => { } } +const unlockWallet = async (wallet_password) => { + return new Promise(async function(resolve, reject) { + let wu = await loadWalletUnlocker() + wu.unlockWallet( + { wallet_password }, + (err, response) => { + if(err) { + reject(err) + return + } + resolve(response) + } + ) + }) +} + const getHeaders = (req) => { return { "X-User-Token": req.headers['x-user-token'], @@ -455,4 +471,5 @@ export { queryRoute, listChannels, channelBalance, + unlockWallet, } diff --git a/src/utils/macaroon.ts b/src/utils/macaroon.ts new file mode 100644 index 0000000..44d3e8d --- /dev/null +++ b/src/utils/macaroon.ts @@ -0,0 +1,20 @@ +import * as fs from 'fs' +import * as path from 'path' + +const env = process.env.NODE_ENV || 'development'; +const config = require(path.join(__dirname, '../../config/app.json'))[env] + +let inMemoryMacaroon: string = ''; // hex encoded + +export function getMacaroon() { + if(config.unlock) { + return inMemoryMacaroon + } else { + const m = fs.readFileSync(config.macaroon_location) + return m.toString('hex'); + } +} + +export function setInMemoryMacaroon(mac:string) { + inMemoryMacaroon = mac +} \ No newline at end of file diff --git a/src/utils/unlock.ts b/src/utils/unlock.ts new file mode 100644 index 0000000..b9b58c2 --- /dev/null +++ b/src/utils/unlock.ts @@ -0,0 +1,34 @@ +import * as path from 'path' +import { unlockWallet } from './lightning' +const fs = require('fs') +const readline = require('readline'); + +const env = process.env.NODE_ENV || 'development'; +const config = require(path.join(__dirname, '../../config/app.json'))[env] + +// /relay/.lnd/.lndpwd + +export async function tryToUnlockLND() { + const p = config.lnd_pwd + if (!p) return + + var pwd = getFirstLine(config.lnd_pwd); + if(!pwd) return + + await unlockWallet(pwd) +} + +async function getFirstLine(pathToFile) { + const readable = fs.createReadStream(pathToFile); + const reader = readline.createInterface({ input: readable }); + const line = await new Promise((resolve) => { + reader.on('line', (line) => { + reader.close(); + resolve(line); + }); + }); + readable.close(); + return line; +} + +