fixes, improvements, and another app:
* setupSettings now also triggered on enable * fixes detection of present admin section or settings in the DB * add update routine in such cases * encryption app migrated
This commit is contained in:
parent
d7bbebb8f5
commit
c956901949
|
@ -19,7 +19,7 @@
|
||||||
<admin>admin-encryption</admin>
|
<admin>admin-encryption</admin>
|
||||||
</documentation>
|
</documentation>
|
||||||
<rememberlogin>false</rememberlogin>
|
<rememberlogin>false</rememberlogin>
|
||||||
<version>1.3.0</version>
|
<version>1.3.1</version>
|
||||||
<types>
|
<types>
|
||||||
<filesystem/>
|
<filesystem/>
|
||||||
</types>
|
</types>
|
||||||
|
@ -27,5 +27,7 @@
|
||||||
<lib>openssl</lib>
|
<lib>openssl</lib>
|
||||||
<owncloud min-version="9.1" max-version="9.1" />
|
<owncloud min-version="9.1" max-version="9.1" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<settings>
|
||||||
|
<admin>OCA\Encryption\Settings\Admin</admin>
|
||||||
|
</settings>
|
||||||
</info>
|
</info>
|
||||||
|
|
|
@ -269,7 +269,6 @@ class Application extends \OCP\AppFramework\App {
|
||||||
|
|
||||||
public function registerSettings() {
|
public function registerSettings() {
|
||||||
// Register settings scripts
|
// Register settings scripts
|
||||||
App::registerAdmin('encryption', 'settings/settings-admin');
|
|
||||||
App::registerPersonal('encryption', 'settings/settings-personal');
|
App::registerPersonal('encryption', 'settings/settings-personal');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||||
|
*
|
||||||
|
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||||
|
*
|
||||||
|
* @license GNU AGPL version 3 or any later version
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCA\Encryption\Settings;
|
||||||
|
|
||||||
|
use OC\Files\View;
|
||||||
|
use OCA\Encryption\Crypto\Crypt;
|
||||||
|
use OCA\Encryption\Session;
|
||||||
|
use OCA\Encryption\Util;
|
||||||
|
use OCP\AppFramework\Http\TemplateResponse;
|
||||||
|
use OCP\IL10N;
|
||||||
|
use OCP\ILogger;
|
||||||
|
use OCP\ISession;
|
||||||
|
use OCP\IUserManager;
|
||||||
|
use OCP\IUserSession;
|
||||||
|
use OCP\Settings\IAdmin;
|
||||||
|
use OCP\IConfig;
|
||||||
|
|
||||||
|
class Admin implements IAdmin {
|
||||||
|
|
||||||
|
/** @var IL10N */
|
||||||
|
private $l;
|
||||||
|
|
||||||
|
/** @var ILogger */
|
||||||
|
private $logger;
|
||||||
|
|
||||||
|
/** @var IUserSession */
|
||||||
|
private $userSession;
|
||||||
|
|
||||||
|
/** @var IConfig */
|
||||||
|
private $config;
|
||||||
|
|
||||||
|
/** @var IUserManager */
|
||||||
|
private $userManager;
|
||||||
|
|
||||||
|
/** @var ISession */
|
||||||
|
private $session;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
IL10N $l,
|
||||||
|
ILogger $logger,
|
||||||
|
IUserSession $userSession,
|
||||||
|
IConfig $config,
|
||||||
|
IUserManager $userManager,
|
||||||
|
ISession $session
|
||||||
|
) {
|
||||||
|
$this->l = $l;
|
||||||
|
$this->logger = $logger;
|
||||||
|
$this->userSession = $userSession;
|
||||||
|
$this->config = $config;
|
||||||
|
$this->userManager = $userManager;
|
||||||
|
$this->session = $session;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return TemplateResponse
|
||||||
|
*/
|
||||||
|
public function getForm() {
|
||||||
|
$crypt = new Crypt(
|
||||||
|
$this->logger,
|
||||||
|
$this->userSession,
|
||||||
|
$this->config,
|
||||||
|
$this->l);
|
||||||
|
|
||||||
|
$util = new Util(
|
||||||
|
new View(),
|
||||||
|
$crypt,
|
||||||
|
$this->logger,
|
||||||
|
$this->userSession,
|
||||||
|
$this->config,
|
||||||
|
$this->userManager);
|
||||||
|
|
||||||
|
// Check if an adminRecovery account is enabled for recovering files after lost pwd
|
||||||
|
$recoveryAdminEnabled = $this->config->getAppValue('encryption', 'recoveryAdminEnabled', '0');
|
||||||
|
$session = new Session($this->session);
|
||||||
|
|
||||||
|
$encryptHomeStorage = $util->shouldEncryptHomeStorage();
|
||||||
|
|
||||||
|
$parameters = [
|
||||||
|
'recoveryEnabled' => $recoveryAdminEnabled,
|
||||||
|
'initStatus' => $session->getStatus(),
|
||||||
|
'encryptHomeStorage' => $encryptHomeStorage,
|
||||||
|
'masterKeyEnabled' => $util->isMasterKeyEnabled(),
|
||||||
|
];
|
||||||
|
|
||||||
|
return new TemplateResponse('encryption', 'settings-admin', $parameters, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string the section ID, e.g. 'sharing'
|
||||||
|
*/
|
||||||
|
public function getSection() {
|
||||||
|
return 'encryption';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
*
|
||||||
|
* E.g.: 70
|
||||||
|
*/
|
||||||
|
public function getPriority() {
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,53 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
|
||||||
*
|
|
||||||
* @author Björn Schießle <bjoern@schiessle.org>
|
|
||||||
* @author Clark Tomlinson <fallen013@gmail.com>
|
|
||||||
* @author Lukas Reschke <lukas@statuscode.ch>
|
|
||||||
* @author Thomas Müller <thomas.mueller@tmit.eu>
|
|
||||||
*
|
|
||||||
* @license AGPL-3.0
|
|
||||||
*
|
|
||||||
* This code is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License, version 3,
|
|
||||||
* as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License, version 3,
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
$tmpl = new OCP\Template('encryption', 'settings-admin');
|
|
||||||
|
|
||||||
$crypt = new \OCA\Encryption\Crypto\Crypt(
|
|
||||||
\OC::$server->getLogger(),
|
|
||||||
\OC::$server->getUserSession(),
|
|
||||||
\OC::$server->getConfig(),
|
|
||||||
\OC::$server->getL10N('encryption'));
|
|
||||||
|
|
||||||
$util = new \OCA\Encryption\Util(
|
|
||||||
new \OC\Files\View(),
|
|
||||||
$crypt,
|
|
||||||
\OC::$server->getLogger(),
|
|
||||||
\OC::$server->getUserSession(),
|
|
||||||
\OC::$server->getConfig(),
|
|
||||||
\OC::$server->getUserManager());
|
|
||||||
|
|
||||||
// Check if an adminRecovery account is enabled for recovering files after lost pwd
|
|
||||||
$recoveryAdminEnabled = \OC::$server->getConfig()->getAppValue('encryption', 'recoveryAdminEnabled', '0');
|
|
||||||
$session = new \OCA\Encryption\Session(\OC::$server->getSession());
|
|
||||||
|
|
||||||
$encryptHomeStorage = $util->shouldEncryptHomeStorage();
|
|
||||||
|
|
||||||
$tmpl->assign('recoveryEnabled', $recoveryAdminEnabled);
|
|
||||||
$tmpl->assign('initStatus', $session->getStatus());
|
|
||||||
$tmpl->assign('encryptHomeStorage', $encryptHomeStorage);
|
|
||||||
$tmpl->assign('masterKeyEnabled', $util->isMasterKeyEnabled());
|
|
||||||
|
|
||||||
return $tmpl->fetchPage();
|
|
|
@ -104,8 +104,10 @@ class Manager implements IManager {
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!$this->hasAdminSection($section)) {
|
if(!$this->hasAdminSection(get_class($section))) {
|
||||||
$this->addAdminSection($section);
|
$this->addAdminSection($section);
|
||||||
|
} else {
|
||||||
|
$this->updateAdminSection($section);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,20 +136,64 @@ class Manager implements IManager {
|
||||||
$query->execute();
|
$query->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function hasAdminSection(ISection $section) {
|
private function updateAdminSettings(IAdmin $settings) {
|
||||||
return $this->has(self::TABLE_ADMIN_SECTIONS, 'id', $section->getID());
|
$this->update(
|
||||||
|
self::TABLE_ADMIN_SETTINGS,
|
||||||
|
'class',
|
||||||
|
get_class($settings),
|
||||||
|
[
|
||||||
|
'section' => $settings->getSection(),
|
||||||
|
'priority' => $settings->getPriority(),
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function hasAdminSettings($pageClass) {
|
private function updateAdminSection(ISection $section) {
|
||||||
return $this->has(self::TABLE_ADMIN_SETTINGS, 'class', $pageClass);
|
$this->update(
|
||||||
|
self::TABLE_ADMIN_SECTIONS,
|
||||||
|
'class',
|
||||||
|
get_class($section),
|
||||||
|
[
|
||||||
|
'id' => $section->getID(),
|
||||||
|
'priority' => $section->getPriority(),
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function update($table, $idCol, $id, $values) {
|
||||||
private function has($table, $idCol, $id) {
|
|
||||||
$query = $this->dbc->getQueryBuilder();
|
$query = $this->dbc->getQueryBuilder();
|
||||||
$query->select($idCol)
|
$query->update($table);
|
||||||
|
foreach($values as $key => $value) {
|
||||||
|
$query->set($key, $query->createNamedParameter($value));
|
||||||
|
}
|
||||||
|
$query
|
||||||
|
->where($query->expr()->eq($idCol, $query->createParameter($idCol)))
|
||||||
|
->setParameter($idCol, $id)
|
||||||
|
->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $className
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function hasAdminSection($className) {
|
||||||
|
return $this->has(self::TABLE_ADMIN_SECTIONS, $className);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $className
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function hasAdminSettings($className) {
|
||||||
|
return $this->has(self::TABLE_ADMIN_SETTINGS, $className);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function has($table, $className) {
|
||||||
|
$query = $this->dbc->getQueryBuilder();
|
||||||
|
$query->select('class')
|
||||||
->from($table)
|
->from($table)
|
||||||
->where($query->expr()->eq($idCol, $query->createNamedParameter($id)))
|
->where($query->expr()->eq('class', $query->createNamedParameter($className)))
|
||||||
->setMaxResults(1);
|
->setMaxResults(1);
|
||||||
|
|
||||||
$result = $query->execute();
|
$result = $query->execute();
|
||||||
|
@ -164,6 +210,7 @@ class Manager implements IManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
/** @var IAdmin $settings */
|
||||||
$settings = $this->query($settingsClassName);
|
$settings = $this->query($settingsClassName);
|
||||||
} catch (QueryException $e) {
|
} catch (QueryException $e) {
|
||||||
// cancel
|
// cancel
|
||||||
|
@ -177,8 +224,10 @@ class Manager implements IManager {
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!$this->hasAdminSettings($settings)) {
|
if(!$this->hasAdminSettings(get_class($settings))) {
|
||||||
$this->addAdminSettings($settings);
|
$this->addAdminSettings($settings);
|
||||||
|
} else {
|
||||||
|
$this->updateAdminSettings($settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -345,6 +345,12 @@ class OC_App {
|
||||||
} else {
|
} else {
|
||||||
$appManager->enableApp($app);
|
$appManager->enableApp($app);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$info = self::getAppInfo($app);
|
||||||
|
if(isset($info['settings']) && is_array($info['settings'])) {
|
||||||
|
self::loadApp($app, false);
|
||||||
|
\OC::$server->getSettingsManager()->setupSettings($info['settings']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue