%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Settings/ |
| Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Settings/AdminSettings.php |
<?php
/*
* @copyright 2023 Passwords App
*
* @author Marius David Wieschollek
* @license AGPL-3.0
*
* This file is part of the Passwords App
* created by Marius David Wieschollek.
*/
namespace OCA\Passwords\Settings;
use Exception;
use OCA\Passwords\AppInfo\Application;
use OCA\Passwords\AppInfo\SystemRequirements;
use OCA\Passwords\Encryption\Object\SseV3KeyProviderInterface;
use OCA\Passwords\Provider\Favicon\BestIconProvider;
use OCA\Passwords\Provider\Preview\BrowshotPreviewProvider;
use OCA\Passwords\Provider\Preview\ScreeenlyProvider;
use OCA\Passwords\Provider\Preview\ScreenShotLayerProvider;
use OCA\Passwords\Provider\Preview\ScreenShotMachineProvider;
use OCA\Passwords\Services\ConfigurationService;
use OCA\Passwords\Services\FileCacheService;
use OCA\Passwords\Services\HelperService;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\Settings\ISettings;
/**
* Class AdminSettings
*
* @package OCA\Passwords\Settings
*/
class AdminSettings implements ISettings {
const LINK_DOCUMENTATION = 'https://git.mdns.eu/nextcloud/passwords/-/wikis/Administrators/Index';
const LINK_HELP = 'https://git.mdns.eu/nextcloud/passwords/-/wikis/Administrators/App-Settings';
const LINK_REQUIREMENTS = 'https://git.mdns.eu/nextcloud/passwords/-/wikis/Administrators/System-Requirements';
const LINK_ISSUES = 'https://github.com/marius-wieschollek/passwords/issues';
const LINK_FORUM = 'https://help.nextcloud.com/c/apps/passwords';
/**
* @var ConfigurationService
*/
protected ConfigurationService $config;
/**
* @var IRequest
*/
protected IRequest $request;
/**
* @var IURLGenerator
*/
protected IURLGenerator $urlGenerator;
/**
* @var HelperService
*/
protected HelperService $helperService;
/**
* @var FileCacheService
*/
protected FileCacheService $fileCacheService;
/**
* AdminSettings constructor.
*
* @param IRequest $request
* @param IURLGenerator $urlGenerator
* @param ConfigurationService $config
* @param HelperService $helperService
* @param FileCacheService $fileCacheService
*/
public function __construct(
IRequest $request,
IURLGenerator $urlGenerator,
ConfigurationService $config,
HelperService $helperService,
FileCacheService $fileCacheService
) {
$this->request = $request;
$this->config = $config;
$this->urlGenerator = $urlGenerator;
$this->helperService = $helperService;
$this->fileCacheService = $fileCacheService;
}
/**
* @return TemplateResponse returns the instance with all parameters set, ready to be rendered
*/
public function getForm(): TemplateResponse {
$variables = [
'imageServices' => $this->getImageServices(),
'wordsServices' => $this->getWordsServices(),
'faviconServices' => $this->getFaviconServices(),
'previewServices' => $this->getWebsitePreviewServices(),
'securityServices' => $this->getSecurityServices(),
'purgeTimeout' => $this->getPurgeTimeout(),
'backupInterval' => $this->getBackupInterval(),
'securityHash' => $this->getSecurityHash(),
'backupFiles' => intval($this->config->getAppValue('backup/files/maximum', 14)),
'backupRestore' => $this->config->getAppValue('backup/update/autorestore', true),
'serverSurvey' => intval($this->config->getAppValue('survey/server/mode', -1)),
'mailSecurity' => $this->config->getAppValue('settings/mail/security', true),
'mailSharing' => $this->config->getAppValue('settings/mail/shares', false),
'nightlyUpdates' => $this->config->getAppValue('nightly/enabled', false),
'encryptionSSEv3' => $this->config->getAppValue('encryption/SSEv3/enabled', false),
'hasSSEv3' => \OC::$server->has(SseV3KeyProviderInterface::class),
'caches' => $this->getFileCaches(),
'support' => $this->getPlatformSupport(),
'links' => [
'documentation' => self::LINK_DOCUMENTATION,
'requirements' => self::LINK_REQUIREMENTS,
'issues' => self::LINK_ISSUES,
'forum' => self::LINK_FORUM,
'help' => self::LINK_HELP
]
];
if($this->config->hasAppValue('dev/app/hash')) {
$variables['hash'] = $this->config->getAppValue('dev/app/hash');
}
return new TemplateResponse('passwords', 'admin/index', $variables);
}
/**
* @return array
* @deprecated
*/
protected function getSecurityServices(): array {
$current = $this->config->getAppValue('service/security', HelperService::SECURITY_HIBP);
return [
[
'id' => HelperService::SECURITY_HIBP,
'label' => 'Have I been pwned? (recommended)',
'current' => $current === HelperService::SECURITY_HIBP,
'enabled' => $this->helperService->getSecurityHelper(HelperService::SECURITY_HIBP)->isAvailable()
],
[
'id' => HelperService::SECURITY_BIG_LOCAL,
'label' => 'Big local database (25M passwords)',
'current' => $current === HelperService::SECURITY_BIG_LOCAL,
'enabled' => $this->helperService->getSecurityHelper(HelperService::SECURITY_BIG_LOCAL)->isAvailable()
],
[
'id' => HelperService::SECURITY_SMALL_LOCAL,
'label' => 'Small local database (5M passwords)',
'current' => $current === HelperService::SECURITY_SMALL_LOCAL,
'enabled' => $this->helperService->getSecurityHelper(HelperService::SECURITY_SMALL_LOCAL)->isAvailable()
],
[
'id' => HelperService::SECURITY_BIGDB_HIBP,
'label' => 'Big local database & Hibp?',
'current' => $current === HelperService::SECURITY_BIGDB_HIBP,
'enabled' => $this->helperService->getSecurityHelper(HelperService::SECURITY_BIGDB_HIBP)->isAvailable()
]
];
}
/**
* @return array[]
*/
protected function getWordsServices(): array {
$current = $this->config->getAppValue('service/words', HelperService::WORDS_AUTO);
return [
[
'id' => HelperService::WORDS_AUTO,
'label' => 'Select automatically (recommended)',
'current' => $current === HelperService::WORDS_AUTO,
'enabled' => $this->helperService->getWordsHelper(HelperService::WORDS_AUTO)->isAvailable()
],
[
'id' => HelperService::WORDS_LEIPZIG,
'label' => 'Leipzig Corpora Collection',
'current' => $current === HelperService::WORDS_LEIPZIG,
'enabled' => $this->helperService->getWordsHelper(HelperService::WORDS_LEIPZIG)->isAvailable()
],
[
'id' => HelperService::WORDS_LOCAL,
'label' => 'Local dictionary',
'current' => $current === HelperService::WORDS_LOCAL,
'enabled' => $this->helperService->getWordsHelper(HelperService::WORDS_LOCAL)->isAvailable()
],
[
'id' => HelperService::WORDS_SNAKES,
'label' => 'watchout4snakes.com',
'current' => $current === HelperService::WORDS_SNAKES,
'enabled' => $this->helperService->getWordsHelper(HelperService::WORDS_SNAKES)->isAvailable()
],
[
'id' => HelperService::WORDS_RANDOM,
'label' => 'Random Characters',
'current' => $current === HelperService::WORDS_RANDOM,
'enabled' => $this->helperService->getWordsHelper(HelperService::WORDS_RANDOM)->isAvailable()
]
];
}
/**
* @return array
* @deprecated
*/
protected function getImageServices(): array {
$current = $this->config->getAppValue('service/images', HelperService::IMAGES_AUTO);
return [
[
'id' => HelperService::IMAGES_AUTO,
'label' => 'Select automatically (recommended)',
'current' => $current === HelperService::IMAGES_AUTO,
'enabled' => true,
],
[
'id' => HelperService::IMAGES_IMAGICK,
'label' => 'Imagick/GMagick',
'current' => $current === HelperService::IMAGES_IMAGICK,
'enabled' => $this->helperService->getImageHelper(HelperService::IMAGES_IMAGICK)->isAvailable(),
],
[
'id' => HelperService::IMAGES_IMAGINARY,
'label' => 'Imaginary',
'current' => $current === HelperService::IMAGES_IMAGINARY,
'enabled' => $this->helperService->getImageHelper(HelperService::IMAGES_IMAGINARY)->isAvailable(),
],
[
'id' => HelperService::IMAGES_GDLIB,
'label' => 'PHP GDLib',
'current' => $current === HelperService::IMAGES_GDLIB,
'enabled' => true
]
];
}
/**
* @return array
* @deprecated
*/
protected function getFaviconServices(): array {
$current = $this->config->getAppValue('service/favicon', HelperService::FAVICON_DEFAULT);
return [
[
'id' => HelperService::FAVICON_LOCAL,
'label' => 'Local analyzer',
'current' => $current === HelperService::FAVICON_LOCAL,
'api' => null
],
[
'id' => HelperService::FAVICON_BESTICON,
'label' => 'Besticon (recommended)',
'current' => $current === HelperService::FAVICON_BESTICON,
'api' => [
'key' => 'service.favicon.api',
'value' => $this->config->getAppValue(BestIconProvider::BESTICON_CONFIG_KEY, '')
]
],
[
'id' => HelperService::FAVICON_FAVICON_GRABBER,
'label' => 'favicongrabber.com',
'current' => $current === HelperService::FAVICON_FAVICON_GRABBER,
'api' => null
],
[
'id' => HelperService::FAVICON_DUCK_DUCK_GO,
'label' => 'DuckDuckGo',
'current' => $current === HelperService::FAVICON_DUCK_DUCK_GO,
'api' => null
],
[
'id' => HelperService::FAVICON_GOOGLE,
'label' => 'Google',
'current' => $current === HelperService::FAVICON_GOOGLE,
'api' => null
],
[
'id' => HelperService::FAVICON_DEFAULT,
'label' => 'None',
'current' => $current === HelperService::FAVICON_DEFAULT,
'api' => null
]
];
}
/**
* @return array
* @deprecated
*/
protected function getWebsitePreviewServices(): array {
$current = $this->config->getAppValue('service/preview', HelperService::PREVIEW_DEFAULT);
return [
[
'id' => HelperService::PREVIEW_PAGERES,
'label' => 'Pageres CLI (Local)',
'current' => $current === HelperService::PREVIEW_PAGERES,
'api' => null
],
[
'id' => HelperService::PREVIEW_SCREEN_SHOT_LAYER,
'label' => 'screenshotlayer',
'current' => $current === HelperService::PREVIEW_SCREEN_SHOT_LAYER,
'api' => [
'key' => 'service.preview.api',
'value' => $this->config->getAppValue(ScreenShotLayerProvider::SSL_API_CONFIG_KEY)
]
],
[
'id' => HelperService::PREVIEW_SCREEN_SHOT_MACHINE,
'label' => 'screenshotmachine.com',
'current' => $current === HelperService::PREVIEW_SCREEN_SHOT_MACHINE,
'api' => [
'key' => 'service.preview.api',
'value' => $this->config->getAppValue(ScreenShotMachineProvider::SSM_API_CONFIG_KEY)
]
],
[
'id' => HelperService::PREVIEW_BROW_SHOT,
'label' => 'Browshot',
'current' => $current === HelperService::PREVIEW_BROW_SHOT,
'api' => [
'key' => 'service.preview.api',
'value' => $this->config->getAppValue(BrowshotPreviewProvider::BWS_API_CONFIG_KEY)
]
],
[
'id' => HelperService::PREVIEW_SCREEENLY,
'label' => 'screeenly',
'current' => $current === HelperService::PREVIEW_SCREEENLY,
'api' => [
'key' => 'service.preview.api',
'value' => $this->config->getAppValue(ScreeenlyProvider::SCREEENLY_API_CONFIG_KEY)
]
],
[
'id' => HelperService::PREVIEW_DEFAULT,
'label' => 'None',
'current' => $current === HelperService::PREVIEW_DEFAULT,
'api' => null
]
];
}
/**
* @return array
* @deprecated
*/
protected function getPurgeTimeout(): array {
return [
'current' => (int) $this->config->getAppValue('entity/purge/timeout', -1),
'options' => [
-1 => 'Never',
0 => 'Immediately',
7200 => 'After two hours',
86400 => 'After one day',
1209600 => 'After two weeks',
2592000 => 'After one month',
31536000 => 'After one year'
]
];
}
/**
* @return array
* @deprecated
*/
protected function getBackupInterval(): array {
return [
'current' => intval($this->config->getAppValue('backup/interval', 86400)),
'options' => [
3600 => 'Every hour',
21600 => 'Every six hours',
86400 => 'Every day',
172800 => 'Every two days',
604800 => 'Every week',
1209600 => 'Every two weeks'
]
];
}
/**
* @return array
* @deprecated
*/
protected function getSecurityHash(): array {
return [
'current' => intval($this->config->getAppValue('settings/password/security/hash', 40)),
'options' => [
0 => 'Don\'t store hashes',
20 => 'Store 50%% of the hash',
30 => 'Store 75%% of the hash',
40 => 'Store the full hash',
]
];
}
/**
* @return array
* @deprecated
*/
protected function getFileCaches(): array {
$caches = $this->fileCacheService->listCaches();
$info = [];
foreach($caches as $cache) {
try {
$info[ $cache ] = $this->fileCacheService->getCacheInfo($cache);
$info[ $cache ]['clearable'] = true;
} catch(Exception $e) {
}
}
return $info;
}
/**
* @return array
*/
protected function getPlatformSupport(): array {
$ncVersion = \OC_Util::getVersion()[0];
$cronType = $this->config->getAppValue('backgroundjobs_mode', 'ajax', 'core');
$cronPhpId = $this->config->getAppValue('cron/php/version/id', PHP_VERSION_ID);
$cronPhpString = $this->config->getAppValue('cron/php/version/string', phpversion());
$this->config->setAppValue('web/php/version/id', PHP_VERSION_ID);
$this->config->setAppValue('web/php/version/string', phpversion());
return [
'cron' => $cronType,
'https' => $this->request->getHttpProtocol() === 'https',
'lsr' => SystemRequirements::APP_LSR,
'php' => [
'error' => PHP_VERSION_ID < SystemRequirements::PHP_MINIMUM_ID,
'version' => phpversion()
],
'cronPhp' => [
'isDifferent' => PHP_VERSION_ID - $cronPhpId > 99 || $cronPhpId - PHP_VERSION_ID > 99,
'error' => $cronPhpId < SystemRequirements::PHP_MINIMUM_ID,
'cronVersion' => $cronPhpString
],
'server' => [
'error' => $ncVersion < SystemRequirements::NC_MINIMUM_ID,
'version' => $ncVersion
]
];
}
/**
* @return string the section ID, e.g. 'sharing'
*/
public function getSection(): string {
return Application::APP_NAME;
}
/**
* @return int whether the form should be rather on the top or bottom of
* the admin section. The forms are arranged in ascending order of the
* priority values. It is required to return a value between 0 and 100.
*/
public function getPriority(): int {
return 0;
}
}