blob: 97abb0af19dada1edaff8789b42809959f868871 [file] [log] [blame]
Matthias Andreas Benkard12a57352021-12-28 18:02:04 +01001<!-- change fido2 fn -->
2<div class="modal fade" id="fido2ChangeFn" tabindex="-1" role="dialog" aria-hidden="true">
3 <div class="modal-dialog modal-lg">
4 <div class="modal-content">
5 <div class="modal-header">
6 <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
7 <h3 class="modal-title">{{ lang.fido2.set_fn }}</h3>
8 <p class="help-block" style="word-break:break-all" id="fido2_subject_desc" data-fido2-subject=""></p>
9 </div>
10 <div class="modal-body">
11 <form class="form-horizontal" data-cached-form="false" data-id="fido2ChangeFn" role="form" method="post" autocomplete="off">
12 <input type="hidden" class="form-control" name="fido2_cid" id="fido2_cid">
13 <div class="form-group">
14 <label class="control-label col-sm-4" for="fido2_fn">{{ lang.fido2.fn }}:</label>
15 <div class="col-sm-8">
16 <input type="text" class="form-control" name="fido2_fn">
17 </div>
18 </div>
19 <div class="form-group">
20 <div class="col-sm-offset-4 col-sm-8">
21 <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="edit_selected" data-id="fido2ChangeFn" data-item="null" data-api-url='edit/fido2-fn' data-api-attr='{}' href="#">{{ lang.admin.save }}</button>
22 </div>
23 </div>
24 </form>
25 </div>
26 </div>
27 </div>
28</div><!-- add domain admin modal -->
29<!-- add sync job modal -->
30<div class="modal fade" id="addSyncJobModal" tabindex="-1" role="dialog" aria-hidden="true">
31 <div class="modal-dialog modal-lg">
32 <div class="modal-content">
33 <div class="modal-header">
34 <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
35 <h3 class="modal-title">{{ lang.add.syncjob }}</h3>
36 </div>
37 <div class="modal-body">
38 <p>{{ lang.add.syncjob_hint }}</p>
39 <form class="form-horizontal" data-cached-form="true" role="form" data-id="add_syncjob">
40 <div class="form-group">
41 <label class="control-label col-sm-2" for="host1">{{ lang.add.hostname }}</label>
42 <div class="col-sm-10">
43 <input type="text" class="form-control" name="host1" required>
44 </div>
45 </div>
46 <div class="form-group">
47 <label class="control-label col-sm-2" for="port1">{{ lang.add.port }}</label>
48 <div class="col-sm-10">
49 <input type="number" class="form-control" name="port1" min="1" max="65535" value="143" required>
50 <small class="help-block">1-65535</small>
51 </div>
52 </div>
53 <div class="form-group">
54 <label class="control-label col-sm-2" for="user1">{{ lang.add.username }}</label>
55 <div class="col-sm-10">
56 <input type="text" class="form-control" name="user1" required>
57 </div>
58 </div>
59 <div class="form-group">
60 <label class="control-label col-sm-2" for="password1">{{ lang.add.password }}</label>
61 <div class="col-sm-10">
62 <input type="password" class="form-control" name="password1" data-hibp="true" required>
63 </div>
64 </div>
65 <div class="form-group">
66 <label class="control-label col-sm-2" for="enc1">{{ lang.add.enc_method }}</label>
67 <div class="col-sm-10">
68 <select name="enc1" title="{{ lang.add.select }}" required>
69 <option value="SSL" selected>SSL</option>
70 <option value="TLS">STARTTLS</option>
71 <option value="PLAIN">PLAIN</option>
72 </select>
73 </div>
74 </div>
75 <div class="form-group">
76 <label class="control-label col-sm-2" for="mins_interval">{{ lang.add.mins_interval }}</label>
77 <div class="col-sm-10">
78 <input type="number" class="form-control" name="mins_interval" min="1" max="43800" value="20" required>
79 <small class="help-block">1-43800</small>
80 </div>
81 </div>
82 <div class="form-group">
83 <label class="control-label col-sm-2" for="subfolder2">{{ lang.edit.subfolder2|raw }}</label>
84 <div class="col-sm-10">
85 <input type="text" class="form-control" name="subfolder2" value="">
86 </div>
87 </div>
88 <div class="form-group">
89 <label class="control-label col-sm-2" for="maxage">{{ lang.edit.maxage|raw }}</label>
90 <div class="col-sm-10">
91 <input type="number" class="form-control" name="maxage" min="0" max="32000" value="0">
92 <small class="help-block">0-32000</small>
93 </div>
94 </div>
95 <div class="form-group">
96 <label class="control-label col-sm-2" for="maxbytespersecond">{{ lang.edit.maxbytespersecond|raw }}</label>
97 <div class="col-sm-10">
98 <input type="number" class="form-control" name="maxbytespersecond" min="0" max="125000000" value="0">
99 <small class="help-block">0-125000000</small>
100 </div>
101 </div>
102 <div class="form-group">
103 <label class="control-label col-sm-2" for="timeout1">{{ lang.edit.timeout1 }}</label>
104 <div class="col-sm-10">
105 <input type="number" class="form-control" name="timeout1" min="1" max="32000" value="600">
106 <small class="help-block">1-32000</small>
107 </div>
108 </div>
109 <div class="form-group">
110 <label class="control-label col-sm-2" for="timeout2">{{ lang.edit.timeout2 }}</label>
111 <div class="col-sm-10">
112 <input type="number" class="form-control" name="timeout2" min="1" max="32000" value="600">
113 <small class="help-block">1-32000</small>
114 </div>
115 </div>
116 <div class="form-group">
117 <label class="control-label col-sm-2" for="exclude">{{ lang.add.exclude }}</label>
118 <div class="col-sm-10">
119 <input type="text" class="form-control" name="exclude" value="(?i)spam|(?i)junk">
120 </div>
121 </div>
122 <div class="form-group">
123 <label class="control-label col-sm-2" for="custom_params">{{ lang.add.custom_params }}</label>
124 <div class="col-sm-10">
125 <input type="text" class="form-control" name="custom_params" placeholder="--delete2folders --otheroption">
126 </div>
127 </div>
128 <div class="form-group">
129 <div class="col-sm-offset-2 col-sm-10">
130 <div class="checkbox">
131 <label><input type="checkbox" value="1" name="delete2duplicates" checked> {{ lang.add.delete2duplicates }} (--delete2duplicates)</label>
132 </div>
133 </div>
134 </div>
135 <div class="form-group">
136 <div class="col-sm-offset-2 col-sm-10">
137 <div class="checkbox">
138 <label><input type="checkbox" value="1" name="delete1"> {{ lang.add.delete1 }} (--delete1)</label>
139 </div>
140 </div>
141 </div>
142 <div class="form-group">
143 <div class="col-sm-offset-2 col-sm-10">
144 <div class="checkbox">
145 <label><input type="checkbox" value="1" name="delete2"> {{ lang.add.delete2 }} (--delete2)</label>
146 </div>
147 </div>
148 </div>
149 <div class="form-group">
150 <div class="col-sm-offset-2 col-sm-10">
151 <div class="checkbox">
152 <label><input type="checkbox" value="1" name="automap" checked> {{ lang.add.automap }} (--automap)</label>
153 </div>
154 </div>
155 </div>
156 <div class="form-group">
157 <div class="col-sm-offset-2 col-sm-10">
158 <div class="checkbox">
159 <label><input type="checkbox" value="1" name="skipcrossduplicates"> {{ lang.add.skipcrossduplicates }} (--skipcrossduplicates)</label>
160 </div>
161 </div>
162 </div>
163 <div class="form-group">
164 <div class="col-sm-offset-2 col-sm-10">
165 <div class="checkbox">
166 <label><input type="checkbox" value="1" name="subscribeall" checked> {{ lang.add.subscribeall }} (--subscribeall)</label>
167 </div>
168 </div>
169 </div>
170 <div class="form-group">
171 <div class="col-sm-offset-2 col-sm-10">
172 <div class="checkbox">
173 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label>
174 </div>
175 </div>
176 </div>
177 <div class="form-group">
178 <div class="col-sm-offset-2 col-sm-10">
179 <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_syncjob" data-api-url='add/syncjob' data-api-attr='{}' href="#">{{ lang.admin.add }}</button>
180 </div>
181 </div>
182 </form>
183 </div>
184 </div>
185 </div>
186</div><!-- add sync job modal -->
187<!-- app passwd modal -->
188<div class="modal fade" id="addAppPasswdModal" tabindex="-1" role="dialog" aria-hidden="true">
189 <div class="modal-dialog modal-lg">
190 <div class="modal-content">
191 <div class="modal-header">
192 <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
193 <h3 class="modal-title">{{ lang.add.app_password }}</h3>
194 </div>
195 <div class="modal-body">
196 <form class="form-horizontal" data-cached-form="true" role="form" data-pwgen-length="32" data-id="add_apppasswd">
197 <div class="form-group">
198 <label class="control-label col-sm-2" for="app_name">{{ lang.add.app_name }}</label>
199 <div class="col-sm-10">
200 <input type="text" class="form-control" name="app_name" required>
201 </div>
202 </div>
203 <div class="form-group">
204 <label class="control-label col-sm-2" for="app_passwd">{{ lang.user.password }} (<a href="#" class="generate_password">{{ lang.user.generate }}</a>)</label>
205 <div class="col-sm-10">
206 <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="app_passwd" autocomplete="new-password" required>
207 </div>
208 </div>
209 <div class="form-group">
210 <label class="control-label col-sm-2" for="app_passwd2">{{ lang.user.password_repeat }}</label>
211 <div class="col-sm-10">
212 <input type="password" data-pwgen-field="true" class="form-control" name="app_passwd2" autocomplete="new-password" required>
213 <p class="help-block">{{ lang.user.new_password_description }}</p>
214 </div>
215 </div>
216 <div class="form-group">
217 <label class="control-label col-sm-2" for="protocols">{{ lang.add.app_passwd_protocols }}</label>
218 <div class="col-sm-10">
219 <select class="full-width-select" data-live-search="true" id="protocols" name="protocols" multiple>
220 <option value="imap_access" selected>IMAP</option>
221 <option value="smtp_access" selected>SMTP</option>
222 <option value="eas_access" selected>EAS/ActiveSync</option>
223 <option value="dav_access" selected>CardDAV/CalDAV</option>
224 <option value="pop3_access" selected>POP3</option>
225 <option value="sieve_access" selected>Sieve</option>
226 </select>
227 </div>
228 </div>
229 <div class="form-group">
230 <div class="col-sm-offset-2 col-sm-10">
231 <div class="checkbox">
232 <label><input type="checkbox" value="1" name="active" checked> {{ lang.add.active }}</label>
233 </div>
234 </div>
235 </div>
236 <div class="form-group">
237 <div class="col-sm-offset-2 col-sm-10">
238 <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_apppasswd" data-api-url='add/app-passwd' data-api-attr='{}' href="#">{{ lang.admin.add }}</button>
239 </div>
240 </div>
241 </form>
242 </div>
243 </div>
244 </div>
245</div><!-- add app passwd modal -->
246<!-- log modal -->
247<div class="modal fade" id="syncjobLogModal" tabindex="-1" role="dialog" aria-labelledby="syncjobLogModalLabel">
248 <div class="modal-dialog modal-lg" role="document">
249 <div class="modal-content">
250 <div class="modal-header">
251 <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
252 <h3 class="modal-title">Log</h3>
253 </div>
254 <div class="modal-body">
255 <textarea class="form-control textarea-code" rows="20" id="logText" spellcheck="false"></textarea>
256 </div>
257 </div>
258 </div>
259</div><!-- log modal -->
260<!-- pw change modal -->
261<div class="modal fade" id="pwChangeModal" tabindex="-1" role="dialog" aria-labelledby="pwChangeModalLabel">
262 <div class="modal-dialog" role="document">
263 <div class="modal-content">
264 <div class="modal-header">
265 <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
266 <h3 class="modal-title">{{ lang.user.change_password }}</h3>
267 {% if number_of_app_passwords > 0 %}
268 <p>{{ lang.user.change_password_hint_app_passwords | replace({'{{number_of_app_passwords}}': number_of_app_passwords}) }}</p>
269 {% endif %}
270 </div>
271 <div class="modal-body">
272 <form class="form-horizontal" data-cached-form="false" data-id="pwchange" role="form" method="post" autocomplete="off">
273 <div class="form-group">
274 <label class="control-label col-sm-3" for="user_new_pass">{{ lang.user.new_password }} (<a href="#" class="generate_password">{{ lang.user.generate }}</a>)</label>
275 <div class="col-sm-5">
276 <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="user_new_pass" autocomplete="new-password" required>
277 </div>
278 </div>
279 <div class="form-group">
280 <label class="control-label col-sm-3" for="user_new_pass2">{{ lang.user.new_password_repeat }}</label>
281 <div class="col-sm-5">
282 <input type="password" data-pwgen-field="true" class="form-control" name="user_new_pass2" autocomplete="new-password" required>
283 <p class="help-block">{{ lang.user.new_password_description }}</p>
284 </div>
285 </div>
286 <hr>
287 <div class="form-group">
288 <label class="control-label col-sm-3" for="user_old_pass">{{ lang.user.password_now }}</label>
289 <div class="col-sm-5">
290 <input type="password" class="form-control" name="user_old_pass" autocomplete="off" required>
291 </div>
292 </div>
293 <div class="form-group">
294 <div class="col-sm-offset-3 col-sm-9">
295 <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="edit_selected" data-id="pwchange" data-item="null" data-api-url='edit/self' data-api-attr='{}' href="#">{{ lang.user.change_password }}</button>
296 </div>
297 </div>
298 </form>
299 </div>
300 </div>
301 </div>
302</div><!-- pw change modal -->
303<!-- pw change modal -->
304<div class="modal fade" id="tempAliasModal" tabindex="-1" role="dialog" aria-labelledby="tempAliasModalLabel">
305 <div class="modal-dialog" role="document">
306 <div class="modal-content">
307 <div class="modal-body">
308 <form class="form-horizontal" data-cached-form="false" data-id="pwchange" role="form" method="post" autocomplete="off">
309 <div class="form-group">
310 <label class="control-label col-sm-3" for="user_new_pass">{{ lang.user.new_password }} (<a href="#" class="generate_password">{{ lang.user.generate }}</a>)</label>
311 <div class="col-sm-5">
312 <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="user_new_pass" autocomplete="new-password" required>
313 </div>
314 </div>
315 <div class="form-group">
316 <label class="control-label col-sm-3" for="user_new_pass2">{{ lang.user.new_password_repeat }}</label>
317 <div class="col-sm-5">
318 <input type="password" data-pwgen-field="true" class="form-control" name="user_new_pass2" autocomplete="new-password" required>
319 <p class="help-block">{{ lang.user.new_password_description }}</p>
320 </div>
321 </div>
322 <hr>
323 <div class="form-group">
324 <label class="control-label col-sm-3" for="user_old_pass">{{ lang.user.password_now }}</label>
325 <div class="col-sm-5">
326 <input type="password" class="form-control" name="user_old_pass" autocomplete="off" required>
327 </div>
328 </div>
329 <div class="form-group">
330 <div class="col-sm-offset-3 col-sm-9">
331 <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="edit_selected" data-id="pwchange" data-item="null" data-api-url='edit/self' data-api-attr='{}' href="#">{{ lang.user.change_password }}</button>
332 </div>
333 </div>
334 </form>
335 </div>
336 </div>
337 </div>
338</div><!-- pw change modal -->
339<!-- sieve filter modal -->
340<div class="modal fade" id="userFilterModal" tabindex="-1" role="dialog">
341 <div class="modal-dialog" role="document">
342 <div class="modal-content">
343 <div class="modal-header">
344 <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
345 <h3 class="modal-title">{{ lang.user.active_sieve }}</h3>
346 </div>
347 <div class="modal-body">
348 <pre id="user_sieve_filter"></pre>
349 </div>
350 </div>
351 </div>
352</div><!-- sieve filter modal -->