미디어위키 플러그인 MyAuthPlugin.php

1 개요[ | ]

MyAuthPlugin.php
/var/www/html/w/extensions/MyAuthPlugin.php
  • 옛날 코드 ★ deprecated
  • 미디어위키 자동로그인 플러그인
  • 외부로그인 정보로 미디어위키에 자동로그인 시켜줌
  • 이 방식은 미디어위키 1.27 버전에서 deprecated
이후 버전에서는 AuthManager를 이용하여 구현해야 함
테스트 환경은 미디어위키 1.25 버전
여기에 기록하는 이유는 그냥 소스코드 보존 (박물관)
제타위키와는 별 관련이 없음
  • 기능: (가칭) lib_real_session.php에서 실제 로그인 정보를 받아옴
real_session('user_id'), real_session('user_name')로 필요한 정보를 얻어 미디어위키에 그대로 로그인시킴

2 소스 코드[ | ]

<?php
require_once 'lib_real_session.php';

$wgExtensionFunctions[] = 'MyAuthPlugin_hook';
$wgHooks['UserLoadAfterLoadFromSession'][] = 'MyAuthPlugin_AfterLoad';

function MyAuthPlugin_AfterLoad() {
	global $wgSessionStarted;
	wfSetupSession();
	$wgSessionStarted = true;
}

function MyAuthPlugin_hook() {
	global $__IS_LOGIN_PAGE__;
	if($__IS_LOGIN_PAGE__) $user_name = 'anonymous';
	else $user_name = real_session('user_name');

	// 로그인 토큰 받기
	$params = new FauxRequest([ 'wpName' => '12345678' ]);
	$loginForm = new LoginForm( $params );
	$result = $loginForm->authenticateUserData();
	$token = $loginForm->getLoginToken();

	// 로그인 폼 제출
	$loginForm = new LoginForm( new FauxRequest([
		'wpName' => $user_name,
		'wpPassword' => '12345678',
		'wpLoginToken' => $token,
	]));
	$result = $loginForm->authenticateUserData();
	
	// 로그인 성공
	if($result == LoginForm::SUCCESS ) {
		return;
	}
	
	// 로그인 실패
	switch ( $result ) {
		case LoginForm::NEED_TOKEN: $msg = 'NEED_TOKEN'; break;
		case LoginForm::WRONG_TOKEN: $msg = 'WRONG_TOKEN'; break;
		case LoginForm::NO_NAME: $msg = 'NO_NAME'; break;
		case LoginForm::ILLEGAL: $msg = 'ILLEGAL'; break;
		case LoginForm::WRONG_PLUGIN_PASS: $msg = 'WRONG_PLUGIN_PASS'; break;
		case LoginForm::NOT_EXISTS: $msg = 'NOT_EXISTS'; break;
		case LoginForm::WRONG_PASS: $msg = 'WRONG_PASS'; break;
		case LoginForm::EMPTY_PASS: $msg = 'EMPTY_PASS'; break;
		default: $msg = 'Unknown'; break;
	}
	trace( 'Unexpected REMOTE_USER authentication failure.' );
	trace( $msg );
	exit;
} 

class MyAuthPlugin extends AuthPlugin {

	function userExists( $username ) {
		return true;
	}

	function authenticate( $username, $password ) {
		return true;
	}

	function modifyUITemplate( &$template ) {
		$template->set( 'usedomain', false );
	}

	function setDomain( $domain ) {
		$this->domain = $domain;
	}
	
	function validDomain( $domain ) {
		return true;
	}

	function updateUser( &$user ) {
		$user->setEmail( real_session('user_id') );
		$user->setRealName( real_session('user_name') );
		return true;
	}

	function autoCreate() {
		return true;
	}

	function allowPasswordChange() {
		return false;
	}

	function setPassword( $password ) {
		return false;
	}

	function updateExternalDB( $user ) {
		return true;
	}

	function canCreateAccounts() {
		return true;
	}

	function addUser( $user, $password ) {
		return true;
	}

	function strict() {
		return false;
	}

	function initUser( &$user ) {
		$user->setEmail( real_session('user_id') );
		$user->mEmailAuthenticated = wfTimestampNow();
		$user->setToken();
		$user->saveSettings();
	}

	function getCanonicalName( $username ) {
		return $username;
	}
}

3 LocalSettings.php 설정[ | ]

  • 로그인, 로그아웃 링크 제거
require_once "$IP/extensions/MyAuthPlugin/MyAuthPlugin.php";
$wgAuth = new MyAuthPlugin();

function LessSpecialPages(&$list) {
	unset( $list['Userlogout'] );
	unset( $list['Userlogin'] );
	return true;
}
$wgHooks['SpecialPage_initList'][]='LessSpecialPages';

function StripLogin(&$personal_urls, &$wgTitle) {  
	unset( $personal_urls["login"] );
	unset( $personal_urls["logout"] );
	unset( $personal_urls['anonlogin'] );
	return true;
}
$wgHooks['PersonalUrls'][] = 'StripLogin';

4 같이 보기[ | ]

5 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}