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
0fc34c99f4
commit
f3b15a9ab9
6 changed files with 196 additions and 66 deletions
|
@ -19,7 +19,7 @@
|
|||
<admin>admin-encryption</admin>
|
||||
</documentation>
|
||||
<rememberlogin>false</rememberlogin>
|
||||
<version>1.4.0</version>
|
||||
<version>1.4.1</version>
|
||||
<types>
|
||||
<filesystem/>
|
||||
</types>
|
||||
|
@ -27,5 +27,7 @@
|
|||
<lib>openssl</lib>
|
||||
<owncloud min-version="9.2" max-version="9.2" />
|
||||
</dependencies>
|
||||
|
||||
<settings>
|
||||
<admin>OCA\Encryption\Settings\Admin</admin>
|
||||
</settings>
|
||||
</info>
|
||||
|
|
|
@ -269,7 +269,6 @@ class Application extends \OCP\AppFramework\App {
|
|||
|
||||
public function registerSettings() {
|
||||
// Register settings scripts
|
||||
App::registerAdmin('encryption', 'settings/settings-admin');
|
||||
App::registerPersonal('encryption', 'settings/settings-personal');
|
||||
}
|
||||
}
|
||||
|
|
127
apps/encryption/lib/Settings/Admin.php
Normal file
127
apps/encryption/lib/Settings/Admin.php
Normal file
|
@ -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;
|
||||
}
|
||||
if(!$this->hasAdminSection($section)) {
|
||||
if(!$this->hasAdminSection(get_class($section))) {
|
||||
$this->addAdminSection($section);
|
||||
} else {
|
||||
$this->updateAdminSection($section);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,20 +136,64 @@ class Manager implements IManager {
|
|||
$query->execute();
|
||||
}
|
||||
|
||||
private function hasAdminSection(ISection $section) {
|
||||
return $this->has(self::TABLE_ADMIN_SECTIONS, 'id', $section->getID());
|
||||
private function updateAdminSettings(IAdmin $settings) {
|
||||
$this->update(
|
||||
self::TABLE_ADMIN_SETTINGS,
|
||||
'class',
|
||||
get_class($settings),
|
||||
[
|
||||
'section' => $settings->getSection(),
|
||||
'priority' => $settings->getPriority(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
private function hasAdminSettings($pageClass) {
|
||||
return $this->has(self::TABLE_ADMIN_SETTINGS, 'class', $pageClass);
|
||||
private function updateAdminSection(ISection $section) {
|
||||
$this->update(
|
||||
self::TABLE_ADMIN_SECTIONS,
|
||||
'class',
|
||||
get_class($section),
|
||||
[
|
||||
'id' => $section->getID(),
|
||||
'priority' => $section->getPriority(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private function has($table, $idCol, $id) {
|
||||
private function update($table, $idCol, $id, $values) {
|
||||
$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)
|
||||
->where($query->expr()->eq($idCol, $query->createNamedParameter($id)))
|
||||
->where($query->expr()->eq('class', $query->createNamedParameter($className)))
|
||||
->setMaxResults(1);
|
||||
|
||||
$result = $query->execute();
|
||||
|
@ -164,6 +210,7 @@ class Manager implements IManager {
|
|||
}
|
||||
|
||||
try {
|
||||
/** @var IAdmin $settings */
|
||||
$settings = $this->query($settingsClassName);
|
||||
} catch (QueryException $e) {
|
||||
// cancel
|
||||
|
@ -177,8 +224,10 @@ class Manager implements IManager {
|
|||
);
|
||||
return;
|
||||
}
|
||||
if(!$this->hasAdminSettings($settings)) {
|
||||
if(!$this->hasAdminSettings(get_class($settings))) {
|
||||
$this->addAdminSettings($settings);
|
||||
} else {
|
||||
$this->updateAdminSettings($settings);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -345,6 +345,12 @@ class OC_App {
|
|||
} else {
|
||||
$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 a new issue