增加获取头像的API
parent
cb158d7398
commit
9a10a6b5e7
@ -0,0 +1,97 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Isekai\OIDC;
|
||||||
|
|
||||||
|
use ApiBase;
|
||||||
|
use ApiQueryBase;
|
||||||
|
use Exception;
|
||||||
|
use Exif;
|
||||||
|
use MediaWiki\MediaWikiServices;
|
||||||
|
use Wikimedia\ParamValidator\ParamValidator;
|
||||||
|
use User;
|
||||||
|
|
||||||
|
class ApiOIDCAvatar extends ApiQueryBase {
|
||||||
|
public function __construct( $main, $method ) {
|
||||||
|
parent::__construct( $main, $method );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function execute() {
|
||||||
|
$services = MediaWikiServices::getInstance();
|
||||||
|
$config = $services->getMainConfig();
|
||||||
|
$wgIsekaiOIDC = $config->get('IsekaiOIDC');
|
||||||
|
|
||||||
|
//$this->requireOnlyOneParameter('username', 'userid');
|
||||||
|
|
||||||
|
$userid = $this->getParameter('userid');
|
||||||
|
$username = $this->getParameter('username');
|
||||||
|
|
||||||
|
$userFactory = $services->getUserFactory();
|
||||||
|
if ($userid) {
|
||||||
|
$user = $userFactory->newFromId($userid);
|
||||||
|
} else {
|
||||||
|
$user = $userFactory->newFromName($username);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$user) {
|
||||||
|
$this->dieWithError('isekaioidc-api-user-not-found', 'isekaioidc-api-user-not-found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$size = $this->getParameter('size');
|
||||||
|
|
||||||
|
$avatarUrl = '';
|
||||||
|
|
||||||
|
$hookContainer = $services->getHookContainer();
|
||||||
|
$hookContainer->run('Isekai::GetUserAvatar', [&$avatarUrl, $size, $user]);
|
||||||
|
|
||||||
|
if (empty($avatarUrl)) {
|
||||||
|
if (isset($wgIsekaiOIDC['defaultAvatarUrl'])) {
|
||||||
|
$avatarUrl = $wgIsekaiOIDC['defaultAvatarUrl'];
|
||||||
|
} else {
|
||||||
|
$this->dieWithError('isekaioidc-api-user-avatar-not-found', 'isekaioidc-api-user-avatar-not-found', [
|
||||||
|
'userid' => $userid,
|
||||||
|
'username' => $username,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->getParameter('redirect')) {
|
||||||
|
header('HTTP/1.1 301 Moved Permanently');
|
||||||
|
header('Location: ' . $avatarUrl);
|
||||||
|
header('Cache-Control: public, max-age=86400');
|
||||||
|
exit();
|
||||||
|
} else {
|
||||||
|
$this->getResult()->addValue('query', 'oidcavatar', $avatarUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAllowedParams() {
|
||||||
|
return [
|
||||||
|
'username' => [
|
||||||
|
ParamValidator::PARAM_DEFAULT => null,
|
||||||
|
ParamValidator::PARAM_TYPE => 'string',
|
||||||
|
],
|
||||||
|
'userid' => [
|
||||||
|
ParamValidator::PARAM_DEFAULT => null,
|
||||||
|
ParamValidator::PARAM_TYPE => 'integer',
|
||||||
|
],
|
||||||
|
'size' => [
|
||||||
|
ParamValidator::PARAM_DEFAULT => 128,
|
||||||
|
ParamValidator::PARAM_TYPE => 'integer',
|
||||||
|
],
|
||||||
|
'redirect' => [
|
||||||
|
ParamValidator::PARAM_DEFAULT => false,
|
||||||
|
ParamValidator::PARAM_TYPE => 'boolean',
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getExamplesMessages() {
|
||||||
|
return [
|
||||||
|
'action=query&prop=oidcavatar&username=Example&size=128' => 'isekaioidc-api-example-isekaioidcavatar',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheMode($params) {
|
||||||
|
return 'public';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue