Skip to content

Commit

Permalink
feat: allow oauth consumers to be created with consumer acceptance
Browse files Browse the repository at this point in the history
  • Loading branch information
m90 committed Jul 2, 2024
1 parent dbaebda commit dd75f12
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 24 deletions.
24 changes: 15 additions & 9 deletions dist-persist/wbstack/src/Internal/ApiWbStackOauthGet.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,31 @@ public function execute() {
// Try and get the required consumer
$consumerData = WbStackPlatformReservedUser::getOAuthConsumer(
$this->getParameter('consumerName'),
$this->getParameter('consumerVersion')
$this->getParameter('consumerVersion'),
);

// If it doesnt exist, make sure the user and consumer do
if(!$consumerData) {
if (!$consumerData) {
$callbackUrl = $this->getScheme() . $GLOBALS[WBSTACK_INFO_GLOBAL]->requestDomain . $this->getParameter('callbackUrlTail');

WbStackPlatformReservedUser::createIfNotExists();
WbStackPlatformReservedUser::createOauthConsumer(
$ok = WbStackPlatformReservedUser::createOauthConsumer(
$this->getParameter('consumerName'),
$this->getParameter('consumerVersion'),
$this->getParameter('grants'),
$callbackUrl
);
$consumerData = WbStackPlatformReservedUser::getOAuthConsumer(
$this->getParameter('consumerName'),
$this->getParameter('consumerVersion')
$callbackUrl,
$this->getParameter('includeAcceptance'),
);
if ($ok) {
$consumerData = WbStackPlatformReservedUser::getOAuthConsumer(
$this->getParameter('consumerName'),
$this->getParameter('consumerVersion')
);
}
}

// Return appropriate result
if(!$consumerData) {
if (!$consumerData) {
$res = ['success' => 0];
} else {
$res = [
Expand Down Expand Up @@ -77,6 +80,9 @@ public function getAllowedParams() {
ParamValidator::PARAM_TYPE => 'string',
ParamValidator::PARAM_REQUIRED => true
],
'includeAcceptance' => [
ParamValidator::PARAM_TYPE => 'boolean',
],
];
}
}
33 changes: 30 additions & 3 deletions dist-persist/wbstack/src/Internal/WbStackPlatformReservedUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public static function createIfNotExists() {
return true;
}

public static function createOauthConsumer($consumerName, $version, $grants, $callbackUrl) {
public static function createOauthConsumer($consumerName, $version, $grants, $callbackUrl, $includeAcceptance = false) {
// ### Setup oauth consumer...
// LOGIC mainly from https://github.com/wikimedia/mediawiki-extensions-OAuth/blob/master/maintenance/createOAuthConsumer.php ?
// EXECUTION of script from https://github.com/wmde/wikibase-docker/blob/master/wikibase/1.33/bundle/extra-install.sh#L7 ?
Expand Down Expand Up @@ -100,10 +100,21 @@ public static function createOauthConsumer($consumerName, $version, $grants, $ca
$approveStatus = $control->submit();

if ( !$approveStatus->isGood() ) {
// TODO return more info...
return false;
}

if ( $includeAcceptance ) {
$acceptanceData = [
// TODO: figure out what is expected to go here
];
$control = new \MediaWiki\Extension\OAuth\Control\ConsumerAcceptanceSubmitControl( $context, $acceptanceData, $dbw, 1 );
$acceptanceStatus = $control->submit();

if ( !$acceptanceStatus->isGood() ) {
return false;
}
}

return true;
}

Expand Down Expand Up @@ -131,10 +142,26 @@ public static function getOAuthConsumer($consumerName, $version) {
return false;
}

return [
$data = [
'agent' => $c->getName(),
'consumerKey' => $c->getConsumerKey(),
'consumerSecret' => \MediaWiki\Extension\OAuth\Backend\Utils::hmacDBSecret( $c->getSecretKey() ),
];

$a = \MediaWiki\Extension\OAuth\Backend\ConsumerAcceptance::newFromUserConsumerWiki(
$db,
$user->getId(),
$c,
$c->getWiki(),
\MediaWiki\Extension\OAuth\Backend\ConsumerAcceptance::READ_NORMAL,
$c->getOAuthVersion(),
);

if ( $a !== false ) {
$data['accessKey'] = $a->getAccessToken();
$data['accessSecret'] = $a->getAccessSecret();
}

return $data;
}
}
24 changes: 15 additions & 9 deletions dist/wbstack/src/Internal/ApiWbStackOauthGet.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,31 @@ public function execute() {
// Try and get the required consumer
$consumerData = WbStackPlatformReservedUser::getOAuthConsumer(
$this->getParameter('consumerName'),
$this->getParameter('consumerVersion')
$this->getParameter('consumerVersion'),
);

// If it doesnt exist, make sure the user and consumer do
if(!$consumerData) {
if (!$consumerData) {
$callbackUrl = $this->getScheme() . $GLOBALS[WBSTACK_INFO_GLOBAL]->requestDomain . $this->getParameter('callbackUrlTail');

WbStackPlatformReservedUser::createIfNotExists();
WbStackPlatformReservedUser::createOauthConsumer(
$ok = WbStackPlatformReservedUser::createOauthConsumer(
$this->getParameter('consumerName'),
$this->getParameter('consumerVersion'),
$this->getParameter('grants'),
$callbackUrl
);
$consumerData = WbStackPlatformReservedUser::getOAuthConsumer(
$this->getParameter('consumerName'),
$this->getParameter('consumerVersion')
$callbackUrl,
$this->getParameter('includeAcceptance'),
);
if ($ok) {
$consumerData = WbStackPlatformReservedUser::getOAuthConsumer(
$this->getParameter('consumerName'),
$this->getParameter('consumerVersion')
);
}
}

// Return appropriate result
if(!$consumerData) {
if (!$consumerData) {
$res = ['success' => 0];
} else {
$res = [
Expand Down Expand Up @@ -77,6 +80,9 @@ public function getAllowedParams() {
ParamValidator::PARAM_TYPE => 'string',
ParamValidator::PARAM_REQUIRED => true
],
'includeAcceptance' => [
ParamValidator::PARAM_TYPE => 'boolean',
],
];
}
}
33 changes: 30 additions & 3 deletions dist/wbstack/src/Internal/WbStackPlatformReservedUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public static function createIfNotExists() {
return true;
}

public static function createOauthConsumer($consumerName, $version, $grants, $callbackUrl) {
public static function createOauthConsumer($consumerName, $version, $grants, $callbackUrl, $includeAcceptance = false) {
// ### Setup oauth consumer...
// LOGIC mainly from https://github.com/wikimedia/mediawiki-extensions-OAuth/blob/master/maintenance/createOAuthConsumer.php ?
// EXECUTION of script from https://github.com/wmde/wikibase-docker/blob/master/wikibase/1.33/bundle/extra-install.sh#L7 ?
Expand Down Expand Up @@ -100,10 +100,21 @@ public static function createOauthConsumer($consumerName, $version, $grants, $ca
$approveStatus = $control->submit();

if ( !$approveStatus->isGood() ) {
// TODO return more info...
return false;
}

if ( $includeAcceptance ) {
$acceptanceData = [
// TODO: figure out what is expected to go here
];
$control = new \MediaWiki\Extension\OAuth\Control\ConsumerAcceptanceSubmitControl( $context, $acceptanceData, $dbw, 1 );
$acceptanceStatus = $control->submit();

if ( !$acceptanceStatus->isGood() ) {
return false;
}
}

return true;
}

Expand Down Expand Up @@ -131,10 +142,26 @@ public static function getOAuthConsumer($consumerName, $version) {
return false;
}

return [
$data = [
'agent' => $c->getName(),
'consumerKey' => $c->getConsumerKey(),
'consumerSecret' => \MediaWiki\Extension\OAuth\Backend\Utils::hmacDBSecret( $c->getSecretKey() ),
];

$a = \MediaWiki\Extension\OAuth\Backend\ConsumerAcceptance::newFromUserConsumerWiki(
$db,
$user->getId(),
$c,
$c->getWiki(),
\MediaWiki\Extension\OAuth\Backend\ConsumerAcceptance::READ_NORMAL,
$c->getOAuthVersion(),
);

if ( $a !== false ) {
$data['accessKey'] = $a->getAccessToken();
$data['accessSecret'] = $a->getAccessSecret();
}

return $data;
}
}

0 comments on commit dd75f12

Please sign in to comment.