#!/bin/bash # # This file is part of TALER # Copyright (C) 2024 Taler Systems SA # # TALER is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation; either version 3, or (at your option) any later version. # # TALER is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # TALER; see the file COPYING. If not, If not, see # # Hard error reporting on. set -eu # Exit, with error message (hard failure) function exit_fail() { echo " FAIL: " "$@" >&2 EXIT_STATUS=1 exit "$EXIT_STATUS" } CONF="$HOME/.config/taler-exchange.conf" VERBOSE=0 while getopts 'ac:hirvV' OPTION; do case "$OPTION" in a) # Phone number is required. echo "CONTACT_PHONE" exit 0 ;; c) # shellcheck disable=SC2034 CONF="$OPTARG" ;; h) echo "This is a KYC measure program that lifts restrictions on deposits after the terms of service were accepted. Expiration rules are set based on the context." echo 'Supported options:' echo ' -a -- show required attributes' # shellcheck disable=SC2016 echo ' -c $CONF -- set configuration' echo ' -h -- print this help' echo ' -i -- show required inputs' echo ' -r -- show required context' echo ' -v -- show version' echo ' -V -- be verbose' exit 0 ;; i) # Need context and current_rules. echo "context" echo "current_rules" exit 0 ;; r) # What to do next? echo "custom_measures" echo "expiration_time" echo "successor_measure" exit 0 ;; v) echo "$0 v0.0.0" exit 0 ;; V) VERBOSE=1 ;; ?) exit_fail "Unrecognized command line option" ;; esac done if [ 1 = "$VERBOSE" ] then echo "Running $0" 1>&2 fi # See https://docs.taler.net/taler-kyc-manual.html#tsref-type-AmlProgramInput # for the full JSON with possible inputs. # First, extract inputs we need INPUTS=$(jq '{"current_rules":.current_rules,"attributes":.attributes,"context":.context}') # Get ToS acceptance confirmation. TOS_ACCEPTED=$(echo "$INPUTS" | jq '.attributes.ACCEPTED_TERMS_OF_SERVICE // null') # Get current rules. CURRENT_RULES=$(echo "$INPUTS" | jq '.current_rules // null') # Get context values. EXPIRATION_TIME=$(echo "$INPUTS" | jq '.context.expiration_time // .current_rules.expiration_time // null') SUCCESSOR_MEASURE=$(echo "$INPUTS" | jq '.context.successor_measure // .current_rules.successor_measure // null') CUSTOM_MEASURES=$(echo "$INPUTS" | jq '.context.custom_measures // null') # FIXME: maybe do this via systemd once instead of in every script run? . /etc/taler-exchange/taler-exchange.env # Validate accepted ToS version if $(echo "$TOS_ACCEPTED" | grep "${EXCHANGE_TERMS_ETAG}" > /dev/null) then # Valid ToS acceptance # Remove limitation from current rules. NEW_RULES=$(echo "$CURRENT_RULES" | jq 'walk(if ( (type == "object") and (.operation_type == "deposit") and (.threshold == "${EXCHANGE_AML_PROGRAM_TOPS_ENABLE_DEPOSITS_THRESHOLD }}") ) then del(.) else . end)') else # Invalid ToS version echo "Version of accepted ToS ${TOS_ACCEPTED} invalid." 1&>2 NEW_RULES="$CURRENT_RULES" fi # Finally, output the new rules. # See https://docs.taler.net/taler-kyc-manual.html#tsref-type-AmlOutcome # for the required output format. jq \ --jsonarg et "$EXPIRATION_TIME" \ --jsonarg sm "$SUCCESSOR_MEASURE" \ --jsonarg cm "$CUSTOM_MEASURES" \ --jsonarg nr "$NEW_RULES" \ '{"new_rules":$nr+{"expiration_time":$et,"successor_measure":$sm,"custom_measures":($nr.custom_measures+$cm)}}|del(..|nulls)' exit 0