feat: implement global autoresponder plugin
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
final class DirectAdminUser
|
||||
{
|
||||
private string $username;
|
||||
private string $skin;
|
||||
private string $language;
|
||||
private string $configDir;
|
||||
|
||||
public function __construct(string $username, string $skin = 'enhanced', string $language = 'en', string $configDir = Settings::CONFIG_DIR)
|
||||
{
|
||||
if (!preg_match('/^[A-Za-z0-9._-]+$/', $username)) {
|
||||
throw new InvalidArgumentException('Invalid username');
|
||||
}
|
||||
$this->username = $username;
|
||||
$this->skin = $skin !== '' ? $skin : 'enhanced';
|
||||
$this->language = $language !== '' ? strtolower($language) : 'en';
|
||||
$this->configDir = $configDir;
|
||||
}
|
||||
|
||||
public static function fromEnvironment(Settings $settings): self
|
||||
{
|
||||
$username = getenv('USERNAME') ?: getenv('USER') ?: getenv('DA_USER') ?: '';
|
||||
if ($username === '' && isset($_SERVER['USERNAME'])) {
|
||||
$username = (string)$_SERVER['USERNAME'];
|
||||
}
|
||||
if ($username === '') {
|
||||
throw new RuntimeException('Cannot determine DirectAdmin user');
|
||||
}
|
||||
$skin = getenv('SKIN') ?: (string)($_SERVER['SKIN'] ?? 'enhanced');
|
||||
$lang = self::readLanguage($username) ?: $settings->defaultLanguage();
|
||||
return new self($username, $skin, $lang);
|
||||
}
|
||||
|
||||
public function username(): string
|
||||
{
|
||||
return $this->username;
|
||||
}
|
||||
|
||||
public function skin(): string
|
||||
{
|
||||
return $this->skin;
|
||||
}
|
||||
|
||||
public function language(): string
|
||||
{
|
||||
return $this->language;
|
||||
}
|
||||
|
||||
public function hasPluginAccess(Settings $settings): bool
|
||||
{
|
||||
$override = $this->configDir . '/users/' . $this->username . '.conf';
|
||||
if (is_file($override)) {
|
||||
$data = Settings::load($override);
|
||||
return $data->getBool('enabled', $settings->defaultEnable());
|
||||
}
|
||||
return $settings->defaultEnable();
|
||||
}
|
||||
|
||||
private static function readLanguage(string $username): string
|
||||
{
|
||||
$path = '/usr/local/directadmin/data/users/' . $username . '/user.conf';
|
||||
if (!is_file($path)) {
|
||||
return '';
|
||||
}
|
||||
$lines = file($path, FILE_IGNORE_NEW_LINES);
|
||||
if ($lines === false) {
|
||||
return '';
|
||||
}
|
||||
foreach ($lines as $line) {
|
||||
if (str_starts_with($line, 'language=')) {
|
||||
return strtolower(trim(substr($line, 9)));
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user