diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/AcceptAuthProvider.java b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/AcceptAuthProvider.java index ff35ba8e..ddd0afda 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/AcceptAuthProvider.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/AcceptAuthProvider.java @@ -9,6 +9,11 @@ public AuthProviderResult auth(String login, String password, String ip) { return new AuthProviderResult(login, SecurityHelper.randomStringToken()); // Same as login } + @Override + public AuthProviderResult oauth(int i) throws Exception { + return new AuthProviderResult(String.valueOf(i), SecurityHelper.randomStringToken()); // Same as login + } + @Override public void close() { // Do nothing diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/AuthProvider.java b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/AuthProvider.java index f9c30c9d..1aad839b 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/AuthProvider.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/AuthProvider.java @@ -28,6 +28,8 @@ public static void registerProviders() { public abstract AuthProviderResult auth(String login, String password, String ip) throws Exception; + public abstract AuthProviderResult oauth(int i) throws Exception; + public void preAuth(String login, String password, String customText, String ip) { } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/JsonAuthProvider.java b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/JsonAuthProvider.java index e024282a..1394e5f6 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/JsonAuthProvider.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/JsonAuthProvider.java @@ -57,6 +57,11 @@ else if (result.error != null) return authError("Authentication server response is malformed"); } + @Override + public AuthProviderResult oauth(int i) throws Exception { + return null; + } + @Override public void close() { // pass diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/MySQLAuthProvider.java b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/MySQLAuthProvider.java index 2dac1451..a240d456 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/MySQLAuthProvider.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/MySQLAuthProvider.java @@ -16,6 +16,7 @@ public final class MySQLAuthProvider extends AuthProvider { private MySQLSourceConfig mySQLHolder; private String query; + private String oauthQuery; private String message; private String[] queryParams; private boolean usePermission; @@ -44,6 +45,21 @@ public AuthProviderResult auth(String login, String password, String ip) throws } + @Override + public AuthProviderResult oauth(int i) throws Exception { + try (Connection c = mySQLHolder.getConnection()) { + PreparedStatement s = c.prepareStatement(oauthQuery); + String[] replaceParams = {"%i%", String.valueOf(i)}; + s.setString(1, oauthQuery.replace("?", String.valueOf(i))); + // Execute SQL query + s.setQueryTimeout(MySQLSourceConfig.TIMEOUT); + try (ResultSet set = s.executeQuery()) { + return set.next() ? new AuthProviderResult(set.getString(1), + SecurityHelper.randomStringToken(), + LaunchServer.server.config.permissionsHandler.getPermissions(set.getString(1))) : authError(message); + } + } } + @Override public void close() { mySQLHolder.close(); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/NullAuthProvider.java b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/NullAuthProvider.java index 92fa8ea5..46269ad6 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/NullAuthProvider.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/NullAuthProvider.java @@ -13,6 +13,11 @@ public AuthProviderResult auth(String login, String password, String ip) throws return getProvider().auth(login, password, ip); } + @Override + public AuthProviderResult oauth(int i) throws Exception { + return null; + } + @Override public void close() throws IOException { AuthProvider provider = this.provider; diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/RejectAuthProvider.java b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/RejectAuthProvider.java index 6c880ab1..74c6e658 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/RejectAuthProvider.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/RejectAuthProvider.java @@ -30,6 +30,11 @@ public AuthProviderResult auth(String login, String password, String ip) throws return authError(message); } + @Override + public AuthProviderResult oauth(int i) throws Exception { + return authError(message); + } + @Override public void close() { // Do nothing diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/RequestAuthProvider.java b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/RequestAuthProvider.java index 83694199..d16b9f48 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/RequestAuthProvider.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/auth/provider/RequestAuthProvider.java @@ -36,6 +36,11 @@ public AuthProviderResult auth(String login, String password, String ip) throws authError(currentResponse); } + @Override + public AuthProviderResult oauth(int i) throws Exception { + return null; + } + @Override public void close() { // Do nothing diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/CommandHandler.java b/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/CommandHandler.java index 3309d0a8..f10cf63e 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/CommandHandler.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/CommandHandler.java @@ -86,10 +86,10 @@ public static void registerCommands(ru.gravit.utils.command.CommandHandler handl service.registerCommand("component", new ComponentCommand(server)); service.registerCommand("givePermission", new GivePermissionsCommand(server)); service.registerCommand("getPermissions", new GetPermissionsCommand(server)); + service.registerCommand("cache", new OAuthCacheHandler(server)); + service.registerCommand("token", new OAuthTokenGet(server)); Category serviceCategory = new Category(service, "service", "Managing LaunchServer Components"); handler.registerCategory(serviceCategory); - service.registerCommand("cache", new OAuthCacheHandler(server)); - service.registerCommand("token", new OAuthTokenGet(server)); } } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/OAuthCacheHandler.java b/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/OAuthCacheHandler.java index a5563260..02a71ffa 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/OAuthCacheHandler.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/OAuthCacheHandler.java @@ -23,9 +23,10 @@ public String getUsageDescription() { @Override public void invoke(String... args) { - LogHelper.subInfo("Length of Cache " + OAuthManager.stageAreaLength()); - for(int i=0; i < OAuthManager.stageAreaLength(); i++ ){ - LogHelper.subInfo("IP is: " + LaunchServer.server.cacheHandler.stageArea[i].IP()); + LogHelper.subInfo("Length of Cache " + OAuthManager.getCacheLength()); + for(OAuthManager.Entry e: OAuthManager.getStageArea() ){ + if(e.isInit()) + LogHelper.subInfo("IP is: " + e.getIP()); } } } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/OAuthTokenGet.java b/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/OAuthTokenGet.java index b06c5b13..8c2f7979 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/OAuthTokenGet.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/command/handler/OAuthTokenGet.java @@ -39,23 +39,24 @@ public String getUsageDescription() { @Override public void invoke(String... args) { String code = args[0]; - UserAuthResponse authResponse = mToken(code, vk); - LogHelper.subInfo(authResponse.getAccessToken()); + UserAuthResponse authResponse = null; + try { + authResponse = mToken(code, vk); + LogHelper.subInfo(authResponse.getAccessToken()); + } catch (Exception e) { + e.printStackTrace(); + } } - public static UserAuthResponse mToken(String code, VkApiClient vk) { - UserAuthResponse authResponse= null; - try { + public static UserAuthResponse mToken(String code, VkApiClient vk) throws ClientException, ApiException { + UserAuthResponse authResponse; authResponse = vk.oAuth(). - userAuthorizationCodeFlow(LaunchServer.server.config.OAuthAppID, + userAuthorizationCodeFlow( + LaunchServer.server.config.OAuthAppID, LaunchServer.server.config.OAuthAppSecret, LaunchServer.server.config.getOAuthBackURL(), code).execute(); - } catch (ApiException e) { - e.printStackTrace(); - } catch (ClientException e) { - e.printStackTrace(); - } + return authResponse; } } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/manangers/OAuthManager.java b/LaunchServer/src/main/java/ru/gravit/launchserver/manangers/OAuthManager.java index 56076485..91af0959 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/manangers/OAuthManager.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/manangers/OAuthManager.java @@ -1,9 +1,10 @@ package ru.gravit.launchserver.manangers; -import com.vk.api.sdk.actions.OAuth; import io.netty.channel.ChannelHandlerContext; import ru.gravit.launcher.NeedGarbageCollection; +import ru.gravit.launcher.events.request.AuthRequestEvent; import ru.gravit.launchserver.LaunchServer; +import ru.gravit.launchserver.auth.provider.AuthProviderResult; import ru.gravit.launchserver.socket.Client; import ru.gravit.utils.helper.IOHelper; import ru.gravit.utils.helper.LogHelper; @@ -16,136 +17,138 @@ public class OAuthManager implements NeedGarbageCollection { @Override public void garbageCollection() { - for(int i=0; i < 5; i++ ) - { - LaunchServer.server.cacheHandler.stageArea[i].destroy.run(); - int finalI = i; - LaunchServer.server.cacheHandler.stageArea[i].destroy = new TimerTask() { - @Override - public void run() { - if(!LaunchServer.server.cacheHandler.stageArea[finalI].init) - return; - LogHelper.debug("cache purged, IP: " + LaunchServer.server.cacheHandler.stageArea[finalI].IP()); - LaunchServer.server.cacheHandler.stageArea[finalI].init = false; - LaunchServer.server.cacheHandler.stageArea[finalI].mTimer = null; - LaunchServer.server.cacheHandler.stageArea[finalI].client = null; - LaunchServer.server.cacheHandler.stageArea[finalI].ctx = null; - } - }; - } + for(Entry e: LaunchServer.server.cacheHandler.stageArea) + { + e.destroy(); + } LogHelper.subInfo("OAuthCache purged"); } - public Entry[] stageArea; - - public OAuthManager(){ - if(stageArea == null) { - stageArea = newEntryArray(); - } - } - public static class Entry{ - public void setEntry(Client client, ChannelHandlerContext ctx){ - if(client != null && ctx != null) { - this.init = true; - this.client = client; - this.ctx = ctx; - this.mTimer = new Timer(); - this.mTimer.schedule(destroy, 300000L); - LogHelper.subDebug("New Entry with IP " + IP()); - } + public void setter(ChannelHandlerContext ctx, Client client){ + this.init = true; + this.ctx = ctx; + this.client = client; + new Timer().schedule(new TimerTask() { + @Override + public void run() { + destroy(); + } + }, 300000L); } - public void Entry(){ - this.init = false; - this.mTimer = null; - this.client = null; + public void setter(AuthRequestEvent authRequestEvent){ + this.authRequestEvent = authRequestEvent; + } + + public Entry(){ + this.init = false; this.ctx = null; + this.client = null; + this.authRequestEvent = null; + new Timer().cancel(); } - private boolean init = false; + private boolean init; - private Client client = null; + private ChannelHandlerContext ctx; - private ChannelHandlerContext ctx = null; + private Client client; - private Timer mTimer = null; + private AuthRequestEvent authRequestEvent; - public String IP(){ - return IOHelper.getIP(getCtx().channel().remoteAddress()); + public void destroy(){ + this.init = false; + this.ctx = null; + this.client = null; + this.authRequestEvent = null; + new Timer().cancel(); } - private TimerTask destroy = new TimerTask() { - @Override - public void run() { - if(!init) - return; - LogHelper.debug("cache purged, IP: " + IP()); - init = false; - mTimer = null; - client = null; - ctx = null; - } - }; - public boolean isInit() { return init; } - public Client getClient() { - return client; - } - public ChannelHandlerContext getCtx() { return ctx; } - } - public static int stageAreaLength(){ - int i = 0; - for(int e=0; e < 5; e++ ) - { - i += LaunchServer.server.cacheHandler.stageArea[e].isInit() ? 1 : 0; + public Client getClient() { + return client; } + + public String getIP(){ + if(isInit()) + return IOHelper.getIP(getCtx().channel().remoteAddress()); + else + return null; + } + } + + private Entry[] stageArea; + + public static Entry[] getStageArea(){ + return LaunchServer.server.cacheHandler.stageArea; + } + + public static Integer getCacheLength(){ + int i = 0; + for(Entry e : LaunchServer.server.cacheHandler.stageArea) + i = e.isInit() ? 1 : 0; return i; } - public static void stretchCache(Client client, ChannelHandlerContext ctx){ - getUnused().setEntry(client, ctx); + public OAuthManager(){ + stageArea = new Entry[]{ + new Entry(), new Entry(), new Entry(), new Entry(), new Entry() + }; } - public static Entry getUnused(){ - for(int i=0; i < 5; i++ ) - { - if(!LaunchServer.server.cacheHandler.stageArea[i].isInit()) - return LaunchServer.server.cacheHandler.stageArea[i]; - } + public static void stretchCache(ChannelHandlerContext ctx, Client client){ try { - throw new OAuthException("OAuth Overloaded"); + Entry e = getUnused(); + e.setter(ctx, client); + LogHelper.subDebug("New Entry IP: " + e.getIP()); } catch (OAuthException e) { e.printStackTrace(); } - return null; } - public static Entry getEntry(String IP){ - for(int i = 0; i < 5; i++ ) + public static void stretchCache(String IP, AuthRequestEvent authRequestEvent){ + for(Entry e: LaunchServer.server.cacheHandler.stageArea) + { + if(e.getIP().equals(IP)) + e.setter(authRequestEvent); + } + try { + throw new OAuthException("Not found"); + } catch (OAuthException e) { + e.printStackTrace(); + } + } + public static void stretchCache(ChannelHandlerContext ctx, AuthRequestEvent authRequestEvent){ + for(Entry e: LaunchServer.server.cacheHandler.stageArea) + { + if(e.getIP().equals(IOHelper.getIP(ctx.channel().remoteAddress()))) + e.setter(authRequestEvent); + } + try { + throw new OAuthException("Not found"); + } catch (OAuthException e) { + e.printStackTrace(); + } + } + + public static Entry getUnused() throws OAuthException { + for(Entry e: LaunchServer.server.cacheHandler.stageArea) { - if(LaunchServer.server.cacheHandler.stageArea[i].isInit()) - if(LaunchServer.server.cacheHandler.stageArea[i].IP().equals(IP)) - return LaunchServer.server.cacheHandler.stageArea[i]; + if(e.isInit()) + continue; + return e; } - try { - throw new OAuthException("Not found in cache"); - }catch (OAuthException e) { - e.printStackTrace(); - } - return null; - } - public static Entry[] newEntryArray(){ - return new Entry[]{new Entry(), new Entry(), new Entry(), new Entry(), new Entry()}; + throw new OAuthException("OAuth Overloaded"); } public static final class OAuthException extends IOException { @@ -159,6 +162,4 @@ public String toString() { return getMessage(); } } - - } diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/WebSocketService.java b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/WebSocketService.java index 799f7f6d..87b36f28 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/WebSocketService.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/WebSocketService.java @@ -161,8 +161,7 @@ public void registerClient(Channel channel) { public void registerResponses() { registerResponse("auth", AuthResponse.class); - registerResponse("oauth", OAuthResponse.class); - registerResponse("OAuthURL", OAuthConfirmResponse.class); + registerResponse("OAuthURL", OAuthResponse.class); registerResponse("checkServer", CheckServerResponse.class); registerResponse("joinServer", JoinServerResponse.class); registerResponse("profiles", ProfilesResponse.class); diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/auth/OAuthConfirmResponse.java b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/auth/OAuthConfirmResponse.java deleted file mode 100644 index 5b6da4f9..00000000 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/auth/OAuthConfirmResponse.java +++ /dev/null @@ -1,59 +0,0 @@ -package ru.gravit.launchserver.websocket.json.auth; - -import com.vk.api.sdk.client.TransportClient; -import com.vk.api.sdk.client.VkApiClient; -import com.vk.api.sdk.exceptions.ApiException; -import com.vk.api.sdk.exceptions.ClientException; -import com.vk.api.sdk.httpclient.HttpTransportClient; -import com.vk.api.sdk.objects.UserAuthResponse; -import io.netty.channel.ChannelHandlerContext; - -import ru.gravit.launcher.events.request.OAuthConfirmRequestEvent; - -import ru.gravit.launchserver.LaunchServer; - -import ru.gravit.launchserver.command.handler.OAuthTokenGet; -import ru.gravit.launchserver.manangers.OAuthManager; -import ru.gravit.launchserver.socket.Client; -import ru.gravit.launchserver.websocket.json.SimpleResponse; -import ru.gravit.utils.HookException; - - -public class OAuthConfirmResponse extends SimpleResponse { - - TransportClient transportClient = new HttpTransportClient(); - VkApiClient vk = new VkApiClient(transportClient); - - public String code; - - @Override - public void execute(ChannelHandlerContext ctx, Client clientData) throws Exception { - try { - if(code == null) { - try { - throw new OAuthManager.OAuthException("Empty code"); - }catch (OAuthManager.OAuthException e) { - sendError(e.getMessage()); - } - } - //LogHelper.debug("code get"); - - OAuthTokenGet.mToken(code, vk); - int ID = authResponse.getUserId(); - - OAuthConfirmRequestEvent result = new OAuthConfirmRequestEvent(); - result.str = "Continue in Launcher"; - sendResultAndClose(result); - - } catch (HookException e) { - sendError(e.getMessage()); - } - } - - @Override - public String getType() { - return "OAuthURL"; - } -} - - diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/auth/OAuthResponse.java b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/auth/OAuthResponse.java index c1dd1b21..c0ae8500 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/auth/OAuthResponse.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/websocket/json/auth/OAuthResponse.java @@ -1,42 +1,83 @@ package ru.gravit.launchserver.websocket.json.auth; +import com.google.gson.Gson; +import com.vk.api.sdk.client.TransportClient; +import com.vk.api.sdk.client.VkApiClient; +import com.vk.api.sdk.client.actors.UserActor; +import com.vk.api.sdk.httpclient.HttpTransportClient; +import com.vk.api.sdk.objects.UserAuthResponse; import io.netty.channel.ChannelHandlerContext; -import ru.gravit.launcher.OshiHWID; -import ru.gravit.launcher.events.request.OAuthRequestEvent; + +import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; +import ru.gravit.launcher.events.request.AuthRequestEvent; +import ru.gravit.launcher.events.request.LogEvent; + +import ru.gravit.launcher.profiles.PlayerProfile; +import ru.gravit.launcher.request.ResultInterface; +import ru.gravit.launcher.serialize.HInput; import ru.gravit.launchserver.LaunchServer; +import ru.gravit.launchserver.auth.AuthProviderPair; +import ru.gravit.launchserver.auth.provider.AuthProviderResult; +import ru.gravit.launchserver.command.handler.OAuthTokenGet; import ru.gravit.launchserver.manangers.OAuthManager; import ru.gravit.launchserver.socket.Client; import ru.gravit.launchserver.websocket.json.SimpleResponse; -import ru.gravit.utils.HookException; +import ru.gravit.launchserver.websocket.json.profile.ProfileByUUIDResponse; +import ru.gravit.utils.helper.IOHelper; import ru.gravit.utils.helper.LogHelper; -import java.net.MalformedURLException; -import java.net.URL; +import java.util.UUID; + public class OAuthResponse extends SimpleResponse { - public OshiHWID hwid; + TransportClient transportClient = new HttpTransportClient(); + VkApiClient vk = new VkApiClient(transportClient); + + + public String code; @Override - public void execute(ChannelHandlerContext ctx, Client clientData) throws Exception { + public void execute(ChannelHandlerContext ctx, Client clientData) { try { - OAuthManager.stretchCache(clientData, ctx); - OAuthRequestEvent result = new OAuthRequestEvent(); - result.URL = getAcsessURL(); - sendResult(result); - } catch (HookException e) { + if(code == null) { + try { + throw new OAuthManager.OAuthException("Empty code"); + }catch (OAuthManager.OAuthException e) { + sendError(e.getMessage()); + } + } + + UserAuthResponse authResponse = OAuthTokenGet.mToken(code, vk); + + UserActor actor = new UserActor(authResponse.getUserId(), authResponse.getAccessToken()); + sendResultAndClose(new LogEvent("Continue in Launcher")); + AuthProviderResult ar; + AuthProviderPair ap; + if(LaunchServer.server.config.getAuthProviderPair("MySQLAuthProvider") != null) { + ar = LaunchServer.server.config.getAuthProviderPair("MySQLAuthProvider").provider.oauth(actor.getId()); + ap = LaunchServer.server.config.getAuthProviderPair("MySQLAuthProvider"); + }else { + ar = LaunchServer.server.config.getAuthProviderPair().provider.oauth(actor.getId()); + ap = LaunchServer.server.config.getAuthProviderPair(); + } + LogHelper.subDebug("found account " + ar.username); + + UUID uuid = ap.handler.auth(ar); + PlayerProfile playerProfile = ProfileByUUIDResponse.getProfile(LaunchServer.server, uuid, ar.username, "client", clientData.auth.textureProvider); + AuthRequestEvent a = new AuthRequestEvent(playerProfile, ar.accessToken, ar.permissions); + OAuthManager.stretchCache(ctx, a); + + } catch (Exception e) { sendError(e.getMessage()); } } - public URL getAcsessURL() throws MalformedURLException { - String url = "http://oauth.vk.com/authorize?client_id=" + LaunchServer.server.config.OAuthAppID + "&display=page&scope=offline&response_type=code&v=5.69&redirect_uri=" + LaunchServer.server.config.getOAuthBackURL(); - return new URL(url); - } @Override public String getType() { - return "oauth"; + return "OAuthURL"; } - } + + diff --git a/Launcher/runtime/config.js b/Launcher/runtime/config.js index 992277a5..c7153b25 100644 --- a/Launcher/runtime/config.js +++ b/Launcher/runtime/config.js @@ -11,6 +11,9 @@ var config = { // Menu config discord: new java.net.URL("https://discord.gg/aJK6nMN"), + OAuthAppID: 0, + OAuthBackURL: "https://%address%/OAuth.html", + // Settings defaults settingsMagic: 0xC0DE5, // Magic, don't touch autoEnterDefault: false, // Should autoEnter be enabled by default? diff --git a/Launcher/runtime/dialog/dialog.js b/Launcher/runtime/dialog/dialog.js index 2d9a3f7e..c42eec76 100644 --- a/Launcher/runtime/dialog/dialog.js +++ b/Launcher/runtime/dialog/dialog.js @@ -307,17 +307,25 @@ function doAuth(login, rsaPassword, auth_type) { }) }); } + function doOAuth() { processing.resetOverlay(); overlay.show(processing.overlay, function (event) { FunctionalBridge.getHWID.join(); - makeOAuthRequest(function (result) { - openURL(new java.net.URL(result.URL)); - overlay.hide(600000, function () { + openURL(getOAuthURL()); + overlay.hide(300000, function () { setCurrentScene(loginScene); }); - return result; - }) + makeOAuthRequest(function (result) { + FunctionalBridge.setAuthParams(result); + loginData = { pp: result.playerProfile , accessToken: result.accessToken, permissions: result.permissions, + auth_type: "OAuth"}; + + overlay.hide(0, function () { + setCurrentScene(menuScene); + }); + return result; + }) }); } diff --git a/Launcher/runtime/dialog/overlay/processing/processing.js b/Launcher/runtime/dialog/overlay/processing/processing.js index f13d3a8b..66de1c07 100644 --- a/Launcher/runtime/dialog/overlay/processing/processing.js +++ b/Launcher/runtime/dialog/overlay/processing/processing.js @@ -121,18 +121,18 @@ function makeAuthRequest(login, rsaPassword, auth_type, callback) { task.updateMessage("Авторизация на сервере"); startTask(task); } + +function getOAuthURL() { + return new java.net.URL("http://oauth.vk.com/authorize?client_id="+ config.OAuthAppID + + "&display=page&scope=offline&response_type=code&v=5.69&redirect_uri=" + config.OAuthBackURL) +} + function makeOAuthRequest(callback) { var task = newRequestTask(new OAuthRequest(FunctionalBridge.getHWID())); processing.setTaskProperties(task, callback, null, true); task.updateMessage("Ожидание авторизация на сервере"); startTask(task); } -function makeOAuthRequest(callback) { - var task = newRequestTask(new OAuthRequest(FunctionalBridge.getHWID())); - processing.setTaskProperties(task, callback, null, true); - startTask(task); -} - function launchClient(assetHDir, clientHDir, profile, params, callback) { var task = newTask(function() ClientLauncher.launch(assetHDir, clientHDir,