summaryrefslogtreecommitdiffstats
path: root/apps/twofactor_backupcodes/lib
diff options
context:
space:
mode:
Diffstat (limited to 'apps/twofactor_backupcodes/lib')
-rw-r--r--apps/twofactor_backupcodes/lib/AppInfo/Application.php8
-rw-r--r--apps/twofactor_backupcodes/lib/Migration/Version1002Date20170607104347.php71
-rw-r--r--apps/twofactor_backupcodes/lib/Migration/Version1002Date20170607113030.php (renamed from apps/twofactor_backupcodes/lib/Migration/CopyEntriesFromOldTable.php)59
-rw-r--r--apps/twofactor_backupcodes/lib/Settings/Personal.php82
4 files changed, 181 insertions, 39 deletions
diff --git a/apps/twofactor_backupcodes/lib/AppInfo/Application.php b/apps/twofactor_backupcodes/lib/AppInfo/Application.php
index ad92c0b1476..050473f7efe 100644
--- a/apps/twofactor_backupcodes/lib/AppInfo/Application.php
+++ b/apps/twofactor_backupcodes/lib/AppInfo/Application.php
@@ -37,7 +37,6 @@ class Application extends App {
*/
public function register() {
$this->registerHooksAndEvents();
- $this->registerPersonalPage();
}
/**
@@ -52,11 +51,4 @@ class Application extends App {
$mapper = $this->getContainer()->query(BackupCodeMapper::class);
$mapper->deleteCodesByUserId($params['uid']);
}
-
- /**
- * Register personal settings for notifications and emails
- */
- public function registerPersonalPage() {
- \OCP\App::registerPersonal($this->getContainer()->getAppName(), 'settings/personal');
- }
}
diff --git a/apps/twofactor_backupcodes/lib/Migration/Version1002Date20170607104347.php b/apps/twofactor_backupcodes/lib/Migration/Version1002Date20170607104347.php
new file mode 100644
index 00000000000..a7823c5b7a8
--- /dev/null
+++ b/apps/twofactor_backupcodes/lib/Migration/Version1002Date20170607104347.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @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\TwoFactorBackupCodes\Migration;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\DBAL\Types\Type;
+use OCP\Migration\SimpleMigrationStep;
+use OCP\Migration\IOutput;
+
+class Version1002Date20170607104347 extends SimpleMigrationStep {
+ /**
+ * @param IOutput $output
+ * @param \Closure $schemaClosure The `\Closure` returns a `Schema`
+ * @param array $options
+ * @return null|Schema
+ * @since 13.0.0
+ */
+ public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
+ /** @var Schema $schema */
+ $schema = $schemaClosure();
+
+ if (!$schema->hasTable('twofactor_backupcodes')) {
+ $table = $schema->createTable('twofactor_backupcodes');
+
+ $table->addColumn('id', Type::INTEGER, [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 20,
+ ]);
+ $table->addColumn('user_id', Type::STRING, [
+ 'notnull' => true,
+ 'length' => 64,
+ ]);
+ $table->addColumn('code', Type::STRING, [
+ 'notnull' => true,
+ 'length' => 64,
+ ]);
+ $table->addColumn('used', Type::INTEGER, [
+ 'notnull' => true,
+ 'length' => 1,
+ 'default' => 0,
+ ]);
+
+ $table->setPrimaryKey(['id']);
+ $table->addIndex(['user_id'], 'twofactor_backupcodes_uid');
+ }
+
+ return $schema;
+ }
+}
diff --git a/apps/twofactor_backupcodes/lib/Migration/CopyEntriesFromOldTable.php b/apps/twofactor_backupcodes/lib/Migration/Version1002Date20170607113030.php
index 6d65a7d0c14..dae9e011787 100644
--- a/apps/twofactor_backupcodes/lib/Migration/CopyEntriesFromOldTable.php
+++ b/apps/twofactor_backupcodes/lib/Migration/Version1002Date20170607113030.php
@@ -23,54 +23,35 @@
namespace OCA\TwoFactorBackupCodes\Migration;
+use Doctrine\DBAL\Schema\Schema;
use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\IConfig;
use OCP\IDBConnection;
+use OCP\Migration\SimpleMigrationStep;
use OCP\Migration\IOutput;
-use OCP\Migration\IRepairStep;
-class CopyEntriesFromOldTable implements IRepairStep {
+class Version1002Date20170607113030 extends SimpleMigrationStep {
/** @var IDBConnection */
protected $connection;
- /** @var IConfig */
- protected $config;
-
/**
* @param IDBConnection $connection
- * @param IConfig $config
*/
- public function __construct(IDBConnection $connection, IConfig $config) {
+ public function __construct(IDBConnection $connection) {
$this->connection = $connection;
- $this->config = $config;
}
/**
- * Returns the step's name
- *
- * @return string
- * @since 9.1.0
- */
- public function getName() {
- return 'Copy twofactor backup codes from legacy table';
- }
-
- /**
- * Run repair step.
- * Must throw exception on error.
- *
- * @since 9.1.0
* @param IOutput $output
- * @throws \Exception in case of failure
+ * @param \Closure $schemaClosure The `\Closure` returns a `Schema`
+ * @param array $options
+ * @since 13.0.0
*/
- public function run(IOutput $output) {
- $version = $this->config->getAppValue('twofactor_backupcodes', 'installed_version', '0.0.0');
- if (version_compare($version, '1.1.1', '>=')) {
- return;
- }
+ public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
+ /** @var Schema $schema */
+ $schema = $schemaClosure();
- if (!$this->connection->tableExists('twofactor_backup_codes')) {
+ if (!$schema->hasTable('twofactor_backup_codes')) {
// Legacy table does not exist
return;
}
@@ -102,7 +83,23 @@ class CopyEntriesFromOldTable implements IRepairStep {
->execute();
}
$output->finishProgress();
+ }
+
+ /**
+ * @param IOutput $output
+ * @param \Closure $schemaClosure The `\Closure` returns a `Schema`
+ * @param array $options
+ * @return null|Schema
+ * @since 13.0.0
+ */
+ public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
+ /** @var Schema $schema */
+ $schema = $schemaClosure();
- $this->connection->dropTable('twofactor_backup_codes');
+ if ($schema->hasTable('twofactor_backup_codes')) {
+ $schema->dropTable('twofactor_backup_codes');
+ return $schema;
+ }
+ return null;
}
}
diff --git a/apps/twofactor_backupcodes/lib/Settings/Personal.php b/apps/twofactor_backupcodes/lib/Settings/Personal.php
new file mode 100644
index 00000000000..eb28dacb42b
--- /dev/null
+++ b/apps/twofactor_backupcodes/lib/Settings/Personal.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 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\TwoFactorBackupCodes\Settings;
+
+
+use OCA\TwoFactorBackupCodes\AppInfo\Application;
+use OCA\TwoFactorBackupCodes\Provider\BackupCodesProvider;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IUserSession;
+use OCP\Settings\ISettings;
+
+class Personal implements ISettings {
+
+ /** @var Application */
+ private $app;
+ /** @var BackupCodesProvider */
+ private $provider;
+ /** @var IUserSession */
+ private $userSession;
+
+ public function __construct(Application $app, BackupCodesProvider $provider, IUserSession $userSession) {
+ $this->app = $app;
+ $this->provider = $provider;
+ $this->userSession = $userSession;
+ }
+
+ /**
+ * @return TemplateResponse returns the instance with all parameters set, ready to be rendered
+ * @since 9.1
+ */
+ public function getForm() {
+ $templateOwner = 'settings';
+ $templateName = 'settings/empty';
+ if ($this->provider->isActive($this->userSession->getUser())) {
+ $templateOwner = $this->app->getContainer()->getAppName();
+ $templateName = 'personal';
+ }
+
+ return new TemplateResponse($templateOwner, $templateName, [], '');
+ }
+
+ /**
+ * @return string the section ID, e.g. 'sharing'
+ * @since 9.1
+ */
+ public function getSection() {
+ return 'security';
+ }
+
+ /**
+ * @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
+ * @since 9.1
+ */
+ public function getPriority() {
+ return 40;
+ }
+}