diff --git a/src/SockChatAuth.php b/src/SockChatAuth.php index d126410..178dca5 100644 --- a/src/SockChatAuth.php +++ b/src/SockChatAuth.php @@ -2,41 +2,36 @@ final class SockChatAuth { public static function attempt(string $endPoint, string $secret, string $cookie): object { if(!empty($cookie)) { - $decoded = str_pad(base64_decode(str_pad(strtr($cookie, '-_', '+/'), strlen($cookie) % 4, '=', STR_PAD_RIGHT)), 37, "\0"); - $unpacked = unpack('Cversion/Nuser/H*token', $decoded); + $method = 'Misuzu'; + $signature = sprintf('verify#%s#%s#%s', $method, $cookie, $_SERVER['REMOTE_ADDR']); + $signature = hash_hmac('sha256', $signature, $secret); - if(isset($unpacked['version']) && $unpacked['version'] === 1 - && isset($unpacked['user']) && $unpacked['user'] > 0) { - $loginRequest = [ - 'user_id' => $unpacked['user'], - 'token' => 'SESS:' . $cookie, - 'ip' => $_SERVER['REMOTE_ADDR'], - ]; - $loginSignature = hash_hmac('sha256', implode('#', $loginRequest), $secret); - - $login = curl_init($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 => 'AJAX Chat', - CURLOPT_HTTPHEADER => [ - 'Content-Type: application/json', - 'X-SharpChat-Signature: ' . $loginSignature, - ], - ]); - $userInfo = json_decode(curl_exec($login)); - curl_close($login); - } + $login = curl_init($endPoint); + curl_setopt_array($login, [ + CURLOPT_AUTOREFERER => false, + CURLOPT_FAILONERROR => false, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_HEADER => false, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => http_build_query([ + 'method' => $method, + 'token' => $cookie, + 'ipaddr' => $_SERVER['REMOTE_ADDR'], + ], '', '&', PHP_QUERY_RFC3986), + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TCP_FASTOPEN => true, + CURLOPT_CONNECTTIMEOUT => 2, + CURLOPT_MAXREDIRS => 2, + CURLOPT_PROTOCOLS => CURLPROTO_HTTPS, + CURLOPT_TIMEOUT => 5, + CURLOPT_USERAGENT => 'AJAX Chat', + CURLOPT_HTTPHEADER => [ + 'Content-Type: application/x-www-form-urlencoded', + 'X-SharpChat-Signature: ' . $signature, + ], + ]); + $userInfo = json_decode(curl_exec($login)); + curl_close($login); } if(empty($userInfo->success)) {