Zum Inhalt springen

Mediawiki upgrade

Aus meh als gmues
Version vom 31. März 2025, 05:52 Uhr von David Glenck (Diskussion | Beiträge) (Verwende neue OAuth Client extension)

Offizielle Anleitung

Für grosse Versionssprünge, e.g. 1.39 nach 1.43 https://www.mediawiki.org/wiki/Manual:Upgrading

Für bugfix releases e.g. 1.39.8 nach 1.39.10 reicht ein patch: Mediawiki patchen

Gemachte Anpassungen

Diese Anpassungen wurden gemacht und müssen bei einem Upgrade übernommen und evtl. angepasst werden.

WSOAuth

Für den Login mit meh als gmües wurde folgender AuthProvider in extensions/WSOAuth/src/AuthenticationProvider/MagAuth.php abgelegt.

<?php

namespace WSOAuth\AuthenticationProvider;

use League\OAuth2\Client\Provider\GenericProvider;
use MediaWiki\User\UserIdentity;

class MagAuth extends AuthProvider {

	/**
	 * @var
	 */
	private $provider;

	/**
	 * @inheritDoc
	 */
	public function __construct(
		string $clientId,
		string $clientSecret,
		?string $authUri,
		?string $redirectUri,
		array $extensionData = []
	) {
		
		$this->provider = new GenericProvider([
    			'clientId' => $clientId, // The client ID assigned to you by the provider
    			'clientSecret' => $clientSecret, // The client password assigned to you by the provider
    			'redirectUri' => $redirectUri,
    			'urlAuthorize' => $authUri . '/o/authorize/',
    			'urlAccessToken' => $authUri . '/o/token/',
    			'urlResourceOwnerDetails' => $authUri . '/nextcloud/profile'
		]);
	}

	/**
	 * @inheritDoc
	 */
	public function login( ?string &$key, ?string &$secret, ?string &$authUrl ): bool {
		$authUrl = $this->provider->getAuthorizationUrl();

		$secret = $this->provider->getState();

		return true;
	}

	/**
	 * @inheritDoc
	 */
	public function logout( UserIdentity &$user ): void {
	}

	/**
	 * @inheritDoc
	 */
	public function getUser( string $key, string $secret, &$errorMessage ) {
		if ( !isset( $_GET['code'] ) ) {
			return false;
		}

		if ( !isset( $_GET['state'] ) || empty( $_GET['state'] ) || ( $_GET['state'] !== $secret ) ) {
			return false;
		}

		try {
			$token = $this->provider->getAccessToken( 'authorization_code', [ 'code' => $_GET['code'] ] );
			$user = $this->provider->getResourceOwner( $token );
			$userData = $user->toArray();
			return [
				'name' => $userData["displayName"],
				'realname' => $userData["displayName"],
				'email' => $userData["email"]
			];
		} catch ( \Exception $e ) {
			return false;
		}
	}

	/**
	 * @inheritDoc
	 */
	public function saveExtraAttributes( int $id ): void {
	}
}