Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions OAuth2Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@
die( 'This is a MediaWiki extension, and must be run from within MediaWiki.' );
}
class OAuth2ClientHooks {
public static function onPersonalUrls( array &$personal_urls, Title $title ) {
public static function onSkinTemplateNavigation_Universal( SkinTemplate $skinTemplate, array &$links ) {

global $wgOAuth2Client, $wgUser, $wgRequest;
if( $wgUser->isLoggedIn() ) return true;
global $wgOAuth2Client, $wgRequest;

$user = RequestContext::getMain()->getUser();
if( $user->isRegistered() ) return true;


# Due to bug 32276, if a user does not have read permissions,
Expand All @@ -39,20 +41,21 @@ public static function onPersonalUrls( array &$personal_urls, Title $title ) {
}

$inExt = ( null == $page || ('OAuth2Client' == substr( $page->getText(), 0, 12) ) || strstr($page->getText(), 'Logout') );
$personal_urls['anon_oauth_login'] = array(
$links['user-menu']['anon_oauth_login'] = array(
'single-id' => 'pt-oauth',
'text' => $service_login_link_text,
//'class' => ,
'active' => false,
'icon' => 'oauth',
);
if( $inExt ) {
$personal_urls['anon_oauth_login']['href'] = Skin::makeSpecialUrlSubpage( 'OAuth2Client', 'redirect' );
$links['user-menu']['anon_oauth_login']['href'] = Skin::makeSpecialUrlSubpage( 'OAuth2Client', 'redirect' );
} else {
# Due to bug 32276, if a user does not have read permissions,
# $this->getTitle() will just give Special:Badtitle, which is
# not especially useful as a returnto parameter. Use the title
# from the request instead, if there was one.
# see SkinTemplate->buildPersonalUrls()
$personal_urls['anon_oauth_login']['href'] = Skin::makeSpecialUrlSubpage(
$links['user-menu']['anon_oauth_login']['href'] = Skin::makeSpecialUrlSubpage(
'OAuth2Client',
'redirect',
wfArrayToCGI( array( 'returnto' => $page ) )
Expand All @@ -66,5 +69,4 @@ public static function onPersonalUrls( array &$personal_urls, Title $title ) {
}
return true;
}

}
17 changes: 7 additions & 10 deletions SpecialOAuth2Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,14 @@ private function _handleCallback(){
}

private function _default(){
global $wgOAuth2Client, $wgOut, $wgUser, $wgScriptPath, $wgExtensionAssetsPath;
global $wgOAuth2Client, $wgOut, $wgScriptPath, $wgExtensionAssetsPath;
$service_name = ( isset( $wgOAuth2Client['configuration']['service_name'] ) && 0 < strlen( $wgOAuth2Client['configuration']['service_name'] ) ? $wgOAuth2Client['configuration']['service_name'] : 'OAuth2' );

$wgOut->setPagetitle( wfMessage( 'oauth2client-login-header', $service_name)->text() );
if ( !$wgUser->isLoggedIn() ) {
$user = RequestContext::getMain()->getUser();
if ( !$user->isRegistered() ) {
$wgOut->addWikiMsg( 'oauth2client-you-can-login-to-this-wiki-with-oauth2', $service_name );
$wgOut->addWikiMsg( 'oauth2client-login-with-oauth2', $this->getTitle( 'redirect' )->getPrefixedURL(), $service_name );
$wgOut->addWikiMsg( 'oauth2client-login-with-oauth2', $this->getPageTitle('redirect')->getPrefixedURL(), $service_name );

} else {
$wgOut->addWikiMsg( 'oauth2client-youre-already-loggedin' );
Expand All @@ -166,15 +167,13 @@ protected function _userHandling( $response ) {
isset($wgOAuth2Client['configuration']['authz_callback'])
&& false === $wgOAuth2Client['configuration']['authz_callback']($response)
) {
$callback_failure_message = isset($wgOAuth2Client['configuration']['authz_failure_message'])
? $wgOAuth2Client['configuration']['authz_failure_message']
: 'Not authorized';
$callback_failure_message = $wgOAuth2Client['configuration']['authz_failure_message'] ?? 'Not authorized';
throw new MWException($callback_failure_message);
}

$username = JsonHelper::extractValue($response, $wgOAuth2Client['configuration']['username']);
$email = JsonHelper::extractValue($response, $wgOAuth2Client['configuration']['email']);
Hooks::run("OAuth2ClientBeforeUserSave", [&$username, &$email, $response]);
MediaWiki\MediaWikiServices::getInstance()->getHookContainer()->run("OAuth2ClientBeforeUserSave", [&$username, &$email, $response]);
$user = User::newFromName($username, 'creatable');
if (!$user) {
throw new MWException('Could not create user with username:' . $username);
Expand All @@ -197,11 +196,9 @@ protected function _userHandling( $response ) {
$user->setCookies();
$this->getContext()->setUser( $user );
$user->saveSettings();
global $wgUser;
$wgUser = $user;
RequestContext::getMain()->setUser( $user );
$sessionUser = User::newFromSession($this->getRequest());
$sessionUser->load();
return $user;
}

}
4 changes: 2 additions & 2 deletions extension.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
"OAuth2ClientAlias": "OAuth2Client.alias.php"
},
"Hooks": {
"PersonalUrls": [
"OAuth2ClientHooks::onPersonalUrls"
"SkinTemplateNavigation::Universal": [
"OAuth2ClientHooks::onSkinTemplateNavigation_Universal"
]
},
"SpecialPages": {
Expand Down
2 changes: 1 addition & 1 deletion vendors/oauth2-client
Submodule oauth2-client updated 68 files
+29 −0 .codecov.yml
+12 −6 .gitattributes
+1 −0 .github/ISSUE_TEMPLATE.md
+1 −0 .github/PULL_REQUEST_TEMPLATE.md
+8 −0 .github/dependabot.yml
+83 −0 .github/workflows/continuous-integration.yml
+0 −8 .scrutinizer.yml
+0 −26 .travis.yml
+82 −0 CHANGELOG.md
+76 −0 CODE_OF_CONDUCT.md
+1 −1 LICENSE
+5 −5 README.PROVIDER-GUIDE.md
+0 −97 README.PROVIDERS.md
+0 −7 README.UPGRADING.md
+21 −17 README.md
+17 −10 composer.json
+9 −0 docs/.gitignore
+1 −0 docs/.ruby-version
+1 −0 docs/CNAME
+3 −0 docs/Gemfile
+264 −0 docs/Gemfile.lock
+2 −0 docs/_config.yml
+8 −0 docs/_data/images.yml
+8 −0 docs/_data/menu.yml
+5 −0 docs/_data/project.yml
+99 −0 docs/_layouts/default.html
+39 −0 docs/index.md
+90 −0 docs/providers/implementing.md
+29 −0 docs/providers/league.md
+134 −0 docs/providers/thirdparty.md
+126 −0 docs/usage.md
+10 −11 phpunit.xml
+42 −0 src/OptionProvider/HttpBasicAuthOptionProvider.php
+30 −0 src/OptionProvider/OptionProviderInterface.php
+51 −0 src/OptionProvider/PostAuthOptionProvider.php
+71 −77 src/Provider/AbstractProvider.php
+7 −1 src/Provider/GenericProvider.php
+51 −32 src/Token/AccessToken.php
+72 −0 src/Token/AccessTokenInterface.php
+25 −0 src/Token/ResourceOwnerAccessTokenInterface.php
+3 −1 src/Tool/BearerAuthorizationTrait.php
+70 −0 src/Tool/GuardedPropertyTrait.php
+8 −3 src/Tool/MacAuthorizationTrait.php
+122 −0 src/Tool/ProviderRedirectTrait.php
+1 −1 src/Tool/QueryBuilderTrait.php
+0 −45 test/Bootstrap.php
+4 −4 test/src/Grant/AuthorizationCodeTest.php
+0 −1 test/src/Grant/Fake.php
+19 −32 test/src/Grant/GrantFactoryTest.php
+37 −31 test/src/Grant/GrantTestCase.php
+7 −8 test/src/Grant/PasswordTest.php
+4 −4 test/src/Grant/RefreshTokenTest.php
+56 −0 test/src/OptionProvider/HttpBasicAuthOptionProviderTest.php
+29 −0 test/src/OptionProvider/PostAuthOptionProviderTest.php
+408 −272 test/src/Provider/AbstractProviderTest.php
+0 −36 test/src/Provider/ConcreteProviderTest.php
+0 −59 test/src/Provider/Exception/IdentityProviderException.php
+21 −0 test/src/Provider/Exception/IdentityProviderExceptionTest.php
+15 −0 test/src/Provider/Fake.php
+43 −0 test/src/Provider/Fake/ProviderWithAccessTokenHints.php
+32 −0 test/src/Provider/Fake/ProviderWithGuardedProperties.php
+0 −2 test/src/Provider/Generic.php
+37 −17 test/src/Provider/GenericProviderTest.php
+107 −14 test/src/Token/AccessTokenTest.php
+2 −2 test/src/Tool/ArrayAccessorTraitTest.php
+160 −0 test/src/Tool/ProviderRedirectTraitTest.php
+5 −7 test/src/Tool/QueryBuilderTraitTest.php
+8 −11 test/src/Tool/RequestFactoryTest.php