TODO'; $authenticatedLabel = $todo; $configSetupLabel = $todo; $tick = ' ✅ '; if ($configSetupDone) { $configSetupLabel = $tick; if ($authenticated) { $authenticatedLabel = $tick; } } ?>
Warning: connection not secure, switch to https if possible"; } ?>

Configure and Setup Postfixadmin

  • You need to have a setup_password configured in a config.local.php file.
  • Login using your setup password.
  • Then you can run some self tests to check compatability with Postfixadmin
  • Create / update your database of choice
  • and Add a new super user account

Login with setup_password

If you've forgotten your super-admin password, you can generate a new one using the Generate form and update your config.local.php

For a new installation, you must generate a 'setup_password' to go into your config.local.php file.

You can use the form below, or run something like the following in a shell - php -r 'echo password_hash("password", PASSWORD_DEFAULT);'

EOF; } if ($old_setup_password) { echo '

Your setup_password is in an obsolete format. As of PostfixAdmin 3.3 it needs regenerating.'; } if (!$authenticated || !$configSetupDone) { ?>

Generate setup_password hash

If you want to use the password you entered as setup password, edit config.inc.php or config.local.php and set

'; $result .= "
\$CONF['setup_password'] = '$hash';

After adding, refresh this page and login using it.

"; } else { $form_error = 'has-error'; $errors['setup_password'] = implode(', ', $msgs); } } } ?>

Hosting Environment Check

Errors were found with your environment. These will be displayed once you've configured a setup_password and confirmed it.

"; } if (!empty($check['info'])) { echo "

Information

"; } if (!empty($check['warn'])) { echo "

Warnings

"; } if (!empty($check['error'])) { echo "

Errors (MUST be fixed)

"; } } else { if (!empty($check['error'])) { echo '

Hosting Environment errors found. Login to see details.

'; } if (!empty($check['warn'])) { echo '

Hosting Environment warnings found. Login to see details.

'; } } ?>

Database Update

Everything seems fine... attempting to create/update database structure

\n"; require_once(dirname(__FILE__) . '/upgrade.php'); } else { echo "

Please login to see perform database update.

"; } ?>
'ALL', 'description' => '', 'transport' => '')); } $values = array( 'username' => safepost('username'), 'password' => safepost('password'), 'password2' => safepost('password2'), 'superadmin' => 1, 'domains' => array(), 'active' => 1, ); list($error, $setupMessage, $errors) = create_admin($values); if ($error == 1) { $tUsername = htmlentities($values['username']); error_log("failed to add admin - " . json_encode([$error, $setupMessage, $errors])); echo "

Admin addition failed; check field error messages or server logs.

"; } else { // all good!. $setupMessage .= "

You are done with your basic setup. You can now login to PostfixAdmin using the account you just created.

"; } } ?>

Add Superadmin Account

{$errors[$key]}"; } function create_admin($values) { define('POSTFIXADMIN_SETUP', 1); # avoids instant redirect to login.php after creating the admin $handler = new AdminHandler(1, 'setup.php'); $formconf = $handler->webformConfig(); if (!$handler->init($values['username'])) { return array(1, "", $handler->errormsg); } if (!$handler->set($values)) { return array(1, "", $handler->errormsg); } if (!$handler->save()) { return array(1, "", $handler->errormsg); } return array( 0, $handler->infomsg['success'], array(), ); } /** * @return array['info' => string[], 'warn' => string[], 'error' => string[] ] */ function do_software_environment_check() { $CONF = Config::getInstance()->getAll(); $warn = []; $error = []; $info = []; // // Check for availability functions // $f_phpversion = function_exists("phpversion"); $f_apache_get_version = function_exists("apache_get_version"); $m_pdo = extension_loaded("PDO"); $m_pdo_mysql = extension_loaded("pdo_mysql"); $m_pdo_pgsql = extension_loaded('pdo_pgsql'); $m_pdo_sqlite = extension_loaded("pdo_sqlite"); $f_session_start = function_exists("session_start"); $f_preg_match = function_exists("preg_match"); $f_mb_encode_mimeheader = function_exists("mb_encode_mimeheader"); $f_imap_open = function_exists("imap_open"); $file_local_config = file_exists(realpath("./../config.local.php")); // Fall back to looking in /etc/postfixadmin for config.local.php (Debian etc) if (!$file_local_config && is_dir('/etc/postfixadmin')) { $file_local_config = file_exists('/etc/postfixadmin/config.local.php'); } // // Check for PHP version // $phpversion = 'unknown-version'; if ($f_phpversion == 1) { if (version_compare(PHP_VERSION, '7.0.0', '<')) { $error[] = "Error: Depends on: PHP v7.0+. You must upgrade."; } else { $info[] = "PHP version " . phpversion(); } } else { $error[] = "Unable to check for PHP version. (PHP_VERSION not found?)"; } // // Check for Apache version // if ($f_apache_get_version == 1) { $info[] = apache_get_version(); } // // Check for config.local.php // if ($file_local_config == 1) { $info[] = "Depends on: presence config.local.php - Found"; } else { $warn[] = "Warning: config.local.php - NOT FOUND - It's Recommended to store your own settings in config.local.php instead of editing config.inc.php"; } // Check if there is support for at least 1 database if (($m_pdo == 0) and ($m_pdo_mysql == 0) and ($m_pdo_sqlite == 0) and ($m_pdo_pgsql == 0)) { $error[] = "There is no database (PDO) support in your PHP setup, you MUST install a suitable PHP PDO extension (e.g. pdo_pgsql, pdo_mysql or pdo_sqlite)."; } if ($m_pdo_mysql == 1) { $info[] = "Database - PDO MySQL - Found"; } else { $info[] = "Database - MySQL (pdo_mysql) extension not found"; } // // PostgreSQL functions // if ($m_pdo_pgsql == 1) { $info[] = "Database support : PDO PostgreSQL - Found "; if (Config::read_string('database_type') != 'pgsql') { $warn[] = "Change the database_type to 'pgsql' in config.local.php if you want to use PostgreSQL"; } } else { $warn[] = "Database - PostgreSQL (pdo_pgsql) extension not found"; } if ($m_pdo_sqlite == 1) { $info[] = "Database support : PDO SQLite - Found"; if (Config::read_string('database_type') != 'sqlite') { $warn[] = "Change the database_type to 'sqlite' in config.local.php if you want to use SQLite"; } } else { $warn[] = "Database support - SQLite (pdo_sqlite) extension not found"; } $link = null; $error_text = null; try { $link = db_connect(); } catch (Exception $e) { $error_text = $e->getMessage(); } if (!empty($link) && $error_text == "") { $info[] = "Testing database connection (using config) - Success"; } else { $error[] = "Error: Can't connect to database - please check the \$CONF['database_*'] parameters in config.local.php : $error_text"; } // // Session functions // if ($f_session_start == 1) { $info[] = "Depends on: session - OK"; } else { $error[] = "Error: Depends on: session - NOT FOUND. (FreeBSD: portinstall php$phpversion-session ?)"; } // // PCRE functions // if ($f_preg_match == 1) { $info[] = "Depends on: pcre - Found"; } else { $error[] = "Error: Depends on: pcre - NOT FOUND. (FreeBSD: portinstall php$phpversion-pcre)"; } // // Multibyte functions // if ($f_mb_encode_mimeheader == 1) { $info[] = "Depends on: multibyte string - Found"; } else { $error[] = "Error: Depends on: multibyte string - mbstring extension missing. (FreeBSD: portinstall php$phpversion-mbstring?)"; } // // Imap functions // if ($f_imap_open == 1) { $info[] = "IMAP functions - Found"; } else { $warn[] = "Warning: Optional dependency 'imap' extension missing, without this you may not be able to automcate creation of subfolders for new mailboxes"; } return ['error' => $error, 'warn' => $warn, 'info' => $info]; } ?>