Page MenuHomeWickedGov Phorge

TOTP.php
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

TOTP.php

<?php
namespace MediaWiki\Extension\OATHAuth\Module;
use MediaWiki\Context\IContextSource;
use MediaWiki\Extension\OATHAuth\Auth\TOTPSecondaryAuthenticationProvider;
use MediaWiki\Extension\OATHAuth\HTMLForm\IManageForm;
use MediaWiki\Extension\OATHAuth\HTMLForm\TOTPDisableForm;
use MediaWiki\Extension\OATHAuth\HTMLForm\TOTPEnableForm;
use MediaWiki\Extension\OATHAuth\IModule;
use MediaWiki\Extension\OATHAuth\Key\TOTPKey;
use MediaWiki\Extension\OATHAuth\OATHUser;
use MediaWiki\Extension\OATHAuth\OATHUserRepository;
use MediaWiki\Extension\OATHAuth\Special\OATHManage;
use MWException;
class TOTP implements IModule {
public static function factory() {
return new static();
}
/** @inheritDoc */
public function getName() {
return "totp";
}
/** @inheritDoc */
public function getDisplayName() {
return wfMessage( 'oathauth-module-totp-label' );
}
/**
* @inheritDoc
* @throws MWException
*/
public function newKey( array $data ) {
if ( !isset( $data['secret'] ) || !isset( $data['scratch_tokens'] ) ) {
throw new MWException( 'oathauth-invalid-data-format' );
}
if ( is_string( $data['scratch_tokens' ] ) ) {
$data['scratch_tokens'] = explode( ',', $data['scratch_tokens'] );
}
return TOTPKey::newFromArray( $data );
}
/**
* @return TOTPSecondaryAuthenticationProvider
*/
public function getSecondaryAuthProvider() {
return new TOTPSecondaryAuthenticationProvider(
$this
);
}
/**
* @param OATHUser $user
* @param array $data
* @return bool
* @throws MWException
*/
public function verify( OATHUser $user, array $data ): bool {
if ( !isset( $data['token'] ) ) {
return false;
}
foreach ( $user->getKeys() as $key ) {
if ( $key instanceof TOTPKey && $key->verify( $data, $user ) ) {
return true;
}
}
return false;
}
/**
* Is this module currently enabled for the given user?
*
* @param OATHUser $user
* @return bool
*/
public function isEnabled( OATHUser $user ): bool {
foreach ( $user->getKeys() as $key ) {
if ( $key instanceof TOTPKey ) {
return true;
}
}
return false;
}
/**
* @param string $action
* @param OATHUser $user
* @param OATHUserRepository $repo
* @param IContextSource $context
* @return IManageForm|null
*/
public function getManageForm(
$action,
OATHUser $user,
OATHUserRepository $repo,
IContextSource $context
): ?IManageForm {
$hasTOTPKey = $this->isEnabled( $user );
if ( $action === OATHManage::ACTION_ENABLE && !$hasTOTPKey ) {
return new TOTPEnableForm( $user, $repo, $this, $context );
}
if ( $action === OATHManage::ACTION_DISABLE && $hasTOTPKey ) {
return new TOTPDisableForm( $user, $repo, $this, $context );
}
return null;
}
/**
* @inheritDoc
*/
public function getDescriptionMessage() {
return wfMessage( 'oathauth-totp-description' );
}
/**
* @inheritDoc
*/
public function getDisableWarningMessage() {
return wfMessage( 'oathauth-totp-disable-warning' );
}
}

File Metadata

Mime Type
text/x-php
Expires
Aug 19 2026, 17:04 (4 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
e6/47/5f49960adde95865aec027aa868a
Default Alt Text
TOTP.php (2 KB)

Event Timeline