@@ -10,23 +10,95 @@ source "${SCRIPTS_ROOT:?}"/util.sh
1010# ===== CONSTANTS =====
1111
1212: ${REPOSITORY_ROOT:= " ${PROSE_POD_API_DIR:? } " }
13- DEMO_DATA_DIR=" ${REPOSITORY_ROOT:? } " /local-run/demo-data
14- : ${SCENARIOS_DIR:= " ${REPOSITORY_ROOT:? } " / local-run/ scenarios}
13+ LOCAL_RUN_DIR=" ${REPOSITORY_ROOT:? } " /local-run
14+ DEMO_DATA_DIR=" ${LOCAL_RUN_DIR:? } " /demo-data
15+ : ${SCENARIOS_DIR:= " ${LOCAL_RUN_DIR:? } " / scenarios}
16+ : ${LOCAL_RUN_SCRIPTS_DIR:= " ${LOCAL_RUN_DIR:? } " / scripts}
1517
1618: ${SCENARIO_NAME:= demo}
1719
1820source " ${DEMO_DATA_DIR:? } /constants.sh"
21+ source " ${LOCAL_RUN_SCRIPTS_DIR:? } /scenario-files.sh"
1922
2023# ===== MAIN LOGIC =====
2124
2225# Create demo scenario.
23- if [ -d " ${SCENARIOS_DIR :? } / ${SCENARIO_NAME :? }" ]; then
26+ if [ -d " ${SCENARIO_DIR :? } " ]; then
2427 edo task local:scenarios:reset -y -- " ${SCENARIO_NAME:? } "
2528else
26- edo task local:scenarios:create -- " ${SCENARIO_NAME:? } "
29+ edo task local:scenarios:create -- " ${SCENARIO_NAME:? } " --based-on=fresh
30+ fi
31+
32+ echo ' ' > " ${SCENARIO_DIR:? } " /NO_RUN
33+ echo ' ' > " ${SCENARIO_DIR:? } " /NO_DELETE
34+
35+ if [[ " $* " == * ' --pod-address-dynamic' * ]]; then
36+ ADDRESS_CFG=' address = { domain = "' " ${DOMAIN:? } " ' " }'
37+ else
38+ ADDRESS_CFG=' address = { ipv4 = "172.20.0.40", ipv6 = "2001:db8::40" }'
39+ fi
40+
41+ mkdir -p " $( dirname " ${PROSE_CONFIG_FILE:? } " ) "
42+ cat << EOF > "${PROSE_CONFIG_FILE:? } "
43+ # Prose Pod API
44+ # REST API for administrating a Prose Pod
45+ # Configuration file
46+ # Example: https://github.com/prose-im/prose-pod-system/blob/master/Prose-example.toml
47+ # All keys: https://github.com/prose-im/prose-pod-api/blob/master/src/service/src/features/app_config/mod.rs
48+
49+ [branding]
50+ company_name = "Prose"
51+
52+ [server]
53+ domain = "prose-demo.org.local"
54+
55+ [pod]
56+ ${ADDRESS_CFG:? }
57+ dashboard_url = "http://localhost:3030/"
58+
59+ [notify.email]
60+ pod_address = "pod@prose-demo.org.local"
61+
62+ smtp_host = "mailpit"
63+ smtp_encrypt = false
64+ EOF
65+
66+ mkdir -p " $( dirname " ${COREDNS_COREFILE:? } " ) "
67+ cat << EOF > "${COREDNS_COREFILE:? } "
68+ .:53 {
69+ file /etc/coredns/zones.db
70+ errors # show errors
71+ log # enable query logs
72+ }
73+ EOF
74+
75+ mkdir -p " $( dirname " ${DNS_ZONE_FILE:? } " ) "
76+ cat << EOF > "${DNS_ZONE_FILE:? } "
77+ @ IN SOA ns.prose-demo.org.local. admin.prose-demo.org.local. (
78+ 2024101701 ; serial
79+ 3600 ; refresh (1 hour)
80+ 600 ; retry (10 minutes)
81+ 86400 ; expire (1 day)
82+ 3600 ; minimum (1 hour)
83+ )
84+ EOF
85+
86+ if [[ " $* " == * ' --pod-address-dynamic' * ]]; then
87+ cat << EOF >> "${DNS_ZONE_FILE:? } "
88+ prose-demo.org.local 3600 IN SRV 0 5 5222 prose-demo.org.local.
89+ prose-demo.org.local 3600 IN SRV 0 5 5269 prose-demo.org.local.
90+ EOF
91+ else
92+ cat << EOF >> "${DNS_ZONE_FILE:? } "
93+ xmpp.prose-demo.org.local 600 IN A 172.20.0.40
94+ xmpp.prose-demo.org.local 600 IN AAAA 2001:db8::40
95+ prose-demo.org.local 3600 IN SRV 0 5 5222 xmpp.prose-demo.org.local.
96+ prose-demo.org.local 3600 IN SRV 0 5 5269 xmpp.prose-demo.org.local.
97+ EOF
2798fi
2899
29100# Run the API.
101+ export ENV_FILE=" ${REPOSITORY_ROOT:? } " /local-run/scripts/make-demo-scenario.env
30102# NOTE: We need to run `local` so we can auto-accept invitations.
31103edo FORCE_RUN=1 task local:run -- --api=local --scenario=" ${SCENARIO_NAME:? } " --detach
32104while ! xh :8080/v1/version -q; do
@@ -47,33 +119,18 @@ log-in-member-n() {
47119 local n=" ${1:? } "
48120 local res=" $( xh POST :8080/v1/login -a " ${MEMBER_JIDS[n]} :${MEMBER_PASSWORDS[n]} " -b) "
49121 if [ $? -eq 0 ]; then
50- jq -r ' .token' <<< " ${res:?}"
122+ MEMBER_TOKENS[n]= " $( jq -r ' .token' <<< " ${res:?}" ) "
51123 else
52- debug ' Retrying…'
124+ debug ' Retrying (debug) …'
53125 log_as_debug_ xh POST :8080/v1/login -a " ${MEMBER_JIDS[n]} :${MEMBER_PASSWORDS[n]} " -b
54126 return 1
55127 fi
56128}
57129
58130info ' Log first admin in'
59- MEMBER_TOKENS[0]= " $( log-in-member-n 0) "
131+ log-in-member-n 0
60132ADMIN_TOKEN=" ${MEMBER_TOKENS[0]} "
61133
62- if [[ " $* " == * ' --pod-address-dynamic' * ]]; then
63- info ' Initialize Pod address (dynamic address)'
64- xh PUT :8080/v1/pod/config -q \
65- address[hostname]=" ${DOMAIN:? } " \
66- dashboard_url=http://localhost:3030 \
67- -A bearer -a " ${ADMIN_TOKEN:? } "
68- else
69- info ' Initialize Pod address (static address)'
70- xh PUT :8080/v1/pod/config -q \
71- address[ipv4]=172.20.0.40 \
72- address[ipv6]=2001:db8::40 \
73- dashboard_url=http://localhost:3030 \
74- -A bearer -a " ${ADMIN_TOKEN:? } "
75- fi
76-
77134info ' Set Workspace icon'
78135xh PUT :8080/v1/workspace/icon -q \
79136 Content-Type:image/png \
@@ -86,7 +143,7 @@ update-member-n() {
86143 local nickname=" ${MEMBER_NICKNAMES[n]} "
87144 if [ -n " ${nickname?} " ]; then
88145 info " Set ${MEMBER_JIDS[n]} ’s nickname"
89- xh PUT :8080/v1/members/" ${MEMBER_JIDS[n]} " /nickname -q \
146+ edo xh PUT :8080/v1/members/" ${MEMBER_JIDS[n]} " /nickname -q \
90147 nickname=" ${nickname:? } " \
91148 -A bearer -a " ${MEMBER_TOKENS[n]} "
92149 else
@@ -96,7 +153,7 @@ update-member-n() {
96153 local avatar=" ${MEMBER_AVATARS[n]} "
97154 if [ -n " ${avatar?} " ]; then
98155 info " Set ${MEMBER_JIDS[n]} ’s avatar"
99- xh PUT :8080/v1/members/" ${MEMBER_JIDS[n]} " /avatar -q \
156+ edo xh PUT :8080/v1/members/" ${MEMBER_JIDS[n]} " /avatar -q \
100157 image=" ${avatar:? } " \
101158 -A bearer -a " ${MEMBER_TOKENS[n]} "
102159 else
@@ -106,7 +163,7 @@ update-member-n() {
106163 local email=" ${MEMBER_EMAILS[n]} "
107164 if [ -n " ${email?} " ]; then
108165 info " Set ${MEMBER_JIDS[n]} ’s email address"
109- xh PUT :8080/v1/members/" ${MEMBER_JIDS[n]} " /email-address -q \
166+ edo xh PUT :8080/v1/members/" ${MEMBER_JIDS[n]} " /email-address -q \
110167 --raw " \" ${email:? } \" " \
111168 -A bearer -a " ${MEMBER_TOKENS[n]} "
112169 else
@@ -126,7 +183,7 @@ add-member-n() {
126183 -A bearer -a " ${ADMIN_TOKEN:? } "
127184
128185 info " Log ${MEMBER_JIDS[n]} in"
129- MEMBER_TOKENS[n]= " $( log-in-member-n " ${n:? } " ) "
186+ log-in-member-n " ${n:? } "
130187
131188 update-member-n " ${n:? } "
132189}
0 commit comments