cashless2ecash

cashless2ecash: pay with cards for digital cash (experimental)
Log | Files | Refs | README

commit cd1a9c2cbe1ac7ed2e467ce8611f934298523a6e
parent c00bcdb0a08264ba2522d0f1503ca74a8a96843c
Author: Joel-Haeberli <haebu@rubigen.ch>
Date:   Thu, 16 May 2024 00:29:31 +0200

setup: automate setup

Diffstat:
MMakefile | 22++++++++++++++++------
MREADME | 2++
Mc2ec/c2ec-config.yaml | 8++++----
Mc2ec/db/access.sql | 5++++-
Mc2ec/db/drop.sql | 17++++++++++++++++-
Ac2ec/db/migrate.sh | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asetup | 32++++++++++++++++++++++++++++++++
7 files changed, 138 insertions(+), 12 deletions(-)

diff --git a/Makefile b/Makefile @@ -16,17 +16,26 @@ dependencies-check: build: dependencies-check go build -C ./c2ec/ -o ${C2EC_HOME} +stop: + kill $(pgrep c2ec) + +start: stop + (cd ${C2EC_HOME}; ./c2ec &) + +migrate: build + (cd ./c2ec/db; ./migrate.sh c2ec_admin ${C2EC_DB_ADMIN_PW} ${C2EC_DB_NAME}) + install: dependencies-check - cp ./c2ec-config.yaml ${C2EC_HOME}/c2ec-config.yaml + cp ./c2ec/c2ec-config.yaml ${C2EC_HOME}/c2ec-config.yaml chmod ${C2EC_FILE_PERMISSIONS} ${C2EC_HOME}/c2ec-config.yaml - chown ${C2EC_HOME}/c2ec-config.yaml ${C2EC_USER} - cp ./c2ec-config.conf ${C2EC_HOME}/c2ec-config.conf + chown ${C2EC_USER} ${C2EC_HOME}/c2ec-config.yaml + cp ./c2ec/c2ec-config.conf ${C2EC_HOME}/c2ec-config.conf chmod ${C2EC_FILE_PERMISSIONS} ${C2EC_HOME}/c2ec-config.conf - chown ${C2EC_HOME}/c2ec-config.conf ${C2EC_USER} + chown ${C2EC_USER} ${C2EC_HOME}/c2ec-config.conf touch ${C2EC_HOME}/c2ec-log.txt chmod ${C2EC_FILE_PERMISSIONS} ${C2EC_HOME}/c2ec-log.txt - chown ${C2EC_HOME}/c2ec-log.txt ${C2EC_USER} - + chown ${C2EC_USER} ${C2EC_HOME}/c2ec-log.txt + (cd ./c2ec/db; ./migrate.sh ${C2EC_POSTGRES_USER} ${C2EC_POSTGRES_PASSWORD} ${C2EC_DB_NAME} ${C2EC_DB_ADMIN_PW} ${C2EC_DB_OPERATOR_PW} ${C2EC_DB_API_PW}) echo "you may want to alter the current configuration of your installation at ${C2EC_HOME}/c2ec-config.conf" cli: dependencies-check @@ -34,3 +43,4 @@ cli: dependencies-check simulation: dependencies-check go build -C ./simulation/ -o ${C2EC_HOME} + cp ./simulation/config.yaml ${C2EC_HOME}/sim-config.yaml diff --git a/README b/README @@ -21,6 +21,8 @@ The following tree describes the structure of the document and a rough descripti ## Installation +Hint: the following process can be achieved by editing the `setup` script in this repository and then executing `./setup` (if you agree with the default values, just run the script (not recommended, probably won't even work)) + 1. Clone this repository 2. Define variables 2.1 C2EC_HOME: Everything that is installed here. (default: $HOME) diff --git a/c2ec/c2ec-config.yaml b/c2ec/c2ec-config.yaml @@ -20,7 +20,7 @@ db: password: "local" database: "postgres" providers: - - name: "Wallee" - key: "secret" - - name: "Simulation" - key: "secret" + # - name: "Wallee" + # key: "secret" + #- name: "Simulation" + # key: "secret" diff --git a/c2ec/db/access.sql b/c2ec/db/access.sql @@ -1,15 +1,18 @@ +-- DO NOT EXECUTE THIS BY HAND (use migrate.sh instead) BEGIN; -SELECT _v.register_patch('setup_users', ARRAY['versioning', '0001-c2ec-schema', 'proc-c2ec-payment-notification-listener', 'proc-c2ec-retry-listener', 'proc-c2ec-status-listener', 'proc-c2ec-transfer-listener'], NULL); +SELECT _v.register_patch('access', ARRAY['0001-c2ec-schema', 'proc-c2ec-payment-notification-listener', 'proc-c2ec-retry-listener', 'proc-c2ec-status-listener', 'proc-c2ec-transfer-listener'], NULL); SET search_path TO c2ec; +-- For migration and other db management tasks CREATE USER c2ec_admin WITH ENCRYPTED PASSWORD ADMIN_PASSWORD; --For CLI (managing terminals and providers): CREATE USER c2ec_operator WITH ENCRYPTED PASSWORD OPERATOR_PASSWORD; --For the API (handling withdrawals): CREATE USER c2ec_api WITH ENCRYPTED PASSWORD API_PASSWORD; +GRANT USAGE ON SCHEMA _v TO c2ec_admin; GRANT ALL PRIVILEGES ON DATABASE DB_NAME TO c2ec_admin; GRANT USAGE ON SCHEMA c2ec TO c2ec_operator; diff --git a/c2ec/db/drop.sql b/c2ec/db/drop.sql @@ -3,6 +3,21 @@ BEGIN; DROP SCHEMA IF EXISTS c2ec CASCADE; -DROP SCHEMA IF EXISTS _v CASCADE; +DELETE FROM _v.patches WHERE patch_name IN ( + '0001-c2ec-schema', + 'proc-c2ec-payment-notification-listener', + 'proc-c2ec-retry-listener', + 'proc-c2ec-status-listener', + 'proc-c2ec-transfer-listener', + 'access' +); + +DROP OWNED BY c2ec_operator; +DROP OWNED BY c2ec_api; +DROP OWNED BY c2ec_admin; + +DROP ROLE IF EXISTS c2ec_operator; +DROP ROLE IF EXISTS c2ec_api; +DROP ROLE IF EXISTS c2ec_admin; COMMIT; \ No newline at end of file diff --git a/c2ec/db/migrate.sh b/c2ec/db/migrate.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +if [[ ($# -ne 3) && ($# -ne 6) ]]; then + echo "Usage: $0 <db-username> <db-password> <db-name> [<new-db-admin-pw> <new-db-operator-pw> <new-db-api-pw>]" + exit 1 +fi + +DB_USERNAME=$1 +DB_PASSWORD=$2 +DB_NAME=$3 + +ACCESS_WITH_PASSWORDS="./access-with-passwords.sql" +INITIAL_SETUP=0 +if [ "$#" -eq 6 ]; then + if [[ ($4 = $5) || ($5 = $6) || ($4 = $6) ]]; then + echo "PROBLEM: passwords for db admin, operator and must be different..." + echo "Usage: $0 <db-username> <db-password> <db-name> <source-root> <new-db-admin-pw> <new-db-admin-pw> <new-db-admin-pw>" + exit 1 + fi + + ADMIN_PASSWORD=$4 + OPERATOR_PASSWORD=$5 + API_PASSWORD=$6 + + cp "./access.sql" $ACCESS_WITH_PASSWORDS + sed -i "s/ADMIN_PASSWORD/'$ADMIN_PASSWORD'/g" $ACCESS_WITH_PASSWORDS + sed -i "s/OPERATOR_PASSWORD/'$OPERATOR_PASSWORD'/g" $ACCESS_WITH_PASSWORDS + sed -i "s/API_PASSWORD/'$API_PASSWORD'/g" $ACCESS_WITH_PASSWORDS + sed -i "s/DB_NAME/$DB_NAME/g" $ACCESS_WITH_PASSWORDS + + INITIAL_SETUP=1 +fi + +SQL_SCRIPTS=( + "./versioning.sql" + "./0001-c2ec_schema.sql" + "./proc-c2ec_status_listener.sql" + "./proc-c2ec_payment_notification_listener.sql" + "./proc-c2ec_retry_listener.sql" + "./proc-c2ec_transfer_listener.sql" +) + +execute_sql_scripts() { + for script in "${SQL_SCRIPTS[@]}"; do + echo "Executing SQL script: $script" + PGPASSWORD=$DB_PASSWORD psql -U $DB_USERNAME -d $DB_NAME -f $script + if [ $? -ne 0 ]; then + echo "Failed to execute SQL script: $script" + exit 1 + fi + done + + if [ $INITIAL_SETUP -eq 1 ]; then + PGPASSWORD=$DB_PASSWORD psql -U $DB_USERNAME -d $DB_NAME -f $ACCESS_WITH_PASSWORDS + rm $ACCESS_WITH_PASSWORDS + fi + + PGPASSWORD="" +} + +execute_sql_scripts +if [ $? -ne 0 ]; then + exit 1 +fi diff --git a/setup b/setup @@ -0,0 +1,32 @@ +#!/bin/bash + +# to install the app with non-default values +# uncomment the line you want to change and +# the belonging value + +#export C2EC_HOME=$HOME/c2ec-test-installation +#export C2EC_USER=$(whoami) +#export C2EC_POSTGRES_USER=postgres +#export C2EC_POSTGRES_PASSWORD=postgres +#export C2EC_DB_NAME=postgres +#export C2EC_DB_ADMIN_PW=secret +#export C2EC_DB_OPERATOR_PW=secret +#export C2EC_DB_API_PW=secret +#export C2EC_FILE_PERMISSIONS=660 + +# This will setup the database and the required files inside C2EC_HOME +make install + +# This will compile the c2ec executable and save it to C2EC_HOME +make build + +# This will compile the c2ec cli and save it to C2EC_HOME +make cli + +# This will compile the simulation and save it to C2EC_HOME +make simulation + +unset C2EC_POSTGRES_PASSWORD +unset C2EC_DB_ADMIN_PW +unset C2EC_DB_OPERATOR_PW +unset C2EC_DB_API_PW