'IPAddress' => isset( $_SERVER[ 'REMOTE_ADDR' ] ) ? $_SERVER[ 'REMOTE_ADDR' ] : '',
'UserAgent' => isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '',
'ChronologyProtection' => 'true',
+ // phpcs:ignore MediaWiki.Usage.SuperGlobalsUsage.SuperGlobals -- library can't use $wgRequest
'ChronologyPositionIndex' => isset( $_GET['cpPosIndex'] ) ? $_GET['cpPosIndex'] : null
];
/**
* @see ILBFactory::newMainLB()
* @param bool $domain
- * @return LoadBalancer
+ * @return ILoadBalancer
*/
abstract public function newMainLB( $domain = false );
/**
* @see ILBFactory::getMainLB()
* @param bool $domain
- * @return LoadBalancer
+ * @return ILoadBalancer
*/
abstract public function getMainLB( $domain = false );
/**
* @see ILBFactory::newExternalLB()
* @param string $cluster
- * @return LoadBalancer
+ * @return ILoadBalancer
*/
abstract public function newExternalLB( $cluster );
/**
* @see ILBFactory::getExternalLB()
* @param string $cluster
- * @return LoadBalancer
+ * @return ILoadBalancer
*/
abstract public function getExternalLB( $cluster );
}
/**
- * Base parameters to LoadBalancer::__construct()
+ * Base parameters to ILoadBalancer::__construct()
* @return array
*/
final protected function baseLoadBalancerParams() {
return strpos( $url, '?' ) === false ? "$url?cpPosIndex=$index" : "$url&cpPosIndex=$index";
}
+ /**
+ * @param int $index Write index
+ * @param int $time UNIX timestamp
+ * @return string Timestamp-qualified write index of the form "<index>.<timestamp>"
+ * @since 1.32
+ */
+ public static function makeCookieValueFromCPIndex( $index, $time ) {
+ return $index . '@' . $time;
+ }
+
+ /**
+ * @param string $value String possibly of the form "<index>" or "<index>@<timestamp>"
+ * @param int $minTimestamp Lowest UNIX timestamp of non-expired values (if present)
+ * @return int|null Write index or null if $value is empty or expired
+ * @since 1.32
+ */
+ public static function getCPIndexFromCookieValue( $value, $minTimestamp ) {
+ if ( !preg_match( '/^(\d+)(?:@(\d+))?$/', $value, $m ) ) {
+ return null;
+ }
+
+ $index = (int)$m[1];
+
+ if ( isset( $m[2] ) && $m[2] !== '' && (int)$m[2] < $minTimestamp ) {
+ return null; // expired
+ }
+
+ return ( $index > 0 ) ? $index : null;
+ }
+
public function setRequestInfo( array $info ) {
if ( $this->chronProt ) {
throw new LogicException( 'ChronologyProtector already initialized.' );
}
}
+/**
+ * @deprecated since 1.29
+ */
class_alias( LBFactory::class, 'LBFactory' );