Skip to content

Commit

Permalink
Merge "REST: Add X-Temporary-User-Redirect response header"
Browse files Browse the repository at this point in the history
  • Loading branch information
jenkins-bot authored and Gerrit Code Review committed Oct 14, 2024
2 parents d273370 + be1fc95 commit 94e597c
Show file tree
Hide file tree
Showing 35 changed files with 156 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -65,7 +66,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] )
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Wikibase\Repo\RestApi\RouteHandlers;

use Exception;
use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -68,7 +69,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] )
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -64,7 +65,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
$responseFactory
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\RequestInterface;
use MediaWiki\Rest\Response;
Expand Down Expand Up @@ -66,7 +67,7 @@ public static function factory(): self {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] )
);
}
Expand Down
3 changes: 2 additions & 1 deletion repo/rest-api/src/RouteHandlers/CreateItemRouteHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\Response;
Expand Down Expand Up @@ -74,7 +75,7 @@ public static function factory(): Handler {
new UserAgentCheckMiddleware(),
new AuthenticationMiddleware( MediaWikiServices::getInstance()->getUserIdentityUtils() ),
new BotRightCheckMiddleware( MediaWikiServices::getInstance()->getPermissionManager(), $responseFactory ),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] )
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers\Middleware;

use MediaWiki\Hook\TempUserCreatedRedirectHook;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\Response;

Expand All @@ -10,15 +11,44 @@
*/
class TempUserCreationResponseHeaderMiddleware implements Middleware {

private TempUserCreatedRedirectHook $hookRunner;

public function __construct( TempUserCreatedRedirectHook $hookRunner ) {
$this->hookRunner = $hookRunner;
}

public function run( Handler $routeHandler, callable $runNext ): Response {
$response = $runNext();

$user = $routeHandler->getSession()->getUser();
$session = $routeHandler->getSession();
$user = $session->getUser();
$authorityUser = $routeHandler->getAuthority()->getUser();

// If the user is a temporary user and is not the same as the current authority user,
// it means a new temporary user has been created. In this case, add a header to the response
// to indicate that the temporary user was created, using the temporary user's name.
if ( $user->isTemp() && !$routeHandler->getAuthority()->getUser()->equals( $user ) ) {
// it means a new temporary user has been created.
if ( $user->isTemp() && !$authorityUser->equals( $user ) ) {
// Hook parameters
$returnTo = '';
$returnToQuery = '';
$returnToAnchor = '';
$redirectUrl = '';

// Call the hook
$this->hookRunner->onTempUserCreatedRedirect(
$session,
$user,
$returnTo,
$returnToQuery,
$returnToAnchor,
$redirectUrl
);

// If redirectUrl is set, add it to the response header
if ( $redirectUrl !== '' ) {
$response->setHeader( 'X-Temporary-User-Redirect', $redirectUrl );
}

// Also add the newly created temporary user's name in the response header
$response->setHeader( 'X-Temporary-User-Created', $user->getName() );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -66,7 +67,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getPatchItemAliases(),
new AliasesSerializer(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -66,7 +67,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getPatchItemDescriptions(),
new DescriptionsSerializer(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -69,7 +70,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
$responseFactory
);
Expand Down
3 changes: 2 additions & 1 deletion repo/rest-api/src/RouteHandlers/PatchItemRouteHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -72,7 +73,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getPatchItem(),
new ItemSerializer(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -72,7 +73,7 @@ public static function factory(): Handler {
self::STATEMENT_ID_PATH_PARAM,
self::ITEM_ID_PATH_PARAM
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getStatementSerializer(),
$responseFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -66,7 +67,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
new AliasesSerializer(),
$responseFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -64,7 +65,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getPatchPropertyDescriptions(),
new DescriptionsSerializer(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -67,7 +68,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -68,7 +69,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::PROPERTY_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getPatchProperty(),
new PropertySerializer(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -71,7 +72,7 @@ public static function factory(): Handler {
self::STATEMENT_ID_PATH_PARAM,
self::PROPERTY_ID_PATH_PARAM
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getStatementSerializer(),
$responseFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -70,7 +71,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] )
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -73,7 +74,7 @@ public static function factory(): Handler {
WbRestApi::getStatementRedirectMiddlewareFactory()->newStatementRedirectMiddleware(
self::STATEMENT_ID_PATH_PARAM
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getStatementSerializer(),
$responseFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -64,7 +65,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
WbRestApi::getRemoveItemDescription(),
$responseFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -65,7 +66,7 @@ public static function factory(): Handler {
WbRestApi::getPreconditionMiddlewareFactory()->newPreconditionMiddleware(
fn( RequestInterface $request ): string => $request->getPathParam( self::ITEM_ID_PATH_PARAM )
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] ),
$responseFactory
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Wikibase\Repo\RestApi\RouteHandlers;

use MediaWiki\HookContainer\HookRunner;
use MediaWiki\MediaWikiServices;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\RequestInterface;
Expand Down Expand Up @@ -69,7 +70,7 @@ public static function factory(): Handler {
self::STATEMENT_ID_PATH_PARAM,
self::ITEM_ID_PATH_PARAM
),
new TempUserCreationResponseHeaderMiddleware(),
new TempUserCreationResponseHeaderMiddleware( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) ),
] )
);
}
Expand Down
Loading

0 comments on commit 94e597c

Please sign in to comment.