OAuth (part 11 draft) Add Yandex
This commit is contained in:
parent
93f09245e6
commit
cf3087dd1c
7 changed files with 201 additions and 3 deletions
|
@ -1274,7 +1274,7 @@ class Install extends Admin
|
|||
|
||||
// заполнение providers
|
||||
$providers = [
|
||||
'github',
|
||||
'github', 'yandex',
|
||||
];
|
||||
|
||||
$query = 'INSERT INTO ::providers (pr_name, pr_pos)
|
||||
|
|
|
@ -527,4 +527,43 @@ class Update extends Admin
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* rev.56 to rev.57
|
||||
*/
|
||||
protected function stageNumber56(array $args): ?int
|
||||
{
|
||||
$providers = [
|
||||
1 => 'yandex',
|
||||
];
|
||||
|
||||
$query = 'INSERT INTO ::providers (pr_name, pr_pos)
|
||||
SELECT tmp.*
|
||||
FROM (SELECT ?s:name AS f1, ?i:pos AS f2) AS tmp
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM ::providers
|
||||
WHERE pr_name=?s:name
|
||||
)';
|
||||
|
||||
foreach ($providers as $pos => $name) {
|
||||
$vars = [
|
||||
':name' => $name,
|
||||
':pos' => $pos,
|
||||
];
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
|
||||
$coreConfig = new CoreConfig($this->configFile);
|
||||
|
||||
$coreConfig->add(
|
||||
'shared=>providers=>drivers=>yandex',
|
||||
'\\ForkBB\\Models\\Provider\\Driver\\Yandex::class'
|
||||
);
|
||||
|
||||
$coreConfig->save();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
141
app/Models/Provider/Driver/Yandex.php
Normal file
141
app/Models/Provider/Driver/Yandex.php
Normal file
|
@ -0,0 +1,141 @@
|
|||
<?php
|
||||
/**
|
||||
* This file is part of the ForkBB <https://github.com/forkbb>.
|
||||
*
|
||||
* @copyright (c) Visman <mio.visman@yandex.ru, https://github.com/MioVisman>
|
||||
* @license The MIT License (MIT)
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ForkBB\Models\Provider\Driver;
|
||||
|
||||
use ForkBB\Models\Provider\Driver;
|
||||
use RuntimeException;
|
||||
|
||||
class Yandex extends Driver
|
||||
{
|
||||
protected string $origName = 'yandex';
|
||||
protected string $authURL = 'https://oauth.yandex.ru/authorize';
|
||||
protected string $tokenURL = 'https://oauth.yandex.ru/token';
|
||||
protected string $userURL = 'https://login.yandex.ru/info?format=json';
|
||||
protected string $scope = 'login:info login:email login:avatar';
|
||||
|
||||
/**
|
||||
* Запрашивает информацию о пользователе
|
||||
* Проверяет ответ
|
||||
* Запоминает данные пользователя
|
||||
*/
|
||||
public function reqUserInfo(): bool
|
||||
{
|
||||
$this->userInfo = [];
|
||||
|
||||
$options = [
|
||||
'headers' => [
|
||||
'Accept: application/json',
|
||||
"Authorization: OAuth {$this->access_token}",
|
||||
],
|
||||
];
|
||||
|
||||
$response = $this->request('GET', $this->userURL, $options);
|
||||
|
||||
if (! empty($response['id'])) {
|
||||
$this->userInfo = $response;
|
||||
|
||||
return true;
|
||||
} elseif (\is_array($response)) {
|
||||
$this->error = 'User error';
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает идентификатор пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserId(): string
|
||||
{
|
||||
return (string) ($this->userInfo['id'] ?? '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает логин пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserLogin(): string
|
||||
{
|
||||
return (string) ($this->userInfo['login'] ?? '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает имя пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserName(): string
|
||||
{
|
||||
return (string) ($this->userInfo['real_name'] ?? ''); // ???? or display_name?
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает email пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserEmail(): string
|
||||
{
|
||||
return $this->c->Mail->valid($this->userInfo['default_email'] ?? null) ?: "{$this->origName}-{$this->userId}@localhost";
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает флаг подлинности email пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserEmailVerifed(): bool
|
||||
{
|
||||
return false; // ????
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает ссылку на аватарку пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserAvatar(): string
|
||||
{
|
||||
if (
|
||||
empty($this->userInfo['is_avatar_empty'])
|
||||
&& ! empty($this->userInfo['default_avatar_id'])
|
||||
) {
|
||||
return "https://avatars.yandex.net/get-yapic/{$this->userInfo['default_avatar_id']}/islands-200";
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает ссылку на профиль пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserURL(): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает местоположение пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserLocation(): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает пол пользователя (от провайдера)
|
||||
*/
|
||||
protected function getuserGender(): int
|
||||
{
|
||||
if (isset($this->userInfo['sex'])) {
|
||||
if ('male' === $this->userInfo['sex']) {
|
||||
return FORK_GEN_MAN;
|
||||
}
|
||||
|
||||
if ('female' === $this->userInfo['sex']) {
|
||||
return FORK_GEN_FEM;
|
||||
}
|
||||
}
|
||||
|
||||
return FORK_GEN_NOT;
|
||||
}
|
||||
}
|
|
@ -167,6 +167,7 @@ return [
|
|||
'class' => \ForkBB\Models\Provider\Providers::class,
|
||||
'drivers' => [
|
||||
'github' => \ForkBB\Models\Provider\Driver\GitHub::class,
|
||||
'yandex' => \ForkBB\Models\Provider\Driver\Yandex::class,
|
||||
],
|
||||
],
|
||||
'providerUser' => \ForkBB\Models\ProviderUser\ProviderUser::class,
|
||||
|
|
|
@ -36,6 +36,9 @@ msgstr "Provider data updated."
|
|||
msgid "github"
|
||||
msgstr "GitHub"
|
||||
|
||||
msgid "yandex"
|
||||
msgstr "Yandex"
|
||||
|
||||
msgid "Callback label"
|
||||
msgstr "Callback URI"
|
||||
|
||||
|
|
|
@ -36,6 +36,9 @@ msgstr "Данные провайдера обновлены."
|
|||
msgid "github"
|
||||
msgstr "GitHub"
|
||||
|
||||
msgid "yandex"
|
||||
msgstr "Yandex"
|
||||
|
||||
msgid "Callback label"
|
||||
msgstr "URI перенаправления"
|
||||
|
||||
|
|
|
@ -2998,11 +2998,22 @@ body,
|
|||
/****************/
|
||||
#fork .f-btn[name="github"] {
|
||||
color: #24292f;
|
||||
background-color: #fff;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#fork .f-btn[name="github"]:focus,
|
||||
#fork .f-btn[name="github"]:hover {
|
||||
color: #fff;
|
||||
color: #ffffff;
|
||||
background-color: #24292f;
|
||||
}
|
||||
|
||||
#fork .f-btn[name="yandex"] {
|
||||
color: #fc3f1d;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#fork .f-btn[name="yandex"]:focus,
|
||||
#fork .f-btn[name="yandex"]:hover {
|
||||
color: #ffffff;
|
||||
background-color: #fc3f1d;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue