diff --git a/.gitignore b/.gitignore
index 1e54788..d95e4b9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
/public/data/*
/public/thumb/*
/public/robots.txt
+/config.cfg
/config.ini
/.debug
/vendor
diff --git a/config.example.cfg b/config.example.cfg
new file mode 100644
index 0000000..3475f45
--- /dev/null
+++ b/config.example.cfg
@@ -0,0 +1,15 @@
+database:dsn mariadb://user:password@:unix:/eeprom?socket=/var/run/mysqld/mysqld.sock&charset=utf8mb4
+
+; Must be implementations of \EEPROM\Auth\IAuth
+auth:clients \EEPROM\Auth\MisuzuAuth \EEPROM\Auth\NabuccoAuth
+
+misuzu:secret woomy
+misuzu:endpoint https://flashii.net/_sockchat/verify
+
+nabucco:secret secret key
+
+domain:short i.flashii.net
+domain:api eeprom.flashii.net
+
+; List of allowed remote domains
+cors:origins flashii.net chat.flashii.net sockchat.flashii.net
diff --git a/config.example.ini b/config.example.ini
deleted file mode 100644
index b83af44..0000000
--- a/config.example.ini
+++ /dev/null
@@ -1,23 +0,0 @@
-[Database]
-dsn = "mariadb://user:password@:unix:/eeprom?socket=/var/run/mysqld/mysqld.sock&charset=utf8mb4&init=SET SESSION time_zone = '+00:00', sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'"
-
-[Auth]
-; Must be implementations of \EEPROM\Auth\IAuth
-clients[] = \EEPROM\Auth\MisuzuAuth
-clients[] = \EEPROM\Auth\SockChatAuth
-
-[Misuzu]
-secret = woomy
-endpoint = https://flashii.net/_sockchat/verify
-
-[Nabucco]
-secret = secret key
-
-[Uploads]
-short_domain = i.eeprom.domain
-
-[CORS]
-; List of allowed remote domains
-origins[] = flashii.net
-origins[] = chat.flashii.net
-origins[] = sockchat.flashii.net
diff --git a/eeprom.php b/eeprom.php
index fd5b76a..ff0ef44 100644
--- a/eeprom.php
+++ b/eeprom.php
@@ -2,8 +2,8 @@
namespace EEPROM;
use Index\Environment;
-use Index\Data\ConnectionFailedException;
use Index\Data\DbTools;
+use Syokuhou\SharpConfig;
define('PRM_STARTUP', microtime(true));
define('PRM_ROOT', __DIR__);
@@ -18,10 +18,11 @@ define('PRM_THUMBS', PRM_PUBLIC . '/thumb');
require_once PRM_ROOT . '/vendor/autoload.php';
Environment::setDebug(PRM_DEBUG);
-
mb_internal_encoding('utf-8');
date_default_timezone_set('utc');
+$cfg = SharpConfig::fromFile(PRM_ROOT . '/config.cfg');
+
set_exception_handler(function(\Throwable $ex) {
http_response_code(500);
header('Content-Type: text/plain; charset=utf-8');
@@ -40,19 +41,5 @@ if(!is_dir(PRM_UPLOADS))
if(!is_dir(PRM_THUMBS))
mkdir(PRM_THUMBS, 0775, true);
-$configPath = PRM_ROOT . '/config.ini';
-
-if(!is_file($configPath))
- die('EEPROM configuration is missing.');
-
-Config::load($configPath);
-
-if(!Config::has('Database', 'dsn'))
- die('EEPROM database is not configured.');
-
-try {
- $db = DbTools::create(Config::get('Database', 'dsn'));
-} catch(ConnectionFailedException $ex) {
- echo '
Unable to connect to database
';
- die($ex->getMessage());
-}
+$db = DbTools::create($cfg->getString('database:dsn', 'null:'));
+$db->execute('SET SESSION time_zone = \'+00:00\', sql_mode = \'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION\';');
diff --git a/public/index.php b/public/index.php
index dd6f3ea..6952e2b 100644
--- a/public/index.php
+++ b/public/index.php
@@ -6,19 +6,21 @@ use Index\Http\HttpFx;
require_once __DIR__ . '/../eeprom.php';
function eepromOriginAllowed(string $origin): bool {
+ global $cfg;
+
$origin = mb_strtolower(parse_url($origin, PHP_URL_HOST));
if($origin === $_SERVER['HTTP_HOST'])
return true;
- $allowed = Config::get('CORS', 'origins', []);
+ $allowed = $cfg->getArray('cors:origins');
if(empty($allowed))
return true;
return in_array($origin, $allowed);
}
-$isApiDomain = $_SERVER['HTTP_HOST'] === Config::get('Uploads', 'api_domain');
+$isApiDomain = $_SERVER['HTTP_HOST'] === $cfg->getString('domain:api');
$router = new HttpFx;
$router->use('/', function($response) {
@@ -51,7 +53,7 @@ if($isApiDomain) {
}
});
- $router->use('/', function($response, $request) use ($db) {
+ $router->use('/', function($response, $request) use ($db, $cfg) {
$auth = $request->getHeaderLine('Authorization');
if(empty($auth)) {
$mszAuth = (string)$request->getCookie('msz_auth');
@@ -64,7 +66,7 @@ if($isApiDomain) {
$authMethod = strval($authParts[0] ?? '');
$authToken = strval($authParts[1] ?? '');
- $authClients = Config::get('Auth', 'clients', []);
+ $authClients = $cfg->getArray('auth:clients');
foreach($authClients as $client) {
$client = new $client;
diff --git a/src/Auth/MisuzuAuth.php b/src/Auth/MisuzuAuth.php
index 01cebcf..1022e66 100644
--- a/src/Auth/MisuzuAuth.php
+++ b/src/Auth/MisuzuAuth.php
@@ -9,8 +9,10 @@ class MisuzuAuth implements IAuth {
private $secretKey = '';
public function __construct() {
- $this->endPoint = Config::get('Misuzu', 'endpoint', '');
- $this->secretKey = Config::get('Misuzu', 'secret', '');
+ global $cfg;
+
+ $this->endPoint = $cfg->getString('misuzu:endpoint');
+ $this->secretKey = $cfg->getString('misuzu:secret');
}
public function getName(): string { return 'Misuzu'; }
diff --git a/src/Auth/NabuccoAuth.php b/src/Auth/NabuccoAuth.php
index 03abcd8..15bb371 100644
--- a/src/Auth/NabuccoAuth.php
+++ b/src/Auth/NabuccoAuth.php
@@ -8,7 +8,9 @@ class NabuccoAuth implements IAuth {
private $secretKey = '';
public function __construct() {
- $this->secretKey = Config::get('Nabucco', 'secret', '');
+ global $cfg;
+
+ $this->secretKey = $cfg->getString('nabucco:secret');
}
public function getName(): string { return 'Nabucco'; }
diff --git a/src/Config.php b/src/Config.php
deleted file mode 100644
index cde78f1..0000000
--- a/src/Config.php
+++ /dev/null
@@ -1,25 +0,0 @@
-id;
}
public function getPublicUrl(bool $forceReal = false): string {
- if(!$forceReal && Config::has('Uploads', 'short_domain'))
- return '//' . Config::get('Uploads', 'short_domain') . '/' . $this->id;
+ global $cfg;
+
+ if(!$forceReal && $cfg->hasValues('domain:short'))
+ return '//' . $cfg->getString('domain:short') . '/' . $this->id;
return '//' . $_SERVER['HTTP_HOST'] . $this->getRemotePath();
}
public function getPublicThumbUrl(bool $forceReal = false): string {