@drumee/setup-infra 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +3 -0
  3. package/configs/etc/cron.d/drumee +6 -0
  4. package/configs/etc/postfix/master.cf +137 -0
  5. package/congigure/init/acme +69 -0
  6. package/congigure/init/mail +16 -0
  7. package/congigure/init/named +27 -0
  8. package/congigure/menu/menu -tmp +144 -0
  9. package/congigure/menu/menu-install +147 -0
  10. package/congigure/menu/menu-reinstall +15 -0
  11. package/congigure/prepare +10 -0
  12. package/congigure/preset/jitsi +9 -0
  13. package/congigure/setup-infra +58 -0
  14. package/congigure/setup-schemas +57 -0
  15. package/congigure/start +29 -0
  16. package/congigure/utils/configure +56 -0
  17. package/congigure/utils/dependencies +90 -0
  18. package/congigure/utils/jitsi +122 -0
  19. package/congigure/utils/misc +77 -0
  20. package/congigure/utils/prompt.sh +35 -0
  21. package/congigure/utils/setup-versions +7 -0
  22. package/index.js +572 -0
  23. package/package.json +30 -0
  24. package/template.js +453 -0
  25. package/templates/env/application.json.tpl +0 -0
  26. package/templates/env/logrotate.tpl +7 -0
  27. package/templates/etc/bind/named.conf.local +13 -0
  28. package/templates/etc/bind/named.conf.log +105 -0
  29. package/templates/etc/bind/named.conf.options +33 -0
  30. package/templates/etc/dkimkeys/dkim.key +1 -0
  31. package/templates/etc/drumee/conf.d/conference.json.tpl +9 -0
  32. package/templates/etc/drumee/conf.d/drumee.json.tpl +7 -0
  33. package/templates/etc/drumee/conf.d/exchange.json.tpl +4 -0
  34. package/templates/etc/drumee/conf.d/myDrumee.json.tpl +16 -0
  35. package/templates/etc/drumee/credential/db.json.tpl +6 -0
  36. package/templates/etc/drumee/credential/email.json.tpl +12 -0
  37. package/templates/etc/drumee/credential/ovh/dns.json.tpl +6 -0
  38. package/templates/etc/drumee/credential/ovh/dns.sh.tpl +7 -0
  39. package/templates/etc/drumee/credential/redis.json.tpl +6 -0
  40. package/templates/etc/drumee/credential/sms.json.tpl +6 -0
  41. package/templates/etc/drumee/dnsapi.sh.tpl +28 -0
  42. package/templates/etc/drumee/drumee.sh.tpl +43 -0
  43. package/templates/etc/drumee/env.json +29 -0
  44. package/templates/etc/drumee/infrastructure/internals/accel.conf.tpl +47 -0
  45. package/templates/etc/drumee/infrastructure/mfs.conf.tpl +16 -0
  46. package/templates/etc/drumee/infrastructure/platform.json.tpl +16 -0
  47. package/templates/etc/drumee/infrastructure/routes/main.conf.tpl +143 -0
  48. package/templates/etc/drumee/infrastructure/servers/tt.conf +199 -0
  49. package/templates/etc/drumee/ssl/main.conf.tpl +10 -0
  50. package/templates/etc/jitsi/jicofo/config +2 -0
  51. package/templates/etc/jitsi/jicofo/defaults/jicofo.conf +225 -0
  52. package/templates/etc/jitsi/jicofo/defaults/logging.properties +15 -0
  53. package/templates/etc/jitsi/jicofo/jicofo.conf.tpl +46 -0
  54. package/templates/etc/jitsi/jicofo/logging.properties.tpl +12 -0
  55. package/templates/etc/jitsi/meet.conf.tpl +131 -0
  56. package/templates/etc/jitsi/ssl.conf.tpl +25 -0
  57. package/templates/etc/jitsi/videobridge/config +2 -0
  58. package/templates/etc/jitsi/videobridge/defaults/jvb.conf +129 -0
  59. package/templates/etc/jitsi/videobridge/defaults/logging.properties +12 -0
  60. package/templates/etc/jitsi/videobridge/jvb.conf +67 -0
  61. package/templates/etc/jitsi/videobridge/logging.properties.tpl +12 -0
  62. package/templates/etc/jitsi/web/config.js.tpl +208 -0
  63. package/templates/etc/jitsi/web/defaults/default +26 -0
  64. package/templates/etc/jitsi/web/defaults/ffdhe2048.txt +8 -0
  65. package/templates/etc/jitsi/web/defaults/interface_config.js +273 -0
  66. package/templates/etc/jitsi/web/defaults/meet.conf +193 -0
  67. package/templates/etc/jitsi/web/defaults/nginx.conf +73 -0
  68. package/templates/etc/jitsi/web/defaults/settings-config.js +480 -0
  69. package/templates/etc/jitsi/web/defaults/ssl.conf +28 -0
  70. package/templates/etc/jitsi/web/defaults/system-config.js +60 -0
  71. package/templates/etc/jitsi/web/interface_config.js +273 -0
  72. package/templates/etc/mail/dkim.key +1 -0
  73. package/templates/etc/mailname +1 -0
  74. package/templates/etc/mysql/mariadb.conf.d/50-server.cnf +120 -0
  75. package/templates/etc/nginx/modules-enabled/90-turn-relay.conf +27 -0
  76. package/templates/etc/nginx/modules-enabled/90-turn-relay.conf.tpl +27 -0
  77. package/templates/etc/nginx/nginx.conf +65 -0
  78. package/templates/etc/nginx/sites-enabled/drumee.conf.tpl +33 -0
  79. package/templates/etc/nginx/sites-enabled/jitsi.conf.tpl +28 -0
  80. package/templates/etc/nginx/sites-enabled/turnrelay.conf.tpl +9 -0
  81. package/templates/etc/opendkim/KeyTable +1 -0
  82. package/templates/etc/postfix/main.cf +76 -0
  83. package/templates/etc/postfix/mysql-virtual-alias-maps.cf +5 -0
  84. package/templates/etc/postfix/mysql-virtual-mailbox-domains.cf +5 -0
  85. package/templates/etc/postfix/mysql-virtual-mailbox-maps.cf +5 -0
  86. package/templates/etc/prosody/conf.d/vhost.cfg.lua.tpl +162 -0
  87. package/templates/etc/prosody/defaults/conf.d/jitsi-meet.cfg.lua +406 -0
  88. package/templates/etc/prosody/defaults/credentials.sh +10 -0
  89. package/templates/etc/prosody/defaults/prosody.cfg.lua +225 -0
  90. package/templates/etc/prosody/defaults/saslauthd.conf +30 -0
  91. package/templates/etc/prosody/prosody.cfg.lua.tpl +203 -0
  92. package/templates/etc/turnserver.conf.tpl +46 -0
  93. package/templates/index.js +102 -0
  94. package/templates/schema/utils/configs.init.sql.tpl +20 -0
  95. package/templates/schema/utils/configs.update.sql.tpl +19 -0
  96. package/templates/server/ecosystem.config.js.tpl +8 -0
  97. package/templates/var/lib/bind/domain.tpl +70 -0
@@ -0,0 +1,73 @@
1
+ user www-data;
2
+ worker_processes {{ .Env.NGINX_WORKER_PROCESSES | default "4" }};
3
+ pid /run/nginx.pid;
4
+ include /etc/nginx/modules-enabled/*.conf;
5
+
6
+ events {
7
+ worker_connections {{ .Env.NGINX_WORKER_CONNECTIONS | default "768" }};
8
+ # multi_accept on;
9
+ }
10
+
11
+ http {
12
+
13
+ ##
14
+ # Basic Settings
15
+ ##
16
+
17
+ sendfile on;
18
+ tcp_nopush on;
19
+ tcp_nodelay on;
20
+ keepalive_timeout 65;
21
+ types_hash_max_size 2048;
22
+ server_tokens off;
23
+
24
+ # server_names_hash_bucket_size 64;
25
+ # server_name_in_redirect off;
26
+
27
+ client_max_body_size 0;
28
+
29
+ {{ if .Env.NGINX_RESOLVER }}
30
+ resolver {{ .Env.NGINX_RESOLVER }};
31
+ {{ end -}}
32
+
33
+ include /etc/nginx/mime.types;
34
+ types {
35
+ # add support for wasm MIME type, that is required by specification and it is not part of default mime.types file
36
+ application/wasm wasm;
37
+ # add support for the wav MIME type that is requried to playback wav files in Firefox.
38
+ audio/wav wav;
39
+ }
40
+ default_type application/octet-stream;
41
+
42
+ ##
43
+ # Logging Settings
44
+ ##
45
+
46
+ access_log /dev/stdout;
47
+ error_log /dev/stderr;
48
+
49
+ ##
50
+ # Gzip Settings
51
+ ##
52
+
53
+ gzip on;
54
+ gzip_types text/plain text/css application/javascript application/json;
55
+ gzip_vary on;
56
+ gzip_min_length 860;
57
+
58
+ ##
59
+ # Connection header for WebSocket reverse proxy
60
+ ##
61
+ map $http_upgrade $connection_upgrade {
62
+ default upgrade;
63
+ '' close;
64
+ }
65
+
66
+ ##
67
+ # Virtual Host Configs
68
+ ##
69
+ include /config/nginx/site-confs/*;
70
+ }
71
+
72
+
73
+ daemon off;
@@ -0,0 +1,480 @@
1
+ {{ $DEPLOYMENTINFO_USERREGION := .Env.DEPLOYMENTINFO_USERREGION | default "" -}}
2
+ {{ $ENABLE_AUDIO_PROCESSING := .Env.ENABLE_AUDIO_PROCESSING | default "true" | toBool -}}
3
+ {{ $ENABLE_BREAKOUT_ROOMS := .Env.ENABLE_BREAKOUT_ROOMS | default "true" | toBool -}}
4
+ {{ $ENABLE_CALENDAR := .Env.ENABLE_CALENDAR | default "false" | toBool -}}
5
+ {{ $ENABLE_FILE_RECORDING_SHARING := .Env.ENABLE_FILE_RECORDING_SHARING | default "false" | toBool -}}
6
+ {{ $ENABLE_IPV6 := .Env.ENABLE_IPV6 | default "true" | toBool -}}
7
+ {{ $ENABLE_LIPSYNC := .Env.ENABLE_LIPSYNC | default "false" | toBool -}}
8
+ {{ $ENABLE_NO_AUDIO_DETECTION := .Env.ENABLE_NO_AUDIO_DETECTION | default "true" | toBool -}}
9
+ {{ $ENABLE_P2P := .Env.ENABLE_P2P | default "true" | toBool -}}
10
+ {{ $ENABLE_PREJOIN_PAGE := .Env.ENABLE_PREJOIN_PAGE | default "true" | toBool -}}
11
+ {{ $ENABLE_WELCOME_PAGE := .Env.ENABLE_WELCOME_PAGE | default "true" | toBool -}}
12
+ {{ $ENABLE_CLOSE_PAGE := .Env.ENABLE_CLOSE_PAGE | default "false" | toBool -}}
13
+ {{ $ENABLE_RECORDING := .Env.ENABLE_RECORDING | default "false" | toBool -}}
14
+ {{ $ENABLE_SERVICE_RECORDING := .Env.ENABLE_SERVICE_RECORDING | default ($ENABLE_RECORDING | printf "%t") | toBool -}}
15
+ {{ $ENABLE_LIVESTREAMING := .Env.ENABLE_LIVESTREAMING | default "false" | toBool -}}
16
+ {{ $ENABLE_LIVESTREAMING_DATA_PRIVACY_LINK := .Env.ENABLE_LIVESTREAMING_DATA_PRIVACY_LINK | default "https://policies.google.com/privacy" -}}
17
+ {{ $ENABLE_LIVESTREAMING_HELP_LINK := .Env.ENABLE_LIVESTREAMING_HELP_LINK | default "https://jitsi.org/live" -}}
18
+ {{ $ENABLE_LIVESTREAMING_TERMS_LINK := .Env.ENABLE_LIVESTREAMING_TERMS_LINK | default "https://www.youtube.com/t/terms" -}}
19
+ {{ $ENABLE_LIVESTREAMING_VALIDATOR_REGEXP_STRING := .Env.ENABLE_LIVESTREAMING_VALIDATOR_REGEXP_STRING | default "^(?:[a-zA-Z0-9]{4}(?:-(?!$)|$)){4}" -}}
20
+ {{ $ENABLE_REMB := .Env.ENABLE_REMB | default "true" | toBool -}}
21
+ {{ $ENABLE_REQUIRE_DISPLAY_NAME := .Env.ENABLE_REQUIRE_DISPLAY_NAME | default "false" | toBool -}}
22
+ {{ $ENABLE_SIMULCAST := .Env.ENABLE_SIMULCAST | default "true" | toBool -}}
23
+ {{ $ENABLE_STATS_ID := .Env.ENABLE_STATS_ID | default "false" | toBool -}}
24
+ {{ $ENABLE_STEREO := .Env.ENABLE_STEREO | default "false" | toBool -}}
25
+ {{ $ENABLE_OPUS_RED := .Env.ENABLE_OPUS_RED | default "false" | toBool -}}
26
+ {{ $ENABLE_TALK_WHILE_MUTED := .Env.ENABLE_TALK_WHILE_MUTED | default "false" | toBool -}}
27
+ {{ $ENABLE_TCC := .Env.ENABLE_TCC | default "true" | toBool -}}
28
+ {{ $ENABLE_TRANSCRIPTIONS := .Env.ENABLE_TRANSCRIPTIONS | default "false" | toBool -}}
29
+ {{ $TRANSLATION_LANGUAGES := .Env.TRANSLATION_LANGUAGES | default "[]" -}}
30
+ {{ $TRANSLATION_LANGUAGES_HEAD := .Env.TRANSLATION_LANGUAGES_HEAD | default "['en']" -}}
31
+ {{ $USE_APP_LANGUAGE := .Env.USE_APP_LANGUAGE | default "true" | toBool -}}
32
+ {{ $PREFERRED_LANGUAGE := .Env.PREFERRED_LANGUAGE | default "en-US" -}}
33
+ {{ $DISABLE_START_FOR_ALL := .Env.DISABLE_START_FOR_ALL | default "false" | toBool -}}
34
+ {{ $AUTO_CAPTION_ON_RECORD := .Env.AUTO_CAPTION_ON_RECORD | default "false" | toBool -}}
35
+ {{ $ENABLE_JAAS_COMPONENTS := .Env.ENABLE_JAAS_COMPONENTS | default "0" | toBool }}
36
+ {{ $HIDE_PREJOIN_DISPLAY_NAME := .Env.HIDE_PREJOIN_DISPLAY_NAME | default "false" | toBool -}}
37
+ {{ $PUBLIC_URL := .Env.PUBLIC_URL | default "https://localhost:8443" -}}
38
+ {{ $RESOLUTION := .Env.RESOLUTION | default "720" -}}
39
+ {{ $RESOLUTION_MIN := .Env.RESOLUTION_MIN | default "180" -}}
40
+ {{ $RESOLUTION_WIDTH := .Env.RESOLUTION_WIDTH | default "1280" -}}
41
+ {{ $RESOLUTION_WIDTH_MIN := .Env.RESOLUTION_WIDTH_MIN | default "320" -}}
42
+ {{ $START_AUDIO_ONLY := .Env.START_AUDIO_ONLY | default "false" | toBool -}}
43
+ {{ $START_AUDIO_MUTED := .Env.START_AUDIO_MUTED | default 10 -}}
44
+ {{ $START_WITH_AUDIO_MUTED := .Env.START_WITH_AUDIO_MUTED | default "false" | toBool -}}
45
+ {{ $START_SILENT := .Env.START_SILENT | default "false" | toBool -}}
46
+ {{ $DISABLE_AUDIO_LEVELS := .Env.DISABLE_AUDIO_LEVELS | default "false" | toBool -}}
47
+ {{ $ENABLE_NOISY_MIC_DETECTION := .Env.ENABLE_NOISY_MIC_DETECTION | default "true" | toBool -}}
48
+ {{ $START_VIDEO_MUTED := .Env.START_VIDEO_MUTED | default 10 -}}
49
+ {{ $START_WITH_VIDEO_MUTED := .Env.START_WITH_VIDEO_MUTED | default "false" | toBool -}}
50
+ {{ $DESKTOP_SHARING_FRAMERATE_MIN := .Env.DESKTOP_SHARING_FRAMERATE_MIN | default 5 -}}
51
+ {{ $DESKTOP_SHARING_FRAMERATE_MAX := .Env.DESKTOP_SHARING_FRAMERATE_MAX | default 5 -}}
52
+ {{ $TESTING_OCTO_PROBABILITY := .Env.TESTING_OCTO_PROBABILITY | default "0" -}}
53
+ {{ $TESTING_CAP_SCREENSHARE_BITRATE := .Env.TESTING_CAP_SCREENSHARE_BITRATE | default "1" -}}
54
+ {{ $XMPP_DOMAIN := .Env.XMPP_DOMAIN | default "meet.jitsi" -}}
55
+ {{ $XMPP_RECORDER_DOMAIN := .Env.XMPP_RECORDER_DOMAIN | default "recorder.meet.jitsi" -}}
56
+ {{ $DISABLE_DEEP_LINKING := .Env.DISABLE_DEEP_LINKING | default "false" | toBool -}}
57
+ {{ $VIDEOQUALITY_ENFORCE_PREFERRED_CODEC := .Env.VIDEOQUALITY_ENFORCE_PREFERRED_CODEC | default "false" | toBool -}}
58
+ {{ $DISABLE_POLLS := .Env.DISABLE_POLLS | default "false" | toBool -}}
59
+ {{ $DISABLE_REACTIONS := .Env.DISABLE_REACTIONS | default "false" | toBool -}}
60
+ {{ $DISABLE_REMOTE_VIDEO_MENU := .Env.DISABLE_REMOTE_VIDEO_MENU | default "false" | toBool -}}
61
+ {{ $DISABLE_PRIVATE_CHAT:= .Env.DISABLE_PRIVATE_CHAT | default "false" | toBool -}}
62
+ {{ $DISABLE_KICKOUT := .Env.DISABLE_KICKOUT | default "false" | toBool -}}
63
+ {{ $DISABLE_GRANT_MODERATOR := .Env.DISABLE_GRANT_MODERATOR | default "false" | toBool -}}
64
+ {{ $ENABLE_E2EPING := .Env.ENABLE_E2EPING | default "false" | toBool -}}
65
+ {{ $DISABLE_LOCAL_RECORDING := .Env.DISABLE_LOCAL_RECORDING | default "false" | toBool -}}
66
+ {{ $ENABLE_LOCAL_RECORDING_NOTIFY_ALL_PARTICIPANT := .Env.ENABLE_LOCAL_RECORDING_NOTIFY_ALL_PARTICIPANT | default "false" | toBool -}}
67
+ {{ $ENABLE_LOCAL_RECORDING_SELF_START := .Env.ENABLE_LOCAL_RECORDING_SELF_START | default "false" | toBool -}}
68
+ {{ $DISABLE_PROFILE := .Env.DISABLE_PROFILE | default "false" | toBool -}}
69
+ {{ $ROOM_PASSWORD_DIGITS := .Env.ROOM_PASSWORD_DIGITS | default "false" -}}
70
+ {{ $WHITEBOARD_COLLAB_SERVER_PUBLIC_URL := .Env.WHITEBOARD_COLLAB_SERVER_PUBLIC_URL | default "" -}}
71
+ {{ $WHITEBOARD_ENABLED := .Env.WHITEBOARD_ENABLED | default "false" | toBool -}}
72
+
73
+ // Video configuration.
74
+ //
75
+
76
+ if (!config.hasOwnProperty('constraints')) config.constraints = {};
77
+ if (!config.constraints.hasOwnProperty('video')) config.constraints.video = {};
78
+
79
+ config.resolution = {{ $RESOLUTION }};
80
+ config.constraints.video.height = { ideal: {{ $RESOLUTION }}, max: {{ $RESOLUTION }}, min: {{ $RESOLUTION_MIN }} };
81
+ config.constraints.video.width = { ideal: {{ $RESOLUTION_WIDTH }}, max: {{ $RESOLUTION_WIDTH }}, min: {{ $RESOLUTION_WIDTH_MIN }}};
82
+ config.disableSimulcast = {{ not $ENABLE_SIMULCAST }};
83
+ config.startVideoMuted = {{ $START_VIDEO_MUTED }};
84
+ config.startWithVideoMuted = {{ $START_WITH_VIDEO_MUTED }};
85
+
86
+ {{ if .Env.START_BITRATE -}}
87
+ config.startBitrate = '{{ .Env.START_BITRATE }}';
88
+ {{ end -}}
89
+
90
+ if (!config.hasOwnProperty('flags')) config.flags = {};
91
+ config.flags.sourceNameSignaling = true;
92
+ config.flags.sendMultipleVideoStreams = true;
93
+ config.flags.receiveMultipleVideoStreams = true;
94
+
95
+
96
+ // ScreenShare Configuration.
97
+ //
98
+
99
+ config.desktopSharingFrameRate = { min: {{ $DESKTOP_SHARING_FRAMERATE_MIN }}, max: {{ $DESKTOP_SHARING_FRAMERATE_MAX }} };
100
+
101
+ // Audio configuration.
102
+ //
103
+
104
+ config.enableNoAudioDetection = {{ $ENABLE_NO_AUDIO_DETECTION }};
105
+ config.enableTalkWhileMuted = {{ $ENABLE_TALK_WHILE_MUTED }};
106
+ config.disableAP = {{ not $ENABLE_AUDIO_PROCESSING }};
107
+
108
+ if (!config.hasOwnProperty('audioQuality')) config.audioQuality = {};
109
+ config.audioQuality.stereo = {{ $ENABLE_STEREO }};
110
+
111
+ {{ if .Env.AUDIO_QUALITY_OPUS_BITRATE -}}
112
+ config.audioQuality.opusMaxAverageBitrate = '{{ .Env.AUDIO_QUALITY_OPUS_BITRATE }}';
113
+ {{ end -}}
114
+
115
+ config.startAudioOnly = {{ $START_AUDIO_ONLY }};
116
+ config.startAudioMuted = {{ $START_AUDIO_MUTED }};
117
+ config.startWithAudioMuted = {{ $START_WITH_AUDIO_MUTED }};
118
+ config.startSilent = {{ $START_SILENT }};
119
+ config.enableOpusRed = {{ $ENABLE_OPUS_RED }};
120
+ config.disableAudioLevels = {{ $DISABLE_AUDIO_LEVELS }};
121
+ config.enableNoisyMicDetection = {{ $ENABLE_NOISY_MIC_DETECTION }};
122
+
123
+
124
+ // Peer-to-Peer options.
125
+ //
126
+
127
+ if (!config.hasOwnProperty('p2p')) config.p2p = {};
128
+
129
+ config.p2p.enabled = {{ $ENABLE_P2P }};
130
+
131
+
132
+ // Breakout Rooms
133
+ //
134
+
135
+ config.hideAddRoomButton = {{ $ENABLE_BREAKOUT_ROOMS | not }};
136
+
137
+
138
+ // Etherpad
139
+ //
140
+
141
+ {{ if .Env.ETHERPAD_PUBLIC_URL -}}
142
+ config.etherpad_base = '{{ .Env.ETHERPAD_PUBLIC_URL }}';
143
+ {{ else if .Env.ETHERPAD_URL_BASE -}}
144
+ config.etherpad_base = '{{ $PUBLIC_URL }}/etherpad/p/';
145
+ {{ end -}}
146
+
147
+
148
+ // Recording.
149
+ //
150
+
151
+ {{ if $ENABLE_RECORDING -}}
152
+
153
+ config.hiddenDomain = '{{ $XMPP_RECORDER_DOMAIN }}';
154
+
155
+ if (!config.hasOwnProperty('recordingService')) config.recordingService = {};
156
+
157
+ // Whether to enable file recording or not using the "service" defined by the finalizer in Jibri
158
+ config.recordingService.enabled = {{ $ENABLE_SERVICE_RECORDING }};
159
+
160
+ // Whether to show the possibility to share file recording with other people
161
+ // (e.g. meeting participants), based on the actual implementation
162
+ // on the backend.
163
+ config.recordingService.sharingEnabled = {{ $ENABLE_FILE_RECORDING_SHARING }};
164
+
165
+ // Live streaming configuration.
166
+ if (!config.hasOwnProperty('liveStreaming')) config.liveStreaming = {};
167
+ config.liveStreaming.enabled = {{ $ENABLE_LIVESTREAMING }};
168
+ config.liveStreaming.dataPrivacyLink= '{{ $ENABLE_LIVESTREAMING_DATA_PRIVACY_LINK }}';
169
+ config.liveStreaming.helpLink= '{{ $ENABLE_LIVESTREAMING_HELP_LINK }}';
170
+ config.liveStreaming.termsLink= '{{ $ENABLE_LIVESTREAMING_TERMS_LINK }}';
171
+ config.liveStreaming.validatorRegExpString= '{{ $ENABLE_LIVESTREAMING_VALIDATOR_REGEXP_STRING }}';
172
+
173
+ {{ if .Env.DROPBOX_APPKEY -}}
174
+ // Enable the dropbox integration.
175
+ if (!config.hasOwnProperty('dropbox')) config.dropbox = {};
176
+ config.dropbox.appKey = '{{ .Env.DROPBOX_APPKEY }}';
177
+ {{ if .Env.DROPBOX_REDIRECT_URI -}}
178
+ // A URL to redirect the user to, after authenticating
179
+ // by default uses:
180
+ // 'https://jitsi-meet.example.com/static/oauth.html'
181
+ config.dropbox.redirectURI = '{{ .Env.DROPBOX_REDIRECT_URI }}';
182
+ {{ end -}}
183
+ {{ end -}}
184
+ {{ end -}}
185
+
186
+
187
+ // Local recording configuration.
188
+ if (!config.hasOwnProperty('localRecording')) config.localRecording = {};
189
+ config.localRecording.disable = {{ $DISABLE_LOCAL_RECORDING }};
190
+ config.localRecording.notifyAllParticipants = {{ $ENABLE_LOCAL_RECORDING_NOTIFY_ALL_PARTICIPANT }};
191
+ config.localRecording.disableSelfRecording = {{ $ENABLE_LOCAL_RECORDING_SELF_START }};
192
+
193
+
194
+ // Analytics.
195
+ //
196
+
197
+ if (!config.hasOwnProperty('analytics')) config.analytics = {};
198
+
199
+ {{ if .Env.AMPLITUDE_ID -}}
200
+ // The Amplitude APP Key:
201
+ config.analytics.amplitudeAPPKey = '{{ .Env.AMPLITUDE_ID }}';
202
+ {{ end -}}
203
+
204
+ {{ if .Env.GOOGLE_ANALYTICS_ID -}}
205
+ // The Google Analytics Tracking ID:
206
+ config.analytics.googleAnalyticsTrackingId = '{{ .Env.GOOGLE_ANALYTICS_ID }}';
207
+ {{ end -}}
208
+
209
+ {{ if .Env.MATOMO_ENDPOINT -}}
210
+ // Matomo endpoint:
211
+ config.analytics.matomoEndpoint = '{{ .Env.MATOMO_ENDPOINT }}';
212
+ {{ end -}}
213
+
214
+ {{ if .Env.MATOMO_SITE_ID -}}
215
+ // Matomo site ID:
216
+ config.analytics.matomoSiteID = '{{ .Env.MATOMO_SITE_ID }}';
217
+ {{ end -}}
218
+
219
+ {{ if .Env.ANALYTICS_SCRIPT_URLS -}}
220
+ // Array of script URLs to load as lib-jitsi-meet "analytics handlers".
221
+ config.analytics.scriptURLs = [ '{{ join "','" (splitList "," .Env.ANALYTICS_SCRIPT_URLS) }}' ];
222
+ {{ end -}}
223
+
224
+ {{ if .Env.ANALYTICS_WHITELISTED_EVENTS -}}
225
+ config.analytics.whiteListedEvents = [ '{{ join "','" (splitList "," .Env.ANALYTICS_WHITELISTED_EVENTS) }}' ];
226
+ {{ end -}}
227
+
228
+ {{ if .Env.CALLSTATS_CUSTOM_SCRIPT_URL -}}
229
+ config.callStatsCustomScriptUrl = '{{ .Env.CALLSTATS_CUSTOM_SCRIPT_URL }}';
230
+ {{ end -}}
231
+
232
+ {{ if .Env.CALLSTATS_ID -}}
233
+ // To enable sending statistics to callstats.io you must provide the
234
+ // Application ID and Secret.
235
+ config.callStatsID = '{{ .Env.CALLSTATS_ID }}';
236
+ {{ end -}}
237
+
238
+ {{ if .Env.CALLSTATS_ID -}}
239
+ config.callStatsSecret = '{{ .Env.CALLSTATS_SECRET }}';
240
+ {{ end -}}
241
+
242
+ // Enables callstatsUsername to be reported as statsId and used
243
+ // by callstats as repoted remote id.
244
+ config.enableStatsID = {{ $ENABLE_STATS_ID }};
245
+
246
+
247
+ // Dial in/out services.
248
+ //
249
+
250
+ {{ if $ENABLE_JAAS_COMPONENTS }}
251
+ config.dialInConfCodeUrl = 'https://conference-mapper.jitsi.net/v1/access';
252
+ config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids';
253
+ {{ else }}
254
+ {{ if .Env.CONFCODE_URL -}}
255
+ config.dialInConfCodeUrl = '{{ .Env.CONFCODE_URL }}';
256
+ {{ end -}}
257
+ {{ if .Env.DIALIN_NUMBERS_URL -}}
258
+ config.dialInNumbersUrl = '{{ .Env.DIALIN_NUMBERS_URL }}';
259
+ {{ end -}}
260
+ {{ end -}}
261
+
262
+ {{ if .Env.DIALOUT_AUTH_URL -}}
263
+ config.dialOutAuthUrl = '{{ .Env.DIALOUT_AUTH_URL }}';
264
+ {{ end -}}
265
+
266
+ {{ if .Env.DIALOUT_CODES_URL -}}
267
+ config.dialOutCodesUrl = '{{ .Env.DIALOUT_CODES_URL }}';
268
+ {{ end -}}
269
+
270
+
271
+ // Calendar service integration.
272
+ //
273
+
274
+ config.enableCalendarIntegration = {{ $ENABLE_CALENDAR }};
275
+
276
+ {{ if .Env.GOOGLE_API_APP_CLIENT_ID -}}
277
+ config.googleApiApplicationClientID = '{{ .Env.GOOGLE_API_APP_CLIENT_ID }}';
278
+ {{ end -}}
279
+
280
+ {{ if .Env.MICROSOFT_API_APP_CLIENT_ID -}}
281
+ config.microsoftApiApplicationClientID = '{{ .Env.MICROSOFT_API_APP_CLIENT_ID }}';
282
+ {{ end -}}
283
+
284
+
285
+ // Invitation service.
286
+ //
287
+
288
+ {{ if .Env.INVITE_SERVICE_URL -}}
289
+ config.inviteServiceUrl = '{{ .Env.INVITE_SERVICE_URL }}';
290
+ {{ end -}}
291
+
292
+ {{ if .Env.PEOPLE_SEARCH_URL -}}
293
+ config.peopleSearchUrl = '{{ .Env.PEOPLE_SEARCH_URL }}';
294
+ config.peopleSearchQueryTypes = ['user','conferenceRooms'];
295
+ {{ end -}}
296
+
297
+
298
+ // Miscellaneous.
299
+ //
300
+
301
+ // Prejoin page.
302
+ if (!config.hasOwnProperty('prejoinConfig')) config.prejoinConfig = {};
303
+ config.prejoinConfig.enabled = {{ $ENABLE_PREJOIN_PAGE }};
304
+
305
+ // Hides the participant name editing field in the prejoin screen.
306
+ config.prejoinConfig.hideDisplayName = {{ $HIDE_PREJOIN_DISPLAY_NAME }};
307
+
308
+ // List of buttons to hide from the extra join options dropdown on prejoin screen.
309
+ {{ if .Env.HIDE_PREJOIN_EXTRA_BUTTONS -}}
310
+ config.prejoinConfig.hideExtraJoinButtons = [ '{{ join "','" (splitList "," .Env.HIDE_PREJOIN_EXTRA_BUTTONS) }}' ];
311
+ {{ end -}}
312
+
313
+ // Welcome page.
314
+ config.enableWelcomePage = {{ $ENABLE_WELCOME_PAGE }};
315
+
316
+ // Close page.
317
+ config.enableClosePage = {{ $ENABLE_CLOSE_PAGE }};
318
+
319
+ // Default language.
320
+ {{ if .Env.DEFAULT_LANGUAGE -}}
321
+ config.defaultLanguage = '{{ .Env.DEFAULT_LANGUAGE }}';
322
+ {{ end -}}
323
+
324
+ // Require users to always specify a display name.
325
+ config.requireDisplayName = {{ $ENABLE_REQUIRE_DISPLAY_NAME }};
326
+
327
+ // Chrome extension banner.
328
+ {{ if .Env.CHROME_EXTENSION_BANNER_JSON -}}
329
+ config.chromeExtensionBanner = {{ .Env.CHROME_EXTENSION_BANNER_JSON }};
330
+ {{ end -}}
331
+
332
+ // Disables profile and the edit of all fields from the profile settings (display name and email)
333
+ config.disableProfile = {{ $DISABLE_PROFILE }};
334
+
335
+ // Room password (false for anything, number for max digits)
336
+ {{ if $ENABLE_JAAS_COMPONENTS -}}
337
+ config.roomPasswordNumberOfDigits = 10;
338
+ {{ else -}}
339
+ config.roomPasswordNumberOfDigits = {{ $ROOM_PASSWORD_DIGITS }};
340
+ {{ end -}}
341
+
342
+ // Advanced.
343
+ //
344
+
345
+ // Lipsync hack in jicofo, may not be safe.
346
+ config.enableLipSync = {{ $ENABLE_LIPSYNC }};
347
+
348
+ config.enableRemb = {{ $ENABLE_REMB }};
349
+ config.enableTcc = {{ $ENABLE_TCC }};
350
+
351
+ // Enable IPv6 support.
352
+ config.useIPv6 = {{ $ENABLE_IPV6 }};
353
+
354
+ // Transcriptions (subtitles and buttons can be configured in interface_config)
355
+ config.transcription = { enabled: {{ $ENABLE_TRANSCRIPTIONS }} };
356
+ config.transcription.translationLanguages = {{ $TRANSLATION_LANGUAGES }};
357
+ config.transcription.translationLanguagesHead = {{ $TRANSLATION_LANGUAGES_HEAD }};
358
+ config.transcription.useAppLanguage = {{ $USE_APP_LANGUAGE }};
359
+ config.transcription.preferredLanguage = '{{ $PREFERRED_LANGUAGE }}';
360
+ config.transcription.disableStartForAll = {{ $DISABLE_START_FOR_ALL }};
361
+ config.transcription.autoCaptionOnRecord = {{ $AUTO_CAPTION_ON_RECORD }};
362
+
363
+ {{ if .Env.DYNAMIC_BRANDING_URL -}}
364
+ // External API url used to receive branding specific information.
365
+ config.dynamicBrandingUrl = '{{ .Env.DYNAMIC_BRANDING_URL }}';
366
+ {{ else if .Env.BRANDING_DATA_URL -}}
367
+ config.brandingDataUrl = '{{ .Env.BRANDING_DATA_URL }}';
368
+ {{ end -}}
369
+
370
+ {{ if .Env.TOKEN_AUTH_URL -}}
371
+ // Authenticate using external service or just focus external auth window if there is one already.
372
+ config.tokenAuthUrl = '{{ .Env.TOKEN_AUTH_URL }}';
373
+ {{ end -}}
374
+
375
+
376
+ // Deployment information.
377
+ //
378
+
379
+ if (!config.hasOwnProperty('deploymentInfo')) config.deploymentInfo = {};
380
+
381
+ {{ if .Env.DEPLOYMENTINFO_ENVIRONMENT -}}
382
+ config.deploymentInfo.environment = '{{ .Env.DEPLOYMENTINFO_ENVIRONMENT }}';
383
+ {{ end -}}
384
+
385
+ {{ if .Env.DEPLOYMENTINFO_SHARD -}}
386
+ config.deploymentInfo.shard = '{{ .Env.DEPLOYMENTINFO_SHARD }}';
387
+ {{ end -}}
388
+
389
+ {{ if .Env.DEPLOYMENTINFO_ENVIRONMENT_TYPE -}}
390
+ config.deploymentInfo.envType = '{{ .Env.DEPLOYMENTINFO_ENVIRONMENT_TYPE }}';
391
+ {{ end -}}
392
+
393
+ {{ if .Env.DEPLOYMENTINFO_REGION -}}
394
+ config.deploymentInfo.region = '{{ .Env.DEPLOYMENTINFO_REGION }}';
395
+ {{ end -}}
396
+
397
+ {{ if $DEPLOYMENTINFO_USERREGION -}}
398
+ config.deploymentInfo.userRegion = '{{ $DEPLOYMENTINFO_USERREGION }}';
399
+ {{ end -}}
400
+
401
+
402
+ // Testing
403
+ //
404
+
405
+ if (!config.hasOwnProperty('testing')) config.testing = {};
406
+ if (!config.testing.hasOwnProperty('octo')) config.testing.octo = {};
407
+
408
+ config.testing.capScreenshareBitrate = {{ $TESTING_CAP_SCREENSHARE_BITRATE }};
409
+ config.testing.octo.probability = {{ $TESTING_OCTO_PROBABILITY }};
410
+
411
+ // Deep Linking
412
+ config.disableDeepLinking = {{ $DISABLE_DEEP_LINKING }};
413
+
414
+ // P2P preferred codec
415
+ {{ if .Env.P2P_PREFERRED_CODEC -}}
416
+ config.p2p.preferredCodec = '{{ .Env.P2P_PREFERRED_CODEC }}';
417
+ {{ end -}}
418
+
419
+ // Enable preferred video Codec
420
+ if (!config.hasOwnProperty('videoQuality')) config.videoQuality = {};
421
+ {{ if .Env.VIDEOQUALITY_PREFERRED_CODEC -}}
422
+ config.videoQuality.preferredCodec = '{{ .Env.VIDEOQUALITY_PREFERRED_CODEC }}';
423
+ {{ end -}}
424
+
425
+ config.videoQuality.enforcePreferredCodec = {{ $VIDEOQUALITY_ENFORCE_PREFERRED_CODEC }};
426
+
427
+ if (!config.videoQuality.hasOwnProperty('maxBitratesVideo')) config.videoQuality.maxBitratesVideo = null;
428
+ {{ if and .Env.VIDEOQUALITY_BITRATE_H264_LOW .Env.VIDEOQUALITY_BITRATE_H264_STANDARD .Env.VIDEOQUALITY_BITRATE_H264_HIGH -}}
429
+ config.videoQuality.maxBitratesVideo = config.videoQuality.maxBitratesVideo || {}
430
+ config.videoQuality.maxBitratesVideo.H264 = { low: {{ .Env.VIDEOQUALITY_BITRATE_H264_LOW }}, standard: {{ .Env.VIDEOQUALITY_BITRATE_H264_STANDARD }}, high: {{ .Env.VIDEOQUALITY_BITRATE_H264_HIGH }} };
431
+ {{ end -}}
432
+ {{ if and .Env.VIDEOQUALITY_BITRATE_VP8_LOW .Env.VIDEOQUALITY_BITRATE_VP8_STANDARD .Env.VIDEOQUALITY_BITRATE_VP8_HIGH -}}
433
+ config.videoQuality.maxBitratesVideo = config.videoQuality.maxBitratesVideo || {}
434
+ config.videoQuality.maxBitratesVideo.VP8 = { low: {{ .Env.VIDEOQUALITY_BITRATE_VP8_LOW }}, standard: {{ .Env.VIDEOQUALITY_BITRATE_VP8_STANDARD }}, high: {{ .Env.VIDEOQUALITY_BITRATE_VP8_HIGH }} };
435
+ {{ end -}}
436
+ {{ if and .Env.VIDEOQUALITY_BITRATE_VP9_LOW .Env.VIDEOQUALITY_BITRATE_VP9_STANDARD .Env.VIDEOQUALITY_BITRATE_VP9_HIGH -}}
437
+ config.videoQuality.maxBitratesVideo = config.videoQuality.maxBitratesVideo || {}
438
+ config.videoQuality.maxBitratesVideo.VP9 = { low: {{ .Env.VIDEOQUALITY_BITRATE_VP9_LOW }}, standard: {{ .Env.VIDEOQUALITY_BITRATE_VP9_STANDARD }}, high: {{ .Env.VIDEOQUALITY_BITRATE_VP9_HIGH }} };
439
+ {{ end -}}
440
+
441
+ // Reactions
442
+ config.disableReactions = {{ $DISABLE_REACTIONS }};
443
+
444
+ // Polls
445
+ config.disablePolls = {{ $DISABLE_POLLS }};
446
+
447
+ // Configure toolbar buttons
448
+ {{ if .Env.TOOLBAR_BUTTONS -}}
449
+ config.toolbarButtons = [ '{{ join "','" (splitList "," .Env.TOOLBAR_BUTTONS) }}' ];
450
+ {{ end -}}
451
+
452
+ // Hides the buttons at pre-join screen
453
+ {{ if .Env.HIDE_PREMEETING_BUTTONS -}}
454
+ config.hiddenPremeetingButtons = [ '{{ join "','" (splitList "," .Env.HIDE_PREMEETING_BUTTONS) }}' ];
455
+ {{ end -}}
456
+
457
+ // Configure remote participant video menu
458
+ if (!config.hasOwnProperty('remoteVideoMenu')) config.remoteVideoMenu = {};
459
+ config.remoteVideoMenu.disabled = {{ $DISABLE_REMOTE_VIDEO_MENU }};
460
+ config.remoteVideoMenu.disableKick = {{ $DISABLE_KICKOUT }};
461
+ config.remoteVideoMenu.disableGrantModerator = {{ $DISABLE_GRANT_MODERATOR }};
462
+ config.remoteVideoMenu.disablePrivateChat = {{ $DISABLE_PRIVATE_CHAT }};
463
+
464
+ // Configure e2eping
465
+ if (!config.hasOwnProperty('e2eping')) config.e2eping = {};
466
+ config.e2eping.enabled = {{ $ENABLE_E2EPING }};
467
+ {{ if .Env.E2EPING_NUM_REQUESTS -}}
468
+ config.e2eping.numRequests = {{ .Env.E2EPING_NUM_REQUESTS }};
469
+ {{ end -}}
470
+ {{ if .Env.E2EPING_MAX_CONFERENCE_SIZE -}}
471
+ config.e2eping.maxConferenceSize = {{ .Env.E2EPING_MAX_CONFERENCE_SIZE }};
472
+ {{ end -}}
473
+ {{ if .Env.E2EPING_MAX_MESSAGE_PER_SECOND -}}
474
+ config.e2eping.maxMessagePerSecond = {{ .Env.E2EPING_MAX_MESSAGE_PER_SECOND }};
475
+ {{ end }}
476
+
477
+ // Settings for the Excalidraw whiteboard integration.
478
+ if (!config.hasOwnProperty('whiteboard')) config.whiteboard = {};
479
+ config.whiteboard.enabled = {{ $WHITEBOARD_ENABLED }};
480
+ config.whiteboard.collabServerBaseUrl = '{{ $WHITEBOARD_COLLAB_SERVER_PUBLIC_URL }}';
@@ -0,0 +1,28 @@
1
+ # session settings
2
+ ssl_session_timeout 1d;
3
+ ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
4
+ ssl_session_tickets off;
5
+
6
+ # ssl certs
7
+ {{ if .Env.ENABLE_LETSENCRYPT | default "0" | toBool }}
8
+ ssl_certificate /config/acme-certs/{{ .Env.LETSENCRYPT_DOMAIN }}/fullchain.pem;
9
+ ssl_certificate_key /config/acme-certs/{{ .Env.LETSENCRYPT_DOMAIN }}/key.pem;
10
+ {{ else }}
11
+ ssl_certificate /config/keys/cert.crt;
12
+ ssl_certificate_key /config/keys/cert.key;
13
+ {{ end }}
14
+
15
+ # protocols
16
+ # Mozilla Guideline v5.6, nginx 1.14.2, OpenSSL 1.1.1d, intermediate configuration, no OCSP
17
+ # https://ssl-config.mozilla.org/#server=nginx&version=1.14.2&config=intermediate&openssl=1.1.1d&ocsp=false&guideline=5.6
18
+ ssl_protocols TLSv1.2 TLSv1.3;
19
+ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
20
+ ssl_prefer_server_ciphers off;
21
+
22
+ # Diffie-Hellman parameter for DHE cipher suites
23
+ ssl_dhparam /etc/jitsi/web/defaults/ffdhe2048.txt
24
+
25
+ # HSTS (ngx_http_headers_module is required) (63072000 seconds)
26
+ {{ if .Env.ENABLE_HSTS | default "1" | toBool }}
27
+ add_header Strict-Transport-Security "max-age=63072000" always;
28
+ {{ end }}
@@ -0,0 +1,60 @@
1
+ {{ $CONFIG_EXTERNAL_CONNECT := .Env.CONFIG_EXTERNAL_CONNECT | default "false" | toBool -}}
2
+ {{ $ENABLE_AUTH := .Env.ENABLE_AUTH | default "false" | toBool -}}
3
+ {{ $ENABLE_GUESTS := .Env.ENABLE_GUESTS | default "false" | toBool -}}
4
+ {{ $ENABLE_SUBDOMAINS := .Env.ENABLE_SUBDOMAINS | default "true" | toBool -}}
5
+ {{ $ENABLE_XMPP_WEBSOCKET := .Env.ENABLE_XMPP_WEBSOCKET | default "1" | toBool -}}
6
+ {{ $PUBLIC_URL_DOMAIN := .Env.PUBLIC_URL | default "https://localhost:8443" | trimPrefix "https://" | trimSuffix "/" -}}
7
+ {{ $XMPP_AUTH_DOMAIN := .Env.XMPP_AUTH_DOMAIN | default "auth.meet.jitsi" -}}
8
+ {{ $XMPP_DOMAIN := .Env.XMPP_DOMAIN | default "meet.jitsi" -}}
9
+ {{ $XMPP_GUEST_DOMAIN := .Env.XMPP_GUEST_DOMAIN | default "guest.meet.jitsi" -}}
10
+ {{ $XMPP_MUC_DOMAIN := .Env.XMPP_MUC_DOMAIN | default "muc.meet.jitsi" -}}
11
+ {{ $XMPP_MUC_DOMAIN_PREFIX := (split "." $XMPP_MUC_DOMAIN)._0 -}}
12
+
13
+ // Jitsi Meet configuration.
14
+ var config = {};
15
+
16
+ if (!config.hasOwnProperty('hosts')) config.hosts = {};
17
+
18
+ config.hosts.domain = '{{ $XMPP_DOMAIN }}';
19
+ config.focusUserJid = 'focus@{{$XMPP_AUTH_DOMAIN}}';
20
+
21
+ {{ if $ENABLE_SUBDOMAINS -}}
22
+ var subdir = '<!--# echo var="subdir" default="" -->';
23
+ var subdomain = "<!--# echo var="subdomain" default="" -->";
24
+ if (subdir.startsWith('<!--')) {
25
+ subdir = '';
26
+ }
27
+ if (subdomain) {
28
+ subdomain = subdomain.substring(0,subdomain.length-1).split('.').join('_').toLowerCase() + '.';
29
+ }
30
+ config.hosts.muc = '{{ $XMPP_MUC_DOMAIN_PREFIX }}.' + subdomain + '{{ $XMPP_DOMAIN }}';
31
+ {{ else -}}
32
+ config.hosts.muc = '{{ $XMPP_MUC_DOMAIN }}';
33
+ {{ end -}}
34
+
35
+ {{ if $ENABLE_AUTH -}}
36
+ {{ if $ENABLE_GUESTS -}}
37
+ // When using authentication, domain for guest users.
38
+ config.hosts.anonymousdomain = '{{ $XMPP_GUEST_DOMAIN }}';
39
+ {{ end -}}
40
+ // Domain for authenticated users. Defaults to <domain>.
41
+ config.hosts.authdomain = '{{ $XMPP_DOMAIN }}';
42
+ {{ end -}}
43
+
44
+ config.bosh = '/http-bind';
45
+
46
+ {{ if $ENABLE_XMPP_WEBSOCKET -}}
47
+ {{ if $ENABLE_SUBDOMAINS -}}
48
+ config.websocket = 'wss://{{ $PUBLIC_URL_DOMAIN }}/' + subdir + 'xmpp-websocket';
49
+ {{ else -}}
50
+ config.websocket = 'wss://{{ $PUBLIC_URL_DOMAIN }}/xmpp-websocket';
51
+ {{ end -}}
52
+ {{ end -}}
53
+
54
+ {{ if $CONFIG_EXTERNAL_CONNECT -}}
55
+ {{ if $ENABLE_SUBDOMAINS -}}
56
+ config.externalConnectUrl = '/' + subdir + 'http-pre-bind';
57
+ {{ else -}}
58
+ config.externalConnectUrl = '/http-pre-bind';
59
+ {{ end -}}
60
+ {{ end -}}