blob: b5e00808fdec3cbb3f6b47d1bb7177f543f21275 [file] [log] [blame]
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +01001<?php
2require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
Matthias Andreas Benkard97f12022026-10-23 08:46:40 +02003require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.admin.inc.php';
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +01004
Matthias Andreas Benkard97f12022026-10-23 08:46:40 +02005protect_route(['admin']);
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +01006
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +01007require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';
8$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
9$tfa_data = get_tfa();
10$fido2_data = fido2(array("action" => "get_friendly_names"));
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +010011
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +010012$js_minifier->add('/web/js/site/admin.js');
13$js_minifier->add('/web/js/presets/rspamd.js');
14$js_minifier->add('/web/js/site/pwgen.js');
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +010015
16// all domains
17$domains = mailbox('get', 'domains');
18$all_domains = array_merge($domains, mailbox('get', 'alias_domains'));
19
20// mailboxes
21$mailboxes = [];
22foreach ($all_domains as $domain) {
23 foreach (mailbox('get', 'mailboxes', $domain) as $mailbox) {
24 $mailboxes[] = $mailbox;
25 }
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +010026}
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +010027$mailboxes = array_filter($mailboxes);
28
29// DKIM domains
30$dkim_domains = [];
31$dkim_domains_with_keys = [];
32foreach($domains as $domain) {
33 $dkim_domains[$domain] = ['dkim' => null, 'alias_domains' => []];
34 if (!empty($dkim = dkim('details', $domain))) {
35 $dkim_domains_with_keys[] = $domain;
36 if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] !== true) {
37 $dkim['privkey'] = base64_encode('Please set $SHOW_DKIM_PRIV_KEYS to true to show DKIM private keys.');
38 }
39 $dkim_domains[$domain]['dkim'] = $dkim;
40 }
41
42 // get alias domains
43 foreach (mailbox('get', 'alias_domains', $domain) as $alias_domain) {
44 $dkim_domains[$domain]['alias_domains'][$alias_domain] = ['dkim' => null];
45 if (!empty($dkim = dkim('details', $alias_domain))) {
46 $dkim_domains_with_keys[] = $alias_domain;
47 if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] !== true) {
48 $dkim['privkey'] = base64_encode('Please set $SHOW_DKIM_PRIV_KEYS to true to show DKIM private keys.');
49 }
50 $dkim_domains[$domain]['alias_domains'][$alias_domain]['dkim'] = $dkim;
51 }
52 }
53}
54$dkim_blind_domains = [];
55foreach(dkim('blind') as $blind) {
56 $dkim_blind_domains[$blind] = ['dkim' => null];
57 if (!empty($dkim = dkim('details', $blind))) {
58 $dkim_domains_with_keys[] = $blind;
59 if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] !== true) {
60 $dkim['privkey'] = base64_encode('Please set $SHOW_DKIM_PRIV_KEYS to true to show DKIM private keys.');
61 }
62 $dkim_blind_domains[$blind]['dkim'] = $dkim;
63 }
64}
Matthias Andreas Benkardb7a13512023-11-18 16:44:25 +010065
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +010066// rsettings
67$rsettings = array_map(function ($rsetting){
68 $rsetting['details'] = rsettings('details', $rsetting['id']);
69 return $rsetting;
70}, rsettings('get'));
71
72// rspamd regex maps
73$rspamd_regex_maps = [];
74foreach ($RSPAMD_MAPS['regex'] as $rspamd_regex_desc => $rspamd_regex_map) {
75 $rspamd_regex_maps[$rspamd_regex_desc] = [
76 'map' => $rspamd_regex_map,
77 'data' => file_get_contents('/rspamd_custom_maps/' . $rspamd_regex_map)
78 ];
79}
Matthias Andreas Benkardb7a13512023-11-18 16:44:25 +010080
Matthias Andreas Benkardd63fe562023-11-18 13:18:30 +010081// cors settings
82$cors_settings = cors('get');
83$cors_settings['allowed_origins'] = str_replace(", ", "\n", $cors_settings['allowed_origins']);
84$cors_settings['allowed_methods'] = explode(", ", $cors_settings['allowed_methods']);
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +010085
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +010086$f2b_data = fail2ban('get');
Matthias Andreas Benkard97f12022026-10-23 08:46:40 +020087// mbox templates
88$mbox_templates = mailbox('get', 'mailbox_templates');
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +010089
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +010090$template = 'admin.twig';
91$template_data = [
92 'tfa_data' => $tfa_data,
93 'tfa_id' => @$_SESSION['tfa_id'],
94 'fido2_cid' => @$_SESSION['fido2_cid'],
95 'fido2_data' => $fido2_data,
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +010096 'api' => [
97 'ro' => admin_api('ro', 'get'),
98 'rw' => admin_api('rw', 'get'),
99 ],
100 'dkim_domains' => $dkim_domains,
101 'dkim_domains_with_keys' => $dkim_domains_with_keys,
102 'dkim_blind_domains' => $dkim_blind_domains,
103 'domains' => $domains,
104 'all_domains' => $all_domains,
105 'mailboxes' => $mailboxes,
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100106 'f2b_data' => $f2b_data,
Matthias Andreas Benkard97f12022026-10-23 08:46:40 +0200107 'f2b_banlist_url' => getBaseUrl() . "/f2b-banlist?id=" . $f2b_data['banlist_id'],
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +0100108 'q_data' => quarantine('settings'),
109 'qn_data' => quota_notification('get'),
Matthias Andreas Benkard97f12022026-10-23 08:46:40 +0200110 'pw_reset_data' => reset_password('get_notification'),
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +0100111 'rsettings_map' => file_get_contents('http://nginx:8081/settings.php'),
112 'rsettings' => $rsettings,
113 'rspamd_regex_maps' => $rspamd_regex_maps,
114 'logo_specs' => customize('get', 'main_logo_specs'),
Matthias Andreas Benkardd63fe562023-11-18 13:18:30 +0100115 'logo_dark_specs' => customize('get', 'main_logo_dark_specs'),
116 'ip_check' => customize('get', 'ip_check'),
Matthias Andreas Benkard97f12022026-10-23 08:46:40 +0200117 'custom_login' => customize('get', 'custom_login'),
118 'ui_themes' => customize('get', 'ui_themes'),
119 'ui_theme' => customize('get', 'ui_theme'),
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +0100120 'password_complexity' => password_complexity('get'),
121 'show_rspamd_global_filters' => @$_SESSION['show_rspamd_global_filters'],
Matthias Andreas Benkardd63fe562023-11-18 13:18:30 +0100122 'cors_settings' => $cors_settings,
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100123 'is_https' => isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on',
Matthias Andreas Benkard97f12022026-10-23 08:46:40 +0200124 'iam_settings' => $iam_settings,
125 'mbox_templates' => $mbox_templates,
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +0100126 'lang_admin' => json_encode($lang['admin']),
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100127 'lang_datatables' => json_encode($lang['datatables'])
Matthias Andreas Benkardb4b5cc12021-12-28 18:02:04 +0100128];
129
130require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';