From f4b216b4bf1d4f89b46fd691af0fab29089f3231 Mon Sep 17 00:00:00 2001 From: Evan Feenstra Date: Mon, 14 Dec 2020 09:48:01 -0800 Subject: [PATCH] connection QR page --- app.ts | 8 ++- dist/app.js | 8 ++- dist/app.js.map | 2 +- dist/public/favicon.ico | Bin 0 -> 2239 bytes dist/public/index.html | 89 ++++++++++++++++++++++++++++++++++ dist/public/js/qrious.js | 6 +++ dist/public/sphinx-logo.png | Bin 0 -> 43947 bytes dist/src/utils/config.js | 1 + dist/src/utils/config.js.map | 2 +- dist/src/utils/connect.js | 63 ++++++++++++++++++++++++ dist/src/utils/connect.js.map | 1 + dist/src/utils/setup.js | 31 ++---------- dist/src/utils/setup.js.map | 2 +- public/favicon.ico | Bin 0 -> 2239 bytes public/index.html | 89 ++++++++++++++++++++++++++++++++++ public/js/qrious.js | 6 +++ public/sphinx-logo.png | Bin 0 -> 43947 bytes src/utils/config.ts | 1 + src/utils/connect.ts | 44 +++++++++++++++++ src/utils/setup.ts | 31 ++---------- 20 files changed, 325 insertions(+), 59 deletions(-) create mode 100644 dist/public/favicon.ico create mode 100644 dist/public/index.html create mode 100644 dist/public/js/qrious.js create mode 100644 dist/public/sphinx-logo.png create mode 100644 dist/src/utils/connect.js create mode 100644 dist/src/utils/connect.js.map create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 public/js/qrious.js create mode 100644 public/sphinx-logo.png create mode 100644 src/utils/connect.ts diff --git a/app.ts b/app.ts index 2b4004a..76238f2 100644 --- a/app.ts +++ b/app.ts @@ -7,6 +7,7 @@ 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 connect from './src/utils/connect' import * as socket from './src/utils/socket' import * as network from './src/network' import { authModule, unlocker } from './src/auth' @@ -67,6 +68,9 @@ function setupApp() { } app.use('/static', express.static('public')); app.get('/app', (req, res) => res.send('INDEX')) + if (config.connect_ui) { + app.get('/connect', connect.connect) + } let server; if ('ssl' in config && config.ssl.enabled) { @@ -92,7 +96,7 @@ function setupApp() { if (!config.unlock) { controllers.set(app); socket.connect(server) - resolve() + resolve(true) } else { app.post('/unlock', async function (req, res) { const ok = await unlocker(req, res) @@ -100,7 +104,7 @@ function setupApp() { console.log('=> relay unlocked!') controllers.set(app); socket.connect(server) - resolve() + resolve(true) } }) } diff --git a/dist/app.js b/dist/app.js index 1f17457..facb3df 100644 --- a/dist/app.js +++ b/dist/app.js @@ -18,6 +18,7 @@ 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 connect = require("./src/utils/connect"); const socket = require("./src/utils/socket"); const network = require("./src/network"); const auth_1 = require("./src/auth"); @@ -76,6 +77,9 @@ function setupApp() { } app.use('/static', express.static('public')); app.get('/app', (req, res) => res.send('INDEX')); + if (config.connect_ui) { + app.get('/connect', connect.connect); + } let server; if ('ssl' in config && config.ssl.enabled) { try { @@ -102,7 +106,7 @@ function setupApp() { if (!config.unlock) { controllers.set(app); socket.connect(server); - resolve(); + resolve(true); } else { app.post('/unlock', function (req, res) { @@ -112,7 +116,7 @@ function setupApp() { console.log('=> relay unlocked!'); controllers.set(app); socket.connect(server); - resolve(); + resolve(true); } }); }); diff --git a/dist/app.js.map b/dist/app.js.map index 2f0bb77..76da5e3 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/public/favicon.ico b/dist/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a9098435a0c7ddf6e0ad0729c6b4f9dadf64dc46 GIT binary patch literal 2239 zcmaJ@X;c&U9t|MiLjhS-7PT?RVl|me2!sTp2aSVp5EQgP1k2mMc{Fig@{cZQdWcqly>FSv2 zpin4X_Z@VWaz(4&g;36XI2=N|i@1>x3*zz<_S}G+ zP$&&6Av*vGV0uz`un5OhVQ_MhM9D^>oVLp)TwXMUpu?d^p_qz!({T}l7V@bWjvW)v zl+Yl7a7UsP@=Nq$^Ae+ZWIks5HnfwRq7)E82p26E#fW7TITiCsm!jOOt^o}C69kE- zV*XAlfa!y#!BPlqhqK4>Kq3K6BI7`NJefe;iYDMe5`ZTGpe+^;QtDh-%&qK^PZV3`1xplLK!*BsC` z9HE#G$ICW<;xL&Mcd-oNig}Pbor+Pa;Dkax1<#<9T%8$qc)BeK1R2g`dj~rgSE4Jy znL(nF9b6W7P6c(XBl}!;Yor~>~dY`%c zrE?)J$pw_j0IK2s*RU6_lnzpDzgSm!_+oxYtaQ9oX>G96>^cgi3Aodp+46xRPEd@o zzsbj*f+pLJ!HN9P^J@pBzQ%Qi21G-;#xh+kqXW)FQ0)W=nhm9Z+XUe!ZeO*zq&;(^ z%x0T>V}lFJ1)cv?Lkr_lj?HfL=)N=2np9dav@hZvYhZBmGd_VTd$)aIcz$8QvF7y$ z0J1+qrZpyP88)qJ2xWHmZmh08=;6Y_B=|gQ+xRF1F3!T!L8vTR}+h ztjY#Dtb?0vgUfZnvGOP`RSN!(2!QeolZ&=N@ zMP3$W*LqEG!Cm)Fe!MJLe!20@p=zShO=jS-;=BVE#Clf);pNFQ@(~beW;4_p9JG3# zAGvFiS>B;*mSQ1`rFndoiB$BoV2=TZd%0zrf9fHW>!*yo|3Z4 zbJLBSH(T{&-?pH9H~8>e^omI-k@Pf$(`SB(?%OGlvn1L4=S z4q0c77Zhq_*%*{Ae_s(qic5-lyw9W|=w(z0+O+VuvWkB}e?4PgXrJK|?Hd)qokuUv zwoKd$oGF!N6$87`>#kIE=h#$bjmmDsSVgQkq@90%S$gH{hy4#+yVg`EL|Xe-ERUKG z-mLC>{mIB9eDdj^x;WjP9PON)U7wd07?WReJ0_vx>o>BLxIu)=y{q0!N$rZ-l2TB*N z{O%D2=3I${Elf`8jd{BEbhsiu)BSCBVa?kzexBb_Dq>!T_Fyw73eP1%w_Gs! zcGx`Y^ZNHT8L#4`O|LN2Q?o1RyyNwHaMChvY?mfwoZn*!ubltbas0?toyS@%Q+|_t z){YU}a+R(=T3-eRh>6y}D4y0DJ5sWz?D51y#kYA~hCso`i}(U|<-{G^`{ott&tD4u zTyMTZ|45=*%c$jr_HK`)WSxs8KH9$TcleMcH*+;timWobITw5q!&j@T0UD)Wv5QQI zU;n0+hq5yLNpvukc7lqLoE>`g%iMfe7w6uKyy^XK`-;ws8u!;@!^S(Thadb*dk0+W zyE_?NH0f}(m{8^9*BuzFr#G_eVYB>^g6u1Q!L5L+8pX*Wu;YF`^*?r(Yh?<^g literal 0 HcmV?d00001 diff --git a/dist/public/index.html b/dist/public/index.html new file mode 100644 index 0000000..bbc59a5 --- /dev/null +++ b/dist/public/index.html @@ -0,0 +1,89 @@ + + + + + + + + + + logo + +
+ +
+ +

+ Scan the QR or copy the connection string into your Sphinx app +

+ +
+    CONNECTION_STRING
+  
+ + + + + + \ No newline at end of file diff --git a/dist/public/js/qrious.js b/dist/public/js/qrious.js new file mode 100644 index 0000000..5735ea6 --- /dev/null +++ b/dist/public/js/qrious.js @@ -0,0 +1,6 @@ +/*! QRious v4.0.2 | (C) 2017 Alasdair Mercer | GPL v3 License +Based on jsqrencode | (C) 2010 tz@execpc.com | GPL v3 License +*/ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.QRious=e()}(this,function(){"use strict";function t(t,e){var n;return"function"==typeof Object.create?n=Object.create(t):(s.prototype=t,n=new s,s.prototype=null),e&&i(!0,n,e),n}function e(e,n,s,r){var o=this;return"string"!=typeof e&&(r=s,s=n,n=e,e=null),"function"!=typeof n&&(r=s,s=n,n=function(){return o.apply(this,arguments)}),i(!1,n,o,r),n.prototype=t(o.prototype,s),n.prototype.constructor=n,n.class_=e||o.class_,n.super_=o,n}function i(t,e,i){for(var n,s,a=0,h=(i=o.call(arguments,2)).length;a>1&1,n=0;n0;e--)n[e]=n[e]?n[e-1]^_.EXPONENT[v._modN(_.LOG[n[e]]+t)]:n[e-1];n[0]=_.EXPONENT[v._modN(_.LOG[n[0]]+t)]}for(t=0;t<=i;t++)n[t]=_.LOG[n[t]]},_checkBadness:function(){var t,e,i,n,s,r=0,o=this._badness,a=this.buffer,h=this.width;for(s=0;sh*h;)u-=h*h,c++;for(r+=c*v.N4,n=0;n=o-2&&(t=o-2,s>9&&t--);var a=t;if(s>9){for(r[a+2]=0,r[a+3]=0;a--;)e=r[a],r[a+3]|=255&e<<4,r[a+2]=e>>4;r[2]|=255&t<<4,r[1]=t>>4,r[0]=64|t>>12}else{for(r[a+1]=0,r[a+2]=0;a--;)e=r[a],r[a+2]|=255&e<<4,r[a+1]=e>>4;r[1]|=255&t<<4,r[0]=64|t>>4}for(a=t+3-(s<10);a=5&&(i+=v.N1+n[e]-5);for(e=3;et||3*n[e-3]>=4*n[e]||3*n[e+3]>=4*n[e])&&(i+=v.N3);return i},_finish:function(){this._stringBuffer=this.buffer.slice();var t,e,i=0,n=3e4;for(e=0;e<8&&(this._applyMask(e),(t=this._checkBadness())>=1)1&n&&(s[r-1-e+8*r]=1,e<6?s[8+r*e]=1:s[8+r*(e+1)]=1);for(e=0;e<7;e++,n>>=1)1&n&&(s[8+r*(r-7+e)]=1,e?s[6-e+8*r]=1:s[7+8*r]=1)},_interleaveBlocks:function(){var t,e,i=this._dataBlock,n=this._ecc,s=this._eccBlock,r=0,o=this._calculateMaxLength(),a=this._neccBlock1,h=this._neccBlock2,f=this._stringBuffer;for(t=0;t1)for(t=u.BLOCK[n],i=s-7;;){for(e=s-7;e>t-3&&(this._addAlignment(e,i),!(e6)for(t=d.BLOCK[r-7],e=17,i=0;i<6;i++)for(n=0;n<3;n++,e--)1&(e>11?r>>e-12:t>>e)?(s[5-i+o*(2-n+o-11)]=1,s[2-n+o-11+o*(5-i)]=1):(this._setMask(5-i,2-n+o-11),this._setMask(2-n+o-11,5-i))},_isMasked:function(t,e){var i=v._getMaskBit(t,e);return 1===this._mask[i]},_pack:function(){var t,e,i,n=1,s=1,r=this.width,o=r-1,a=r-1,h=(this._dataBlock+this._eccBlock)*(this._neccBlock1+this._neccBlock2)+this._neccBlock2;for(e=0;ee&&(i=t,t=e,e=i),i=e,i+=e*e,i>>=1,i+=t},_modN:function(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t},N1:3,N2:3,N3:40,N4:10}),p=v,m=f.extend({draw:function(){this.element.src=this.qrious.toDataURL()},reset:function(){this.element.src=""},resize:function(){var t=this.element;t.width=t.height=this.qrious.size}}),g=h.extend(function(t,e,i,n){this.name=t,this.modifiable=Boolean(e),this.defaultValue=i,this._valueTransformer=n},{transform:function(t){var e=this._valueTransformer;return"function"==typeof e?e(t,this):t}}),k=h.extend(null,{abs:function(t){return null!=t?Math.abs(t):null},hasOwn:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},noop:function(){},toUpperCase:function(t){return null!=t?t.toUpperCase():null}}),w=h.extend(function(t){this.options={},t.forEach(function(t){this.options[t.name]=t},this)},{exists:function(t){return null!=this.options[t]},get:function(t,e){return w._get(this.options[t],e)},getAll:function(t){var e,i=this.options,n={};for(e in i)k.hasOwn(i,e)&&(n[e]=w._get(i[e],t));return n},init:function(t,e,i){"function"!=typeof i&&(i=k.noop);var n,s;for(n in this.options)k.hasOwn(this.options,n)&&(s=this.options[n],w._set(s,s.defaultValue,e),w._createAccessor(s,e,i));this._setAll(t,e,!0)},set:function(t,e,i){return this._set(t,e,i)},setAll:function(t,e){return this._setAll(t,e)},_set:function(t,e,i,n){var s=this.options[t];if(!s)throw new Error("Invalid option: "+t);if(!s.modifiable&&!n)throw new Error("Option cannot be modified: "+t);return w._set(s,e,i)},_setAll:function(t,e,i){if(!t)return!1;var n,s=!1;for(n in t)k.hasOwn(t,n)&&this._set(n,t[n],e,i)&&(s=!0);return s}},{_createAccessor:function(t,e,i){var n={get:function(){return w._get(t,e)}};t.modifiable&&(n.set=function(n){w._set(t,n,e)&&i(n,t)}),Object.defineProperty(e,t.name,n)},_get:function(t,e){return e["_"+t.name]},_set:function(t,e,i){var n="_"+t.name,s=i[n],r=t.transform(null!=e?e:t.defaultValue);return i[n]=r,r!==s}}),M=w,b=h.extend(function(){this._services={}},{getService:function(t){var e=this._services[t];if(!e)throw new Error("Service is not being managed with name: "+t);return e},setService:function(t,e){if(this._services[t])throw new Error("Service is already managed with name: "+t);e&&(this._services[t]=e)}}),B=new M([new g("background",!0,"white"),new g("backgroundAlpha",!0,1,k.abs),new g("element"),new g("foreground",!0,"black"),new g("foregroundAlpha",!0,1,k.abs),new g("level",!0,"L",k.toUpperCase),new g("mime",!0,"image/png"),new g("padding",!0,null,k.abs),new g("size",!0,100,k.abs),new g("value",!0,"")]),y=new b,O=h.extend(function(t){B.init(t,this,this.update.bind(this));var e=B.get("element",this),i=y.getService("element"),n=e&&i.isCanvas(e)?e:i.createCanvas(),s=e&&i.isImage(e)?e:i.createImage();this._canvasRenderer=new c(this,n,!0),this._imageRenderer=new m(this,s,s===e),this.update()},{get:function(){return B.getAll(this)},set:function(t){B.setAll(t,this)&&this.update()},toDataURL:function(t){return this.canvas.toDataURL(t||this.mime)},update:function(){var t=new p({level:this.level,value:this.value});this._canvasRenderer.render(t),this._imageRenderer.render(t)}},{use:function(t){y.setService(t.getName(),t)}});Object.defineProperties(O.prototype,{canvas:{get:function(){return this._canvasRenderer.getElement()}},image:{get:function(){return this._imageRenderer.getElement()}}});var A=O,L=h.extend({getName:function(){}}).extend({createCanvas:function(){},createImage:function(){},getName:function(){return"element"},isCanvas:function(t){},isImage:function(t){}}).extend({createCanvas:function(){return document.createElement("canvas")},createImage:function(){return document.createElement("img")},isCanvas:function(t){return t instanceof HTMLCanvasElement},isImage:function(t){return t instanceof HTMLImageElement}});return A.use(new L),A}); + +//# sourceMappingURL=qrious.min.js.map \ No newline at end of file diff --git a/dist/public/sphinx-logo.png b/dist/public/sphinx-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..04c7b763bc7df48618790cdc95bb8f927a1fdb1e GIT binary patch literal 43947 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 literal 0 HcmV?d00001 diff --git a/dist/src/utils/config.js b/dist/src/utils/config.js index 60bef9d..95d747b 100644 --- a/dist/src/utils/config.js +++ b/dist/src/utils/config.js @@ -32,6 +32,7 @@ function loadConfig() { log_file: ENV.LOG_FILE || config.log_file, unlock: (ENV.unlock || config.unlock) ? true : false, lnd_pwd_path: ENV.LND_PWD_PATH || config.lnd_pwd_path, + connect_ui: ENV.CONNECT_UI || config.connect_ui, }; } exports.loadConfig = loadConfig; diff --git a/dist/src/utils/config.js.map b/dist/src/utils/config.js.map index 1eb65e0..8c84866 100644 --- a/dist/src/utils/config.js.map +++ b/dist/src/utils/config.js.map @@ -1 +1 @@ -{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":";;AAAA,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;AAC1E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;AAEvB,SAAgB,UAAU;IACxB,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;QAC5C,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB;QACpE,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;QACrD,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB;QACjE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;QACtC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;QACnC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,kBAAkB;QACvE,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc;QAC3D,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QACzC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;QAClD,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;QACtC,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc;QAC3D,oBAAoB,EAAE,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB;QAC7E,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;QAC/C,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;QAClD,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;QAC/C,GAAG,EAAE;YACH,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;YAC/E,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;YACtE,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;SACtD;QACD,uBAAuB,EAAE,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,uBAAuB;QACtF,sBAAsB,EAAE,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB;QACnF,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QACzC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QACpD,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;KACtD,CAAA;AACH,CAAC;AA7BD,gCA6BC"} \ No newline at end of file +{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":";;AAAA,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;AAC1E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;AAEvB,SAAgB,UAAU;IACxB,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;QAC5C,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB;QACpE,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;QACrD,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB;QACjE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;QACtC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;QACnC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,kBAAkB;QACvE,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc;QAC3D,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QACzC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;QAClD,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;QACtC,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc;QAC3D,oBAAoB,EAAE,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB;QAC7E,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;QAC/C,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;QAClD,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;QAC/C,GAAG,EAAE;YACH,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;YAC/E,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;YACtE,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;SACtD;QACD,uBAAuB,EAAE,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,uBAAuB;QACtF,sBAAsB,EAAE,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,sBAAsB;QACnF,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;QACzC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QACpD,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY;QACrD,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;KAChD,CAAA;AACH,CAAC;AA9BD,gCA8BC"} \ No newline at end of file diff --git a/dist/src/utils/connect.js b/dist/src/utils/connect.js new file mode 100644 index 0000000..9166704 --- /dev/null +++ b/dist/src/utils/connect.js @@ -0,0 +1,63 @@ +"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 publicIp = require("public-ip"); +const password_1 = require("../utils/password"); +const config_1 = require("./config"); +const fs = require('fs'); +const config = config_1.loadConfig(); +function getQR() { + return __awaiter(this, void 0, void 0, function* () { + let theIP; + const public_url = config.public_url; + if (public_url) + theIP = public_url; + if (!theIP) { + const ip = process.env.NODE_IP; + if (!ip) { + try { + theIP = yield publicIp.v4(); + } + catch (e) { } + } + else { + const port = config.node_http_port; + theIP = port ? `${ip}:${port}` : ip; + } + } + return Buffer.from(`ip::${theIP}::${password_1.default || ''}`).toString('base64'); + }); +} +exports.getQR = getQR; +function connect(req, res) { + return __awaiter(this, void 0, void 0, function* () { + fs.readFile("public/index.html", function (error, pgResp) { + return __awaiter(this, void 0, void 0, function* () { + if (error) { + res.writeHead(404); + res.write('Contents you are looking are Not Found'); + } + else { + console.log(pgResp, typeof pgResp); + const htmlString = Buffer.from(pgResp).toString(); + const qr = yield getQR(); + const rep = htmlString.replace(/CONNECTION_STRING/g, qr); + const final = Buffer.from(rep, 'utf8'); + res.writeHead(200, { 'Content-Type': 'text/html' }); + res.write(final); + } + res.end(); + }); + }); + }); +} +exports.connect = connect; +//# sourceMappingURL=connect.js.map \ No newline at end of file diff --git a/dist/src/utils/connect.js.map b/dist/src/utils/connect.js.map new file mode 100644 index 0000000..b7eeedb --- /dev/null +++ b/dist/src/utils/connect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/utils/connect.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAqC;AACrC,gDAAwC;AACxC,qCAAmC;AACnC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAExB,MAAM,MAAM,GAAG,mBAAU,EAAE,CAAA;AAE3B,SAAsB,KAAK;;QACzB,IAAI,KAAK,CAAA;QAET,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACpC,IAAI,UAAU;YAAE,KAAK,GAAG,UAAU,CAAA;QAElC,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAA;YAC9B,IAAI,CAAC,EAAE,EAAE;gBACP,IAAI;oBACF,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAA;iBAC5B;gBAAC,OAAO,CAAC,EAAE,GAAG;aAChB;iBAAM;gBACL,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAA;gBAClC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;aACpC;SACF;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,kBAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC1E,CAAC;CAAA;AAlBD,sBAkBC;AAED,SAAsB,OAAO,CAAC,GAAG,EAAE,GAAG;;QACpC,EAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,UAAgB,KAAK,EAAE,MAAM;;gBAC5D,IAAI,KAAK,EAAE;oBACT,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnB,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;iBACrD;qBAAM;oBACL,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,CAAA;oBAClC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;oBACjD,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAA;oBACxB,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;oBACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;oBACtC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAClB;gBACD,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC;SAAA,CAAC,CAAC;IACL,CAAC;CAAA;AAhBD,0BAgBC"} \ No newline at end of file diff --git a/dist/src/utils/setup.js b/dist/src/utils/setup.js index 6022526..2221f24 100644 --- a/dist/src/utils/setup.js +++ b/dist/src/utils/setup.js @@ -13,13 +13,10 @@ const lightning_1 = require("./lightning"); const models_1 = require("../models"); const child_process_1 = require("child_process"); const QRCode = require("qrcode"); -const publicIp = require("public-ip"); -const password_1 = require("../utils/password"); const gitinfo_1 = require("../utils/gitinfo"); const fs = require("fs"); const nodeinfo_1 = require("./nodeinfo"); -const config_1 = require("./config"); -const config = config_1.loadConfig(); +const connect_1 = require("./connect"); const USER_VERSION = 7; const setupDatabase = () => __awaiter(void 0, void 0, void 0, function* () { console.log('=> [db] starting setup...'); @@ -183,7 +180,7 @@ const runMigrations = () => __awaiter(void 0, void 0, void 0, function* () { reject(err); } else { - resolve(); + resolve(true); } }); // Forward stdout+stderr to this process @@ -208,29 +205,11 @@ function printGitInfo() { } function printQR() { return __awaiter(this, void 0, void 0, function* () { - let public_ip; - const public_url = config.public_url; - if (public_url) - public_ip = public_url; - if (!public_ip) { - const ip = process.env.NODE_IP; - if (!ip) { - try { - public_ip = yield publicIp.v4(); - } - catch (e) { } - } - else { - public_ip = ip; - } - } - if (!public_ip) { + const b64 = yield connect_1.getQR(); + if (!b64) { console.log('=> no public IP provided'); - return; + return ''; } - let theIP = public_ip; - // if(!theIP.includes(":")) theIP = public_ip+':3001' - const b64 = Buffer.from(`ip::${theIP}::${password_1.default || ''}`).toString('base64'); console.log('>>', b64); connectionStringFile(b64); const clean = yield nodeinfo_1.isClean(); diff --git a/dist/src/utils/setup.js.map b/dist/src/utils/setup.js.map index 1e12318..96ecbfa 100644 --- a/dist/src/utils/setup.js.map +++ b/dist/src/utils/setup.js.map @@ -1 +1 @@ -{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/utils/setup.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/utils/setup.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a9098435a0c7ddf6e0ad0729c6b4f9dadf64dc46 GIT binary patch literal 2239 zcmaJ@X;c&U9t|MiLjhS-7PT?RVl|me2!sTp2aSVp5EQgP1k2mMc{Fig@{cZQdWcqly>FSv2 zpin4X_Z@VWaz(4&g;36XI2=N|i@1>x3*zz<_S}G+ zP$&&6Av*vGV0uz`un5OhVQ_MhM9D^>oVLp)TwXMUpu?d^p_qz!({T}l7V@bWjvW)v zl+Yl7a7UsP@=Nq$^Ae+ZWIks5HnfwRq7)E82p26E#fW7TITiCsm!jOOt^o}C69kE- zV*XAlfa!y#!BPlqhqK4>Kq3K6BI7`NJefe;iYDMe5`ZTGpe+^;QtDh-%&qK^PZV3`1xplLK!*BsC` z9HE#G$ICW<;xL&Mcd-oNig}Pbor+Pa;Dkax1<#<9T%8$qc)BeK1R2g`dj~rgSE4Jy znL(nF9b6W7P6c(XBl}!;Yor~>~dY`%c zrE?)J$pw_j0IK2s*RU6_lnzpDzgSm!_+oxYtaQ9oX>G96>^cgi3Aodp+46xRPEd@o zzsbj*f+pLJ!HN9P^J@pBzQ%Qi21G-;#xh+kqXW)FQ0)W=nhm9Z+XUe!ZeO*zq&;(^ z%x0T>V}lFJ1)cv?Lkr_lj?HfL=)N=2np9dav@hZvYhZBmGd_VTd$)aIcz$8QvF7y$ z0J1+qrZpyP88)qJ2xWHmZmh08=;6Y_B=|gQ+xRF1F3!T!L8vTR}+h ztjY#Dtb?0vgUfZnvGOP`RSN!(2!QeolZ&=N@ zMP3$W*LqEG!Cm)Fe!MJLe!20@p=zShO=jS-;=BVE#Clf);pNFQ@(~beW;4_p9JG3# zAGvFiS>B;*mSQ1`rFndoiB$BoV2=TZd%0zrf9fHW>!*yo|3Z4 zbJLBSH(T{&-?pH9H~8>e^omI-k@Pf$(`SB(?%OGlvn1L4=S z4q0c77Zhq_*%*{Ae_s(qic5-lyw9W|=w(z0+O+VuvWkB}e?4PgXrJK|?Hd)qokuUv zwoKd$oGF!N6$87`>#kIE=h#$bjmmDsSVgQkq@90%S$gH{hy4#+yVg`EL|Xe-ERUKG z-mLC>{mIB9eDdj^x;WjP9PON)U7wd07?WReJ0_vx>o>BLxIu)=y{q0!N$rZ-l2TB*N z{O%D2=3I${Elf`8jd{BEbhsiu)BSCBVa?kzexBb_Dq>!T_Fyw73eP1%w_Gs! zcGx`Y^ZNHT8L#4`O|LN2Q?o1RyyNwHaMChvY?mfwoZn*!ubltbas0?toyS@%Q+|_t z){YU}a+R(=T3-eRh>6y}D4y0DJ5sWz?D51y#kYA~hCso`i}(U|<-{G^`{ott&tD4u zTyMTZ|45=*%c$jr_HK`)WSxs8KH9$TcleMcH*+;timWobITw5q!&j@T0UD)Wv5QQI zU;n0+hq5yLNpvukc7lqLoE>`g%iMfe7w6uKyy^XK`-;ws8u!;@!^S(Thadb*dk0+W zyE_?NH0f}(m{8^9*BuzFr#G_eVYB>^g6u1Q!L5L+8pX*Wu;YF`^*?r(Yh?<^g literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..bbc59a5 --- /dev/null +++ b/public/index.html @@ -0,0 +1,89 @@ + + + + + + + + + + logo + +
+ +
+ +

+ Scan the QR or copy the connection string into your Sphinx app +

+ +
+    CONNECTION_STRING
+  
+ + + + + + \ No newline at end of file diff --git a/public/js/qrious.js b/public/js/qrious.js new file mode 100644 index 0000000..5735ea6 --- /dev/null +++ b/public/js/qrious.js @@ -0,0 +1,6 @@ +/*! QRious v4.0.2 | (C) 2017 Alasdair Mercer | GPL v3 License +Based on jsqrencode | (C) 2010 tz@execpc.com | GPL v3 License +*/ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.QRious=e()}(this,function(){"use strict";function t(t,e){var n;return"function"==typeof Object.create?n=Object.create(t):(s.prototype=t,n=new s,s.prototype=null),e&&i(!0,n,e),n}function e(e,n,s,r){var o=this;return"string"!=typeof e&&(r=s,s=n,n=e,e=null),"function"!=typeof n&&(r=s,s=n,n=function(){return o.apply(this,arguments)}),i(!1,n,o,r),n.prototype=t(o.prototype,s),n.prototype.constructor=n,n.class_=e||o.class_,n.super_=o,n}function i(t,e,i){for(var n,s,a=0,h=(i=o.call(arguments,2)).length;a>1&1,n=0;n0;e--)n[e]=n[e]?n[e-1]^_.EXPONENT[v._modN(_.LOG[n[e]]+t)]:n[e-1];n[0]=_.EXPONENT[v._modN(_.LOG[n[0]]+t)]}for(t=0;t<=i;t++)n[t]=_.LOG[n[t]]},_checkBadness:function(){var t,e,i,n,s,r=0,o=this._badness,a=this.buffer,h=this.width;for(s=0;sh*h;)u-=h*h,c++;for(r+=c*v.N4,n=0;n=o-2&&(t=o-2,s>9&&t--);var a=t;if(s>9){for(r[a+2]=0,r[a+3]=0;a--;)e=r[a],r[a+3]|=255&e<<4,r[a+2]=e>>4;r[2]|=255&t<<4,r[1]=t>>4,r[0]=64|t>>12}else{for(r[a+1]=0,r[a+2]=0;a--;)e=r[a],r[a+2]|=255&e<<4,r[a+1]=e>>4;r[1]|=255&t<<4,r[0]=64|t>>4}for(a=t+3-(s<10);a=5&&(i+=v.N1+n[e]-5);for(e=3;et||3*n[e-3]>=4*n[e]||3*n[e+3]>=4*n[e])&&(i+=v.N3);return i},_finish:function(){this._stringBuffer=this.buffer.slice();var t,e,i=0,n=3e4;for(e=0;e<8&&(this._applyMask(e),(t=this._checkBadness())>=1)1&n&&(s[r-1-e+8*r]=1,e<6?s[8+r*e]=1:s[8+r*(e+1)]=1);for(e=0;e<7;e++,n>>=1)1&n&&(s[8+r*(r-7+e)]=1,e?s[6-e+8*r]=1:s[7+8*r]=1)},_interleaveBlocks:function(){var t,e,i=this._dataBlock,n=this._ecc,s=this._eccBlock,r=0,o=this._calculateMaxLength(),a=this._neccBlock1,h=this._neccBlock2,f=this._stringBuffer;for(t=0;t1)for(t=u.BLOCK[n],i=s-7;;){for(e=s-7;e>t-3&&(this._addAlignment(e,i),!(e6)for(t=d.BLOCK[r-7],e=17,i=0;i<6;i++)for(n=0;n<3;n++,e--)1&(e>11?r>>e-12:t>>e)?(s[5-i+o*(2-n+o-11)]=1,s[2-n+o-11+o*(5-i)]=1):(this._setMask(5-i,2-n+o-11),this._setMask(2-n+o-11,5-i))},_isMasked:function(t,e){var i=v._getMaskBit(t,e);return 1===this._mask[i]},_pack:function(){var t,e,i,n=1,s=1,r=this.width,o=r-1,a=r-1,h=(this._dataBlock+this._eccBlock)*(this._neccBlock1+this._neccBlock2)+this._neccBlock2;for(e=0;ee&&(i=t,t=e,e=i),i=e,i+=e*e,i>>=1,i+=t},_modN:function(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t},N1:3,N2:3,N3:40,N4:10}),p=v,m=f.extend({draw:function(){this.element.src=this.qrious.toDataURL()},reset:function(){this.element.src=""},resize:function(){var t=this.element;t.width=t.height=this.qrious.size}}),g=h.extend(function(t,e,i,n){this.name=t,this.modifiable=Boolean(e),this.defaultValue=i,this._valueTransformer=n},{transform:function(t){var e=this._valueTransformer;return"function"==typeof e?e(t,this):t}}),k=h.extend(null,{abs:function(t){return null!=t?Math.abs(t):null},hasOwn:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},noop:function(){},toUpperCase:function(t){return null!=t?t.toUpperCase():null}}),w=h.extend(function(t){this.options={},t.forEach(function(t){this.options[t.name]=t},this)},{exists:function(t){return null!=this.options[t]},get:function(t,e){return w._get(this.options[t],e)},getAll:function(t){var e,i=this.options,n={};for(e in i)k.hasOwn(i,e)&&(n[e]=w._get(i[e],t));return n},init:function(t,e,i){"function"!=typeof i&&(i=k.noop);var n,s;for(n in this.options)k.hasOwn(this.options,n)&&(s=this.options[n],w._set(s,s.defaultValue,e),w._createAccessor(s,e,i));this._setAll(t,e,!0)},set:function(t,e,i){return this._set(t,e,i)},setAll:function(t,e){return this._setAll(t,e)},_set:function(t,e,i,n){var s=this.options[t];if(!s)throw new Error("Invalid option: "+t);if(!s.modifiable&&!n)throw new Error("Option cannot be modified: "+t);return w._set(s,e,i)},_setAll:function(t,e,i){if(!t)return!1;var n,s=!1;for(n in t)k.hasOwn(t,n)&&this._set(n,t[n],e,i)&&(s=!0);return s}},{_createAccessor:function(t,e,i){var n={get:function(){return w._get(t,e)}};t.modifiable&&(n.set=function(n){w._set(t,n,e)&&i(n,t)}),Object.defineProperty(e,t.name,n)},_get:function(t,e){return e["_"+t.name]},_set:function(t,e,i){var n="_"+t.name,s=i[n],r=t.transform(null!=e?e:t.defaultValue);return i[n]=r,r!==s}}),M=w,b=h.extend(function(){this._services={}},{getService:function(t){var e=this._services[t];if(!e)throw new Error("Service is not being managed with name: "+t);return e},setService:function(t,e){if(this._services[t])throw new Error("Service is already managed with name: "+t);e&&(this._services[t]=e)}}),B=new M([new g("background",!0,"white"),new g("backgroundAlpha",!0,1,k.abs),new g("element"),new g("foreground",!0,"black"),new g("foregroundAlpha",!0,1,k.abs),new g("level",!0,"L",k.toUpperCase),new g("mime",!0,"image/png"),new g("padding",!0,null,k.abs),new g("size",!0,100,k.abs),new g("value",!0,"")]),y=new b,O=h.extend(function(t){B.init(t,this,this.update.bind(this));var e=B.get("element",this),i=y.getService("element"),n=e&&i.isCanvas(e)?e:i.createCanvas(),s=e&&i.isImage(e)?e:i.createImage();this._canvasRenderer=new c(this,n,!0),this._imageRenderer=new m(this,s,s===e),this.update()},{get:function(){return B.getAll(this)},set:function(t){B.setAll(t,this)&&this.update()},toDataURL:function(t){return this.canvas.toDataURL(t||this.mime)},update:function(){var t=new p({level:this.level,value:this.value});this._canvasRenderer.render(t),this._imageRenderer.render(t)}},{use:function(t){y.setService(t.getName(),t)}});Object.defineProperties(O.prototype,{canvas:{get:function(){return this._canvasRenderer.getElement()}},image:{get:function(){return this._imageRenderer.getElement()}}});var A=O,L=h.extend({getName:function(){}}).extend({createCanvas:function(){},createImage:function(){},getName:function(){return"element"},isCanvas:function(t){},isImage:function(t){}}).extend({createCanvas:function(){return document.createElement("canvas")},createImage:function(){return document.createElement("img")},isCanvas:function(t){return t instanceof HTMLCanvasElement},isImage:function(t){return t instanceof HTMLImageElement}});return A.use(new L),A}); + +//# sourceMappingURL=qrious.min.js.map \ No newline at end of file diff --git a/public/sphinx-logo.png b/public/sphinx-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..04c7b763bc7df48618790cdc95bb8f927a1fdb1e GIT binary patch literal 43947 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 literal 0 HcmV?d00001 diff --git a/src/utils/config.ts b/src/utils/config.ts index c21a1cc..a844c2f 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -32,5 +32,6 @@ export function loadConfig() { log_file: ENV.LOG_FILE || config.log_file, unlock: (ENV.unlock || config.unlock) ? true : false, lnd_pwd_path: ENV.LND_PWD_PATH || config.lnd_pwd_path, + connect_ui: ENV.CONNECT_UI || config.connect_ui, } } diff --git a/src/utils/connect.ts b/src/utils/connect.ts new file mode 100644 index 0000000..a4e7d4b --- /dev/null +++ b/src/utils/connect.ts @@ -0,0 +1,44 @@ +import * as publicIp from 'public-ip' +import password from '../utils/password' +import {loadConfig} from './config' +const fs = require('fs') + +const config = loadConfig() + +export async function getQR():Promise { + let theIP + + const public_url = config.public_url + if (public_url) theIP = public_url + + if (!theIP) { + const ip = process.env.NODE_IP + if (!ip) { + try { + theIP = await publicIp.v4() + } catch (e) { } + } else { + const port = config.node_http_port + theIP = port ? `${ip}:${port}` : ip + } + } + return Buffer.from(`ip::${theIP}::${password || ''}`).toString('base64') +} + +export async function connect(req, res) { + fs.readFile("public/index.html", async function (error, pgResp) { + if (error) { + res.writeHead(404); + res.write('Contents you are looking are Not Found'); + } else { + console.log(pgResp, typeof pgResp) + const htmlString = Buffer.from(pgResp).toString() + const qr = await getQR() + const rep = htmlString.replace(/CONNECTION_STRING/g, qr) + const final = Buffer.from(rep, 'utf8') + res.writeHead(200, { 'Content-Type': 'text/html' }); + res.write(final); + } + res.end(); + }); +} \ No newline at end of file diff --git a/src/utils/setup.ts b/src/utils/setup.ts index 680625a..524b354 100644 --- a/src/utils/setup.ts +++ b/src/utils/setup.ts @@ -2,14 +2,10 @@ import { loadLightning } from './lightning' import { sequelize, models } from '../models' import { exec } from 'child_process' import * as QRCode from 'qrcode' -import * as publicIp from 'public-ip' -import password from '../utils/password' import { checkTag, checkCommitHash } from '../utils/gitinfo' import * as fs from 'fs'; import { isClean } from './nodeinfo' -import {loadConfig} from './config' - -const config = loadConfig() +import { getQR } from './connect' const USER_VERSION = 7 @@ -185,7 +181,7 @@ const runMigrations = async () => { if (err) { reject(err); } else { - resolve(); + resolve(true); } } ); @@ -211,29 +207,12 @@ async function printGitInfo() { async function printQR() { - let public_ip - - const public_url = config.public_url - if (public_url) public_ip = public_url - - if (!public_ip) { - const ip = process.env.NODE_IP - if (!ip) { - try { - public_ip = await publicIp.v4() - } catch (e) { } - } else { - public_ip = ip - } - } - if (!public_ip) { + const b64 = await getQR() + if (!b64) { console.log('=> no public IP provided') - return + return '' } - let theIP = public_ip - // if(!theIP.includes(":")) theIP = public_ip+':3001' - const b64 = Buffer.from(`ip::${theIP}::${password || ''}`).toString('base64') console.log('>>', b64) connectionStringFile(b64)