59 lines
2.1 KiB
PHP
59 lines
2.1 KiB
PHP
<?php
|
|
namespace EEPROM\Auth;
|
|
|
|
use EEPROM\Config;
|
|
use Index\Serialisation\Serialiser;
|
|
|
|
class MisuzuAuth implements AuthInterface {
|
|
private $endPoint = '';
|
|
private $secretKey = '';
|
|
|
|
public function __construct() {
|
|
$this->endPoint = Config::get('Misuzu', 'endpoint', '');
|
|
$this->secretKey = Config::get('Misuzu', 'secret', '');
|
|
}
|
|
|
|
public function getName(): string { return 'Misuzu'; }
|
|
|
|
public function verifyToken(string $token): int {
|
|
$packed = str_pad(Serialiser::uriBase64()->deserialise($token, true), 37, "\x00");
|
|
$unpacked = unpack('Cversion/Nuser/H64token', $packed);
|
|
|
|
if(isset($unpacked['version']) && $unpacked['version'] === 1
|
|
&& isset($unpacked['user']) && $unpacked['user'] > 0) {
|
|
$loginRequest = [
|
|
'user_id' => $unpacked['user'],
|
|
'token' => 'SESS:' . $token,
|
|
'ip' => $_SERVER['REMOTE_ADDR'],
|
|
];
|
|
$loginSignature = hash_hmac('sha256', implode('#', $loginRequest), $this->secretKey);
|
|
$login = curl_init($this->endPoint);
|
|
curl_setopt_array($login, [
|
|
CURLOPT_AUTOREFERER => false,
|
|
CURLOPT_FAILONERROR => false,
|
|
CURLOPT_FOLLOWLOCATION => true,
|
|
CURLOPT_HEADER => false,
|
|
CURLOPT_POST => true,
|
|
CURLOPT_POSTFIELDS => json_encode($loginRequest),
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TCP_FASTOPEN => true,
|
|
CURLOPT_CONNECTTIMEOUT => 2,
|
|
CURLOPT_MAXREDIRS => 2,
|
|
CURLOPT_PROTOCOLS => CURLPROTO_HTTPS,
|
|
CURLOPT_TIMEOUT => 5,
|
|
CURLOPT_USERAGENT => 'Flashii EEPROM',
|
|
CURLOPT_HTTPHEADER => [
|
|
'Content-Type: application/json',
|
|
'X-SharpChat-Signature: ' . $loginSignature,
|
|
],
|
|
]);
|
|
$userInfo = json_decode(curl_exec($login));
|
|
curl_close($login);
|
|
|
|
return $userInfo->user_id;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|