mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-11-15 11:39:11 +03:00
Request AuthHandler (#218)
[FEATURE] RequestAuthHandler и php скрипт к нему
This commit is contained in:
parent
0201c8d474
commit
2180bd989e
3 changed files with 191 additions and 0 deletions
|
@ -43,6 +43,7 @@ public static void registerHandlers() {
|
||||||
registerHandler("json", JsonAuthHandler.class);
|
registerHandler("json", JsonAuthHandler.class);
|
||||||
registerHandler("memory", MemoryAuthHandler.class);
|
registerHandler("memory", MemoryAuthHandler.class);
|
||||||
registerHandler("mysql", MySQLAuthHandler.class);
|
registerHandler("mysql", MySQLAuthHandler.class);
|
||||||
|
registerHandler("request", RequestAuthHandler.class);
|
||||||
registredHandl = true;
|
registredHandl = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
package ru.gravit.launchserver.auth.handler;
|
||||||
|
|
||||||
|
import ru.gravit.utils.helper.IOHelper;
|
||||||
|
import ru.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public final class RequestAuthHandler extends CachedAuthHandler {
|
||||||
|
private String url;
|
||||||
|
private String secretKey;
|
||||||
|
|
||||||
|
private String typeLine;
|
||||||
|
private String uuidLine;
|
||||||
|
private String usernameLine;
|
||||||
|
private String accessTokenLine;
|
||||||
|
private String serverIDLine;
|
||||||
|
private String secretKeyLine;
|
||||||
|
|
||||||
|
private String TypeFetchByUUID;
|
||||||
|
private String TypeFetchByUsername;
|
||||||
|
private String TypeSetAccessTokenAndUUID;
|
||||||
|
private String TypeSetServerID;
|
||||||
|
private String splitSymbol;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init() {
|
||||||
|
if (url == null)
|
||||||
|
LogHelper.error("[Verify][AuthHandler] url cannot be null");
|
||||||
|
if (secretKey == null)
|
||||||
|
LogHelper.error("[Verify][AuthHandler] secretKey cannot be null");
|
||||||
|
// Default
|
||||||
|
if (typeLine == null)
|
||||||
|
typeLine = "type";
|
||||||
|
if (uuidLine == null)
|
||||||
|
uuidLine = "uuid";
|
||||||
|
if (usernameLine == null)
|
||||||
|
usernameLine = "username";
|
||||||
|
if (accessTokenLine == null)
|
||||||
|
accessTokenLine = "accessToken";
|
||||||
|
if (serverIDLine == null)
|
||||||
|
serverIDLine = "serverID";
|
||||||
|
if (secretKeyLine == null)
|
||||||
|
secretKeyLine = "secretKey";
|
||||||
|
if (TypeFetchByUUID == null)
|
||||||
|
TypeFetchByUUID = "FetchByUUID";
|
||||||
|
if (TypeFetchByUsername == null)
|
||||||
|
TypeFetchByUsername = "FetchByUsername";
|
||||||
|
if (TypeSetAccessTokenAndUUID == null)
|
||||||
|
TypeSetAccessTokenAndUUID = "SetAccessTokenAndUUID";
|
||||||
|
if (TypeSetServerID == null)
|
||||||
|
TypeSetServerID = "SetServerID";
|
||||||
|
if (splitSymbol == null)
|
||||||
|
splitSymbol = ":";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Entry fetchEntry(UUID uuid) throws IOException {
|
||||||
|
String response = IOHelper.request(new URL(url + "?" + IOHelper.urlEncode(typeLine) + "=" + TypeFetchByUUID + "&" + secretKeyLine + "=" + IOHelper.urlEncode(secretKey) + "&" + IOHelper.urlEncode(uuidLine) + "=" + IOHelper.urlEncode(uuid.toString())));
|
||||||
|
String[] parts = response.split(splitSymbol);
|
||||||
|
String username = parts[0];
|
||||||
|
String accessToken = parts[1];
|
||||||
|
String serverID = parts[2];
|
||||||
|
LogHelper.debug("[AuthHandler] Getted username: " + username);
|
||||||
|
LogHelper.debug("[AuthHandler] Getted accessToken: " + accessToken);
|
||||||
|
LogHelper.debug("[AuthHandler] Getted serverID: " + serverID);
|
||||||
|
LogHelper.debug("[AuthHandler] Getted UUID: " + uuid);
|
||||||
|
return query(uuid, username, accessToken, serverID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Entry fetchEntry(String username) throws IOException {
|
||||||
|
String response = IOHelper.request(new URL(url + "?" + IOHelper.urlEncode(typeLine) + "=" + TypeFetchByUsername + "&" + secretKeyLine + "=" + IOHelper.urlEncode(secretKey) + "&" + IOHelper.urlEncode(usernameLine) + "=" + IOHelper.urlEncode(username)));
|
||||||
|
String[] parts = response.split(splitSymbol);
|
||||||
|
UUID uuid = UUID.fromString(parts[0]);
|
||||||
|
String accessToken = parts[1];
|
||||||
|
String serverID = parts[2];
|
||||||
|
LogHelper.debug("[AuthHandler] Getted username: " + username);
|
||||||
|
LogHelper.debug("[AuthHandler] Getted accessToken: " + accessToken);
|
||||||
|
LogHelper.debug("[AuthHandler] Getted serverID: " + serverID);
|
||||||
|
LogHelper.debug("[AuthHandler] Getted UUID: " + uuid);
|
||||||
|
return query(uuid, username, accessToken, serverID);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Entry query(UUID uuid, String username, String accessToken, String serverID) {
|
||||||
|
return new Entry(uuid, username, accessToken, serverID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean updateAuth(UUID uuid, String username, String accessToken) throws IOException {
|
||||||
|
String response = IOHelper.request(new URL(url + "?" + IOHelper.urlEncode(typeLine) + "=" + TypeSetAccessTokenAndUUID + "&" + secretKeyLine + "=" + IOHelper.urlEncode(secretKey) + "&" + IOHelper.urlEncode(uuidLine) + "=" + IOHelper.urlEncode(uuid.toString()) + "&" + IOHelper.urlEncode(accessTokenLine) + "=" + IOHelper.urlEncode(accessToken) + "&" + IOHelper.urlEncode(usernameLine) + "=" + IOHelper.urlEncode(username)));
|
||||||
|
LogHelper.debug("[AuthHandler] Set accessToken: " + accessToken);
|
||||||
|
LogHelper.debug("[AuthHandler] Set UUID: " + uuid);
|
||||||
|
LogHelper.debug("[AuthHandler] For this username: " + username);
|
||||||
|
return response.equals("OK");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean updateServerID(UUID uuid, String serverID) throws IOException {
|
||||||
|
String response = IOHelper.request(new URL(url + "?" + IOHelper.urlEncode(typeLine) + "=" + TypeSetServerID + "&" + secretKeyLine + "=" + IOHelper.urlEncode(secretKey) + "&" + IOHelper.urlEncode(uuidLine) + "=" + IOHelper.urlEncode(uuid.toString()) + "&" + IOHelper.urlEncode(serverIDLine) + "=" + IOHelper.urlEncode(serverID)));
|
||||||
|
LogHelper.debug("[AuthHandler] Set serverID: " + serverID);
|
||||||
|
LogHelper.debug("[AuthHandler] For this UUID: " + uuid);
|
||||||
|
return response.equals("OK");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
}
|
||||||
|
}
|
80
compat/auth/AuthHandler.php
Normal file
80
compat/auth/AuthHandler.php
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//Секретный ключ. Внимание! должен совпадать с ключем в лаунчсервере. Пожалуйста, смените его, иначе это ставит под угрозу проект.
|
||||||
|
$secretkey = '12345678';
|
||||||
|
//Настройки связи с базой данных
|
||||||
|
$link = mysqli_connect(
|
||||||
|
'localhost', // Хост
|
||||||
|
'root', // Пользователь
|
||||||
|
'', // Пароль
|
||||||
|
'test' // База данных
|
||||||
|
);
|
||||||
|
|
||||||
|
// Настройка таблицы
|
||||||
|
$settings = [
|
||||||
|
'table' => "dle_users", // Название таблицы
|
||||||
|
'usernameColumn' => "name", // Столбец с именами пользователей
|
||||||
|
'uuidColumn' => "uuid", // Столбец с uuid
|
||||||
|
'accessTokenColumn' => "accessToken", // Столбец с accessToken
|
||||||
|
'ServerIDColumn' => "serverID" // Столбец с serverID
|
||||||
|
];
|
||||||
|
|
||||||
|
// Не трогать
|
||||||
|
// Можно повредить скрипт
|
||||||
|
$AuthHandler = [
|
||||||
|
'type' => filter_input(INPUT_GET, 'type', FILTER_SANITIZE_STRING),
|
||||||
|
'username' => filter_input(INPUT_GET, 'username', FILTER_SANITIZE_STRING),
|
||||||
|
'uuid' => filter_input(INPUT_GET, 'uuid', FILTER_SANITIZE_STRING),
|
||||||
|
'accessToken' => filter_input(INPUT_GET, 'accessToken', FILTER_SANITIZE_STRING),
|
||||||
|
'ServerID' => filter_input(INPUT_GET, 'ServerID', FILTER_SANITIZE_STRING),
|
||||||
|
'secretKey' => filter_input(INPUT_GET, 'secretKey', FILTER_SANITIZE_STRING)
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!isset($AuthHandler['secretKey'])) {
|
||||||
|
die('Не указан ключ!');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($secretkey != $AuthHandler['secretKey']) {
|
||||||
|
die('Неверный ключ!');
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$link) {
|
||||||
|
die('Ошибка подключения к базе данных');
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($AuthHandler['type'])) {
|
||||||
|
if($AuthHandler['type'] == "FetchByUUID") {
|
||||||
|
if(isset($AuthHandler['uuid'])) {
|
||||||
|
$result = mysqli_query($link, 'SELECT '.$settings['usernameColumn'].','.$settings['accessTokenColumn'].','.$settings['serverID'].' FROM '.$settings['table'].' WHERE '.$settings['uuidColumn'].'="'.$AuthHandler['uuid'].'" LIMIT 1') or die($link->error);
|
||||||
|
$row = $result->fetch_assoc();
|
||||||
|
mysqli_free_result($result);
|
||||||
|
mysqli_close($link);
|
||||||
|
die($row[$settings['usernameColumn']] + ':' + $row[$settings['accessTokenColumn']] + ':' + $row[$settings['serverID']]);
|
||||||
|
}
|
||||||
|
if($AuthHandler['type'] == "FetchByUsername") {
|
||||||
|
if(isset($AuthHandler['uuid'])) {
|
||||||
|
$result = mysqli_query($link, 'SELECT '.$settings['uuidColumn'].','.$settings['accessTokenColumn'].','.$settings['serverID'].' FROM '.$settings['table'].' WHERE '.$settings['usernameColumn'].'="'.$AuthHandler['username'].'" LIMIT 1') or die($link->error);
|
||||||
|
$row = $result->fetch_assoc();
|
||||||
|
mysqli_free_result($result);
|
||||||
|
mysqli_close($link);
|
||||||
|
die($row[$settings['uuidColumn']] + ':' + $row[$settings['accessTokenColumn']] + ':' + $row[$settings['serverID']]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновление строк
|
||||||
|
|
||||||
|
if($AuthHandler['type'] == "SetAccessTokenAndUUID") {
|
||||||
|
$result = mysqli_query($link, 'UPDATE '.$settings['table'].' SET '.$settings['accessTokenColumn'].'="'.$AuthHandler['accessToken'].'" WHERE '.$settings['usernameColumn'].'="'.$AuthHandler['username'].'"') or die($link->error);
|
||||||
|
$result1 = mysqli_query($link, 'UPDATE '.$settings['table'].' SET '.$settings['uuidColumn'].'="'.$AuthHandler['uuid'].'" WHERE '.$settings['usernameColumn'].'="'.$AuthHandler['username'].'"') or die($link->error);
|
||||||
|
mysqli_close($link);
|
||||||
|
die('OK');
|
||||||
|
}
|
||||||
|
if($AuthHandler['type'] == "SetServerID") {
|
||||||
|
$result = mysqli_query($link, 'UPDATE '.$settings['table'].' SET '.$settings['ServerIDColumn'].'="'.$AuthHandler['serverID'].'" WHERE '.$settings['uuidColumn'].'="'.$AuthHandler['uuid'].'"') or die($link->error);
|
||||||
|
mysqli_close($link);
|
||||||
|
die('OK');
|
||||||
|
}
|
||||||
|
die('FAIL!');
|
||||||
|
} else {
|
||||||
|
die('Type not set!');
|
||||||
|
}
|
||||||
|
?>
|
Loading…
Reference in a new issue