Made config functions into a static class.
This commit is contained in:
parent
e1211859a6
commit
7cfdfc6bd8
18 changed files with 123 additions and 131 deletions
|
@ -2,8 +2,8 @@
|
||||||
> Misuzu can and will steal your lunch money.
|
> Misuzu can and will steal your lunch money.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
- PHP 7.3
|
- PHP 7.4
|
||||||
- MariaDB 10.3
|
- MariaDB 10.4
|
||||||
- [Composer](https://getcomposer.org/)
|
- [Composer](https://getcomposer.org/)
|
||||||
- [node.js](https://nodejs.org/) (for the typescript and less compilers)
|
- [node.js](https://nodejs.org/) (for the typescript and less compilers)
|
||||||
- [Yarn](https://yarnpkg.com/)
|
- [Yarn](https://yarnpkg.com/)
|
||||||
|
|
51
misuzu.php
51
misuzu.php
|
@ -7,7 +7,7 @@ use PDO;
|
||||||
define('MSZ_STARTUP', microtime(true));
|
define('MSZ_STARTUP', microtime(true));
|
||||||
define('MSZ_ROOT', __DIR__);
|
define('MSZ_ROOT', __DIR__);
|
||||||
define('MSZ_DEBUG', is_file(MSZ_ROOT . '/.debug'));
|
define('MSZ_DEBUG', is_file(MSZ_ROOT . '/.debug'));
|
||||||
define('MSZ_PHP_MIN_VER', '7.3.0');
|
define('MSZ_PHP_MIN_VER', '7.4.0');
|
||||||
|
|
||||||
if(version_compare(PHP_VERSION, MSZ_PHP_MIN_VER, '<')) {
|
if(version_compare(PHP_VERSION, MSZ_PHP_MIN_VER, '<')) {
|
||||||
die('Misuzu requires <i>at least</i> PHP <b>' . MSZ_PHP_MIN_VER . '</b> to run.');
|
die('Misuzu requires <i>at least</i> PHP <b>' . MSZ_PHP_MIN_VER . '</b> to run.');
|
||||||
|
@ -39,7 +39,6 @@ require_once 'src/audit_log.php';
|
||||||
require_once 'src/changelog.php';
|
require_once 'src/changelog.php';
|
||||||
require_once 'src/colour.php';
|
require_once 'src/colour.php';
|
||||||
require_once 'src/comments.php';
|
require_once 'src/comments.php';
|
||||||
require_once 'src/config.php';
|
|
||||||
require_once 'src/csrf.php';
|
require_once 'src/csrf.php';
|
||||||
require_once 'src/emotes.php';
|
require_once 'src/emotes.php';
|
||||||
require_once 'src/general.php';
|
require_once 'src/general.php';
|
||||||
|
@ -101,27 +100,27 @@ DB::init(DB::buildDSN($dbConfig), $dbConfig['username'] ?? '', $dbConfig['passwo
|
||||||
",
|
",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
config_init();
|
Config::init();
|
||||||
mail_settings([
|
mail_settings([
|
||||||
'method' => config_get('mail.method', MSZ_CFG_STR),
|
'method' => Config::get('mail.method', Config::TYPE_STR),
|
||||||
'host' => config_get('mail.host', MSZ_CFG_STR),
|
'host' => Config::get('mail.host', Config::TYPE_STR),
|
||||||
'port' => config_get('mail.port', MSZ_CFG_INT, 587),
|
'port' => Config::get('mail.port', Config::TYPE_INT, 587),
|
||||||
'encryption' => config_get('mail.encryption', MSZ_CFG_STR),
|
'encryption' => Config::get('mail.encryption', Config::TYPE_STR),
|
||||||
'username' => config_get('mail.username', MSZ_CFG_STR),
|
'username' => Config::get('mail.username', Config::TYPE_STR),
|
||||||
'password' => config_get('mail.password', MSZ_CFG_STR),
|
'password' => Config::get('mail.password', Config::TYPE_STR),
|
||||||
'sender_email' => config_get('mail.sender.address', MSZ_CFG_STR),
|
'sender_email' => Config::get('mail.sender.address', Config::TYPE_STR),
|
||||||
'sender_name' => config_get('mail.sender.name', MSZ_CFG_STR),
|
'sender_name' => Config::get('mail.sender.name', Config::TYPE_STR),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if(!empty($errorReporter)) {
|
if(!empty($errorReporter)) {
|
||||||
$errorReporter->setReportInfo(
|
$errorReporter->setReportInfo(
|
||||||
config_get('error_report.url', MSZ_CFG_STR),
|
Config::get('error_report.url', Config::TYPE_STR),
|
||||||
config_get('error_report.secret', MSZ_CFG_STR)
|
Config::get('error_report.secret', Config::TYPE_STR)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// replace this with a better storage mechanism
|
// replace this with a better storage mechanism
|
||||||
define('MSZ_STORAGE', config_get('storage.path', MSZ_CFG_STR, MSZ_ROOT . '/store'));
|
define('MSZ_STORAGE', Config::get('storage.path', Config::TYPE_STR, MSZ_ROOT . '/store'));
|
||||||
mkdirs(MSZ_STORAGE, true);
|
mkdirs(MSZ_STORAGE, true);
|
||||||
|
|
||||||
if(PHP_SAPI === 'cli') {
|
if(PHP_SAPI === 'cli') {
|
||||||
|
@ -346,8 +345,8 @@ MIG;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'twitter-auth':
|
case 'twitter-auth':
|
||||||
$apiKey = config_get('twitter.api.key', MSZ_CFG_STR);
|
$apiKey = Config::get('twitter.api.key', Config::TYPE_STR);
|
||||||
$apiSecret = config_get('twitter.api.secret', MSZ_CFG_STR);
|
$apiSecret = Config::get('twitter.api.secret', Config::TYPE_STR);
|
||||||
|
|
||||||
if(empty($apiKey) || empty($apiSecret)) {
|
if(empty($apiKey) || empty($apiSecret)) {
|
||||||
echo 'No Twitter api keys set in config.' . PHP_EOL;
|
echo 'No Twitter api keys set in config.' . PHP_EOL;
|
||||||
|
@ -398,7 +397,7 @@ MIG;
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
geoip_init(config_get('geoip.database', MSZ_CFG_STR, '/var/lib/GeoIP/GeoLite2-Country.mmdb'));
|
geoip_init(Config::get('geoip.database', Config::TYPE_STR, '/var/lib/GeoIP/GeoLite2-Country.mmdb'));
|
||||||
|
|
||||||
if(!MSZ_DEBUG) {
|
if(!MSZ_DEBUG) {
|
||||||
$twigCache = sys_get_temp_dir() . '/msz-tpl-cache-' . md5(MSZ_ROOT);
|
$twigCache = sys_get_temp_dir() . '/msz-tpl-cache-' . md5(MSZ_ROOT);
|
||||||
|
@ -412,10 +411,10 @@ MIG;
|
||||||
]);
|
]);
|
||||||
|
|
||||||
tpl_var('globals', [
|
tpl_var('globals', [
|
||||||
'site_name' => config_get('site.name', MSZ_CFG_STR, 'Misuzu'),
|
'site_name' => Config::get('site.name', Config::TYPE_STR, 'Misuzu'),
|
||||||
'site_description' => config_get('site.desc', MSZ_CFG_STR),
|
'site_description' => Config::get('site.desc', Config::TYPE_STR),
|
||||||
'site_url' => config_get('site.url', MSZ_CFG_STR),
|
'site_url' => Config::get('site.url', Config::TYPE_STR),
|
||||||
'site_twitter' => config_get('social.twitter', MSZ_CFG_STR),
|
'site_twitter' => Config::get('social.twitter', Config::TYPE_STR),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
tpl_add_path(MSZ_ROOT . '/templates');
|
tpl_add_path(MSZ_ROOT . '/templates');
|
||||||
|
@ -474,19 +473,19 @@ MIG;
|
||||||
}
|
}
|
||||||
|
|
||||||
csrf_settings(
|
csrf_settings(
|
||||||
config_get('csrf.secret', MSZ_CFG_STR, 'insecure'),
|
Config::get('csrf.secret', Config::TYPE_STR, 'insecure'),
|
||||||
empty($userDisplayInfo) ? ip_remote_address() : $cookieData['session_token']
|
empty($userDisplayInfo) ? ip_remote_address() : $cookieData['session_token']
|
||||||
);
|
);
|
||||||
|
|
||||||
if(config_get('private.enabled', MSZ_CFG_BOOL)) {
|
if(Config::get('private.enabled', Config::TYPE_BOOL)) {
|
||||||
$onLoginPage = $_SERVER['PHP_SELF'] === url('auth-login');
|
$onLoginPage = $_SERVER['PHP_SELF'] === url('auth-login');
|
||||||
$onPasswordPage = parse_url($_SERVER['PHP_SELF'], PHP_URL_PATH) === url('auth-forgot');
|
$onPasswordPage = parse_url($_SERVER['PHP_SELF'], PHP_URL_PATH) === url('auth-forgot');
|
||||||
$misuzuBypassLockdown = !empty($misuzuBypassLockdown) || $onLoginPage;
|
$misuzuBypassLockdown = !empty($misuzuBypassLockdown) || $onLoginPage;
|
||||||
|
|
||||||
if(!$misuzuBypassLockdown) {
|
if(!$misuzuBypassLockdown) {
|
||||||
if(user_session_active()) {
|
if(user_session_active()) {
|
||||||
$privatePermCat = config_get('private.perm.cat', MSZ_CFG_STR);
|
$privatePermCat = Config::get('private.perm.cat', Config::TYPE_STR);
|
||||||
$privatePermVal = config_get('private.perm.val', MSZ_CFG_INT);
|
$privatePermVal = Config::get('private.perm.val', Config::TYPE_INT);
|
||||||
|
|
||||||
if(!empty($privatePermCat) && $privatePermVal > 0) {
|
if(!empty($privatePermCat) && $privatePermVal > 0) {
|
||||||
if(!perms_check_user($privatePermCat, $userDisplayInfo['user_id'], $privatePermVal)) {
|
if(!perms_check_user($privatePermCat, $userDisplayInfo['user_id'], $privatePermVal)) {
|
||||||
|
@ -494,7 +493,7 @@ MIG;
|
||||||
user_session_stop(); // au revoir
|
user_session_stop(); // au revoir
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elseif(!$onLoginPage && !($onPasswordPage && config_get('private.allow_password_reset', MSZ_CFG_BOOL, true))) {
|
} elseif(!$onLoginPage && !($onPasswordPage && Config::get('private.allow_password_reset', Config::TYPE_BOOL, true))) {
|
||||||
url_redirect('auth-login');
|
url_redirect('auth-login');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,9 +17,9 @@ if(!empty($_GET['resolve_user']) && is_string($_GET['resolve_user'])) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$notices = [];
|
$notices = [];
|
||||||
$siteIsPrivate = config_get('private.enable', MSZ_CFG_BOOL);
|
$siteIsPrivate = Config::get('private.enable', Config::TYPE_BOOL);
|
||||||
$loginPermCat = $siteIsPrivate ? config_get('private.perm.cat', MSZ_CFG_STR) : '';
|
$loginPermCat = $siteIsPrivate ? Config::get('private.perm.cat', Config::TYPE_STR) : '';
|
||||||
$loginPermVal = $siteIsPrivate ? config_get('private.perm.val', MSZ_CFG_INT) : 0;
|
$loginPermVal = $siteIsPrivate ? Config::get('private.perm.val', Config::TYPE_INT) : 0;
|
||||||
$ipAddress = ip_remote_address();
|
$ipAddress = ip_remote_address();
|
||||||
$remainingAttempts = user_login_attempts_remaining($ipAddress);
|
$remainingAttempts = user_login_attempts_remaining($ipAddress);
|
||||||
|
|
||||||
|
@ -112,8 +112,8 @@ $loginUsername = !empty($_POST['login']['username']) && is_string($_POST['login'
|
||||||
!empty($_GET['username']) && is_string($_GET['username']) ? $_GET['username'] : ''
|
!empty($_GET['username']) && is_string($_GET['username']) ? $_GET['username'] : ''
|
||||||
);
|
);
|
||||||
$loginRedirect = $welcomeMode ? url('index') : (!empty($_GET['redirect']) && is_string($_GET['redirect']) ? $_GET['redirect'] : null) ?? $_SERVER['HTTP_REFERER'] ?? url('index');
|
$loginRedirect = $welcomeMode ? url('index') : (!empty($_GET['redirect']) && is_string($_GET['redirect']) ? $_GET['redirect'] : null) ?? $_SERVER['HTTP_REFERER'] ?? url('index');
|
||||||
$sitePrivateMessage = $siteIsPrivate ? config_get('private.msg', MSZ_CFG_STR) : '';
|
$sitePrivateMessage = $siteIsPrivate ? Config::get('private.msg', Config::TYPE_STR) : '';
|
||||||
$canResetPassword = $siteIsPrivate ? config_get('private.allow_password_reset', MSZ_CFG_BOOL, true) : true;
|
$canResetPassword = $siteIsPrivate ? Config::get('private.allow_password_reset', Config::TYPE_BOOL, true) : true;
|
||||||
$canRegisterAccount = !$siteIsPrivate;
|
$canRegisterAccount = !$siteIsPrivate;
|
||||||
|
|
||||||
echo tpl_render('auth.login', [
|
echo tpl_render('auth.login', [
|
||||||
|
|
|
@ -23,8 +23,8 @@ if($userId > 0 && empty($username)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$notices = [];
|
$notices = [];
|
||||||
$siteIsPrivate = config_get('private.enable', MSZ_CFG_BOOL);
|
$siteIsPrivate = Config::get('private.enable', Config::TYPE_BOOL);
|
||||||
$canResetPassword = $siteIsPrivate ? config_get('private.allow_password_reset', MSZ_CFG_BOOL, true) : true;
|
$canResetPassword = $siteIsPrivate ? Config::get('private.allow_password_reset', Config::TYPE_BOOL, true) : true;
|
||||||
$ipAddress = ip_remote_address();
|
$ipAddress = ip_remote_address();
|
||||||
$remainingAttempts = user_login_attempts_remaining($ipAddress);
|
$remainingAttempts = user_login_attempts_remaining($ipAddress);
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@ $leaderboardIdLength = strlen($leaderboardId);
|
||||||
$leaderboardYear = $leaderboardIdLength === 4 || $leaderboardIdLength === 6 ? substr($leaderboardId, 0, 4) : null;
|
$leaderboardYear = $leaderboardIdLength === 4 || $leaderboardIdLength === 6 ? substr($leaderboardId, 0, 4) : null;
|
||||||
$leaderboardMonth = $leaderboardIdLength === 6 ? substr($leaderboardId, 4, 2) : null;
|
$leaderboardMonth = $leaderboardIdLength === 6 ? substr($leaderboardId, 4, 2) : null;
|
||||||
|
|
||||||
$unrankedForums = !empty($_GET['allow_unranked']) ? [] : config_get('forum_leader.unranked.forum', MSZ_CFG_ARR);
|
$unrankedForums = !empty($_GET['allow_unranked']) ? [] : Config::get('forum_leader.unranked.forum', Config::TYPE_ARR);
|
||||||
$unrankedTopics = !empty($_GET['allow_unranked']) ? [] : config_get('forum_leader.unranked.topic', MSZ_CFG_ARR);
|
$unrankedTopics = !empty($_GET['allow_unranked']) ? [] : Config::get('forum_leader.unranked.topic', Config::TYPE_ARR);
|
||||||
$leaderboards = forum_leaderboard_categories();
|
$leaderboards = forum_leaderboard_categories();
|
||||||
$leaderboard = forum_leaderboard_listing($leaderboardYear, $leaderboardMonth, $unrankedForums, $unrankedTopics);
|
$leaderboard = forum_leaderboard_listing($leaderboardYear, $leaderboardMonth, $unrankedForums, $unrankedTopics);
|
||||||
|
|
||||||
|
|
|
@ -9,12 +9,12 @@ $showActivityFeed = false; /*user_session_active()
|
||||||
if($showActivityFeed) {
|
if($showActivityFeed) {
|
||||||
// load activity shit garbage here
|
// load activity shit garbage here
|
||||||
} else {
|
} else {
|
||||||
if(config_get('social.embed_linked', MSZ_CFG_BOOL)) {
|
if(Config::get('social.embed_linked', Config::TYPE_BOOL)) {
|
||||||
tpl_var('linked_data', [
|
tpl_var('linked_data', [
|
||||||
'name' => config_get('site.name', MSZ_CFG_STR, 'Misuzu'),
|
'name' => Config::get('site.name', Config::TYPE_STR, 'Misuzu'),
|
||||||
'url' => config_get('site.url', MSZ_CFG_STR),
|
'url' => Config::get('site.url', Config::TYPE_STR),
|
||||||
'logo' => config_get('site.ext_logo', MSZ_CFG_STR),
|
'logo' => Config::get('site.ext_logo', Config::TYPE_STR),
|
||||||
'same_as' => config_get('social.linked', MSZ_CFG_ARR),
|
'same_as' => Config::get('social.linked', Config::TYPE_ARR),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,10 +36,10 @@ if(!empty($_POST['post']) && csrf_verify_request()) {
|
||||||
);
|
);
|
||||||
|
|
||||||
if(!$originalPostId && $isFeatured) {
|
if(!$originalPostId && $isFeatured) {
|
||||||
$twitterApiKey = config_get('twitter.api.key', MSZ_CFG_STR);
|
$twitterApiKey = Config::get('twitter.api.key', Config::TYPE_STR);
|
||||||
$twitterApiSecret = config_get('twitter.api.secret', MSZ_CFG_STR);
|
$twitterApiSecret = Config::get('twitter.api.secret', Config::TYPE_STR);
|
||||||
$twitterToken = config_get('twitter.token.key', MSZ_CFG_STR);
|
$twitterToken = Config::get('twitter.token.key', Config::TYPE_STR);
|
||||||
$twitterTokenSecret = config_get('twitter.token.secret', MSZ_CFG_STR);
|
$twitterTokenSecret = Config::get('twitter.token.secret', Config::TYPE_STR);
|
||||||
|
|
||||||
if(!empty($twitterApiKey) && !empty($twitterApiSecret)
|
if(!empty($twitterApiKey) && !empty($twitterApiSecret)
|
||||||
&& !empty($twitterToken) && !empty($twitterTokenSecret)) {
|
&& !empty($twitterToken) && !empty($twitterTokenSecret)) {
|
||||||
|
|
|
@ -31,7 +31,7 @@ if(!$posts) {
|
||||||
header("Content-Type: application/{$feedMode}+xml; charset=utf-8");
|
header("Content-Type: application/{$feedMode}+xml; charset=utf-8");
|
||||||
|
|
||||||
echo news_feed($feedMode, $posts, [
|
echo news_feed($feedMode, $posts, [
|
||||||
'title' => config_get('site.name', MSZ_CFG_STR, 'Misuzu') . ' » ' . ($category['category_name'] ?? 'Featured News'),
|
'title' => Config::get('site.name', Config::TYPE_STR, 'Misuzu') . ' » ' . ($category['category_name'] ?? 'Featured News'),
|
||||||
'subtitle' => $category['category_description'] ?? 'A live featured news feed.',
|
'subtitle' => $category['category_description'] ?? 'A live featured news feed.',
|
||||||
'html-url' => empty($category) ? url('news-index') : url('news-category', ['category' => $category['category_id']]),
|
'html-url' => empty($category) ? url('news-index') : url('news-category', ['category' => $category['category_id']]),
|
||||||
'feed-url' => empty($category) ? url("news-feed-{$feedMode}") : url("news-category-feed-{$feedMode}", ['category' => $category['category_id']]),
|
'feed-url' => empty($category) ? url("news-feed-{$feedMode}") : url("news-category-feed-{$feedMode}", ['category' => $category['category_id']]),
|
||||||
|
|
|
@ -35,12 +35,12 @@ if(empty($parsedUrl['scheme'])
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!config_get('media_proxy.enable', MSZ_CFG_BOOL)) {
|
if(!Config::get('media_proxy.enable', Config::TYPE_BOOL)) {
|
||||||
redirect($proxyUrlDecoded);
|
redirect($proxyUrlDecoded);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$proxySecret = config_get('media_proxy.secret', MSZ_CFG_STR, 'insecure');
|
$proxySecret = Config::get('media_proxy.secret', Config::TYPE_STR, 'insecure');
|
||||||
$expectedHash = hash_hmac('sha256', $proxyUrl, $proxySecret);
|
$expectedHash = hash_hmac('sha256', $proxyUrl, $proxySecret);
|
||||||
|
|
||||||
if(!hash_equals($expectedHash, $proxyHash)) {
|
if(!hash_equals($expectedHash, $proxyHash)) {
|
||||||
|
|
|
@ -54,7 +54,7 @@ if(!user_relation_set($userId, $subjectId, $relationType)) {
|
||||||
|
|
||||||
|
|
||||||
if(($relationType === MSZ_USER_RELATION_NONE || $relationType === MSZ_USER_RELATION_FOLLOW)
|
if(($relationType === MSZ_USER_RELATION_NONE || $relationType === MSZ_USER_RELATION_FOLLOW)
|
||||||
&& in_array($subjectId, config_get('relations.replicate', MSZ_CFG_ARR))) {
|
&& in_array($subjectId, Config::get('relations.replicate', Config::TYPE_ARR))) {
|
||||||
user_relation_set($subjectId, $userId, $relationType);
|
user_relation_set($subjectId, $userId, $relationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ if($isVerifiedRequest && isset($_POST['tfa']['enable']) && (bool)$twoFactorInfo[
|
||||||
'settings_2fa_image' => totp_qrcode(totp_uri(
|
'settings_2fa_image' => totp_qrcode(totp_uri(
|
||||||
sprintf(
|
sprintf(
|
||||||
'%s:%s',
|
'%s:%s',
|
||||||
config_get('site.name', MSZ_CFG_STR, 'Misuzu'),
|
Config::get('site.name', Config::TYPE_STR, 'Misuzu'),
|
||||||
$twoFactorInfo['username']
|
$twoFactorInfo['username']
|
||||||
),
|
),
|
||||||
$tfaKey,
|
$tfaKey,
|
||||||
|
|
|
@ -21,11 +21,11 @@ $canViewImages = !$userExists
|
||||||
switch($userAssetsMode) {
|
switch($userAssetsMode) {
|
||||||
case 'avatar':
|
case 'avatar':
|
||||||
if(!$canViewImages) {
|
if(!$canViewImages) {
|
||||||
$filename = config_get('avatar.banned', MSZ_CFG_STR, MSZ_ROOT . '/public/images/banned-avatar.png');
|
$filename = Config::get('avatar.banned', Config::TYPE_STR, MSZ_ROOT . '/public/images/banned-avatar.png');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$filename = config_get('avatar.default', MSZ_CFG_STR, MSZ_ROOT . '/public/images/no-avatar.png');
|
$filename = Config::get('avatar.default', Config::TYPE_STR, MSZ_ROOT . '/public/images/no-avatar.png');
|
||||||
|
|
||||||
if(!$userExists) {
|
if(!$userExists) {
|
||||||
break;
|
break;
|
||||||
|
|
62
src/Config.php
Normal file
62
src/Config.php
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<?php
|
||||||
|
namespace Misuzu;
|
||||||
|
|
||||||
|
use PDO;
|
||||||
|
use PDOException;
|
||||||
|
|
||||||
|
class Config {
|
||||||
|
public const TYPE_ANY = '';
|
||||||
|
public const TYPE_STR = 'string';
|
||||||
|
public const TYPE_INT = 'integer';
|
||||||
|
public const TYPE_BOOL = 'boolean';
|
||||||
|
public const TYPE_ARR = 'array';
|
||||||
|
|
||||||
|
public const DEFAULTS = [
|
||||||
|
self::TYPE_ANY => null,
|
||||||
|
self::TYPE_STR => '',
|
||||||
|
self::TYPE_INT => 0,
|
||||||
|
self::TYPE_BOOL => false,
|
||||||
|
self::TYPE_ARR => [],
|
||||||
|
];
|
||||||
|
|
||||||
|
private static $config = [];
|
||||||
|
|
||||||
|
public static function init(): void {
|
||||||
|
try {
|
||||||
|
$config = DB::prepare('SELECT * FROM `msz_config`')->fetchAll();
|
||||||
|
} catch(PDOException $ex) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach($config as $record) {
|
||||||
|
self::$config[$record['config_name']] = unserialize($record['config_value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function get(string $key, string $type = self::TYPE_ANY, $default = null) {
|
||||||
|
$value = self::$config[$key] ?? null;
|
||||||
|
|
||||||
|
if($type !== self::TYPE_ANY && gettype($value) !== $type)
|
||||||
|
$value = null;
|
||||||
|
|
||||||
|
return $value ?? $default ?? self::DEFAULTS[$type];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function set(string $key, $value, bool $soft = false): void {
|
||||||
|
self::$config[$key] = $value;
|
||||||
|
|
||||||
|
if(!$soft) {
|
||||||
|
$value = serialize($value);
|
||||||
|
|
||||||
|
DB::prepare('
|
||||||
|
REPLACE INTO `msz_config`
|
||||||
|
(`config_name`, `config_value`)
|
||||||
|
VALUES
|
||||||
|
(:name, :value)
|
||||||
|
')->bind('name', $key)
|
||||||
|
->bind('value', $value)
|
||||||
|
->execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,7 +8,7 @@ function geoip_init(?string $database = null): void {
|
||||||
$existing->close();
|
$existing->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
geoip_instance(new GeoIPDBReader($database ?? config_get('geoip.database')));
|
geoip_instance(new GeoIPDBReader($database ?? \Misuzu\Config::get('geoip.database')));
|
||||||
}
|
}
|
||||||
|
|
||||||
function geoip_instance(?GeoIPDBReader $newInstance = null): ?GeoIPDBReader {
|
function geoip_instance(?GeoIPDBReader $newInstance = null): ?GeoIPDBReader {
|
||||||
|
|
|
@ -61,9 +61,9 @@ function user_avatar_is_allowed_type(int $type): bool {
|
||||||
|
|
||||||
function user_avatar_default_options(): array {
|
function user_avatar_default_options(): array {
|
||||||
return [
|
return [
|
||||||
'max_width' => config_get('avatar.max_width', MSZ_CFG_INT, 1000),
|
'max_width' => \Misuzu\Config::get('avatar.max_width', \Misuzu\Config::TYPE_INT, 1000),
|
||||||
'max_height' => config_get('avatar.max_height', MSZ_CFG_INT, 1000),
|
'max_height' => \Misuzu\Config::get('avatar.max_height', \Misuzu\Config::TYPE_INT, 1000),
|
||||||
'max_size' => config_get('avatar.max_height', MSZ_CFG_INT, 500000),
|
'max_size' => \Misuzu\Config::get('avatar.max_height', \Misuzu\Config::TYPE_INT, 500000),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,9 +93,9 @@ function user_background_is_allowed_type(int $type): bool {
|
||||||
|
|
||||||
function user_background_default_options(): array {
|
function user_background_default_options(): array {
|
||||||
return [
|
return [
|
||||||
'max_width' => config_get('background.max_width', MSZ_CFG_INT, 3840),
|
'max_width' => \Misuzu\Config::get('background.max_width', \Misuzu\Config::TYPE_INT, 3840),
|
||||||
'max_height' => config_get('background.max_height', MSZ_CFG_INT, 2160),
|
'max_height' => \Misuzu\Config::get('background.max_height', \Misuzu\Config::TYPE_INT, 2160),
|
||||||
'max_size' => config_get('background.max_height', MSZ_CFG_INT, 1000000),
|
'max_size' => \Misuzu\Config::get('background.max_height', \Misuzu\Config::TYPE_INT, 1000000),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
<?php
|
|
||||||
define('MSZ_CFG_ANY', '');
|
|
||||||
define('MSZ_CFG_STR', 'string');
|
|
||||||
define('MSZ_CFG_INT', 'integer');
|
|
||||||
define('MSZ_CFG_BOOL', 'boolean');
|
|
||||||
define('MSZ_CFG_ARR', 'array');
|
|
||||||
|
|
||||||
define('MSZ_CFG_DEFAULTS', [
|
|
||||||
MSZ_CFG_ANY => null,
|
|
||||||
MSZ_CFG_STR => '',
|
|
||||||
MSZ_CFG_INT => 0,
|
|
||||||
MSZ_CFG_BOOL => false,
|
|
||||||
MSZ_CFG_ARR => [],
|
|
||||||
]);
|
|
||||||
|
|
||||||
function config_store(?array $append = null): array {
|
|
||||||
static $store = [];
|
|
||||||
|
|
||||||
if(!is_null($append)) {
|
|
||||||
$store = array_merge($store, $append);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $store;
|
|
||||||
}
|
|
||||||
|
|
||||||
function config_init(): void {
|
|
||||||
try {
|
|
||||||
$dbconfig = \Misuzu\DB::prepare('SELECT * FROM `msz_config`')->fetchAll();
|
|
||||||
} catch (PDOException $ex) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$config = [];
|
|
||||||
|
|
||||||
foreach($dbconfig as $record)
|
|
||||||
$config[$record['config_name']] = unserialize($record['config_value']);
|
|
||||||
|
|
||||||
config_store($config);
|
|
||||||
}
|
|
||||||
|
|
||||||
function config_get(string $key, string $type = MSZ_CFG_ANY, $default = null) {
|
|
||||||
$value = config_store()[$key] ?? null;
|
|
||||||
|
|
||||||
if($type !== MSZ_CFG_ANY && gettype($value) !== $type)
|
|
||||||
$value = null;
|
|
||||||
|
|
||||||
return $value ?? $default ?? MSZ_CFG_DEFAULTS[$type];
|
|
||||||
}
|
|
||||||
|
|
||||||
function config_set(string $key, $value, bool $soft = false): void {
|
|
||||||
config_store([$key => $value]);
|
|
||||||
|
|
||||||
if($soft)
|
|
||||||
return;
|
|
||||||
|
|
||||||
$value = serialize($value);
|
|
||||||
$saveVal = \Misuzu\DB::prepare('
|
|
||||||
INSERT INTO `msz_config`
|
|
||||||
(`config_name`, `config_value`)
|
|
||||||
VALUES
|
|
||||||
(:name, :value_1)
|
|
||||||
ON DUPLICATE KEY UPDATE
|
|
||||||
`config_value` = :value_2
|
|
||||||
');
|
|
||||||
$saveVal->bind('name', $key);
|
|
||||||
$saveVal->bind('value_1', $value);
|
|
||||||
$saveVal->bind('value_2', $value);
|
|
||||||
$saveVal->execute();
|
|
||||||
}
|
|
|
@ -248,11 +248,11 @@ function url_construct(string $url, array $query = [], ?string $fragment = null)
|
||||||
}
|
}
|
||||||
|
|
||||||
function url_proxy_media(?string $url): ?string {
|
function url_proxy_media(?string $url): ?string {
|
||||||
if(empty($url) || !config_get('media_proxy.enable', MSZ_CFG_BOOL) || is_local_url($url)) {
|
if(empty($url) || !\Misuzu\Config::get('media_proxy.enable', \Misuzu\Config::TYPE_BOOL) || is_local_url($url)) {
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
$secret = config_get('media_proxy.secret', MSZ_CFG_STR, 'insecure');
|
$secret = \Misuzu\Config::get('media_proxy.secret', \Misuzu\Config::TYPE_STR, 'insecure');
|
||||||
$url = \Misuzu\Base64::encode($url, true);
|
$url = \Misuzu\Base64::encode($url, true);
|
||||||
$hash = hash_hmac('sha256', $url, $secret);
|
$hash = hash_hmac('sha256', $url, $secret);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue