diff --git a/lib/Froxlor/Api/Commands/Mysqls.php b/lib/Froxlor/Api/Commands/Mysqls.php
index b0b4b641..e759ede2 100644
--- a/lib/Froxlor/Api/Commands/Mysqls.php
+++ b/lib/Froxlor/Api/Commands/Mysqls.php
@@ -1,4 +1,5 @@
getParam('mysql_password');
+ if (($this->getUserDetail('mysqls_used') < $this->getUserDetail('mysqls') || $this->getUserDetail('mysqls') == '-1') || $this->isAdmin()) {
+ // required parameters
+ $password = $this->getParam('mysql_password');
- // parameters
- $dbserver = $this->getParam('mysql_server', true, 0);
- $databasedescription = $this->getParam('description', true, '');
- $databasename = $this->getParam('custom_suffix', true, '');
- $sendinfomail = $this->getBoolParam('sendinfomail', true, 0);
- // get needed customer info to reduce the mysql-usage-counter by one
- $customer = $this->getCustomerData('mysqls');
+ // parameters
+ $dbserver = $this->getParam('mysql_server', true, 0);
+ $databasedescription = $this->getParam('description', true, '');
+ $databasename = $this->getParam('custom_suffix', true, '');
+ $sendinfomail = $this->getBoolParam('sendinfomail', true, 0);
+ // get needed customer info to reduce the mysql-usage-counter by one
+ $customer = $this->getCustomerData('mysqls');
- // validation
- $password = \Froxlor\Validate\Validate::validate($password, 'password', '', '', array(), true);
- $password = \Froxlor\System\Crypt::validatePassword($password, true);
- $databasedescription = \Froxlor\Validate\Validate::validate(trim($databasedescription), 'description', \Froxlor\Validate\Validate::REGEX_DESC_TEXT, '', array(), true);
- if (!empty($databasename)) {
- $databasename = \Froxlor\Validate\Validate::validate(trim($databasename), 'database_name', '/^[A-Za-z0-9][A-Za-z0-9\-_]+$/i', '', array(), true);
- }
-
- // validate whether the dbserver exists
- $dbserver = \Froxlor\Validate\Validate::validate($dbserver, html_entity_decode($this->lng['mysql']['mysql_server']), '', '', 0, true);
- Database::needRoot(true, $dbserver);
- Database::needSqlData();
- $sql_root = Database::getSqlData();
- Database::needRoot(false);
- if (! isset($sql_root) || ! is_array($sql_root)) {
- throw new \Exception("Database server with index #" . $dbserver . " is unknown", 404);
- }
-
- if ($sendinfomail != 1) {
- $sendinfomail = 0;
- }
-
- $newdb_params = array(
- 'loginname' => ($this->isAdmin() ? $customer['loginname'] : $this->getUserDetail('loginname')),
- 'mysql_lastaccountnumber' => ($this->isAdmin() ? $customer['mysql_lastaccountnumber'] : $this->getUserDetail('mysql_lastaccountnumber'))
- );
- // create database, user, set permissions, etc.pp.
- $dbm = new \Froxlor\Database\DbManager($this->logger());
-
- if(strtoupper(Settings::Get('customer.mysqlprefix')) == 'DBNAME' && !empty($databasename)) {
- $username = $dbm->createDatabase($newdb_params['loginname'].'_'.$databasename, $password);
- } else {
- $username = $dbm->createDatabase($newdb_params['loginname'], $password, $newdb_params['mysql_lastaccountnumber']);
- }
-
- // we've checked against the password in dbm->createDatabase
- if ($username == false) {
- \Froxlor\UI\Response::standard_error('passwordshouldnotbeusername', '', true);
- }
-
- // add database info to froxlor
- $stmt = Database::prepare("
- INSERT INTO `" . TABLE_PANEL_DATABASES . "`
- SET
- `customerid` = :customerid,
- `databasename` = :databasename,
- `description` = :description,
- `dbserver` = :dbserver
- ");
- $params = array(
- "customerid" => $customer['customerid'],
- "databasename" => $username,
- "description" => $databasedescription,
- "dbserver" => $dbserver
- );
- Database::pexecute($stmt, $params, true, true);
- $databaseid = Database::lastInsertId();
- $params['id'] = $databaseid;
-
- // update customer usage
- Customers::increaseUsage($customer['customerid'], 'mysqls_used');
- Customers::increaseUsage($customer['customerid'], 'mysql_lastaccountnumber');
-
- // send info-mail?
- if ($sendinfomail == 1) {
- $pma = $this->lng['admin']['notgiven'];
- if (Settings::Get('panel.phpmyadmin_url') != '') {
- $pma = Settings::Get('panel.phpmyadmin_url');
+ // validation
+ $password = \Froxlor\Validate\Validate::validate($password, 'password', '', '', array(), true);
+ $password = \Froxlor\System\Crypt::validatePassword($password, true);
+ $databasedescription = \Froxlor\Validate\Validate::validate(trim($databasedescription), 'description', \Froxlor\Validate\Validate::REGEX_DESC_TEXT, '', array(), true);
+ if (!empty($databasename)) {
+ $databasename = \Froxlor\Validate\Validate::validate(trim($databasename), 'database_name', '/^[A-Za-z0-9][A-Za-z0-9\-_]+$/i', '', array(), true);
}
+ // validate whether the dbserver exists
+ $dbserver = \Froxlor\Validate\Validate::validate($dbserver, html_entity_decode($this->lng['mysql']['mysql_server']), '', '', 0, true);
Database::needRoot(true, $dbserver);
Database::needSqlData();
$sql_root = Database::getSqlData();
Database::needRoot(false);
- $userinfo = $customer;
+ if (!isset($sql_root) || !is_array($sql_root)) {
+ throw new \Exception("Database server with index #" . $dbserver . " is unknown", 404);
+ }
- $replace_arr = array(
- 'SALUTATION' => \Froxlor\User::getCorrectUserSalutation($userinfo),
- 'CUST_NAME' => \Froxlor\User::getCorrectUserSalutation($userinfo), // < keep this for compatibility
- 'NAME' => $userinfo['name'],
- 'FIRSTNAME' => $userinfo['firstname'],
- 'COMPANY' => $userinfo['company'],
- 'CUSTOMER_NO' => $userinfo['customernumber'],
- 'DB_NAME' => $username,
- 'DB_PASS' => htmlentities(htmlentities($password)),
- 'DB_DESC' => $databasedescription,
- 'DB_SRV' => $sql_root['host'],
- 'PMA_URI' => $pma
+ if ($sendinfomail != 1) {
+ $sendinfomail = 0;
+ }
+
+ $newdb_params = array(
+ 'loginname' => ($this->isAdmin() ? $customer['loginname'] : $this->getUserDetail('loginname')),
+ 'mysql_lastaccountnumber' => ($this->isAdmin() ? $customer['mysql_lastaccountnumber'] : $this->getUserDetail('mysql_lastaccountnumber'))
);
+ // create database, user, set permissions, etc.pp.
+ $dbm = new \Froxlor\Database\DbManager($this->logger());
- // get template for mail subject
- $mail_subject = $this->getMailTemplate($userinfo, 'mails', 'new_database_by_customer_subject', $replace_arr, $this->lng['mails']['new_database_by_customer']['subject']);
- // get template for mail body
- $mail_body = $this->getMailTemplate($userinfo, 'mails', 'new_database_by_customer_mailbody', $replace_arr, $this->lng['mails']['new_database_by_customer']['mailbody']);
-
- $_mailerror = false;
- $mailerr_msg = "";
- try {
- $this->mailer()->Subject = $mail_subject;
- $this->mailer()->AltBody = $mail_body;
- $this->mailer()->msgHTML(str_replace("\n", "
", $mail_body));
- $this->mailer()->addAddress($userinfo['email'], \Froxlor\User::getCorrectUserSalutation($userinfo));
- $this->mailer()->send();
- } catch (\PHPMailer\PHPMailer\Exception $e) {
- $mailerr_msg = $e->errorMessage();
- $_mailerror = true;
- } catch (\Exception $e) {
- $mailerr_msg = $e->getMessage();
- $_mailerror = true;
+ if (strtoupper(Settings::Get('customer.mysqlprefix')) == 'DBNAME' && !empty($databasename)) {
+ $username = $dbm->createDatabase($newdb_params['loginname'] . '_' . $databasename, $password);
+ } else {
+ $username = $dbm->createDatabase($newdb_params['loginname'], $password, $newdb_params['mysql_lastaccountnumber']);
}
- if ($_mailerror) {
- $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_ERR, "[API] Error sending mail: " . $mailerr_msg);
- \Froxlor\UI\Response::standard_error('errorsendingmail', $userinfo['email'], true);
+ // we've checked against the password in dbm->createDatabase
+ if ($username == false) {
+ \Froxlor\UI\Response::standard_error('passwordshouldnotbeusername', '', true);
}
- $this->mailer()->clearAddresses();
+ // add database info to froxlor
+ $stmt = Database::prepare("
+ INSERT INTO `" . TABLE_PANEL_DATABASES . "`
+ SET
+ `customerid` = :customerid,
+ `databasename` = :databasename,
+ `description` = :description,
+ `dbserver` = :dbserver
+ ");
+ $params = array(
+ "customerid" => $customer['customerid'],
+ "databasename" => $username,
+ "description" => $databasedescription,
+ "dbserver" => $dbserver
+ );
+ Database::pexecute($stmt, $params, true, true);
+ $databaseid = Database::lastInsertId();
+ $params['id'] = $databaseid;
+
+ // update customer usage
+ Customers::increaseUsage($customer['customerid'], 'mysqls_used');
+ Customers::increaseUsage($customer['customerid'], 'mysql_lastaccountnumber');
+
+ // send info-mail?
+ if ($sendinfomail == 1) {
+ $pma = $this->lng['admin']['notgiven'];
+ if (Settings::Get('panel.phpmyadmin_url') != '') {
+ $pma = Settings::Get('panel.phpmyadmin_url');
+ }
+
+ Database::needRoot(true, $dbserver);
+ Database::needSqlData();
+ $sql_root = Database::getSqlData();
+ Database::needRoot(false);
+ $userinfo = $customer;
+
+ $replace_arr = array(
+ 'SALUTATION' => \Froxlor\User::getCorrectUserSalutation($userinfo),
+ 'CUST_NAME' => \Froxlor\User::getCorrectUserSalutation($userinfo), // < keep this for compatibility
+ 'NAME' => $userinfo['name'],
+ 'FIRSTNAME' => $userinfo['firstname'],
+ 'COMPANY' => $userinfo['company'],
+ 'CUSTOMER_NO' => $userinfo['customernumber'],
+ 'DB_NAME' => $username,
+ 'DB_PASS' => htmlentities(htmlentities($password)),
+ 'DB_DESC' => $databasedescription,
+ 'DB_SRV' => $sql_root['host'],
+ 'PMA_URI' => $pma
+ );
+
+ // get template for mail subject
+ $mail_subject = $this->getMailTemplate($userinfo, 'mails', 'new_database_by_customer_subject', $replace_arr, $this->lng['mails']['new_database_by_customer']['subject']);
+ // get template for mail body
+ $mail_body = $this->getMailTemplate($userinfo, 'mails', 'new_database_by_customer_mailbody', $replace_arr, $this->lng['mails']['new_database_by_customer']['mailbody']);
+
+ $_mailerror = false;
+ $mailerr_msg = "";
+ try {
+ $this->mailer()->Subject = $mail_subject;
+ $this->mailer()->AltBody = $mail_body;
+ $this->mailer()->msgHTML(str_replace("\n", "
", $mail_body));
+ $this->mailer()->addAddress($userinfo['email'], \Froxlor\User::getCorrectUserSalutation($userinfo));
+ $this->mailer()->send();
+ } catch (\PHPMailer\PHPMailer\Exception $e) {
+ $mailerr_msg = $e->errorMessage();
+ $_mailerror = true;
+ } catch (\Exception $e) {
+ $mailerr_msg = $e->getMessage();
+ $_mailerror = true;
+ }
+
+ if ($_mailerror) {
+ $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_ERR, "[API] Error sending mail: " . $mailerr_msg);
+ \Froxlor\UI\Response::standard_error('errorsendingmail', $userinfo['email'], true);
+ }
+
+ $this->mailer()->clearAddresses();
+ }
+ $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_WARNING, "[API] added mysql-database '" . $username . "'");
+
+ $result = $this->apiCall('Mysqls.get', array(
+ 'dbname' => $username
+ ));
+ return $this->response(200, "successful", $result);
}
- $this->logger()->logAction($this->isAdmin() ? \Froxlor\FroxlorLogger::ADM_ACTION : \Froxlor\FroxlorLogger::USR_ACTION, LOG_WARNING, "[API] added mysql-database '" . $username . "'");
-
- $result = $this->apiCall('Mysqls.get', array(
- 'dbname' => $username
- ));
- return $this->response(200, "successful", $result);
+ throw new \Exception("No more resources available", 406);
}
/**
@@ -202,7 +206,7 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
$id = $this->getParam('id', true, 0);
$dn_optional = ($id <= 0 ? false : true);
$dbname = $this->getParam('dbname', $dn_optional, '');
- $dbserver = $this->getParam('mysql_server', true, - 1);
+ $dbserver = $this->getParam('mysql_server', true, -1);
if ($this->isAdmin()) {
if ($this->getUserDetail('customers_see_all') != 1) {
@@ -302,7 +306,7 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
$id = $this->getParam('id', true, 0);
$dn_optional = ($id <= 0 ? false : true);
$dbname = $this->getParam('dbname', $dn_optional, '');
- $dbserver = $this->getParam('mysql_server', true, - 1);
+ $dbserver = $this->getParam('mysql_server', true, -1);
$customer = $this->getCustomerData();
if ($this->isAdmin() == false && Settings::IsInList('panel.customer_hide_options', 'mysql')) {
@@ -389,7 +393,7 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
public function listing()
{
$result = array();
- $dbserver = $this->getParam('mysql_server', true, - 1);
+ $dbserver = $this->getParam('mysql_server', true, -1);
$customer_ids = $this->getAllowedCustomerIds('mysql');
$query_fields = array();
$result_stmt = Database::prepare("
@@ -486,7 +490,7 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
$id = $this->getParam('id', true, 0);
$dn_optional = ($id <= 0 ? false : true);
$dbname = $this->getParam('dbname', $dn_optional, '');
- $dbserver = $this->getParam('mysql_server', true, - 1);
+ $dbserver = $this->getParam('mysql_server', true, -1);
$customer = $this->getCustomerData();
if ($this->isAdmin() == false && Settings::IsInList('panel.customer_hide_options', 'mysql')) {