Merge branch 'master' into bug/deprecate-rsa-encryption
This commit is contained in:
commit
c35ffef345
20 changed files with 435 additions and 135 deletions
|
|
@ -19,4 +19,4 @@ TORRENT_SEED_TOKEN=jibberish
|
||||||
# "default" or "hosting"
|
# "default" or "hosting"
|
||||||
DEPLOYMENT_TYPE=hosting
|
DEPLOYMENT_TYPE=hosting
|
||||||
# allow to create a user with unlocked lnd
|
# allow to create a user with unlocked lnd
|
||||||
ALLOW_UNLOCKED_LND="true"
|
ALLOW_UNLOCKED_LND=false
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
*.ts
|
*.ts
|
||||||
|
/public/*.min.js
|
||||||
14
.github/workflows/main.yml
vendored
14
.github/workflows/main.yml
vendored
|
|
@ -19,7 +19,19 @@ jobs:
|
||||||
repo: ['shocknet/Wizard']
|
repo: ['shocknet/Wizard']
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Repository Dispatch
|
- name: 🛎️ Checkout
|
||||||
|
uses: actions/checkout@v2.3.1
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
ref: ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: ⚙️ Install Dependencies
|
||||||
|
run: yarn install
|
||||||
|
|
||||||
|
- name: 📝 Run Tests
|
||||||
|
run: yarn test
|
||||||
|
|
||||||
|
- name: 📯 Repository Dispatch
|
||||||
uses: peter-evans/repository-dispatch@v1
|
uses: peter-evans/repository-dispatch@v1
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.REPO_ACCESS_TOKEN }}
|
token: ${{ secrets.REPO_ACCESS_TOKEN }}
|
||||||
|
|
|
||||||
17
composers/windows-2network-alice/docker-compose.yml
Normal file
17
composers/windows-2network-alice/docker-compose.yml
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
version: "3.8"
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
external: true
|
||||||
|
name: 2_default
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
image: shockwallet/api:latest
|
||||||
|
command: -c -h 0.0.0.0 -l polar-n2-alice:10009 -m /root/.lnd/data/chain/bitcoin/regtest/admin.macaroon -d /root/.lnd/tls.cert
|
||||||
|
restart: on-failure
|
||||||
|
stop_grace_period: 1m
|
||||||
|
ports:
|
||||||
|
- 9835:9835
|
||||||
|
volumes:
|
||||||
|
- C:\Users\boufn\.polar\networks\2\volumes\lnd\alice:/root/.lnd
|
||||||
|
environment:
|
||||||
|
TRUSTED_KEYS: 'false'
|
||||||
|
|
@ -25,6 +25,10 @@
|
||||||
axe: false
|
axe: false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
setInterval(() => {
|
||||||
|
console.log('peers', Object.keys(gun.back('opt').peers))
|
||||||
|
},5000)
|
||||||
|
|
||||||
user = gun.user()
|
user = gun.user()
|
||||||
|
|
||||||
node = gun.get('foo').get('bar')
|
node = gun.get('foo').get('bar')
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "shockapi",
|
"name": "shockapi",
|
||||||
"version": "2021.9.8",
|
"version": "2021.9.19",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "src/server.js",
|
"main": "src/server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
||||||
78
public/localHomepage.html
Normal file
78
public/localHomepage.html
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Document</title>
|
||||||
|
<script src="/qrCodeGenerator"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p id="errorContainer"></p>
|
||||||
|
<div>
|
||||||
|
<h3>Tunnel</h3>
|
||||||
|
<p id="tunnelState"></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>Access Secret</h3>
|
||||||
|
<p id="accessSecretState"></p>
|
||||||
|
</div>
|
||||||
|
<div id="qrcode"></div>
|
||||||
|
<script>
|
||||||
|
fetch(`${window.location.origin}/api/accessInfo`)
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(j => {
|
||||||
|
console.log(j)
|
||||||
|
if(j.field){
|
||||||
|
document.querySelector('#errorContainer').innerHTML ='there was an error, unable to load access information, reason: '+ j.message
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const tunnelUrl = handleTunnelInfo(j)
|
||||||
|
const accessCode = handleAccessCode(j)
|
||||||
|
|
||||||
|
const baseUrl = tunnelUrl ? tunnelUrl : window.location.host
|
||||||
|
const finalUrl = accessCode ? `${accessCode}#${baseUrl}` : baseUrl
|
||||||
|
new QRCode(document.getElementById("qrcode"), finalUrl);
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
console.log(e.message)
|
||||||
|
})
|
||||||
|
|
||||||
|
const handleTunnelInfo = (res) => {
|
||||||
|
|
||||||
|
|
||||||
|
const tunnelState = document.querySelector("#tunnelState")
|
||||||
|
if(res.tunnelDisabled){
|
||||||
|
tunnelState.innerHTML = 'The tunnel service is disabled'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(res.relayNotFound) {
|
||||||
|
tunnelState.innerHTML = 'The tunnel service seems broken'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
tunnelState.innerHTML = `Tunnel URL: ${res.relayId}@${res.relayUrl}`
|
||||||
|
return `${res.relayId}@${res.relayUrl}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleAccessCode = (res) => {
|
||||||
|
const accessSecretState = document.querySelector("#accessSecretState")
|
||||||
|
if(res.accessSecretDisabled){
|
||||||
|
accessSecretState.innerHTML = 'The access secret is disabled'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(res.accessCodeNotFound){
|
||||||
|
accessSecretState.innerHTML = 'The access secret seems broken'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(res.accessCodeUsed){
|
||||||
|
accessSecretState.innerHTML = 'The access secret was already used'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
accessSecretState.innerHTML = `Access Secret: ${res.accessCode}`
|
||||||
|
return res.accessCode
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1
public/qrcode.min.js
vendored
Normal file
1
public/qrcode.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -14,7 +14,6 @@ require('gun/lib/open')
|
||||||
require('gun/lib/load')
|
require('gun/lib/load')
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const { encryptedEmit, encryptedOn } = require('../../../utils/ECC/socket')
|
const { encryptedEmit, encryptedOn } = require('../../../utils/ECC/socket')
|
||||||
const Key = require('../contact-api/key')
|
|
||||||
|
|
||||||
/** @type {import('../contact-api/SimpleGUN').ISEA} */
|
/** @type {import('../contact-api/SimpleGUN').ISEA} */
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
@ -328,29 +327,6 @@ const authenticate = async (alias, pass, __user) => {
|
||||||
// clock skew
|
// clock skew
|
||||||
await new Promise(res => setTimeout(res, 2000))
|
await new Promise(res => setTimeout(res, 2000))
|
||||||
|
|
||||||
await /** @type {Promise<void>} */ (new Promise((res, rej) => {
|
|
||||||
_user.get(Key.FOLLOWS).put(
|
|
||||||
{
|
|
||||||
unused: null
|
|
||||||
},
|
|
||||||
ack => {
|
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
|
||||||
rej(
|
|
||||||
new Error(
|
|
||||||
`Error initializing follows: ${JSON.stringify(
|
|
||||||
ack.err,
|
|
||||||
null,
|
|
||||||
4
|
|
||||||
)}`
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
res()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}))
|
|
||||||
|
|
||||||
return ack.sea.pub
|
return ack.sea.pub
|
||||||
} else {
|
} else {
|
||||||
throw new Error('Unknown error.')
|
throw new Error('Unknown error.')
|
||||||
|
|
@ -367,29 +343,6 @@ const authenticate = async (alias, pass, __user) => {
|
||||||
// clock skew
|
// clock skew
|
||||||
await new Promise(res => setTimeout(res, 2000))
|
await new Promise(res => setTimeout(res, 2000))
|
||||||
|
|
||||||
await /** @type {Promise<void>} */ (new Promise((res, rej) => {
|
|
||||||
_user.get(Key.FOLLOWS).put(
|
|
||||||
{
|
|
||||||
unused: null
|
|
||||||
},
|
|
||||||
ack => {
|
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
|
||||||
rej(
|
|
||||||
new Error(
|
|
||||||
`Error initializing follows: ${JSON.stringify(
|
|
||||||
ack.err,
|
|
||||||
null,
|
|
||||||
4
|
|
||||||
)}`
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
res()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}))
|
|
||||||
|
|
||||||
// move this to a subscription; implement off() ? todo
|
// move this to a subscription; implement off() ? todo
|
||||||
API.Jobs.onOrders(_user, gun, mySEA)
|
API.Jobs.onOrders(_user, gun, mySEA)
|
||||||
API.Jobs.lastSeenNode(_user)
|
API.Jobs.lastSeenNode(_user)
|
||||||
|
|
@ -424,29 +377,6 @@ const authenticate = async (alias, pass, __user) => {
|
||||||
|
|
||||||
await new Promise(res => setTimeout(res, 5000))
|
await new Promise(res => setTimeout(res, 5000))
|
||||||
|
|
||||||
await /** @type {Promise<void>} */ (new Promise((res, rej) => {
|
|
||||||
_user.get(Key.FOLLOWS).put(
|
|
||||||
{
|
|
||||||
unused: null
|
|
||||||
},
|
|
||||||
ack => {
|
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
|
||||||
rej(
|
|
||||||
new Error(
|
|
||||||
`Error initializing follows: ${JSON.stringify(
|
|
||||||
ack.err,
|
|
||||||
null,
|
|
||||||
4
|
|
||||||
)}`
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
res()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}))
|
|
||||||
|
|
||||||
API.Jobs.onOrders(_user, gun, mySEA)
|
API.Jobs.onOrders(_user, gun, mySEA)
|
||||||
API.Jobs.lastSeenNode(_user)
|
API.Jobs.lastSeenNode(_user)
|
||||||
|
|
||||||
|
|
@ -588,17 +518,7 @@ const register = async (alias, pass) => {
|
||||||
// don't work
|
// don't work
|
||||||
instantiateGun()
|
instantiateGun()
|
||||||
|
|
||||||
return authenticate(alias, pass).then(async pub => {
|
return authenticate(alias, pass)
|
||||||
await API.Actions.setDisplayName('anon' + pub.slice(0, 8), user)
|
|
||||||
await API.Actions.generateHandshakeAddress()
|
|
||||||
await API.Actions.generateOrderAddress(user)
|
|
||||||
await API.Actions.initWall()
|
|
||||||
await API.Actions.setBio('A little bit about myself.', user)
|
|
||||||
await API.Actions.setDefaultSeedProvider('', user)
|
|
||||||
await API.Actions.setSeedServiceData('', user)
|
|
||||||
await API.Actions.setCurrentStreamInfo('', user)
|
|
||||||
return pub
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,11 @@ const authenticate = (user, pass, userNode) =>
|
||||||
}
|
}
|
||||||
|
|
||||||
userNode.auth(user, pass, ack => {
|
userNode.auth(user, pass, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else if (!userNode.is) {
|
} else if (!userNode.is) {
|
||||||
reject(new Error('authentication failed'))
|
reject(new Error('authentication failed'))
|
||||||
|
|
@ -81,7 +85,11 @@ const blacklist = (publicKey, user) =>
|
||||||
}
|
}
|
||||||
|
|
||||||
user.get(Key.BLACKLIST).set(publicKey, ack => {
|
user.get(Key.BLACKLIST).set(publicKey, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -100,7 +108,11 @@ const generateHandshakeAddress = async () => {
|
||||||
|
|
||||||
await /** @type {Promise<void>} */ (new Promise((res, rej) => {
|
await /** @type {Promise<void>} */ (new Promise((res, rej) => {
|
||||||
user.get(Key.CURRENT_HANDSHAKE_ADDRESS).put(address, ack => {
|
user.get(Key.CURRENT_HANDSHAKE_ADDRESS).put(address, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -113,7 +125,11 @@ const generateHandshakeAddress = async () => {
|
||||||
.get(Key.HANDSHAKE_NODES)
|
.get(Key.HANDSHAKE_NODES)
|
||||||
.get(address)
|
.get(address)
|
||||||
.put({ unused: 0 }, ack => {
|
.put({ unused: 0 }, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -150,7 +166,11 @@ const setAvatar = (avatar, user) =>
|
||||||
.get(Key.PROFILE_BINARY)
|
.get(Key.PROFILE_BINARY)
|
||||||
.get(Key.AVATAR)
|
.get(Key.AVATAR)
|
||||||
.put(avatar, ack => {
|
.put(avatar, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -183,7 +203,11 @@ const setDisplayName = (displayName, user) =>
|
||||||
.get(Key.PROFILE)
|
.get(Key.PROFILE)
|
||||||
.get(Key.DISPLAY_NAME)
|
.get(Key.DISPLAY_NAME)
|
||||||
.put(displayName, ack => {
|
.put(displayName, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -210,7 +234,11 @@ const setDefaultSeedProvider = (encryptedSeedProvider, user) =>
|
||||||
user
|
user
|
||||||
.get('preferencesSeedServiceProvider')
|
.get('preferencesSeedServiceProvider')
|
||||||
.put(encryptedSeedProvider, ack => {
|
.put(encryptedSeedProvider, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -235,7 +263,11 @@ const setSeedServiceData = (encryptedSeedServiceData, user) =>
|
||||||
user
|
user
|
||||||
.get('preferencesSeedServiceData')
|
.get('preferencesSeedServiceData')
|
||||||
.put(encryptedSeedServiceData, ack => {
|
.put(encryptedSeedServiceData, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -258,7 +290,11 @@ const setCurrentStreamInfo = (encryptedCurrentStreamInfo, user) =>
|
||||||
throw new TypeError()
|
throw new TypeError()
|
||||||
}
|
}
|
||||||
user.get('currentStreamInfo').put(encryptedCurrentStreamInfo, ack => {
|
user.get('currentStreamInfo').put(encryptedCurrentStreamInfo, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -368,7 +404,11 @@ const sendSpontaneousPayment = async (
|
||||||
.get(currOrderAddress)
|
.get(currOrderAddress)
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
.set(order, ack => {
|
.set(order, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(
|
rej(
|
||||||
new Error(
|
new Error(
|
||||||
`Error writing order to order node: ${currOrderAddress} for pub: ${to}: ${ack.err}`
|
`Error writing order to order node: ${currOrderAddress} for pub: ${to}: ${ack.err}`
|
||||||
|
|
@ -589,7 +629,11 @@ const generateOrderAddress = user =>
|
||||||
const address = uuidv1()
|
const address = uuidv1()
|
||||||
|
|
||||||
user.get(Key.CURRENT_ORDER_ADDRESS).put(address, ack => {
|
user.get(Key.CURRENT_ORDER_ADDRESS).put(address, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -622,7 +666,11 @@ const setBio = (bio, user) =>
|
||||||
}
|
}
|
||||||
|
|
||||||
user.get(Key.BIO).put(bio, ack => {
|
user.get(Key.BIO).put(bio, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -635,7 +683,11 @@ const setBio = (bio, user) =>
|
||||||
.get(Key.PROFILE)
|
.get(Key.PROFILE)
|
||||||
.get(Key.BIO)
|
.get(Key.BIO)
|
||||||
.put(bio, ack => {
|
.put(bio, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
reject(new Error(ack.err))
|
reject(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
resolve()
|
resolve()
|
||||||
|
|
@ -664,7 +716,11 @@ const saveSeedBackup = async (mnemonicPhrase, user, SEA) => {
|
||||||
|
|
||||||
return new Promise((res, rej) => {
|
return new Promise((res, rej) => {
|
||||||
user.get(Key.SEED_BACKUP).put(encryptedSeed, ack => {
|
user.get(Key.SEED_BACKUP).put(encryptedSeed, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -687,7 +743,11 @@ const saveChannelsBackup = async (backups, user, SEA) => {
|
||||||
const encryptBackups = await SEA.encrypt(backups, mySecret)
|
const encryptBackups = await SEA.encrypt(backups, mySecret)
|
||||||
return new Promise((res, rej) => {
|
return new Promise((res, rej) => {
|
||||||
user.get(Key.CHANNELS_BACKUP).put(encryptBackups, ack => {
|
user.get(Key.CHANNELS_BACKUP).put(encryptBackups, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -705,7 +765,11 @@ const setLastSeenApp = () =>
|
||||||
.getUser()
|
.getUser()
|
||||||
.get(Key.LAST_SEEN_APP)
|
.get(Key.LAST_SEEN_APP)
|
||||||
.put(Date.now(), ack => {
|
.put(Date.now(), ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -719,7 +783,11 @@ const setLastSeenApp = () =>
|
||||||
.get(Key.PROFILE)
|
.get(Key.PROFILE)
|
||||||
.get(Key.LAST_SEEN_APP)
|
.get(Key.LAST_SEEN_APP)
|
||||||
.put(Date.now(), ack => {
|
.put(Date.now(), ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -771,7 +839,11 @@ const createPostNew = async (tags, title, content) => {
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
newPost,
|
newPost,
|
||||||
ack => {
|
ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res(_n._.get)
|
res(_n._.get)
|
||||||
|
|
@ -798,7 +870,11 @@ const deletePost = async (postId, page) => {
|
||||||
.get(Key.POSTS)
|
.get(Key.POSTS)
|
||||||
.get(postId)
|
.get(postId)
|
||||||
.put(null, ack => {
|
.put(null, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -827,7 +903,11 @@ const follow = async (publicKey, isPrivate) => {
|
||||||
.get(publicKey)
|
.get(publicKey)
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
.put(newFollow, ack => {
|
.put(newFollow, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -847,7 +927,11 @@ const unfollow = publicKey =>
|
||||||
.get(Key.FOLLOWS)
|
.get(Key.FOLLOWS)
|
||||||
.get(publicKey)
|
.get(publicKey)
|
||||||
.put(null, ack => {
|
.put(null, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -870,7 +954,11 @@ const initWall = async () => {
|
||||||
.get(Key.WALL)
|
.get(Key.WALL)
|
||||||
.get(Key.NUM_OF_PAGES)
|
.get(Key.NUM_OF_PAGES)
|
||||||
.put(0, ack => {
|
.put(0, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -891,7 +979,11 @@ const initWall = async () => {
|
||||||
unused: null
|
unused: null
|
||||||
},
|
},
|
||||||
ack => {
|
ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -909,7 +1001,11 @@ const initWall = async () => {
|
||||||
.get('0')
|
.get('0')
|
||||||
.get(Key.COUNT)
|
.get(Key.COUNT)
|
||||||
.put(0, ack => {
|
.put(0, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,11 @@ const lastSeenNode = user => {
|
||||||
}
|
}
|
||||||
gotLatestUserAck = false
|
gotLatestUserAck = false
|
||||||
user.get(Key.LAST_SEEN_NODE).put(Date.now(), ack => {
|
user.get(Key.LAST_SEEN_NODE).put(Date.now(), ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
logger.error(`Error inside lastSeenNode user job: ${ack.err}`)
|
logger.error(`Error inside lastSeenNode user job: ${ack.err}`)
|
||||||
}
|
}
|
||||||
gotLatestUserAck = true
|
gotLatestUserAck = true
|
||||||
|
|
@ -61,7 +65,11 @@ const lastSeenNode = user => {
|
||||||
.get(Key.PROFILE)
|
.get(Key.PROFILE)
|
||||||
.get(Key.LAST_SEEN_NODE)
|
.get(Key.LAST_SEEN_NODE)
|
||||||
.put(Date.now(), ack => {
|
.put(Date.now(), ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
logger.error(`Error inside lastSeenNode profile job: ${ack.err}`)
|
logger.error(`Error inside lastSeenNode profile job: ${ack.err}`)
|
||||||
}
|
}
|
||||||
gotLatestProfileAck = true
|
gotLatestProfileAck = true
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,11 @@ const listenerForAddr = (addr, SEA) => async (order, orderID) => {
|
||||||
.get(orderID)
|
.get(orderID)
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
.put(orderResponse, ack => {
|
.put(orderResponse, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(
|
rej(
|
||||||
new Error(
|
new Error(
|
||||||
`Error saving encrypted invoice to order to response usergraph: ${ack}`
|
`Error saving encrypted invoice to order to response usergraph: ${ack}`
|
||||||
|
|
@ -290,7 +294,11 @@ const listenerForAddr = (addr, SEA) => async (order, orderID) => {
|
||||||
.get(Key.ORDER_TO_RESPONSE)
|
.get(Key.ORDER_TO_RESPONSE)
|
||||||
.get(ackNode)
|
.get(ackNode)
|
||||||
.put(ordResponse, ack => {
|
.put(ordResponse, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(
|
rej(
|
||||||
new Error(
|
new Error(
|
||||||
`Error saving encrypted orderAck to order to response usergraph: ${ack}`
|
`Error saving encrypted orderAck to order to response usergraph: ${ack}`
|
||||||
|
|
@ -378,7 +386,11 @@ const listenerForAddr = (addr, SEA) => async (order, orderID) => {
|
||||||
.get(Key.ORDER_TO_RESPONSE)
|
.get(Key.ORDER_TO_RESPONSE)
|
||||||
.get(ackNode)
|
.get(ackNode)
|
||||||
.put(ordResponse, ack => {
|
.put(ordResponse, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(
|
rej(
|
||||||
new Error(
|
new Error(
|
||||||
`Error saving encrypted orderAck to order to response usergraph: ${ack}`
|
`Error saving encrypted orderAck to order to response usergraph: ${ack}`
|
||||||
|
|
@ -425,7 +437,11 @@ const listenerForAddr = (addr, SEA) => async (order, orderID) => {
|
||||||
.get(Key.ORDER_TO_RESPONSE)
|
.get(Key.ORDER_TO_RESPONSE)
|
||||||
.get(ackNode)
|
.get(ackNode)
|
||||||
.put(serviceResponse, ack => {
|
.put(serviceResponse, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(
|
rej(
|
||||||
new Error(
|
new Error(
|
||||||
`Error saving encrypted orderAck to order to response usergraph: ${ack}`
|
`Error saving encrypted orderAck to order to response usergraph: ${ack}`
|
||||||
|
|
@ -489,7 +505,11 @@ const listenerForAddr = (addr, SEA) => async (order, orderID) => {
|
||||||
.get(orderID)
|
.get(orderID)
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
.put(orderResponse, ack => {
|
.put(orderResponse, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
logger.error(
|
logger.error(
|
||||||
`Error saving encrypted invoice to order to response usergraph: ${ack}`
|
`Error saving encrypted invoice to order to response usergraph: ${ack}`
|
||||||
)
|
)
|
||||||
|
|
@ -516,7 +536,11 @@ const listenerForAddr = (addr, SEA) => async (order, orderID) => {
|
||||||
.get(orderID)
|
.get(orderID)
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
.put(orderResponse, ack => {
|
.put(orderResponse, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
logger.error(
|
logger.error(
|
||||||
`Error saving encrypted invoice to order to response usergraph: ${ack}`
|
`Error saving encrypted invoice to order to response usergraph: ${ack}`
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,11 @@ const promisify = node => {
|
||||||
pnode.put = data =>
|
pnode.put = data =>
|
||||||
new Promise((res, rej) => {
|
new Promise((res, rej) => {
|
||||||
oldPut(data, ack => {
|
oldPut(data, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
@ -31,7 +35,11 @@ const promisify = node => {
|
||||||
pnode.set = data =>
|
pnode.set = data =>
|
||||||
new Promise((res, rej) => {
|
new Promise((res, rej) => {
|
||||||
oldSet(data, ack => {
|
oldSet(data, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res()
|
res()
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,11 @@ const put = async (rawPath, value) => {
|
||||||
} /* is primitive */ else {
|
} /* is primitive */ else {
|
||||||
await makePromise((res, rej) => {
|
await makePromise((res, rej) => {
|
||||||
node.put(/** @type {ValidDataValue} */ (theValue), ack => {
|
node.put(/** @type {ValidDataValue} */ (theValue), ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
if (typeof ack.err === 'string') {
|
if (typeof ack.err === 'string') {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -290,7 +294,11 @@ async function set(rawPath, value) {
|
||||||
|
|
||||||
const id = await makePromise((res, rej) => {
|
const id = await makePromise((res, rej) => {
|
||||||
const subNode = node.set(theValue, ack => {
|
const subNode = node.set(theValue, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (
|
||||||
|
ack.err &&
|
||||||
|
typeof ack.err !== 'number' &&
|
||||||
|
typeof ack.err !== 'object'
|
||||||
|
) {
|
||||||
rej(new Error(ack.err))
|
rej(new Error(ack.err))
|
||||||
} else {
|
} else {
|
||||||
res(subNode._.get)
|
res(subNode._.get)
|
||||||
|
|
|
||||||
12
services/initializer.js
Normal file
12
services/initializer.js
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
const API = require('./gunDB/contact-api')
|
||||||
|
|
||||||
|
module.exports.InitUserData = async (user) => {
|
||||||
|
await API.Actions.setDisplayName('anon' + user._.sea.pub.slice(0, 8), user)
|
||||||
|
await API.Actions.generateHandshakeAddress()
|
||||||
|
await API.Actions.generateOrderAddress(user)
|
||||||
|
await API.Actions.initWall()
|
||||||
|
await API.Actions.setBio('A little bit about myself.', user)
|
||||||
|
await API.Actions.setDefaultSeedProvider('', user)
|
||||||
|
await API.Actions.setSeedServiceData('', user)
|
||||||
|
await API.Actions.setCurrentStreamInfo('', user)
|
||||||
|
}
|
||||||
|
|
@ -201,7 +201,7 @@ const AddTmpChainOrder = async (address, orderInfo) => {
|
||||||
.get(Key.TMP_CHAIN_COORDINATE)
|
.get(Key.TMP_CHAIN_COORDINATE)
|
||||||
.get(addressSHA256)
|
.get(addressSHA256)
|
||||||
.put(encryptedOrderString, ack => {
|
.put(encryptedOrderString, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (ack.err && typeof ack.err !== 'number' && typeof ack.err !== 'object') {
|
||||||
rej(
|
rej(
|
||||||
new Error(
|
new Error(
|
||||||
`Error saving tmp chain coordinate order to user-graph: ${ack}`
|
`Error saving tmp chain coordinate order to user-graph: ${ack}`
|
||||||
|
|
@ -268,7 +268,7 @@ const clearTmpChainOrder = async (address) => {
|
||||||
.get(Key.TMP_CHAIN_COORDINATE)
|
.get(Key.TMP_CHAIN_COORDINATE)
|
||||||
.get(addressSHA256)
|
.get(addressSHA256)
|
||||||
.put(null, ack => {
|
.put(null, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (ack.err && typeof ack.err !== 'number' && typeof ack.err !== 'object') {
|
||||||
rej(
|
rej(
|
||||||
new Error(
|
new Error(
|
||||||
`Error nulling tmp chain coordinate order to user-graph: ${ack}`
|
`Error nulling tmp chain coordinate order to user-graph: ${ack}`
|
||||||
|
|
@ -370,7 +370,7 @@ class SchemaManager {
|
||||||
.get(Key.COORDINATES)
|
.get(Key.COORDINATES)
|
||||||
.get(coordinateSHA256)
|
.get(coordinateSHA256)
|
||||||
.put(encryptedOrderString, ack => {
|
.put(encryptedOrderString, ack => {
|
||||||
if (ack.err && typeof ack.err !== 'number') {
|
if (ack.err && typeof ack.err !== 'number' && typeof ack.err !== 'object') {
|
||||||
logger.info(ack)
|
logger.info(ack)
|
||||||
rej(
|
rej(
|
||||||
new Error(
|
new Error(
|
||||||
|
|
|
||||||
111
src/routes.js
111
src/routes.js
|
|
@ -37,6 +37,7 @@ const Key = require('../services/gunDB/contact-api/key')
|
||||||
const { startedStream, endStream } = require('../services/streams')
|
const { startedStream, endStream } = require('../services/streams')
|
||||||
const channelRequest = require('../utils/lightningServices/channelRequests')
|
const channelRequest = require('../utils/lightningServices/channelRequests')
|
||||||
const TipsForwarder = require('../services/tipsCallback')
|
const TipsForwarder = require('../services/tipsCallback')
|
||||||
|
const UserInitializer = require('../services/initializer')
|
||||||
|
|
||||||
const DEFAULT_MAX_NUM_ROUTES_TO_QUERY = 10
|
const DEFAULT_MAX_NUM_ROUTES_TO_QUERY = 10
|
||||||
const SESSION_ID = uuid()
|
const SESSION_ID = uuid()
|
||||||
|
|
@ -268,7 +269,21 @@ module.exports = async (
|
||||||
})
|
})
|
||||||
|
|
||||||
app.use(async (req, res, next) => {
|
app.use(async (req, res, next) => {
|
||||||
if (unprotectedRoutes[req.method][req.path]) {
|
if (!req.method) {
|
||||||
|
logger.error(
|
||||||
|
'No req.method in unprotected routes middleware.',
|
||||||
|
'req.path:',
|
||||||
|
req.path
|
||||||
|
)
|
||||||
|
next()
|
||||||
|
} else if (!req.path) {
|
||||||
|
logger.error(
|
||||||
|
'No req.path in unprotected routes middleware.',
|
||||||
|
'req.method:',
|
||||||
|
req.method
|
||||||
|
)
|
||||||
|
next()
|
||||||
|
} else if (unprotectedRoutes[req.method][req.path]) {
|
||||||
next()
|
next()
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
|
@ -2569,7 +2584,7 @@ module.exports = async (
|
||||||
//this is for OBS notifications, not wired with UI.
|
//this is for OBS notifications, not wired with UI.
|
||||||
ap.get('/api/subscribeStream', (req, res) => {
|
ap.get('/api/subscribeStream', (req, res) => {
|
||||||
try {
|
try {
|
||||||
res.sendFile(path.join(__dirname, '/index.html'))
|
res.sendFile(path.join(__dirname, '../public/obsOverlay.html'))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
res.status(500).json({
|
res.status(500).json({
|
||||||
|
|
@ -2625,6 +2640,98 @@ module.exports = async (
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ap.get('/', (req, res) => {
|
||||||
|
try {
|
||||||
|
res.sendFile(path.join(__dirname, '../public/localHomepage.html'))
|
||||||
|
} catch (e) {
|
||||||
|
logger.error(e)
|
||||||
|
res.status(500).json({
|
||||||
|
errorMessage: e.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
ap.get('/qrCodeGenerator', (req, res) => {
|
||||||
|
console.log('qrrerrr')
|
||||||
|
try {
|
||||||
|
res.sendFile(path.join(__dirname, '../public/qrcode.min.js'))
|
||||||
|
} catch (e) {
|
||||||
|
logger.error(e)
|
||||||
|
res.status(500).json({
|
||||||
|
errorMessage: e.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
ap.get('/api/accessInfo', async (req, res) => {
|
||||||
|
if (req.ip !== '127.0.0.1') {
|
||||||
|
res.json({
|
||||||
|
field: 'origin',
|
||||||
|
message: 'invalid origin, cant serve access info'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const [relayId, relayUrl, accessSecret] = await Promise.all([
|
||||||
|
Storage.getItem('relay/id'),
|
||||||
|
Storage.getItem('relay/url'),
|
||||||
|
Storage.getItem('FirstAccessSecret')
|
||||||
|
])
|
||||||
|
const response = {}
|
||||||
|
if (config.cliArgs.tunnel) {
|
||||||
|
if (!relayId || !relayUrl) {
|
||||||
|
response.relayNotFound = true
|
||||||
|
} else {
|
||||||
|
response.relayId = relayId
|
||||||
|
response.relayUrl = relayUrl
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
response.tunnelDisabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.env.ALLOW_UNLOCKED_LND !== 'true') {
|
||||||
|
response.accessSecretDisabled = true
|
||||||
|
return res.json(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!accessSecret) {
|
||||||
|
response.accessCodeNotFound = true
|
||||||
|
res.json(response)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const codeUsed = await Storage.getItem(
|
||||||
|
`UnlockedAccessSecrets/${accessSecret}`
|
||||||
|
)
|
||||||
|
if (codeUsed !== false) {
|
||||||
|
response.accessCodeUsed = true
|
||||||
|
return res.json(response)
|
||||||
|
}
|
||||||
|
response.accessCode = accessSecret
|
||||||
|
res.json(response)
|
||||||
|
} catch (e) {
|
||||||
|
logger.error(e)
|
||||||
|
res.status(500).json({
|
||||||
|
errorMessage: e.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
ap.post('/api/initUserInformation', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const user = require('../services/gunDB/Mediator').getUser()
|
||||||
|
await UserInitializer.InitUserData(user)
|
||||||
|
} catch (err) {
|
||||||
|
logger.error(err)
|
||||||
|
res
|
||||||
|
.status(
|
||||||
|
err.message === Common.Constants.ErrorCode.NOT_AUTH ? 401 : 500
|
||||||
|
)
|
||||||
|
.json({
|
||||||
|
errorMessage: err.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.warn('Unhandled rejection:', err)
|
logger.warn('Unhandled rejection:', err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -344,7 +344,8 @@ const server = program => {
|
||||||
app,
|
app,
|
||||||
{
|
{
|
||||||
...defaults,
|
...defaults,
|
||||||
lndAddress: program.lndAddress
|
lndAddress: program.lndAddress,
|
||||||
|
cliArgs: program
|
||||||
},
|
},
|
||||||
Sockets,
|
Sockets,
|
||||||
{
|
{
|
||||||
|
|
@ -403,15 +404,15 @@ const server = program => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(process.env.ALLOW_UNLOCKED_LND === 'true'){
|
if(process.env.ALLOW_UNLOCKED_LND === 'true'){
|
||||||
const codes = await Storage.valuesWithKeyMatch(
|
const codes = await Storage.valuesWithKeyMatch(/^UnlockedAccessSecrets\//u)
|
||||||
/^UnlockedAccessSecrets\//u
|
|
||||||
)
|
|
||||||
if(codes.length === 0){
|
if(codes.length === 0){
|
||||||
const code = ECC.generateRandomString(12)
|
const code = ECC.generateRandomString(12)
|
||||||
await Storage.setItem(`UnlockedAccessSecrets/${code}`, false)
|
await Storage.setItem(`UnlockedAccessSecrets/${code}`, false)
|
||||||
logger.info('the access code is:' + code)
|
await Storage.setItem(`FirstAccessSecret`, code)
|
||||||
} else if (codes.length === 1 || codes[0] === false) {
|
logger.info("the access code is:"+code)
|
||||||
logger.info('the access code is:' + codes[0])
|
} else if(codes.length === 1 && codes[0] === false){
|
||||||
|
const firstCode = await Storage.getItem("FirstAccessSecret")
|
||||||
|
logger.info("the access code is:"+firstCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
serverInstance.listen(serverPort, serverHost)
|
serverInstance.listen(serverPort, serverHost)
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,9 @@ module.exports = {
|
||||||
//
|
//
|
||||||
"/api/gun/auth": true,
|
"/api/gun/auth": true,
|
||||||
"/api/subscribeStream":true,
|
"/api/subscribeStream":true,
|
||||||
|
"/":true,
|
||||||
|
"/api/accessInfo":true,
|
||||||
|
"/qrCodeGenerator":true,
|
||||||
},
|
},
|
||||||
POST: {
|
POST: {
|
||||||
"/api/lnd/connect": true,
|
"/api/lnd/connect": true,
|
||||||
|
|
@ -33,5 +36,5 @@ module.exports = {
|
||||||
PUT: {},
|
PUT: {},
|
||||||
DELETE: {}
|
DELETE: {}
|
||||||
},
|
},
|
||||||
nonEncryptedRoutes: ['/api/security/exchangeKeys', "/api/encryption/exchange", '/healthz', '/ping', '/tunnel/status', '/api/lnd/wallet/status', '/api/gun/auth',"/api/subscribeStream"]
|
nonEncryptedRoutes: ['/api/security/exchangeKeys', "/api/encryption/exchange", '/healthz', '/ping', '/tunnel/status', '/api/lnd/wallet/status', '/api/gun/auth',"/api/subscribeStream", "/", "/api/accessInfo","/qrCodeGenerator"]
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue