1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#!/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 <http://www.gnu.org/license>
#
# 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)
# No attributes are required.
exit 0
;;
c)
# shellcheck disable=SC2034
CONF="$OPTARG"
;;
h)
echo "This is a KYC measure program that updates the current rules of an account based on values given in 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'
;;
i)
# Need context and current_rules.
echo "context"
echo "current_rules"
exit 0
;;
r)
# Need new_rules, custom_measures, expiration time and successor measure.
echo "new_rules"
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 '{"context":.context,"current_rules":.current_rules}')
# 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')
NEW_RULES=$(echo "$INPUTS" | jq '.context.new_rules // null')
# Finally, output the new rules.
# See https://docs.taler.net/taler-kyc-manual.html#tsref-type-AmlOutcome
# for the required output format.
echo "$INPUTS" \
| jq \
--jsonarg et "$EXPIRATION_TIME" \
--jsonarg sm "$SUCCESSOR_MEASURE" \
--jsonarg cm "$CUSTOM_MEASURES" \
--jsonarg nr "$NEW_RULES" \
'.current_rules+{"new_rules":(.current_rules.new_rules+{"expiration_time":$et,"successor_measure":$sm,"rules":(.current_rules.new_rules.rules+$nr),"custom_measures":(.current_rules.custom_measures+$cm)})}|del(..|nulls)'
exit 0
|