Skip to content

Commit

Permalink
Do not show 2FA settings if the user has no providers available
Browse files Browse the repository at this point in the history
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
  • Loading branch information
ChristophWurst committed Jan 22, 2021
1 parent 9f81239 commit 36c6da6
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions apps/settings/lib/Settings/Personal/Security/TwoFactor.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@

namespace OCA\Settings\Settings\Personal\Security;

use Exception;
use OCA\TwoFactorBackupCodes\Provider\BackupCodesProvider;
use function array_filter;
use function array_map;
use function is_null;
Expand Down Expand Up @@ -69,13 +71,41 @@ public function getForm(): TemplateResponse {
}

public function getSection(): string {
if (!$this->shouldShow()) {
// TODO: this isn't nice, but it works. Look for ways to properly hide a setting conditionally
return '';
}
return 'security';
}

public function getPriority(): int {
return 15;
}

private function shouldShow(): bool {
$user = $this->userSession->getUser();
if (is_null($user)) {
// Actually impossible, but still …
return false;
}
try {
$providers = $this->providerLoader->getProviders($user);
} catch (Exception $e) {
// Let's hope for the best
return true;
}

// If there is at least one provider with personal settings but it's not
// the backup codes provider, then these settings should show.
foreach ($providers as $provider) {
if ($provider instanceof IProvidesPersonalSettings
&& !($provider instanceof BackupCodesProvider)) {
return true;
}
}
return false;
}

private function getTwoFactorProviderData(): array {
$user = $this->userSession->getUser();
if (is_null($user)) {
Expand Down

0 comments on commit 36c6da6

Please sign in to comment.