Skip to content

Commit

Permalink
REST: Add X-Temporary-User-Redirect response header
Browse files Browse the repository at this point in the history
Bug: T376260
Change-Id: I7c7def3e5064db335a9069eec98cbaca96197f76
  • Loading branch information
MuhammadJaziraly committed Oct 14, 2024
1 parent 3f84973 commit be1fc95
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 be1fc95

Please sign in to comment.