29 $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
46 && !$this->user->isRegistered()
48 $origin = Origin::parseHeaderList(
$request->getHeader(
'Origin' ) );
50 if ( !$this->allowOrigin( $origin ) ) {
51 return 'rest-cross-origin-anon-write';
58 private function allowOrigin(
Origin $origin ): bool {
59 $allowed = array_merge( [ $this->getCanonicalDomain() ],
63 return $origin->
match( $allowed, $excluded );
66 private function getCanonicalDomain(): string {
67 $res = parse_url( $this->options->get(
MainConfigNames::CanonicalServer ) );
68 '@phan-var array $res';
70 $host = $res[
'host'] ??
'';
71 $port = $res[
'port'] ??
null;
73 return $port ?
"$host:$port" : $host;
93 if ( $this->options->get( MainConfigNames::RestAllowCrossOriginCookieAuth ) ) {
102 $response->
addHeader(
'Vary',
'Origin' );
105 if (
$request->hasHeader(
'Origin' ) ) {
106 $origin = Origin::parseHeaderList(
$request->getHeader(
'Origin' ) );
107 if ( $this->allowOrigin( $origin ) ) {
111 if (
$request->getMethod() ===
'OPTIONS' || $this->user->isRegistered() ) {
126 if ( $allowedOrigin !==
'*' ) {
127 $response->setHeader(
'Access-Control-Allow-Credentials',
'true' );
130 $response->setHeader(
'Access-Control-Allow-Origin', $allowedOrigin );
142 $response = $responseFactory->createNoContent();
143 $response->setHeader(
'Access-Control-Allow-Methods', $allowedMethods );
145 $allowedHeaders = $this->options->get( MainConfigNames::AllowedCorsHeaders );
146 $allowedHeaders = array_merge( $allowedHeaders, array_diff( [
155 ], $allowedHeaders ) );
156 $response->setHeader(
'Access-Control-Allow-Headers', $allowedHeaders );
if(!defined('MW_SETUP_CALLBACK'))
A class containing constants representing the names of configuration variables.
const CrossSiteAJAXdomainExceptions
Name constant for the CrossSiteAJAXdomainExceptions setting, for use with Config::get()
const CanonicalServer
Name constant for the CanonicalServer setting, for use with Config::get()
const AllowCrossOrigin
Name constant for the AllowCrossOrigin setting, for use with Config::get()
const AllowedCorsHeaders
Name constant for the AllowedCorsHeaders setting, for use with Config::get()
const CrossSiteAJAXdomains
Name constant for the CrossSiteAJAXdomains setting, for use with Config::get()
const RestAllowCrossOriginCookieAuth
Name constant for the RestAllowCrossOriginCookieAuth setting, for use with Config::get()