Merge branch 'dev' into feat/lam-1291/stress-testing
* dev: (85 commits) chore: console.log debug leftovers fix: third level navigation links fix: show subheader on refresh fix: machines/:id routing fix: customer route chore: update wallet nodes feat: shorten long addresses in funding page feat: shorten long addresses refactor: support copied text different from presented text chore: udpate react, downshift and routing refactor: use Wizard component on first route fix: autocomplete component rendering feat: skip2fa option on .env fix: drop contraint before dropping index chore: stop using alias imports fix: re-instate urlResolver chore: server code formatting chore: reformat code chore: adding eslint and prettier config chore: typo ...
This commit is contained in:
commit
e10493abc6
1398 changed files with 60329 additions and 157527 deletions
38
packages/server/tools/build-dev-env.js
Normal file
38
packages/server/tools/build-dev-env.js
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const setEnvVariable = require('./set-env-var')
|
||||
|
||||
fs.copyFileSync(
|
||||
path.resolve(__dirname, '../.sample.env'),
|
||||
path.resolve(__dirname, '../.env'),
|
||||
)
|
||||
|
||||
setEnvVariable('NODE_ENV', 'development')
|
||||
|
||||
setEnvVariable('POSTGRES_USER', 'postgres')
|
||||
setEnvVariable('POSTGRES_PASSWORD', 'postgres123')
|
||||
setEnvVariable('POSTGRES_HOST', 'localhost')
|
||||
setEnvVariable('POSTGRES_PORT', '5432')
|
||||
setEnvVariable('POSTGRES_DB', 'lamassu')
|
||||
|
||||
setEnvVariable('CA_PATH', `${process.env.PWD}/certs/Lamassu_OP_Root_CA.pem`)
|
||||
setEnvVariable('CERT_PATH', `${process.env.PWD}/certs/Lamassu_OP.pem`)
|
||||
setEnvVariable('KEY_PATH', `${process.env.PWD}/certs/Lamassu_OP.key`)
|
||||
|
||||
setEnvVariable(
|
||||
'MNEMONIC_PATH',
|
||||
`${process.env.HOME}/.lamassu/mnemonics/mnemonic.txt`,
|
||||
)
|
||||
|
||||
setEnvVariable('BLOCKCHAIN_DIR', `${process.env.PWD}/blockchains`)
|
||||
setEnvVariable('OFAC_DATA_DIR', `${process.env.HOME}/.lamassu/ofac`)
|
||||
setEnvVariable('ID_PHOTO_CARD_DIR', `${process.env.HOME}/.lamassu/idphotocard`)
|
||||
setEnvVariable('FRONT_CAMERA_DIR', `${process.env.HOME}/.lamassu/frontcamera`)
|
||||
setEnvVariable('OPERATOR_DATA_DIR', `${process.env.HOME}/.lamassu/operatordata`)
|
||||
|
||||
setEnvVariable('BTC_NODE_LOCATION', 'remote')
|
||||
setEnvVariable('BTC_WALLET_LOCATION', 'local')
|
||||
|
||||
setEnvVariable('HOSTNAME', 'localhost')
|
||||
setEnvVariable('LOG_LEVEL', 'debug')
|
||||
87
packages/server/tools/build-docker-certs.sh
Normal file
87
packages/server/tools/build-docker-certs.sh
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
export LOG_FILE=/tmp/install.log
|
||||
|
||||
CONFIG_DIR=/lamassu-data
|
||||
|
||||
# certs
|
||||
CERT_DIR=$CONFIG_DIR/certs
|
||||
KEY_DIR=$CONFIG_DIR/private
|
||||
LAMASSU_CA_PATH=$CERT_DIR/Lamassu_CA.pem
|
||||
CA_KEY_PATH=$KEY_DIR/Lamassu_OP_Root_CA.key
|
||||
CA_PATH=$CERT_DIR/Lamassu_OP_Root_CA.pem
|
||||
SERVER_KEY_PATH=$KEY_DIR/Lamassu_OP.key
|
||||
SERVER_CERT_PATH=$CERT_DIR/Lamassu_OP.pem
|
||||
|
||||
# other
|
||||
MNEMONIC_DIR=$CONFIG_DIR/mnemonics
|
||||
MNEMONIC_FILE=$MNEMONIC_DIR/mnemonic.txt
|
||||
OFAC_DATA_DIR=$CONFIG_DIR/ofac
|
||||
|
||||
decho () {
|
||||
echo `date +"%H:%M:%S"` $1
|
||||
}
|
||||
|
||||
IP=$HOSTNAME
|
||||
NODE_MODULES=$(npm -g root)
|
||||
NPM_BIN=$(npm -g bin)
|
||||
|
||||
decho "Generating mnemonic..."
|
||||
mkdir -p $MNEMONIC_DIR
|
||||
SEED=$(openssl rand -hex 32)
|
||||
MNEMONIC=$(/lamassu-server/bin/bip39 $SEED)
|
||||
echo "$MNEMONIC" > $MNEMONIC_FILE
|
||||
|
||||
mkdir -p $CERT_DIR
|
||||
mkdir -p $KEY_DIR
|
||||
|
||||
decho "Generating SSL certificates..."
|
||||
|
||||
sed -i '/RANDFILE/d' /etc/ssl/openssl.cnf
|
||||
|
||||
openssl genrsa \
|
||||
-out $CA_KEY_PATH \
|
||||
4096
|
||||
|
||||
openssl req \
|
||||
-x509 \
|
||||
-sha256 \
|
||||
-new \
|
||||
-nodes \
|
||||
-key $CA_KEY_PATH \
|
||||
-days 3650 \
|
||||
-out $CA_PATH \
|
||||
-subj "/C=IS/ST=/L=Reykjavik/O=Lamassu Operator CA/CN=operator.lamassu.is"
|
||||
|
||||
openssl genrsa \
|
||||
-out $SERVER_KEY_PATH \
|
||||
4096
|
||||
|
||||
openssl req -new \
|
||||
-key $SERVER_KEY_PATH \
|
||||
-out /tmp/Lamassu_OP.csr.pem \
|
||||
-subj "/C=IS/ST=/L=Reykjavik/O=Lamassu Operator/CN=$IP" \
|
||||
-reqexts SAN \
|
||||
-sha256 \
|
||||
-config <(cat /etc/ssl/openssl.cnf \
|
||||
<(printf "[SAN]\nsubjectAltName=IP.1:$IP"))
|
||||
|
||||
openssl x509 \
|
||||
-req -in /tmp/Lamassu_OP.csr.pem \
|
||||
-CA $CA_PATH \
|
||||
-CAkey $CA_KEY_PATH \
|
||||
-CAcreateserial \
|
||||
-out $SERVER_CERT_PATH \
|
||||
-extfile <(cat /etc/ssl/openssl.cnf \
|
||||
<(printf "[SAN]\nsubjectAltName=IP.1:$IP")) \
|
||||
-extensions SAN \
|
||||
-days 3650
|
||||
|
||||
rm /tmp/Lamassu_OP.csr.pem
|
||||
|
||||
mkdir -p $OFAC_DATA_DIR
|
||||
|
||||
decho "Copying Lamassu certificate authority..."
|
||||
LAMASSU_CA_FILE=/lamassu-server/Lamassu_CA.pem
|
||||
cp $LAMASSU_CA_FILE $LAMASSU_CA_PATH
|
||||
58
packages/server/tools/build-prod-env.js
Normal file
58
packages/server/tools/build-prod-env.js
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const argv = require('minimist')(process.argv.slice(2))
|
||||
const _ = require('lodash/fp')
|
||||
|
||||
const setEnvVariable = require('./set-env-var')
|
||||
|
||||
const requiredParams = ['db-password', 'hostname']
|
||||
|
||||
if (!_.isEqual(_.intersection(_.keys(argv), requiredParams), requiredParams)) {
|
||||
console.error(
|
||||
'Usage: node tools/build-prod-env.js --db-password <DB_PASSWORD> --hostname <IP>',
|
||||
)
|
||||
process.exit(2)
|
||||
}
|
||||
|
||||
fs.copyFileSync(
|
||||
path.resolve(__dirname, '../.sample.env'),
|
||||
path.resolve('/etc', 'lamassu', '.env'),
|
||||
)
|
||||
|
||||
setEnvVariable('NODE_ENV', 'production')
|
||||
|
||||
setEnvVariable('POSTGRES_USER', 'lamassu_pg')
|
||||
setEnvVariable('POSTGRES_PASSWORD', `${argv['db-password']}`)
|
||||
setEnvVariable('POSTGRES_HOST', 'localhost')
|
||||
setEnvVariable('POSTGRES_PORT', '5432')
|
||||
setEnvVariable('POSTGRES_DB', 'lamassu')
|
||||
|
||||
setEnvVariable('CA_PATH', `/etc/ssl/certs/Lamassu_OP_Root_CA.pem`)
|
||||
setEnvVariable('CERT_PATH', `/etc/ssl/certs/Lamassu_OP.pem`)
|
||||
setEnvVariable('KEY_PATH', `/etc/ssl/private/Lamassu_OP.key`)
|
||||
|
||||
setEnvVariable('MNEMONIC_PATH', `/etc/lamassu/mnemonics/mnemonic.txt`)
|
||||
|
||||
setEnvVariable('BLOCKCHAIN_DIR', `/mnt/blockchains`)
|
||||
setEnvVariable('OFAC_DATA_DIR', `/var/lamassu/ofac`)
|
||||
setEnvVariable('ID_PHOTO_CARD_DIR', `/opt/lamassu-server/idphotocard`)
|
||||
setEnvVariable('FRONT_CAMERA_DIR', `/opt/lamassu-server/frontcamera`)
|
||||
setEnvVariable('OPERATOR_DATA_DIR', `/opt/lamassu-server/operatordata`)
|
||||
|
||||
setEnvVariable('COIN_ATM_RADAR_URL', `https://coinatmradar.info/api/lamassu/`)
|
||||
|
||||
setEnvVariable('BTC_NODE_LOCATION', 'local')
|
||||
setEnvVariable('BTC_WALLET_LOCATION', 'local')
|
||||
setEnvVariable('BCH_NODE_LOCATION', 'local')
|
||||
setEnvVariable('BCH_WALLET_LOCATION', 'local')
|
||||
setEnvVariable('LTC_NODE_LOCATION', 'local')
|
||||
setEnvVariable('LTC_WALLET_LOCATION', 'local')
|
||||
setEnvVariable('DASH_NODE_LOCATION', 'local')
|
||||
setEnvVariable('DASH_WALLET_LOCATION', 'local')
|
||||
setEnvVariable('ZEC_NODE_LOCATION', 'local')
|
||||
setEnvVariable('ZEC_WALLET_LOCATION', 'local')
|
||||
setEnvVariable('XMR_NODE_LOCATION', 'local')
|
||||
setEnvVariable('XMR_WALLET_LOCATION', 'local')
|
||||
|
||||
setEnvVariable('HOSTNAME', `${argv.hostname}`)
|
||||
setEnvVariable('LOG_LEVEL', 'info')
|
||||
95
packages/server/tools/cert-gen.sh
Executable file
95
packages/server/tools/cert-gen.sh
Executable file
|
|
@ -0,0 +1,95 @@
|
|||
#!/usr/bin/env bash
|
||||
# This is for setting up cryptographic certificates for a development environment
|
||||
set -e
|
||||
|
||||
DOMAIN=localhost
|
||||
[ ! -z "$1" ] && DOMAIN=$1
|
||||
|
||||
CONFIG_DIR=$HOME/.lamassu
|
||||
LOG_FILE=/tmp/cert-gen.log
|
||||
CERT_DIR=$PWD/certs
|
||||
KEY_DIR=$PWD/certs
|
||||
LAMASSU_CA_PATH=$PWD/Lamassu_CA.pem
|
||||
POSTGRES_PASS=postgres123
|
||||
OFAC_DATA_DIR=$CONFIG_DIR/ofac
|
||||
IDPHOTOCARD_DIR=$CONFIG_DIR/idphotocard
|
||||
FRONTCAMERA_DIR=$CONFIG_DIR/frontcamera
|
||||
OPERATOR_DIR=$CONFIG_DIR/operatordata
|
||||
|
||||
mkdir -p $CERT_DIR
|
||||
mkdir -p $CONFIG_DIR >> $LOG_FILE 2>&1
|
||||
|
||||
echo "Generating mnemonic..."
|
||||
MNEMONIC_DIR=$CONFIG_DIR/mnemonics
|
||||
MNEMONIC_FILE=$MNEMONIC_DIR/mnemonic.txt
|
||||
mkdir -p $MNEMONIC_DIR >> $LOG_FILE 2>&1
|
||||
SEED=$(openssl rand -hex 32)
|
||||
MNEMONIC=$($PWD/bin/bip39 $SEED)
|
||||
echo "$MNEMONIC" > $MNEMONIC_FILE
|
||||
|
||||
echo "Generating SSL certificates..."
|
||||
|
||||
CA_KEY_PATH=$KEY_DIR/Lamassu_OP_Root_CA.key
|
||||
CA_PATH=$CERT_DIR/Lamassu_OP_Root_CA.pem
|
||||
SERVER_KEY_PATH=$KEY_DIR/Lamassu_OP.key
|
||||
SERVER_CERT_PATH=$CERT_DIR/Lamassu_OP.pem
|
||||
red=`tput setaf 1`
|
||||
reset=`tput sgr0`
|
||||
OPENSSL_ERROR_HINT="Make sure that you have installed openssl 1.0 version"
|
||||
|
||||
print_error () {
|
||||
echo "${red}Error: ${reset} $1"
|
||||
echo $2 # hint
|
||||
}
|
||||
|
||||
{
|
||||
openssl genrsa \
|
||||
-out $CA_KEY_PATH \
|
||||
4096 >> $LOG_FILE 2>&1
|
||||
} || { print_error "openssl genrsa to CA_KEY_PATH failed" "$OPENSSL_ERROR_HINT"; exit 1; }
|
||||
|
||||
{
|
||||
openssl req \
|
||||
-x509 \
|
||||
-sha256 \
|
||||
-new \
|
||||
-nodes \
|
||||
-key $CA_KEY_PATH \
|
||||
-days 3560 \
|
||||
-out $CA_PATH \
|
||||
-subj "/C=IS/ST=/L=Reykjavik/O=Lamassu Operator CA/CN=lamassu-operator.is" \
|
||||
>> $LOG_FILE 2>&1
|
||||
} || { print_error "openssl req with CA_KEY_PATH failed" "$OPENSSL_ERROR_HINT"; exit 1; }
|
||||
|
||||
{
|
||||
openssl genrsa \
|
||||
-out $SERVER_KEY_PATH \
|
||||
4096 >> $LOG_FILE 2>&1
|
||||
} || { print_error "openssl genrsa SERVER_KEY_PATH failed" "$OPENSSL_ERROR_HINT"; exit 1; }
|
||||
|
||||
{
|
||||
openssl req -new \
|
||||
-key $SERVER_KEY_PATH \
|
||||
-out /tmp/Lamassu_OP.csr.pem \
|
||||
-subj "/C=IS/ST=/L=Reykjavik/O=Lamassu Operator/CN=$DOMAIN" \
|
||||
>> $LOG_FILE 2>&1
|
||||
} || { print_error "openssl req with SERVER_KEY_PATH failed" "$OPENSSL_ERROR_HINT"; exit 1; }
|
||||
|
||||
{
|
||||
openssl x509 \
|
||||
-req -in /tmp/Lamassu_OP.csr.pem \
|
||||
-CA $CA_PATH \
|
||||
-CAkey $CA_KEY_PATH \
|
||||
-CAcreateserial \
|
||||
-out $SERVER_CERT_PATH \
|
||||
-days 3650 >> $LOG_FILE 2>&1
|
||||
} || { print_error "openssl x509 failed" "$OPENSSL_ERROR_HINT"; exit 1; }
|
||||
|
||||
rm /tmp/Lamassu_OP.csr.pem
|
||||
|
||||
mkdir -p $OFAC_DATA_DIR/sources
|
||||
touch $OFAC_DATA_DIR/etags.json
|
||||
|
||||
node tools/build-dev-env.js
|
||||
|
||||
echo "Done."
|
||||
74
packages/server/tools/digitalocean/createblockstorage.sh
Normal file
74
packages/server/tools/digitalocean/createblockstorage.sh
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
if [ $# -eq 0 ]
|
||||
then
|
||||
echo "usage: bash createblockstorage.sh [droplet-name] [token]" && exit 1
|
||||
fi
|
||||
|
||||
DROPLET_NAME=$1
|
||||
TOKEN=$2
|
||||
|
||||
#Install doctl
|
||||
|
||||
echo "Installing doctl..."
|
||||
|
||||
sudo snap install doctl
|
||||
|
||||
#Create config folder as suggested in doctl documentation
|
||||
|
||||
sudo mkdir -p ~/.config
|
||||
|
||||
#Access doctl account
|
||||
|
||||
echo "Accessing digital ocean account..."
|
||||
doctl auth init --access-token $TOKEN
|
||||
|
||||
#Get droplet region and id
|
||||
echo "Fetching droplet information..."
|
||||
|
||||
DROPLET_INFO=$(doctl compute droplet get $DROPLET_NAME --format "ID, Region")
|
||||
DROPLET_ID=$(echo $DROPLET_INFO | awk '{ print $3; }')
|
||||
REGION=$(echo $DROPLET_INFO | awk '{ print $4; }')
|
||||
|
||||
#Create a new volume and attach it to the droplet
|
||||
echo "Creating a new volume..."
|
||||
VOLUME_ID=$(doctl compute volume create --region $REGION --size 10GiB lamassu-data --format "ID" | sed -n 2p)
|
||||
|
||||
echo "Attaching to the droplet..."
|
||||
doctl compute volume-action attach $VOLUME_ID $DROPLET_ID
|
||||
|
||||
#Create partition and format
|
||||
echo
|
||||
echo "Creating a new partition..."
|
||||
echo
|
||||
|
||||
|
||||
sudo apt-get update
|
||||
yes | sudo apt-get install parted
|
||||
|
||||
sudo parted /dev/disk/by-id/scsi-0DO_Volume_lamassu-data mklabel gpt
|
||||
sudo parted -a opt /dev/disk/by-id/scsi-0DO_Volume_lamassu-data mkpart primary ext4 0% 100%
|
||||
|
||||
echo
|
||||
echo "Formatting the new volume..."
|
||||
echo
|
||||
|
||||
sleep 4
|
||||
sudo mkfs.ext4 -L lamassudata /dev/disk/by-id/scsi-0DO_Volume_lamassu-data-part1
|
||||
|
||||
#Mounting the new volume
|
||||
echo
|
||||
echo "Mounting the new volume..."
|
||||
echo
|
||||
|
||||
sudo mkdir -p /mnt/lamassu-data
|
||||
sudo mount -o defaults,nofail,discard,noatime /dev/disk/by-id/scsi-0DO_Volume_lamassu-data-part1 /mnt/lamassu-data
|
||||
|
||||
#Persistent mounting
|
||||
echo "/dev/disk/by-id/scsi-0DO_Volume_lamassu-data-part1 /mnt/lamassu-data ext4 defaults,nofail,discard,noatime 0 2" | sudo tee -a /etc/fstab
|
||||
|
||||
echo
|
||||
echo "New block storage volume successfully installed!"
|
||||
echo "Can be accessed at: /mnt/lamassu-data"
|
||||
echo
|
||||
124
packages/server/tools/digitalocean/migratedata.sh
Normal file
124
packages/server/tools/digitalocean/migratedata.sh
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo
|
||||
echo "Initializing data migration to the new block storage volume..."
|
||||
echo
|
||||
|
||||
NEW_VOLUME_MOUNTING_POINT=/mnt/lamassu-data
|
||||
|
||||
CERT_DIR=/etc/ssl/certs
|
||||
KEY_DIR=/etc/ssl/private
|
||||
CONFIG_DIR=/etc/lamassu
|
||||
|
||||
LAMASSU_CA_PATH=$CERT_DIR/Lamassu_CA.pem
|
||||
CA_KEY_PATH=$KEY_DIR/Lamassu_OP_Root_CA.key
|
||||
CA_PATH=$CERT_DIR/Lamassu_OP_Root_CA.pem
|
||||
SERVER_KEY_PATH=$KEY_DIR/Lamassu_OP.key
|
||||
SERVER_CERT_PATH=$CERT_DIR/Lamassu_OP.pem
|
||||
MNEMONIC_DIR=$CONFIG_DIR/mnemonics
|
||||
MNEMONIC_FILE=$MNEMONIC_DIR/mnemonic.txt
|
||||
BACKUP_DIR=/var/backups/postgresql
|
||||
BLOCKCHAIN_DIR=/mnt/blockchains
|
||||
OFAC_DATA_DIR=/var/lamassu/ofac
|
||||
ID_PHOTO_CARD_DIR=/opt/lamassu-server/idphotocard
|
||||
FRONTCAMERA_DIR=/opt/lamassu-server/frontcamera
|
||||
|
||||
mkdir -p $NEW_VOLUME_MOUNTING_POINT/ssl/certs
|
||||
mkdir -p $NEW_VOLUME_MOUNTING_POINT/ssl/private
|
||||
mkdir -p $NEW_VOLUME_MOUNTING_POINT/mnemonics
|
||||
mkdir -p $NEW_VOLUME_MOUNTING_POINT/backups
|
||||
mkdir -p $NEW_VOLUME_MOUNTING_POINT/blockchains
|
||||
mkdir -p $NEW_VOLUME_MOUNTING_POINT/lamassu
|
||||
mkdir -p $NEW_VOLUME_MOUNTING_POINT/lamassu-server
|
||||
|
||||
if [ -f $LAMASSU_CA_PATH ];
|
||||
then
|
||||
cp $LAMASSU_CA_PATH $NEW_VOLUME_MOUNTING_POINT/ssl/certs
|
||||
echo "Successfully migrated $LAMASSU_CA_PATH"
|
||||
else
|
||||
echo "Failed to migrate $LAMASSU_CA_PATH, file doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -f $CA_KEY_PATH ];
|
||||
then
|
||||
cp $CA_KEY_PATH $NEW_VOLUME_MOUNTING_POINT/ssl/private
|
||||
echo "Successfully migrated $CA_KEY_PATH"
|
||||
else
|
||||
echo "Failed to migrate $CA_KEY_PATH, file doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -f $CA_PATH ];
|
||||
then
|
||||
cp $CA_PATH $NEW_VOLUME_MOUNTING_POINT/ssl/certs
|
||||
echo "Successfully migrated $CA_PATH"
|
||||
else
|
||||
echo "Failed to migrate $CA_PATH, file doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -f $SERVER_KEY_PATH ];
|
||||
then
|
||||
cp $SERVER_KEY_PATH $NEW_VOLUME_MOUNTING_POINT/ssl/private
|
||||
echo "Successfully migrated $SERVER_KEY_PATH"
|
||||
else
|
||||
echo "Failed to migrate $SERVER_KEY_PATH, file doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -f $SERVER_CERT_PATH ];
|
||||
then
|
||||
cp $SERVER_CERT_PATH $NEW_VOLUME_MOUNTING_POINT/ssl/certs
|
||||
echo "Successfully migrated $SERVER_CERT_PATH"
|
||||
else
|
||||
echo "Failed to migrate $SERVER_CERT_PATH, file doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -f $MNEMONIC_FILE ];
|
||||
then
|
||||
cp $MNEMONIC_FILE $NEW_VOLUME_MOUNTING_POINT/mnemonics
|
||||
echo "Successfully migrated $MNEMONIC_FILE"
|
||||
else
|
||||
echo "Failed to migrate $MNEMONIC_FILE, file doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -d $BACKUP_DIR ];
|
||||
then
|
||||
cp -r $BACKUP_DIR $NEW_VOLUME_MOUNTING_POINT/backups
|
||||
echo "Successfully migrated $BACKUP_DIR"
|
||||
else
|
||||
echo "Failed to migrate $BACKUP_DIR, directory doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -d $BLOCKCHAIN_DIR ];
|
||||
then
|
||||
cp -r $BLOCKCHAIN_DIR $NEW_VOLUME_MOUNTING_POINT/blockchains
|
||||
echo "Successfully migrated $BLOCKCHAIN_DIR"
|
||||
else
|
||||
echo "Failed to migrate $BLOCKCHAIN_DIR, directory doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -d $OFAC_DATA_DIR ];
|
||||
then
|
||||
cp -r $OFAC_DATA_DIR $NEW_VOLUME_MOUNTING_POINT/lamassu
|
||||
echo "Successfully migrated $OFAC_DATA_DIR"
|
||||
else
|
||||
echo "Failed to migrate $OFAC_DATA_DIR, directory doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -d $ID_PHOTO_CARD_DIR ];
|
||||
then
|
||||
cp -r $ID_PHOTO_CARD_DIR $NEW_VOLUME_MOUNTING_POINT/lamassu-server
|
||||
echo "Successfully migrated $ID_PHOTO_CARD_DIR"
|
||||
else
|
||||
echo "Failed to migrate $ID_PHOTO_CARD_DIR, directory doesn't exist!"
|
||||
fi
|
||||
|
||||
if [ -d $FRONTCAMERA_DIR ];
|
||||
then
|
||||
cp -r $FRONTCAMERA_DIR $NEW_VOLUME_MOUNTING_POINT/lamassu-server
|
||||
echo "Successfully migrated $FRONTCAMERA_DIR"
|
||||
else
|
||||
echo "Failed to migrate $FRONTCAMERA_DIR, directory doesn't exist!"
|
||||
fi
|
||||
|
||||
|
||||
echo "Migration completed!"
|
||||
2
packages/server/tools/lamassu-server-stress-testing
Executable file
2
packages/server/tools/lamassu-server-stress-testing
Executable file
|
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/env node
|
||||
require('../tests/stress')(process.argv.slice(2))
|
||||
35
packages/server/tools/migrate-env.js
Normal file
35
packages/server/tools/migrate-env.js
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const _ = require('lodash/fp')
|
||||
const setEnvVariable = require('./set-env-var')
|
||||
|
||||
const ENV_PATH =
|
||||
process.env.NODE_ENV === 'production'
|
||||
? path.resolve('/etc', 'lamassu', '.env')
|
||||
: path.resolve(__dirname, '../.env')
|
||||
const BACKUP_TIMESTAMP = Date.now()
|
||||
const BACKUP_PATH = `${ENV_PATH}-${BACKUP_TIMESTAMP}`
|
||||
|
||||
const migrateEnv = newVars => {
|
||||
try {
|
||||
fs.copyFileSync(ENV_PATH, BACKUP_PATH)
|
||||
_.forEach(it => {
|
||||
setEnvVariable(it[0], it[1], { ENV_PATH })
|
||||
}, newVars)
|
||||
fs.unlinkSync(BACKUP_PATH)
|
||||
console.log('Environment migration successful')
|
||||
} catch (e) {
|
||||
// Rollback the migration and restore the backup file
|
||||
if (fs.existsSync(BACKUP_PATH)) {
|
||||
console.log('Rolling back the environment migration...')
|
||||
fs.copyFileSync(BACKUP_PATH, ENV_PATH)
|
||||
fs.unlinkSync(BACKUP_PATH)
|
||||
console.log('Rollback finished')
|
||||
}
|
||||
console.log('Environment migration failed')
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = migrateEnv
|
||||
30
packages/server/tools/set-env-var.js
Normal file
30
packages/server/tools/set-env-var.js
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
const fs = require('fs')
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
const _ = require('lodash/fp')
|
||||
|
||||
const setEnvVariable = (key, value, opts) => {
|
||||
const ENV_PATH = !_.isNil(opts?.ENV_PATH)
|
||||
? opts.ENV_PATH
|
||||
: path.resolve(__dirname, '../.env')
|
||||
const ENV_VARIABLES = fs.readFileSync(ENV_PATH, 'utf-8').split(os.EOL)
|
||||
const target = ENV_VARIABLES.indexOf(
|
||||
ENV_VARIABLES.find(line => line.match(new RegExp(`^${key}=`))),
|
||||
)
|
||||
|
||||
if (target < 0) {
|
||||
// The variable doesn't exist, add it
|
||||
ENV_VARIABLES.push(`${key}=${value}`)
|
||||
} else {
|
||||
// .env already has that variable set, or at least has the definition of its key
|
||||
//
|
||||
// This is currently circumventing a possible bug on dotenv
|
||||
// where the variables on this script were showing up as undefined on the first run despite the key existing,
|
||||
// while on a second run they'd appear as empty string, as intended
|
||||
ENV_VARIABLES.splice(target, 1, `${key}=${value}`)
|
||||
}
|
||||
|
||||
fs.writeFileSync(ENV_PATH, ENV_VARIABLES.join(os.EOL))
|
||||
}
|
||||
|
||||
module.exports = setEnvVariable
|
||||
Loading…
Add table
Add a link
Reference in a new issue