summaryrefslogtreecommitdiff
path: root/bin/taler-deployment-config-instances
blob: cff8316cda3b978657960cd5431fec65a589921a (plain)
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/env python3

"""
This script makes sure that the merchant backend instances used by the
test/demo environment are created.

We assume that the merchant backend is running, and that the "~/activate"
file has been sourced to provide the right environment variables.
"""

import requests
from os import environ
from sys import exit
from urllib.parse import urljoin

def expect_env(name):
    val = environ.get(name)
    if not val:
        print(f"{name} not defined.  Please source the ~/activate file.")
        exit(1)
    return val


MERCHANT_BACKEND_BASE_URL = expect_env("TALER_ENV_MERCHANT_BACKEND")
TALER_ENV_NAME = expect_env("TALER_ENV_NAME")
TALER_CONFIG_CURRENCY = expect_env("TALER_CONFIG_CURRENCY")
TALER_ENV_FRONTENDS_APITOKEN = expect_env("TALER_ENV_FRONTENDS_APITOKEN")

def ensure_instance(instance_id, name, payto_uris, auth):
    # FIXME: Use auth once the default instance also uses token auth
    instance_response = requests.get(
        urljoin(MERCHANT_BACKEND_BASE_URL, f"private/instances/${instance_id}")
    )
    if instance_response.status_code == 200:
        return
    req = dict(
        id=instance_id,
        name=name,
        payto_uris=payto_uris,
        address=dict(),
        jurisdiction=dict(),
        default_max_wire_fee=f"{TALER_CONFIG_CURRENCY}:1",
        default_wire_fee_amortization=3,
        default_max_deposit_fee=f"{TALER_CONFIG_CURRENCY}:1",
        default_wire_transfer_delay=dict(d_ms="forever"),
        default_pay_delay=dict(d_ms="forever"),
        # FIXME: Eventually, this should be an actual secret token
        auth=auth,
    )
    create_resp = requests.post(
        urljoin(MERCHANT_BACKEND_BASE_URL, "private/instances"), json=req
    )
    if create_resp.status_code < 200 or create_resp.status_code >= 300:
        print(f"Instance '{instance_id}' could not be (re)created, backend says: {create_resp.text}.  Updating its auth now")
        if instance_id != "Tutorial":
            patch_resp = requests.post(
                urljoin(MERCHANT_BACKEND_BASE_URL,
                f"instances/{instance_id}/private/auth"), json=auth
            )
            if patch_resp.status_code < 200 or patch_resp.status_code >= 300:
                print(f"Failed to update auth of '{instance_id}'")
                print(patch_resp.text)
                exit(1)
        else:
            exit(1)

ensure_instance(
    "blog",
    name="Blog",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/blog"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "donations",
    name="Donations",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/donations"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "survey",
    name="Survey",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/survey"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "pos",
    name="PoS",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/pos"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "GNUnet",
    name="GNUnet",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/GNUnet"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

# This instance relate to both the donation receiver and the sync service.
ensure_instance(
    "Taler",
    name="Taler",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Taler"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "default",
    name="Default",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Taler"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

ensure_instance(
    "Tor",
    name="Tor",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Tor"],
    auth=dict(method="token", token=TALER_ENV_FRONTENDS_APITOKEN),
)

# Note: this instance has a fixed secret-token, so as to allow anyone to easily
# run their tutorial.
ensure_instance(
    "Tutorial",
    name="Tutorial",
    payto_uris=[f"payto://x-taler-bank/bank.{TALER_ENV_NAME}.taler.net/Tutorial"],
    auth=dict(method="token", token="secret-token:sandbox")
)