Merge branch 'stable-3.1'
3 files added
34 files modified
New file |
| | |
| | | <?php |
| | | |
| | | /* |
| | | Copyright (c) 2007, Till Brehm, projektfarm Gmbh |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, |
| | | are permitted provided that the following conditions are met: |
| | | |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright notice, |
| | | this list of conditions and the following disclaimer in the documentation |
| | | and/or other materials provided with the distribution. |
| | | * Neither the name of ISPConfig nor the names of its contributors |
| | | may be used to endorse or promote products derived from this software without |
| | | specific prior written permission. |
| | | |
| | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| | | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| | | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
| | | IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
| | | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| | | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| | | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| | | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| | | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| | | */ |
| | | |
| | | //*** Fedora 9 default settings |
| | | |
| | | //* Main |
| | | $conf['language'] = 'en'; |
| | | $conf['distname'] = 'centos72'; |
| | | $conf['hostname'] = 'server1.domain.tld'; // Full hostname |
| | | $conf['ispconfig_install_dir'] = '/usr/local/ispconfig'; |
| | | $conf['ispconfig_config_dir'] = '/usr/local/ispconfig'; |
| | | $conf['ispconfig_log_priority'] = 2; // 0 = Debug, 1 = Warning, 2 = Error |
| | | $conf['ispconfig_log_dir'] = '/var/log/ispconfig'; |
| | | $conf['server_id'] = 1; |
| | | $conf['init_scripts'] = '/etc/init.d'; |
| | | $conf['runlevel'] = '/etc'; |
| | | $conf['shells'] = '/etc/shells'; |
| | | $conf['pam'] = '/etc/pam.d'; |
| | | |
| | | //* Services provided by this server, this selection will be overridden by the expert mode |
| | | $conf['services']['mail'] = true; |
| | | $conf['services']['web'] = true; |
| | | $conf['services']['dns'] = true; |
| | | $conf['services']['file'] = true; |
| | | $conf['services']['db'] = true; |
| | | $conf['services']['vserver'] = true; |
| | | |
| | | //* MySQL |
| | | $conf['mysql']['installed'] = false; // will be detected automatically during installation |
| | | $conf['mysql']['init_script'] = 'mariadb'; |
| | | $conf['mysql']['host'] = 'localhost'; |
| | | $conf['mysql']['ip'] = '127.0.0.1'; |
| | | $conf['mysql']['port'] = '3306'; |
| | | $conf['mysql']['database'] = 'dbispconfig'; |
| | | $conf['mysql']['admin_user'] = 'root'; |
| | | $conf['mysql']['admin_password'] = ''; |
| | | $conf['mysql']['charset'] = 'utf8'; |
| | | $conf['mysql']['ispconfig_user'] = 'ispconfig'; |
| | | $conf['mysql']['ispconfig_password'] = md5(uniqid(rand())); |
| | | $conf['mysql']['master_slave_setup'] = 'n'; |
| | | $conf['mysql']['master_host'] = ''; |
| | | $conf['mysql']['master_database'] = 'dbispconfig'; |
| | | $conf['mysql']['master_admin_user'] = 'root'; |
| | | $conf['mysql']['master_admin_password'] = ''; |
| | | $conf['mysql']['master_ispconfig_user'] = ''; |
| | | $conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand())); |
| | | |
| | | //* Apache |
| | | $conf['apache']['installed'] = false; // will be detected automatically during installation |
| | | $conf['apache']['user'] = 'apache'; |
| | | $conf['apache']['group'] = 'apache'; |
| | | $conf['apache']['init_script'] = 'httpd'; |
| | | $conf['apache']['version'] = '2.2'; |
| | | $conf['apache']['vhost_conf_dir'] = '/etc/httpd/conf/sites-available'; |
| | | $conf['apache']['vhost_conf_enabled_dir'] = '/etc/httpd/conf/sites-enabled'; |
| | | $conf['apache']['vhost_port'] = '8080'; |
| | | $conf['apache']['php_ini_path_apache'] = '/etc/php.ini'; |
| | | $conf['apache']['php_ini_path_cgi'] = '/etc/php.ini'; |
| | | |
| | | //* Website base settings |
| | | $conf['web']['website_basedir'] = '/var/www'; |
| | | $conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]'; |
| | | $conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/'; |
| | | |
| | | //* Apps base settings |
| | | $conf['web']['apps_vhost_ip'] = '_default_'; |
| | | $conf['web']['apps_vhost_port'] = '8081'; |
| | | $conf['web']['apps_vhost_servername'] = ''; |
| | | $conf['web']['apps_vhost_user'] = 'ispapps'; |
| | | $conf['web']['apps_vhost_group'] = 'ispapps'; |
| | | |
| | | //* Fastcgi |
| | | $conf['fastcgi']['fastcgi_phpini_path'] = '/etc/'; |
| | | $conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/'; |
| | | $conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi'; |
| | | |
| | | //* Postfix |
| | | $conf['postfix']['installed'] = false; // will be detected automatically during installation |
| | | $conf['postfix']['config_dir'] = '/etc/postfix'; |
| | | $conf['postfix']['init_script'] = 'postfix'; |
| | | $conf['postfix']['user'] = 'postfix'; |
| | | $conf['postfix']['group'] = 'postfix'; |
| | | $conf['postfix']['vmail_userid'] = '5000'; |
| | | $conf['postfix']['vmail_username'] = 'vmail'; |
| | | $conf['postfix']['vmail_groupid'] = '5000'; |
| | | $conf['postfix']['vmail_groupname'] = 'vmail'; |
| | | $conf['postfix']['vmail_mailbox_base'] = '/var/vmail'; |
| | | |
| | | //* Mailman |
| | | $conf['mailman']['installed'] = false; // will be detected automatically during installation |
| | | $conf['mailman']['config_dir'] = '/etc/mailman'; |
| | | $conf['mailman']['init_script'] = 'mailman'; |
| | | |
| | | //* Getmail |
| | | $conf['getmail']['installed'] = false; // will be detected automatically during installation |
| | | $conf['getmail']['config_dir'] = '/etc/getmail'; |
| | | $conf['getmail']['program'] = '/usr/bin/getmail'; |
| | | |
| | | //* Courier |
| | | $conf['courier']['installed'] = false; // will be detected automatically during installation |
| | | $conf['courier']['config_dir'] = '/etc/authlib'; |
| | | $conf['courier']['courier-authdaemon'] = 'courier-authlib'; |
| | | $conf['courier']['courier-imap'] = 'courier-imap'; |
| | | $conf['courier']['courier-imap-ssl'] = ''; |
| | | $conf['courier']['courier-pop'] = ''; |
| | | $conf['courier']['courier-pop-ssl'] = ''; |
| | | |
| | | //* Dovecot |
| | | $conf['dovecot']['installed'] = false; // will be detected automatically during installation |
| | | $conf['dovecot']['config_dir'] = '/etc/dovecot'; |
| | | $conf['dovecot']['init_script'] = 'dovecot'; |
| | | |
| | | //* SASL |
| | | $conf['saslauthd']['installed'] = false; // will be detected automatically during installation |
| | | $conf['saslauthd']['config'] = '/etc/sysconfig/saslauthd'; |
| | | $conf['saslauthd']['init_script'] = 'saslauthd'; |
| | | |
| | | //* Amavisd |
| | | $conf['amavis']['installed'] = false; // will be detected automatically during installation |
| | | $conf['amavis']['config_dir'] = '/etc/amavisd'; |
| | | $conf['amavis']['init_script'] = 'amavisd'; |
| | | |
| | | //* ClamAV |
| | | $conf['clamav']['installed'] = false; // will be detected automatically during installation |
| | | $conf['clamav']['init_script'] = 'clamd@amavisd'; |
| | | |
| | | //* Pureftpd |
| | | $conf['pureftpd']['installed'] = false; // will be detected automatically during installation |
| | | $conf['pureftpd']['config_dir'] = '/etc/pure-ftpd'; |
| | | $conf['pureftpd']['init_script'] = 'pure-ftpd'; |
| | | |
| | | //* MyDNS |
| | | $conf['mydns']['installed'] = false; // will be detected automatically during installation |
| | | $conf['mydns']['config_dir'] = '/etc'; |
| | | $conf['mydns']['init_script'] = 'mydns'; |
| | | |
| | | //* PowerDNS |
| | | $conf['powerdns']['installed'] = false; // will be detected automatically during installation |
| | | $conf['powerdns']['database'] = 'powerdns'; |
| | | $conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d'; |
| | | $conf['powerdns']['init_script'] = 'pdns'; |
| | | |
| | | //* BIND DNS Server |
| | | $conf['bind']['installed'] = false; // will be detected automatically during installation |
| | | $conf['bind']['bind_user'] = 'named'; |
| | | $conf['bind']['bind_group'] = 'named'; |
| | | $conf['bind']['bind_zonefiles_dir'] = '/var/named'; |
| | | $conf['bind']['named_conf_path'] = '/etc/named.conf'; |
| | | $conf['bind']['named_conf_local_path'] = '/etc/named.conf.local'; |
| | | $conf['bind']['init_script'] = 'named'; |
| | | |
| | | //* Jailkit |
| | | $conf['jailkit']['installed'] = false; // will be detected automatically during installation |
| | | $conf['jailkit']['config_dir'] = '/etc/jailkit'; |
| | | $conf['jailkit']['jk_init'] = 'jk_init.ini'; |
| | | $conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini'; |
| | | $conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano'; |
| | | $conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php'; |
| | | |
| | | //* Squid |
| | | $conf['squid']['installed'] = false; // will be detected automatically during installation |
| | | $conf['squid']['config_dir'] = '/etc/squid'; |
| | | $conf['squid']['init_script'] = 'squid'; |
| | | |
| | | //* Nginx |
| | | $conf['nginx']['installed'] = false; // will be detected automatically during installation |
| | | $conf['nginx']['user'] = 'nginx'; |
| | | $conf['nginx']['group'] = 'nginx'; |
| | | $conf['nginx']['config_dir'] = '/etc/nginx'; |
| | | $conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available'; |
| | | $conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled'; |
| | | $conf['nginx']['init_script'] = 'nginx'; |
| | | $conf['nginx']['vhost_port'] = '8080'; |
| | | $conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket'; |
| | | $conf['nginx']['php_fpm_init_script'] = 'php-fpm'; |
| | | $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini'; |
| | | $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d'; |
| | | $conf['nginx']['php_fpm_start_port'] = 9010; |
| | | $conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php5-fpm'; |
| | | |
| | | //* vlogger |
| | | $conf['vlogger']['config_dir'] = '/etc'; |
| | | |
| | | //* cron |
| | | $conf['cron']['init_script'] = 'crond'; |
| | | $conf['cron']['crontab_dir'] = '/etc/cron.d'; |
| | | $conf['cron']['wget'] = '/usr/bin/wget'; |
| | | |
| | | //* OpenVZ |
| | | $conf['openvz']['installed'] = false; |
| | | |
| | | ?> |
| | |
| | | if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman'); |
| | | exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman'); |
| | | |
| | | //* Create auxillary postfix conf files |
| | | $configfile = 'helo_access'; |
| | | if(is_file($config_dir.'/'.$configfile)) { |
| | | copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); |
| | | chmod($config_dir.'/'.$configfile.'~', 0400); |
| | | } |
| | | $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); |
| | | $content = strtr($content, $postconf_placeholders); |
| | | # todo: look up this server's ip addrs and loop through each |
| | | # todo: look up domains hosted on this server and loop through each |
| | | wf($config_dir.'/'.$configfile, $content); |
| | | |
| | | $configfile = 'blacklist_helo'; |
| | | if(is_file($config_dir.'/'.$configfile)) { |
| | | copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); |
| | | chmod($config_dir.'/'.$configfile.'~', 0400); |
| | | } |
| | | $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); |
| | | $content = strtr($content, $postconf_placeholders); |
| | | wf($config_dir.'/'.$configfile, $content); |
| | | |
| | | //* Make a backup copy of the main.cf file |
| | | copy($config_dir.'/main.cf', $config_dir.'/main.cf~'); |
| | | |
| | |
| | | $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); |
| | | $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content); |
| | | $content = str_replace('{server_id}', $conf['server_id'], $content); |
| | | # enable iterate_query for dovecot2 |
| | | if(version_compare($dovecot_version,2, '>=')) { |
| | | $content = str_replace('# iterate_query', 'iterate_query', $content); |
| | | } |
| | | wf("$config_dir/$configfile", $content); |
| | | |
| | | exec("chmod 600 $config_dir/$configfile"); |
| | |
| | | touch($config_dir.'/nested_header_checks'); |
| | | touch($config_dir.'/body_checks'); |
| | | |
| | | //* Create auxillary postfix conf files |
| | | $configfile = 'helo_access'; |
| | | if(is_file($config_dir.'/'.$configfile)) { |
| | | copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); |
| | | chmod($config_dir.'/'.$configfile.'~', 0400); |
| | | } |
| | | $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); |
| | | $content = strtr($content, $postconf_placeholders); |
| | | # todo: look up this server's ip addrs and loop through each |
| | | # todo: look up domains hosted on this server and loop through each |
| | | wf($config_dir.'/'.$configfile, $content); |
| | | |
| | | $configfile = 'blacklist_helo'; |
| | | if(is_file($config_dir.'/'.$configfile)) { |
| | | copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); |
| | | chmod($config_dir.'/'.$configfile.'~', 0400); |
| | | } |
| | | $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); |
| | | $content = strtr($content, $postconf_placeholders); |
| | | wf($config_dir.'/'.$configfile, $content); |
| | | |
| | | //* Make a backup copy of the main.cf file |
| | | copy($config_dir.'/main.cf', $config_dir.'/main.cf~'); |
| | |
| | | //* dovecot-sql.conf |
| | | $configfile = $config_dir.'/dovecot-sql.conf'; |
| | | $content = $this->get_template_file('debian_dovecot-sql.conf', true, true); |
| | | # enable iterate_query for dovecot2 |
| | | if(version_compare($dovecot_version,2, '>=')) { |
| | | $content = str_replace('# iterate_query', 'iterate_query', $content); |
| | | } |
| | | $this->write_config_file($configfile, $content); |
| | | } |
| | | |
| | |
| | | if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman'); |
| | | exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman'); |
| | | |
| | | //* Create auxillary postfix conf files |
| | | $configfile = 'helo_access'; |
| | | if(is_file($config_dir.'/'.$configfile)) { |
| | | copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); |
| | | chmod($config_dir.'/'.$configfile.'~', 0400); |
| | | } |
| | | $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); |
| | | $content = strtr($content, $postconf_placeholders); |
| | | # todo: look up this server's ip addrs and loop through each |
| | | # todo: look up domains hosted on this server and loop through each |
| | | wf($config_dir.'/'.$configfile, $content); |
| | | |
| | | $configfile = 'blacklist_helo'; |
| | | if(is_file($config_dir.'/'.$configfile)) { |
| | | copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); |
| | | chmod($config_dir.'/'.$configfile.'~', 0400); |
| | | } |
| | | $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master'); |
| | | $content = strtr($content, $postconf_placeholders); |
| | | wf($config_dir.'/'.$configfile, $content); |
| | | |
| | | //* Make a backup copy of the main.cf file |
| | | copy($config_dir.'/main.cf', $config_dir.'/main.cf~'); |
| | | |
| | |
| | | $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); |
| | | $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content); |
| | | $content = str_replace('{server_id}', $conf['server_id'], $content); |
| | | # enable iterate_query for dovecot2 |
| | | if(version_compare($dovecot_version,2, '>=')) { |
| | | $content = str_replace('# iterate_query', 'iterate_query', $content); |
| | | } |
| | | wf("$config_dir/$configfile", $content); |
| | | |
| | | exec("chmod 600 $config_dir/$configfile"); |
| | |
| | | //** Include the distribution-specific installer class library and configuration |
| | | if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php'; |
| | | include_once 'dist/lib/'.$dist['id'].'.lib.php'; |
| | | include_once 'dist/conf/'.$dist['id'].'.conf.php'; |
| | | include_once 'dist/conf/'.$dist['confid'].'.conf.php'; |
| | | |
| | | //**************************************************************************************************** |
| | | //** Installer Interface |
| | |
| | | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| | | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| | | */ |
| | | |
| | | /* |
| | | This function returns a string that describes the installed |
| | | Linux distribution. e.g. debian40 for Debian GNU/Linux 4.0 |
| | | */ |
| | | |
| | | |
| | | |
| | | /* |
| | | Comments to completion forever ;-) |
| | | commandline arguments |
| | | $argv[1] |
| | | |
| | | |
| | | <? |
| | | echo "Total argument passed are : $argc \n"; |
| | | for( $i = 0 ; $i <= $argc -1 ;$i++) |
| | | { |
| | | echo "Argument $i : $argv[$i] \n"; |
| | | } |
| | | ?> |
| | | |
| | | */ |
| | | error_reporting(E_ALL|E_STRICT); |
| | | |
| | | |
| | |
| | | //** IMPORTANT! |
| | | // This is the same code as in server/lib/classes/monitor_tools.inc.php |
| | | // So if you change it here, you also have to change it in there! |
| | | // |
| | | // This function returns a string that describes the installed |
| | | // Linux distribution. e.g. debian40 for Debian GNU/Linux 4.0 |
| | | |
| | | function get_distname() { |
| | | |
| | | $distname = ''; |
| | |
| | | |
| | | //** Debian or Ubuntu |
| | | if(file_exists('/etc/debian_version')) { |
| | | if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu')) { |
| | | if (strstr(trim(file_get_contents('/etc/issue')), 'LTS')) { |
| | | |
| | | // Check if this is Ubuntu and not Debian |
| | | if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu') || (is_file('/etc/os-release') && stristr(file_get_contents('/etc/os-release'), 'Ubuntu'))) { |
| | | |
| | | $issue = file_get_contents('/etc/issue'); |
| | | |
| | | // Use content of /etc/issue file |
| | | if(strstr($issue,'Ubuntu')) { |
| | | if (strstr(trim($issue), 'LTS')) { |
| | | $lts=" LTS"; |
| | | } else { |
| | | $lts=""; |
| | | } |
| | | |
| | | $issue=file_get_contents('/etc/issue'); |
| | | $distname = 'Ubuntu'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | |
| | | $mainver = explode('.', $ver); |
| | | $mainver = array_filter($mainver); |
| | | $mainver = current($mainver).'.'.next($mainver); |
| | | // Use content of /etc/os-release file |
| | | } else { |
| | | $os_release = file_get_contents('/etc/os-release'); |
| | | if (strstr(trim($os_release), 'LTS')) { |
| | | $lts = " LTS"; |
| | | } else { |
| | | $lts = ""; |
| | | } |
| | | |
| | | $distname = 'Ubuntu'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | | |
| | | preg_match("/.*VERSION=\"(.*)\".*/ui", $os_release, $ver); |
| | | $ver = str_replace("LTS", "", $ver[1]); |
| | | $ver = explode(" ", $ver, 2); |
| | | $ver = reset($ver); |
| | | $mainver = $ver; |
| | | } |
| | | switch ($mainver){ |
| | | case "16.04": |
| | | $relname = "(Xenial Xerus)"; |
| | | $distid = 'ubuntu1604'; |
| | | $distconfid = 'ubuntu1604'; |
| | | break; |
| | | case "15.10": |
| | | $relname = "(Wily Werewolf)"; |
| | |
| | | $relname = "UNKNOWN"; |
| | | } |
| | | $distver = $ver.$lts." ".$relname; |
| | | swriteln("Operating System: ".$distver."\n"); |
| | | swriteln("Operating System: ".$distname.' '.$distver."\n"); |
| | | } elseif(trim(file_get_contents('/etc/debian_version')) == '4.0') { |
| | | $distname = 'Debian'; |
| | | $distver = '4.0'; |
| | |
| | | $distid = 'centos53'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 6 or compatible\n"); |
| | | } elseif(stristr($content, 'CentOS Linux release 7.2')) { |
| | | $distname = 'CentOS'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'centos70'; |
| | | $distconfid = 'centos72'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 7.2\n"); |
| | | } elseif(stristr($content, 'CentOS Linux release 7')) { |
| | | $distname = 'CentOS'; |
| | | $distver = 'Unknown'; |
| | |
| | | die('Unrecognized GNU/Linux distribution'); |
| | | } |
| | | |
| | | return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid); |
| | | // Set $distconfid to distid, if no different id for the config is defined |
| | | if(!isset($distconfid)) $distconfid = $distid; |
| | | |
| | | return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'confid' => $distconfid, 'baseid' => $distbaseid); |
| | | } |
| | | |
| | | function sread() { |
| | |
| | | $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); |
| | | $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content); |
| | | $content = str_replace('{server_id}', $conf['server_id'], $content); |
| | | # enable iterate_query for dovecot2 |
| | | if(version_compare($dovecot_version,2, '>=')) { |
| | | $content = str_replace('# iterate_query', 'iterate_query', $content); |
| | | } |
| | | wf($config_dir.'/'.$configfile, $content); |
| | | |
| | | chmod($config_dir.'/'.$configfile, 0600); |
| | |
| | | `traffic_date` date NOT NULL, |
| | | `in_bytes` bigint(32) unsigned NOT NULL, |
| | | `out_bytes` bigint(32) unsigned NOT NULL, |
| | | PRIMARY KEY (`hostname`,`traffic_date`) |
| | | UNIQUE KEY (`hostname`,`traffic_date`) |
| | | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
| | | |
| | | ALTER TABLE `mail_forwarding` ADD COLUMN `allow_send_as` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `active`; |
| | |
| | | `traffic_date` date NOT NULL, |
| | | `in_bytes` bigint(32) unsigned NOT NULL, |
| | | `out_bytes` bigint(32) unsigned NOT NULL, |
| | | PRIMARY KEY (`hostname`,`traffic_date`) |
| | | UNIQUE KEY (`hostname`,`traffic_date`) |
| | | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
| | | |
| | | -- -------------------------------------------------------- |
| | |
| | | `veid` int(11) NOT NULL DEFAULT '0', |
| | | `traffic_date` date NULL DEFAULT NULL, |
| | | `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0', |
| | | PRIMARY KEY (`veid`,`traffic_date`) |
| | | UNIQUE KEY (`veid`,`traffic_date`) |
| | | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
| | | |
| | | -- |
| | |
| | | `hostname` varchar(255) NOT NULL DEFAULT '', |
| | | `traffic_date` date NULL DEFAULT NULL, |
| | | `traffic_bytes` bigint(32) unsigned NOT NULL default '0', |
| | | PRIMARY KEY (`hostname`,`traffic_date`) |
| | | UNIQUE KEY (`hostname`,`traffic_date`) |
| | | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; |
| | | |
| | | -- -------------------------------------------------------- |
| | |
| | | |
| | | # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers. |
| | | # Do not enable it on Dovecot 1.x servers |
| | | # iterate_query = SELECT email as user FROM mail_user |
| | | # iterate_query = SELECT email as user FROM mail_user WHERE server_id = '{server_id}' |
| | |
| | | |
| | | # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers. |
| | | # Do not enable it on Dovecot 1.x servers |
| | | # iterate_query = SELECT email as user FROM mail_user |
| | | # iterate_query = SELECT email as user FROM mail_user WHERE server_id = '{server_id}' |
| | | |
| | |
| | | postmaster_address = webmaster@localhost |
| | | mail_plugins = quota sieve |
| | | } |
| | | mail_plugins = $mail_plugins quota |
| | |
| | | proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps |
| | | smtpd_helo_required = yes |
| | | smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo |
| | | smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re |
| | | smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re |
| | | smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf |
| | | smtpd_client_message_rate_limit = 100 |
| | | maildrop_destination_concurrency_limit = 1 |
| | |
| | | |
| | | $myhostname = '{hostname}'; |
| | | |
| | | $notify_method = 'smtp:[127.0.0.1]:10027'; |
| | | $forward_method = 'smtp:[127.0.0.1]:10025'; # set to undef with milter! |
| | | $notify_method = 'smtp:*:*'; |
| | | $forward_method = 'smtp:*:*'; # set to undef with milter! |
| | | |
| | | # $os_fingerprint_method = 'p0f:127.0.0.1:2345'; # to query p0f-analyzer.pl |
| | | |
| | |
| | | |
| | | # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers. |
| | | # Do not enable it on Dovecot 1.x servers |
| | | # iterate_query = SELECT email as user FROM mail_user |
| | | # iterate_query = SELECT email as user FROM mail_user WHERE server_id = '{server_id}' |
| | |
| | | postmaster_address = webmaster@localhost |
| | | mail_plugins = quota sieve |
| | | } |
| | | mail_plugins = $mail_plugins quota |
| | |
| | | proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps |
| | | smtpd_helo_required = yes |
| | | smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo |
| | | smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re |
| | | smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re |
| | | smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf |
| | | smtpd_client_message_rate_limit = 100 |
| | | maildrop_destination_concurrency_limit = 1 |
| | |
| | | proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps |
| | | smtpd_helo_required = yes |
| | | smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo |
| | | smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re |
| | | smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re |
| | | smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf |
| | | smtpd_client_message_rate_limit = 100 |
| | | maildrop_destination_concurrency_limit = 1 |
| | |
| | | |
| | | $myhostname = 'linux-jfp8.site'; |
| | | |
| | | $notify_method = 'smtp:[127.0.0.1]:10027'; |
| | | $forward_method = 'smtp:[127.0.0.1]:10025'; # set to undef with milter! |
| | | $notify_method = 'smtp:*:*'; |
| | | $forward_method = 'smtp:*:*'; # set to undef with milter! |
| | | |
| | | # $final_virus_destiny = D_DISCARD; |
| | | # $final_banned_destiny = D_BOUNCE; |
| | |
| | | |
| | | # The iterate_query is required for the doveadm command only and works only on dovecot 2 servers. |
| | | # Do not enable it on Dovecot 1.x servers |
| | | # iterate_query = SELECT email as user FROM mail_user |
| | | # iterate_query = SELECT email as user FROM mail_user WHERE server_id = '{server_id}' |
| | |
| | | postmaster_address = webmaster@localhost |
| | | mail_plugins = quota sieve |
| | | } |
| | | mail_plugins = $mail_plugins quota |
| | |
| | | proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps |
| | | smtpd_helo_required = yes |
| | | smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo |
| | | smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re |
| | | smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re |
| | | smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf |
| | | smtpd_client_message_rate_limit = 100 |
| | | maildrop_destination_concurrency_limit = 1 |
| | |
| | | //** Include the distribution-specific installer class library and configuration |
| | | if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php'; |
| | | include_once 'dist/lib/'.$dist['id'].'.lib.php'; |
| | | include_once 'dist/conf/'.$dist['id'].'.conf.php'; |
| | | include_once 'dist/conf/'.$dist['confid'].'.conf.php'; |
| | | |
| | | //** Get hostname |
| | | exec('hostname -f', $tmp_out); |
| | |
| | | $method = reset($keys); |
| | | $params = array(); |
| | | |
| | | if(is_array($_POST)) { |
| | | foreach($_POST as $key => $val) { |
| | | $tmp = json_decode($val, true); |
| | | if(!$tmp) $params[] = $val; |
| | | else $params[] = (array)$tmp; |
| | | } |
| | | } |
| | | $raw = file_get_contents("php://input"); |
| | | $json = json_decode($raw, true); |
| | | if(!is_array($json)) $this->_return_json('invalid_data', 'The JSON data sent to the api is invalid'); |
| | | |
| | | if(array_key_exists($method, $this->methods) == false) { |
| | | $this->_return_json('invalid_method', 'Method ' . $method . ' does not exist'); |
| | |
| | | $this->_return_json('invalid_method', 'Method ' . $method . ' does not exist in the class it was expected (' . $class_name . ')'); |
| | | } |
| | | |
| | | $methObj = new ReflectionMethod($this->classes[$class_name], $method); |
| | | foreach($methObj->getParameters() as $param) { |
| | | $pname = $param->name; |
| | | if(isset($json[$pname])) $params[] = $json[$pname]; |
| | | else $params[] = null; |
| | | } |
| | | |
| | | try { |
| | | $this->_return_json('ok', '', call_user_func_array(array($this->classes[$class_name], $method), $params)); |
| | | } catch(SoapFault $e) { |
| | |
| | | } |
| | | $spf_ip = trim($this->dataRecord['spf_ip']); |
| | | if (!empty($spf_ip)) { |
| | | $rec = split(' ', $spf_ip); |
| | | $rec = explode(' ', $spf_ip); |
| | | foreach ($rec as $ip) { |
| | | $temp_ip = explode('/', $ip); |
| | | if (filter_var($temp_ip[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { |
| | |
| | | } |
| | | $spf_hostname = trim($this->dataRecord['spf_hostname']); |
| | | if (!empty($spf_hostname)) { |
| | | $rec = split(' ', $spf_hostname); |
| | | $rec = explode(' ', $spf_hostname); |
| | | foreach ($rec as $hostname) { |
| | | if (preg_match('/^[a-zA-Z0-9\\.\\-\\*]{0,64}$/', $hostname)) |
| | | $spf_record[] = 'a:' . $hostname; |
| | |
| | | } |
| | | $spf_domain = trim($this->dataRecord['spf_domain']); |
| | | if (!empty($spf_domain)) { |
| | | $rec = split(' ', $spf_domain); |
| | | $rec = explode(' ', $spf_domain); |
| | | foreach ($rec as $domain) { |
| | | if (preg_match('/^[_a-zA-Z0-9\\.\\-\\*]{0,64}$/', $domain)) |
| | | $spf_record[] = 'include:' . $domain; |
| | |
| | | 'suffix' => '', |
| | | 'width' => '', |
| | | 'datasource'=> array ( 'type' => 'SQL', |
| | | 'querystring' => 'SELECT userid,username FROM sys_user WHERE {AUTHSQL} ORDER BY username', |
| | | // 'querystring' => 'SELECT userid,username FROM sys_user WHERE {AUTHSQL} ORDER BY username', |
| | | 'querystring' => 'SELECT userid,username FROM sys_user ORDER BY username', |
| | | 'keyfield' => 'userid', |
| | | 'valuefield' => 'username' |
| | | ), |
| | |
| | | } |
| | | $confirmation_message .= "\n\n".$app->tform->lng('message_txt').": \"".$this->dataRecord['message']."\""; |
| | | $confirmation_message .= "\n\nISPConfig: ".($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST']; |
| | | $app->functions->mail($sender_email, $subject, $confirmation_message, $recipient_email); |
| | | if ($this->dataRecord['subject'] != '' && $this->dataRecord['message'] != '') $app->functions->mail($sender_email, $subject, $confirmation_message, $recipient_email); |
| | | } else { |
| | | $app->tform->errorMessage .= $app->tform->lng("recipient_or_sender_email_address_not_valid_txt")."<br />"; |
| | | } |
| | |
| | | if($_SESSION["s"]["user"]["typ"] != 'admin') { |
| | | // Get the limits of the client |
| | | $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]); |
| | | $client = $app->db->queryOneRecord("SELECT limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); |
| | | $client = $app->db->queryOneRecord("SELECT client.mail_servers, limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id); |
| | | // When the record is updated |
| | | if($this->id > 0) { |
| | | // restore the server ID if the user is not admin and record is edited |
| | |
| | | transition: background ease 500ms; } |
| | | .table tbody tr:last-child { |
| | | border-radius: 4px; } |
| | | .table tbody tr td { |
| | | text-overflow: ellipsis; |
| | | overflow-x: hidden; } |
| | | |
| | | .tfooter { |
| | | margin-top: -1px; |
| | |
| | | body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px!important;padding-right:5px!important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success,.formbutton-danger{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-narrow{padding:6px 8px;margin-left:2px;margin-right:2px}.formbutton-narrower{padding:4px 6px}#main-wrapper{margin:0 auto;width:95%;max-width:1260px}#logo{float:left;width:200px;height:65px;margin-top:10px}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#passBar,#passText{display:inline-block;vertical-align:middle}#passBar{height:11px;padding:0}#passBar>div{height:100%;padding:0}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb,span.flag-en{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}.input-group-field{display:table-cell;vertical-align:middle;border-radius:4px;min-width:1%;white-space:nowrap}.input-group-field .form-control{border-radius:inherit!important}.input-group-field:not(:first-child):not(:last-child){border-radius:0}.input-group-field:not(:first-child):not(:last-child) .form-control{border-left-width:0;border-right-width:0}.input-group-field:last-child{border-top-left-radius:0;border-bottom-left-radius:0} |
| | | body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px!important;padding-right:5px!important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success,.formbutton-danger{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-narrow{padding:6px 8px;margin-left:2px;margin-right:2px}.formbutton-narrower{padding:4px 6px}#main-wrapper{margin:0 auto;width:95%;max-width:1260px}#logo{float:left;width:200px;height:65px;margin-top:10px}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#passBar,#passText{display:inline-block;vertical-align:middle}#passBar{height:11px;padding:0}#passBar>div{height:100%;padding:0}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.table tbody tr td{text-overflow:ellipsis;overflow-x:hidden}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb,span.flag-en{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}.input-group-field{display:table-cell;vertical-align:middle;border-radius:4px;min-width:1%;white-space:nowrap}.input-group-field .form-control{border-radius:inherit!important}.input-group-field:not(:first-child):not(:last-child){border-radius:0}.input-group-field:not(:first-child):not(:last-child) .form-control{border-left-width:0;border-right-width:0}.input-group-field:last-child{border-top-left-radius:0;border-bottom-left-radius:0} |
New file |
| | |
| | | <?php |
| | | |
| | | |
| | | $remote_user = 'test'; |
| | | $remote_pass = 'apipassword'; |
| | | $remote_url = 'https://yourserver.com:8080/remote/json.php'; |
| | | |
| | | function restCall($method, $data) { |
| | | global $remote_url; |
| | | |
| | | if(!is_array($data)) return false; |
| | | $json = json_encode($data); |
| | | |
| | | $curl = curl_init(); |
| | | curl_setopt($curl, CURLOPT_POST, 1); |
| | | |
| | | if($data) curl_setopt($curl, CURLOPT_POSTFIELDS, $json); |
| | | |
| | | // needed for self-signed cert |
| | | curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
| | | curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); |
| | | // end of needed for self-signed cert |
| | | |
| | | curl_setopt($curl, CURLOPT_URL, $remote_url . '?' . $method); |
| | | curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
| | | |
| | | $result = curl_exec($curl); |
| | | curl_close($curl); |
| | | |
| | | return $result; |
| | | } |
| | | |
| | | $result = restCall('login', array('username' => $remote_user, 'password' => $remote_pass, 'client_login' => false)); |
| | | if($result) { |
| | | $data = json_decode($result, true); |
| | | if(!$data) die("ERROR!\n"); |
| | | |
| | | $session_id = $data['response']; |
| | | |
| | | $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => array('username' => 'abcde'))); |
| | | if($result) var_dump(json_decode($result, true)); |
| | | else print "Could not get client_get result\n"; |
| | | |
| | | // or by id |
| | | $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => 2)); |
| | | if($result) var_dump(json_decode($result, true)); |
| | | else print "Could not get client_get result\n"; |
| | | |
| | | // or all |
| | | $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => array())); |
| | | if($result) var_dump(json_decode($result, true)); |
| | | else print "Could not get client_get result\n"; |
| | | |
| | | $result = restCall('logout', array('session_id' => $session_id)); |
| | | if($result) var_dump(json_decode($result, true)); |
| | | else print "Could not get logout result\n"; |
| | | } |
| | |
| | | SSLProtocol All -SSLv2 -SSLv3 |
| | | SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA |
| | | SSLHonorCipherOrder on |
| | | <IfModule mod_headers.c> |
| | | Header always add Strict-Transport-Security "max-age=15768000" |
| | | </IfModule> |
| | | # <IfModule mod_headers.c> |
| | | # Header always add Strict-Transport-Security "max-age=15768000" |
| | | # </IfModule> |
| | | SSLCertificateFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.crt |
| | | SSLCertificateKeyFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.key |
| | | <tmpl_if name='has_bundle_cert'> |
| | |
| | | public function onRunJob() { |
| | | global $app, $conf; |
| | | |
| | | if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) { |
| | | exec('/root/.local/share/letsencrypt/bin/letsencrypt renew'); |
| | | $letsencrypt = array_shift( split("\n", `which letsencrypt /root/.local/share/letsencrypt/bin/letsencrypt`) ); |
| | | if(is_executable($letsencrypt)) { |
| | | exec($letsencrypt . ' -n renew'); |
| | | $app->services->restartServiceDelayed('httpd', 'reload'); |
| | | } |
| | | |
| | | parent::onRunJob(); |
| | |
| | | // This is the same code as in install/lib/install.lib.php |
| | | // So if you change it here, you also have to change it in there! |
| | | // Please do not forget to remove the swriteln(); - lines here at this file |
| | | public function get_distname() { |
| | | function get_distname() { |
| | | |
| | | $distname = ''; |
| | | $distver = ''; |
| | |
| | | |
| | | //** Debian or Ubuntu |
| | | if (file_exists('/etc/debian_version')) { |
| | | if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu')) { |
| | | if (strstr(trim(file_get_contents('/etc/issue')), 'LTS')) { |
| | | |
| | | // Check if this is Ubuntu and not Debian |
| | | if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu') || (is_file('/etc/os-release') && stristr(file_get_contents('/etc/os-release'), 'Ubuntu'))) { |
| | | |
| | | $issue = file_get_contents('/etc/issue'); |
| | | |
| | | // Use content of /etc/issue file |
| | | if(strstr($issue,'Ubuntu')) { |
| | | if (strstr(trim($issue), 'LTS')) { |
| | | $lts=" LTS"; |
| | | } else { |
| | | $lts=""; |
| | | } |
| | | |
| | | $issue=file_get_contents('/etc/issue'); |
| | | $distname = 'Ubuntu'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | |
| | | $mainver = explode('.', $ver); |
| | | $mainver = array_filter($mainver); |
| | | $mainver = current($mainver).'.'.next($mainver); |
| | | // Use content of /etc/os-release file |
| | | } else { |
| | | $os_release = file_get_contents('/etc/os-release'); |
| | | if (strstr(trim($os_release), 'LTS')) { |
| | | $lts = " LTS"; |
| | | } else { |
| | | $lts = ""; |
| | | } |
| | | |
| | | $distname = 'Ubuntu'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | | |
| | | preg_match("/.*VERSION=\"(.*)\".*/ui", $os_release, $ver); |
| | | $ver = str_replace("LTS", "", $ver[1]); |
| | | $ver = explode(" ", $ver, 2); |
| | | $ver = reset($ver); |
| | | $mainver = $ver; |
| | | } |
| | | switch ($mainver){ |
| | | case "16.04": |
| | | $relname = "(Xenial Xerus)"; |
| | | $distid = 'ubuntu1604'; |
| | | $distconfid = 'ubuntu1604'; |
| | | break; |
| | | case "15.10": |
| | | $relname = "(Wily Werewolf)"; |
| | |
| | | $relname = "UNKNOWN"; |
| | | } |
| | | $distver = $ver.$lts." ".$relname; |
| | | swriteln("Operating System: ".$distname.' '.$distver."\n"); |
| | | } elseif(trim(file_get_contents('/etc/debian_version')) == '4.0') { |
| | | $distname = 'Debian'; |
| | | $distver = '4.0'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | | swriteln("Operating System: Debian 4.0 or compatible\n"); |
| | | } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '5.0')) { |
| | | $distname = 'Debian'; |
| | | $distver = 'Lenny'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | | swriteln("Operating System: Debian Lenny or compatible\n"); |
| | | } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '6.0') || trim(file_get_contents('/etc/debian_version')) == 'squeeze/sid') { |
| | | $distname = 'Debian'; |
| | | $distver = 'Squeeze/Sid'; |
| | | $distid = 'debian60'; |
| | | $distbaseid = 'debian'; |
| | | swriteln("Operating System: Debian 6.0 (Squeeze/Sid) or compatible\n"); |
| | | } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || substr(trim(file_get_contents('/etc/debian_version')),0,2) == '7.' || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') { |
| | | $distname = 'Debian'; |
| | | $distver = 'Wheezy/Sid'; |
| | | $distid = 'debian60'; |
| | | $distbaseid = 'debian'; |
| | | swriteln("Operating System: Debian 7.0 (Wheezy/Sid) or compatible\n"); |
| | | } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '8') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') { |
| | | $distname = 'Debian'; |
| | | $distver = 'Jessie'; |
| | | $distid = 'debian60'; |
| | | $distbaseid = 'debian'; |
| | | swriteln("Operating System: Debian 8.0 (Jessie) or compatible\n"); |
| | | } else { |
| | | $distname = 'Debian'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | | swriteln("Operating System: Debian or compatible, unknown version.\n"); |
| | | } |
| | | } |
| | | |
| | |
| | | $distver = '11.0'; |
| | | $distid = 'opensuse110'; |
| | | $distbaseid = 'opensuse'; |
| | | swriteln("Operating System: openSUSE 11.0 or compatible\n"); |
| | | } elseif (stristr(file_get_contents('/etc/SuSE-release'), '11.1')) { |
| | | $distname = 'openSUSE'; |
| | | $distver = '11.1'; |
| | | $distid = 'opensuse110'; |
| | | $distbaseid = 'opensuse'; |
| | | swriteln("Operating System: openSUSE 11.1 or compatible\n"); |
| | | } elseif (stristr(file_get_contents('/etc/SuSE-release'), '11.2')) { |
| | | $distname = 'openSUSE'; |
| | | $distver = '11.1'; |
| | | $distid = 'opensuse110'; |
| | | $distver = '11.2'; |
| | | $distid = 'opensuse112'; |
| | | $distbaseid = 'opensuse'; |
| | | swriteln("Operating System: openSUSE 11.2 or compatible\n"); |
| | | } else { |
| | | $distname = 'openSUSE'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'opensuse110'; |
| | | $distid = 'opensuse112'; |
| | | $distbaseid = 'opensuse'; |
| | | swriteln("Operating System: openSUSE or compatible, unknown version.\n"); |
| | | } |
| | | } |
| | | |
| | |
| | | $distver = '9'; |
| | | $distid = 'fedora9'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: Fedora 9 or compatible\n"); |
| | | } elseif (stristr($content, 'Fedora release 10 (Cambridge)')) { |
| | | $distname = 'Fedora'; |
| | | $distver = '10'; |
| | | $distid = 'fedora9'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: Fedora 10 or compatible\n"); |
| | | } elseif (stristr($content, 'Fedora release 10')) { |
| | | $distname = 'Fedora'; |
| | | $distver = '11'; |
| | | $distid = 'fedora9'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: Fedora 11 or compatible\n"); |
| | | } elseif (stristr($content, 'CentOS release 5.2 (Final)')) { |
| | | $distname = 'CentOS'; |
| | | $distver = '5.2'; |
| | | $distid = 'centos52'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 5.2 or compatible\n"); |
| | | } elseif (stristr($content, 'CentOS release 5.3 (Final)')) { |
| | | $distname = 'CentOS'; |
| | | $distver = '5.3'; |
| | | $distid = 'centos53'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 5.3 or compatible\n"); |
| | | } elseif(stristr($content, 'CentOS release 5')) { |
| | | $distname = 'CentOS'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'centos53'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 5 or compatible\n"); |
| | | } elseif(stristr($content, 'CentOS Linux release 6')) { |
| | | $distname = 'CentOS'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'centos53'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 6 or compatible\n"); |
| | | } elseif(stristr($content, 'CentOS Linux release 7.2')) { |
| | | $distname = 'CentOS'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'centos70'; |
| | | $distconfid = 'centos72'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 7.2\n"); |
| | | } elseif(stristr($content, 'CentOS Linux release 7')) { |
| | | $distname = 'CentOS'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'centos53'; |
| | | $distid = 'centos70'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 7 or compatible\n"); |
| | | } else { |
| | | $distname = 'Redhat'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'fedora9'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: Redhat or compatible, unknown version.\n"); |
| | | } |
| | | } |
| | | |
| | |
| | | $distver = $version[0][0] . $version[0][1]; |
| | | $distid = 'gentoo'; |
| | | $distbaseid = 'gentoo'; |
| | | swriteln("Operating System: Gentoo $distver or compatible\n"); |
| | | |
| | | } else { |
| | | die('Unrecognized GNU/Linux distribution'); |
| | | } |
| | | |
| | | return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid); |
| | | // Set $distconfid to distid, if no different id for the config is defined |
| | | if(!isset($distconfid)) $distconfid = $distid; |
| | | |
| | | return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'confid' => $distconfid, 'baseid' => $distbaseid); |
| | | } |
| | | |
| | | // this function remains in the tools class, because it is used by cron AND rescue |
| | |
| | | $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); |
| | | |
| | | $success = false; |
| | | if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) { |
| | | $success = $this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); |
| | | $letsencrypt = array_shift( split("\n", `which letsencrypt /root/.local/share/letsencrypt/bin/letsencrypt`) ); |
| | | if(is_executable($letsencrypt)) { |
| | | $success = $this->_exec($letsencrypt . " auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); |
| | | } |
| | | if(!$success) { |
| | | // error issuing cert |
| | |
| | | $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG); |
| | | |
| | | $success = false; |
| | | if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) { |
| | | $success = $this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); |
| | | $letsencrypt = array_shift( split("\n", `which letsencrypt /root/.local/share/letsencrypt/bin/letsencrypt`) ); |
| | | if(is_executable($letsencrypt)) { |
| | | $success = $this->_exec($letsencrypt . " auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme"); |
| | | } |
| | | if(!$success) { |
| | | // error issuing cert |