Compare commits
No commits in common. "4199faecb41cda7a0a4d67610d284545e8e6e212" and "010914b7bdd8bea95d8ca4035015e7c941e298ff" have entirely different histories.
4199faecb4
...
010914b7bd
|
@ -1,11 +0,0 @@
|
|||
pipeline {
|
||||
agent any
|
||||
|
||||
stages {
|
||||
stage('Do nothing') {
|
||||
steps {
|
||||
sh '/bin/true'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,41 +13,39 @@ use PDOException;
|
|||
*/
|
||||
class DatabaseConnection
|
||||
{
|
||||
private PDO $dbConnection;
|
||||
|
||||
const TABLE_PREFIX = '';
|
||||
const TABLE_DOMAINS = self::TABLE_PREFIX . "domains";
|
||||
const TABLE_NAMESERVERS = self::TABLE_PREFIX . "nameservers";
|
||||
const TABLE_PANELS = self::TABLE_PREFIX . "panels";
|
||||
const TABLE_APIKEYS = self::TABLE_PREFIX . "apikeys";
|
||||
const TABLE_DYNDNS = self::TABLE_PREFIX . "dyndns";
|
||||
|
||||
public function __construct(private readonly ConfigController $configController)
|
||||
{
|
||||
$dbHost = $this->configController->getConfig(configKey: 'dbHost');
|
||||
$dbPort = $this->configController->getConfig(configKey: 'dbPort');
|
||||
$dbDatabase = $this->configController->getConfig(configKey: 'dbDatabase');
|
||||
$dbUser = $this->configController->getConfig(configKey: 'dbUser');
|
||||
$dbPassword = $this->configController->getConfig(configKey: 'dbPassword');
|
||||
|
||||
|
||||
if (!$this->configController->getConfig(configKey: 'test')) {
|
||||
// TODO create config => encryption key
|
||||
try {
|
||||
$this->dbConnection = new PDO(
|
||||
dsn: "mysql:host=$dbHost;port=$dbPort;charset=utf8mb4;dbname=$dbDatabase",
|
||||
username: $dbUser,
|
||||
password: $dbPassword
|
||||
);
|
||||
$sql = "SHOW TABLES";
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
$result = $statement->fetch();
|
||||
if (empty($result)) {
|
||||
// ALTER TABLE `domains` ADD `panel_id` INT NULL AFTER `id`;
|
||||
echo 'Error: Cannot find tables.' . PHP_EOL;
|
||||
if (confirm(message: 'Should I try to create them?')) {
|
||||
$sql = "
|
||||
private PDO $dbConnection;
|
||||
|
||||
const TABLE_PREFIX = '';
|
||||
const TABLE_DOMAINS = self::TABLE_PREFIX . "domains";
|
||||
const TABLE_NAMESERVERS = self::TABLE_PREFIX . "nameservers";
|
||||
const TABLE_PANELS = self::TABLE_PREFIX . "panels";
|
||||
const TABLE_APIKEYS = self::TABLE_PREFIX . "apikeys";
|
||||
const TABLE_DYNDNS = self::TABLE_PREFIX . "dyndns";
|
||||
|
||||
public function __construct(private readonly ConfigController $configController)
|
||||
{
|
||||
$dbHost = $this->configController->getConfig(configKey: 'dbHost');
|
||||
$dbPort = $this->configController->getConfig(configKey: 'dbPort');
|
||||
$dbDatabase = $this->configController->getConfig(configKey: 'dbDatabase');
|
||||
$dbUser = $this->configController->getConfig(configKey: 'dbUser');
|
||||
$dbPassword = $this->configController->getConfig(configKey: 'dbPassword');
|
||||
|
||||
// TODO create config => encryption key
|
||||
try {
|
||||
$this->dbConnection = new PDO(
|
||||
dsn : "mysql:host=$dbHost;port=$dbPort;charset=utf8mb4;dbname=$dbDatabase",
|
||||
username: $dbUser,
|
||||
password: $dbPassword
|
||||
);
|
||||
$sql = "SHOW TABLES";
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
$result = $statement->fetch();
|
||||
if (empty($result)) {
|
||||
// ALTER TABLE `domains` ADD `panel_id` INT NULL AFTER `id`;
|
||||
echo 'Error: Cannot find tables.' . PHP_EOL;
|
||||
if (confirm(message: 'Should I try to create them?')) {
|
||||
$sql = "
|
||||
CREATE TABLE `apikeys` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
|
@ -55,20 +53,20 @@ class DatabaseConnection
|
|||
`api_token` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
$sql = "
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
$sql = "
|
||||
CREATE TABLE `domains` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`panel` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
$sql = "
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
$sql = "
|
||||
CREATE TABLE `nameservers` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
|
@ -77,10 +75,10 @@ class DatabaseConnection
|
|||
`apikey` varbinary(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
$sql = "
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
$sql = "
|
||||
CREATE TABLE `panels` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
|
@ -89,10 +87,10 @@ class DatabaseConnection
|
|||
`apikey` varbinary(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
$sql = "
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
$sql = "
|
||||
CREATE TABLE `dyndns` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
|
@ -101,48 +99,47 @@ class DatabaseConnection
|
|||
`last_update` TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
|
||||
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
echo 'Tables have been created.' . PHP_EOL;
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
} catch (PDOException $exception) {
|
||||
echo $exception->getMessage() . PHP_EOL;
|
||||
echo 'Did you create the database and adjust the config file?' . PHP_EOL;
|
||||
echo PHP_EOL . 'You can create database an user via a panel or manually in mysql shell:' . PHP_EOL;
|
||||
$password = $this->generatePassword();
|
||||
echo 'Created an initial password: ' . $password . PHP_EOL;
|
||||
echo 'CREATE DATABASE bindAPI;' . PHP_EOL;
|
||||
echo "CREATE USER 'bindAPI'@'localhost' IDENTIFIED BY '$password';" . PHP_EOL;
|
||||
echo "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON bindAPI.* TO 'bindAPI'@'localhost';" . PHP_EOL;
|
||||
echo 'There is no need to run FLUSH PRIVILEGES when using GRANT!' . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param int $length
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function generatePassword(int $length = 8): string
|
||||
{
|
||||
$chars = '23456789bcdfhkmnprstvzBCDFHJKLMNPRSTVZ';
|
||||
$shuffled = str_shuffle(string: $chars);
|
||||
return mb_substr(string: $shuffled, start: 0, length: $length);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return PDO
|
||||
*/
|
||||
public function getConnection(): PDO
|
||||
{
|
||||
return $this->dbConnection;
|
||||
}
|
||||
|
||||
$statement = $this->dbConnection->prepare(query: $sql);
|
||||
$statement->execute();
|
||||
|
||||
echo 'Tables have been created.' . PHP_EOL;
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
} catch (PDOException $exception) {
|
||||
echo $exception->getMessage() . PHP_EOL;
|
||||
echo 'Did you create the database and adjust the config file?' . PHP_EOL;
|
||||
echo PHP_EOL . 'You can create database an user via a panel or manually in mysql shell:' . PHP_EOL;
|
||||
$password = $this->generatePassword();
|
||||
echo 'Created an initial password: ' . $password . PHP_EOL;
|
||||
echo 'CREATE DATABASE bindAPI;' . PHP_EOL;
|
||||
echo "CREATE USER 'bindAPI'@'localhost' IDENTIFIED BY '$password';" . PHP_EOL;
|
||||
echo "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON bindAPI.* TO 'bindAPI'@'localhost';" . PHP_EOL;
|
||||
echo 'There is no need to run FLUSH PRIVILEGES when using GRANT!' . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param int $length
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function generatePassword(int $length = 8): string
|
||||
{
|
||||
$chars = '23456789bcdfhkmnprstvzBCDFHJKLMNPRSTVZ';
|
||||
$shuffled = str_shuffle(string: $chars);
|
||||
return mb_substr(string: $shuffled, start: 0, length: $length);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \PDO
|
||||
*/
|
||||
public function getConnection(): PDO
|
||||
{
|
||||
return $this->dbConnection;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace Unit\Controller;
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Controller\DatabaseConnection;
|
||||
use App\Repository\NameserverRepository;
|
||||
use DI\Container;
|
||||
use DI\ContainerBuilder;
|
||||
use Exception;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use function DI\autowire;
|
||||
|
||||
|
@ -21,7 +19,7 @@ class BindApiTestController extends TestCase
|
|||
/**
|
||||
* @param int|string $dataName
|
||||
*
|
||||
* @throws Exception
|
||||
* @throws \Exception
|
||||
* @internal This method is not covered by the backward compatibility promise for PHPUnit
|
||||
*/
|
||||
public function __construct(?string $name = null, array $data = [], $dataName = '')
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
namespace Unit\Controller;
|
||||
namespace App\Controller;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Unit\Controller;
|
||||
|
||||
use App\Controller\ConfigController;
|
||||
use App\Controller\DatabaseConnection;
|
||||
use PDO;
|
||||
use PDOException;
|
||||
|
||||
/**
|
||||
* @covers \App\Controller\DatabaseConnection
|
||||
* @covers \App\Controller\ConfigController
|
||||
*/
|
||||
class DatabaseConnectionTest extends BindApiTestController
|
||||
{
|
||||
private PDO $dbConnection;
|
||||
|
||||
public function testGetConnection()
|
||||
{
|
||||
|
||||
$configController = new ConfigController(test: true);
|
||||
|
||||
$dbHost = $configController->getConfig(configKey: 'dbHost');
|
||||
$dbPort = $configController->getConfig(configKey: 'dbPort');
|
||||
$dbDatabase = $configController->getConfig(configKey: 'dbDatabase');
|
||||
$dbUser = $configController->getConfig(configKey: 'dbUser');
|
||||
$dbPassword = $configController->getConfig(configKey: 'dbPassword');
|
||||
|
||||
try {
|
||||
$this->dbConnection = new PDO(
|
||||
dsn: "mysql:host=$dbHost;port=$dbPort;charset=utf8mb4;dbname=$dbDatabase",
|
||||
username: $dbUser,
|
||||
password: $dbPassword
|
||||
);
|
||||
} catch (PDOException $e) {
|
||||
$this->fail(message: $e->getMessage());
|
||||
}
|
||||
|
||||
$databaseConnection = new DatabaseConnection(configController: $configController);
|
||||
|
||||
self::assertEquals(expected: $databaseConnection->getConnection(), actual: $this->dbConnection);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue