This commit is contained in:
hatim boufnichel 2021-06-12 16:49:42 +02:00
parent cc3a605f42
commit e090cfc5f7
4 changed files with 89 additions and 71 deletions

View file

@ -41,6 +41,7 @@
"graphviz": "0.0.8",
"grpc": "1.24.4",
"gun": "git://github.com/amark/gun#97aa976c97e6219a9f93095d32c220dcd371ca62",
"hybrid-relay-client": "git://github.com/shocknet/hybridRelayClient#43478046e160f2b85a18cea4400c3076389dda64",
"husky": "^4.2.5",
"jsonfile": "^4.0.0",
"jsonwebtoken": "^8.3.0",

View file

@ -3,7 +3,7 @@ const setAccessControlHeaders = (req, res) => {
res.header("Access-Control-Allow-Methods", "OPTIONS,POST,GET,PUT,DELETE")
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization, public-key-for-decryption, encryption-device-id, public-key-for-decryption"
"Origin, X-Requested-With, Content-Type, Accept, Authorization, public-key-for-decryption, encryption-device-id, public-key-for-decryption,x-shock-hybrid-relay-id-x"
);
};

View file

@ -17,8 +17,6 @@ const server = program => {
const Path = require('path')
const { Logger: CommonLogger } = require('shock-common')
const binaryParser = require('socket.io-msgpack-parser')
const { fork } = require('child_process')
const EventEmitter = require('events')
const ECC = require('../utils/ECC')
const LightningServices = require('../utils/lightningServices')
@ -30,6 +28,7 @@ const server = program => {
const session = require('express-session')
const methodOverride = require('method-override')
const qrcode = require('qrcode-terminal')
const relayClient = require('hybrid-relay-client/build')
const {
unprotectedRoutes,
sensitiveRoutes,
@ -59,31 +58,6 @@ const server = program => {
require('../utils/server-utils')(module)
logger.info('Mainnet Mode:', !!program.mainnet)
const tunnelTimeout = 5000
let latestAliveTunnel = 0
let tunnelHealthInterval = null
const tunnelHealthManager = new EventEmitter()
tunnelHealthManager.on('fork', ({ params, cb }) => {
if (latestAliveTunnel !== 0 && latestAliveTunnel < tunnelTimeout) {
return
}
clearInterval(tunnelHealthInterval)
tunnelHealthInterval = setInterval(() => {
if (Date.now() - latestAliveTunnel > tunnelTimeout) {
console.log('oh no! tunnel is dead, will restart it now')
tunnelHealthManager.emit('fork', { params, cb })
}
}, 2000)
const forked = fork('src/tunnel.js')
forked.on('message', msg => {
//console.log('Message from child', msg);
if (msg && msg.type === 'info') {
cb(msg.tunnel)
}
latestAliveTunnel = Date.now()
})
forked.send(params)
})
if (process.env.SHOCK_ENCRYPTION_ECC === 'false') {
logger.error('Encryption Mode: false')
@ -426,58 +400,40 @@ const server = program => {
app.use(modifyResponseBody)
}
serverInstance.listen(serverPort, serverHost)
if (program.tunnel) {
// setup localtunnel ==========
const [tunnelToken, tunnelSubdomain, tunnelUrl] = await Promise.all([
Storage.getItem('tunnel/token'),
Storage.getItem('tunnel/subdomain'),
Storage.getItem('tunnel/url')
const [relayToken, relayId, relayUrl] = await Promise.all([
Storage.getItem('relay/token'),
Storage.getItem('relay/id'),
Storage.getItem('relay/url')
])
const tunnelOpts = {
port: serverPort,
host: tunnelHost,
print_requests: true
const opts = {
relayId,
relayToken,
address: tunnelHost,
port: serverPort
}
if (tunnelToken && tunnelSubdomain) {
tunnelOpts.tunnelToken = tunnelToken
tunnelOpts.subdomain = tunnelSubdomain
logger.info('Recreating tunnel... with subdomain: ' + tunnelSubdomain)
} else {
logger.info('Creating new tunnel...This will require a pair ')
}
tunnelHealthManager.emit('fork', {
params: tunnelOpts,
cb: async tunnel => {
if (tunnelSubdomain !== tunnel.clientId && !tunnel.token) {
logger.error(
'An error occurred while opening tunnel, will try again in 2 sec with a new one'
)
return
}
logger.info('Tunnel created! connect to: ' + tunnel.url)
console.log(opts)
relayClient.default(opts, async (connected, params) => {
if (connected) {
await Promise.all([
Storage.setItem('relay/token', params.relayToken),
Storage.setItem('relay/id', params.relayId),
Storage.setItem('relay/url', params.address)
])
const dataToQr = JSON.stringify({
internalIP: tunnel.url,
internalIP: `${params.relayId}@${params.address}`,
walletPort: 443,
externalIP: tunnel.url
externalIP: `${params.relayId}@${params.address}`
})
qrcode.generate(dataToQr, { small: true })
if (tunnel.token) {
console.log('writing to storage...')
await Promise.all([
Storage.setItem('tunnel/token', tunnel.token),
Storage.setItem('tunnel/subdomain', tunnel.clientId),
Storage.setItem('tunnel/url', tunnel.url)
])
}
console.log(`connect to ${params.relayId}@${params.address}`)
} else {
logger.error('!! Relay did not connect to server !!')
}
})
}
serverInstance.listen(serverPort, serverHost)
logger.info('App listening on ' + serverHost + ' port ' + serverPort)
module.server = serverInstance
} catch (err) {
logger.error({ exception: err, message: err.message, code: err.code })

View file

@ -1361,6 +1361,11 @@ babylon@^6.18.0:
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
backo2@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@ -2463,7 +2468,22 @@ end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
engine.io-parser@~4.0.0:
engine.io-client@~5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.1.1.tgz#f5c3aaaef1bdc9443aac6ffde48b3b2fb2dc56fc"
integrity sha512-jPFpw2HLL0lhZ2KY0BpZhIJdleQcUO9W1xkIpo0h3d6s+5D6+EV/xgQw9qWOmymszv2WXef/6KUUehyxEKomlQ==
dependencies:
base64-arraybuffer "0.1.4"
component-emitter "~1.3.0"
debug "~4.3.1"
engine.io-parser "~4.0.1"
has-cors "1.1.0"
parseqs "0.0.6"
parseuri "0.0.6"
ws "~7.4.2"
yeast "0.1.2"
engine.io-parser@~4.0.0, engine.io-parser@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e"
integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==
@ -3410,6 +3430,11 @@ has-ansi@^2.0.0:
dependencies:
ansi-regex "^2.0.0"
has-cors@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@ -3581,6 +3606,14 @@ husky@^4.2.5:
slash "^3.0.0"
which-pm-runs "^1.0.0"
"hybrid-relay-client@git://github.com/shocknet/hybridRelayClient#43478046e160f2b85a18cea4400c3076389dda64":
version "1.0.0"
resolved "git://github.com/shocknet/hybridRelayClient#43478046e160f2b85a18cea4400c3076389dda64"
dependencies:
node-fetch "^2.6.1"
socket.io-client "^4.1.2"
socket.io-msgpack-parser "^3.0.1"
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -5623,6 +5656,16 @@ parse5@4.0.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
parseqs@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5"
integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==
parseuri@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a"
integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==
parseurl@~1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@ -6579,6 +6622,19 @@ socket.io-adapter@~2.2.0:
resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz#43af9157c4609e74b8addc6867873ac7eb48fda2"
integrity sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg==
socket.io-client@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.1.2.tgz#95ad7113318ea01fba0860237b96d71e1b1fd2eb"
integrity sha512-RDpWJP4DQT1XeexmeDyDkm0vrFc0+bUsHDKiVGaNISJvJonhQQOMqV9Vwfg0ZpPJ27LCdan7iqTI92FRSOkFWQ==
dependencies:
"@types/component-emitter" "^1.2.10"
backo2 "~1.0.2"
component-emitter "~1.3.0"
debug "~4.3.1"
engine.io-client "~5.1.1"
parseuri "0.0.6"
socket.io-parser "~4.0.4"
socket.io-msgpack-parser@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/socket.io-msgpack-parser/-/socket.io-msgpack-parser-3.0.1.tgz#48ea37b51f1fa1b09253bc97073be9204664f3c6"
@ -6587,7 +6643,7 @@ socket.io-msgpack-parser@^3.0.1:
component-emitter "~1.3.0"
notepack.io "~2.2.0"
socket.io-parser@~4.0.3:
socket.io-parser@~4.0.3, socket.io-parser@~4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0"
integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==
@ -7707,6 +7763,11 @@ yargs@^3.10.0:
window-size "^0.1.4"
y18n "^3.2.0"
yeast@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"