Beispiel #1
0
        private static void TryAuthenticate(string authData)
        {
            VRCModLogger.Log("[VRCModNetwork] Getting current instanceId");
            if (RoomManagerBase.currentRoom != null && RoomManagerBase.currentRoom.id != null && RoomManagerBase.currentRoom.currentInstanceIdWithTags != null)
            {
                userInstanceId = RoomManagerBase.currentRoom.id + ":" + RoomManagerBase.currentRoom.currentInstanceIdWithTags;
            }
            VRCModLogger.Log("[VRCModNetwork] Getting current modList");
            modlist = ModDesc.GetAllMods();
            VRCModLogger.Log("[VRCModNetwork] Getting current environment");
            ApiServerEnvironment env = VRCApplicationSetup._instance.ServerEnvironment;
            string stringEnv         = "";

            if (env == ApiServerEnvironment.Dev)
            {
                stringEnv = "dev";
            }
            if (env == ApiServerEnvironment.Beta)
            {
                stringEnv = "beta";
            }
            if (env == ApiServerEnvironment.Release)
            {
                stringEnv = "release";
            }
            VRCModLogger.Log("[VRCModNetwork] Env: " + env);
            VRCModLogger.Log("[VRCModNetwork] Authenticating");
            AuthCommand authCommand = CommandManager.CreateInstance("AUTH", client, false) as AuthCommand;

            authCommand.Auth(userUuid, authData, stringEnv, userInstanceId, roomSecret, modlist);
            VRCModLogger.Log("[VRCModNetwork] Done");
        }
Beispiel #2
0
    public static void RefreshApiUrlSetting()
    {
        // this forces the static api url variable to be reset from the server environment set in editor prefs.
        // needed because the static variable states get cleared when entering / exiting play mode
        ApiServerEnvironment env = serverEnvironment;

        serverEnvironment = env;
    }
Beispiel #3
0
        public static string GetApiUrlForEnvironment(ApiServerEnvironment env)
        {
            switch (env)
            {
            case ApiServerEnvironment.Dev:
                return("https://dev-api.vrchat.cloud/api/1/");

            case ApiServerEnvironment.Release:
                return("https://api.vrchat.cloud/api/1/");

            default:
                Debug.LogError((object)("Unknown server environment! " + env.ToString()));
                return(string.Empty);
            }
        }
Beispiel #4
0
        internal static void Update()
        {
            if (State == ConnectionState.CONNECTED)
            {
                lock (userDatasLock)
                {
                    // Check if user changed
                    string uuid        = APIUser.CurrentUser?.id ?? "";
                    string displayName = APIUser.CurrentUser?.displayName ?? "";
                    string authToken   = ApiCredentials.GetAuthToken() ?? "";

                    if (!uuid.Equals(userUuid))
                    {
                        VRCModLogger.Log("new UUID: " + uuid);
                        DiscordManager.UserChanged(displayName);

                        if (uuid.Equals(""))
                        {
                            userUuid = uuid;
                            VRCModLogger.Log("Resetting data");
                            ResetDatas();
                            VRCModLogger.Log("Logging out");
                            LogoutCommand logoutCommand = CommandManager.CreateInstance("LOGOUT", client) as LogoutCommand;
                            logoutCommand.LogOut();
                            VRCModLogger.Log("Done");
                        }
                        else
                        {
                            if (ApiCredentials.GetAuthTokenProvider() == "steam")
                            {
                                authToken = "st_" + GetSteamTicket();
                            }
                            else
                            {
                                if (!string.IsNullOrEmpty(credentials))
                                {
                                    authToken   = "login " + Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials)) + " " + ApiCredentials.GetAuthToken();
                                    credentials = "";
                                    VRCTools.ModPrefs.SetBool("vrctools", "hasvrcmnwtoken", true);
                                }
                                else
                                {
                                    authToken = ApiCredentials.GetAuthToken();
                                }
                            }

                            userUuid = uuid;
                            VRCModLogger.Log("Getting current instanceId");
                            if (RoomManager.currentRoom != null && RoomManager.currentRoom.id != null && RoomManager.currentRoom.currentInstanceIdWithTags != null)
                            {
                                userInstanceId = RoomManager.currentRoom.id + ":" + RoomManager.currentRoom.currentInstanceIdWithTags;
                            }
                            VRCModLogger.Log("Getting current modList");
                            modlist = ModDesc.GetAllMods();
                            VRCModLogger.Log("Getting current environment");
                            ApiServerEnvironment env = VRCApplicationSetup._instance.ServerEnvironment;
                            string stringEnv         = "";
                            if (env == ApiServerEnvironment.Dev)
                            {
                                stringEnv = "dev";
                            }
                            if (env == ApiServerEnvironment.Beta)
                            {
                                stringEnv = "beta";
                            }
                            if (env == ApiServerEnvironment.Release)
                            {
                                stringEnv = "release";
                            }
                            VRCModLogger.Log("Env: " + env);
                            VRCModLogger.Log("Authenticating");
                            AuthCommand authCommand = CommandManager.CreateInstance("AUTH", client, false) as AuthCommand;
                            authCommand.Auth(authToken, stringEnv, userInstanceId, roomSecret, modlist);
                            VRCModLogger.Log("Done");
                        }
                    }

                    if (IsAuthenticated)
                    {
                        string roomId = "";
                        if (RoomManager.currentRoom?.currentInstanceIdOnly != null)
                        {
                            roomId = RoomManager.currentRoom.id + ":" + RoomManager.currentRoom.currentInstanceIdWithTags;
                        }
                        if (!userInstanceId.Equals(roomId))
                        {
                            VRCModLogger.Log("Updating instance id. Current room: " + roomId);
                            userInstanceId = roomId;
                            roomSecret     = "";
                            if (roomId != "")
                            {
                                roomSecret = DiscordManager.RoomChanged(RoomManager.currentRoom.name, RoomManager.currentRoom.id + ":" + RoomManager.currentRoom.currentInstanceIdOnly, RoomManager.currentRoom.currentInstanceIdWithTags, RoomManager.currentRoom.currentInstanceAccess, RoomManager.currentRoom.capacity);
                            }
                            else
                            {
                                DiscordManager.RoomChanged("", "", "", ApiWorldInstance.AccessType.InviteOnly, 0);
                            }
                            ((InstanceChangedCommand)CommandManager.CreateInstance("INSTANCECHANGED", client)).Send(roomId, roomSecret);
                            VRCModLogger.Log("Done");
                        }
                    }
                }
            }
        }
Beispiel #5
0
    static bool OnAccountGUI()
    {
        const int ACCOUNT_LOGIN_BORDER_SPACING = 20;

        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.Separator();

        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        GUILayout.Space(ACCOUNT_LOGIN_BORDER_SPACING);
        GUILayout.BeginVertical("Account", "window", GUILayout.Height(150), GUILayout.Width(340));

        if (signingIn)
        {
            EditorGUILayout.LabelField("Signing in as " + username + ".");
        }
        else if (APIUser.IsLoggedIn)
        {
            if (Status != "Connected")
            {
                EditorGUILayout.LabelField(Status);
            }

            OnCreatorStatusGUI();

            GUILayout.BeginHorizontal();
            GUILayout.Label("");

            if (GUILayout.Button("Logout"))
            {
                storedUsername = username = null;
                storedPassword = password = null;

                VRC.Tools.ClearCookies();
                APIUser.Logout();
                ClearContent();
            }
            GUILayout.EndHorizontal();
        }
        else
        {
            InitAccount();

            ApiServerEnvironment newEnv = ApiServerEnvironment.Release;
            if (VRCSettings.DisplayAdvancedSettings)
            {
                newEnv = (ApiServerEnvironment)EditorGUILayout.EnumPopup("Use API", serverEnvironment);
            }
            if (serverEnvironment != newEnv)
            {
                serverEnvironment = newEnv;
            }

            username = EditorGUILayout.TextField("Username", username);
            password = EditorGUILayout.PasswordField("Password", password);

            if (GUILayout.Button("Sign In"))
            {
                SignIn(true);
            }
            if (GUILayout.Button("Sign up"))
            {
                Application.OpenURL("https://vrchat.com/register");
            }
        }

        if (showTwoFactorAuthenticationEntry)
        {
            OnTwoFactorAuthenticationGUI();
        }

        GUILayout.EndVertical();
        GUILayout.Space(ACCOUNT_LOGIN_BORDER_SPACING);
        GUILayout.FlexibleSpace();
        GUILayout.EndHorizontal();

        return(!signingIn);
    }
    static bool OnAccountGUI()
    {
        GUI.backgroundColor = Color.white;
        GUILayout.Box("", LoginImage);
        GUI.backgroundColor = new Color(
            UnityEditor.EditorPrefs.GetFloat("SDKColor_R"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_G"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_B"),
            UnityEditor.EditorPrefs.GetFloat("SDKColor_A")
            );

        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("The Black Arms Website"))
        {
            Application.OpenURL("https://trigon.systems/");
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal(boxGuiStyle, GUILayout.Height(26));
        if (GUILayout.Button("Latest SDX Release Page"))
        {
            Application.OpenURL("https://www.github.com/TheBlackArms/TheBlackArmsSDX/releases/latest");
        }
        if (GUILayout.Button("SDX Support Server"))
        {
            Application.OpenURL("https://discord.gg/A9dca3N");
        }
        EditorGUILayout.EndHorizontal();

        const int ACCOUNT_LOGIN_BORDER_SPACING = 20;

        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        EditorGUILayout.Separator();

        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        GUILayout.Space(ACCOUNT_LOGIN_BORDER_SPACING);
        GUILayout.BeginVertical("Account", "window", GUILayout.Height(150), GUILayout.Width(340));

        if (signingIn)
        {
            EditorGUILayout.LabelField("Signing in as " + username + ".");
        }
        else if (APIUser.IsLoggedInWithCredentials)
        {
            if (Status != "Connected")
            {
                EditorGUILayout.LabelField(Status);
            }

            OnCreatorStatusGUI();

            GUILayout.BeginHorizontal();
            GUILayout.Label("");

            if (GUILayout.Button("Logout"))
            {
                storedUsername = username = null;
                storedPassword = password = null;

                VRC.Tools.ClearCookies();
                APIUser.Logout();
                ClearContent();
            }
            GUILayout.EndHorizontal();
        }
        else
        {
            InitAccount();

            ApiServerEnvironment newEnv = ApiServerEnvironment.Release;
            #if VRC_SDK_VRCSDK2
            if (VRCSettings.Get().DisplayAdvancedSettings)
            {
                newEnv = (ApiServerEnvironment)EditorGUILayout.EnumPopup("Use API", serverEnvironment);
            }
            #elif VRC_SDK_VRCSDK3
            if (VRC.SDK3.Editor.VRCSettings.Get().DisplayAdvancedSettings)
            {
                newEnv = (ApiServerEnvironment)EditorGUILayout.EnumPopup("Use API", serverEnvironment);
            }
            #endif
            if (serverEnvironment != newEnv)
            {
                serverEnvironment = newEnv;
            }

            username = EditorGUILayout.TextField("Username", username);
            password = EditorGUILayout.PasswordField("Password", password);

            if (GUILayout.Button("Sign In"))
            {
                SignIn(true);
            }
            if (GUILayout.Button("Sign up"))
            {
                Application.OpenURL("http://vrchat.com/register");
            }
        }

        if (showTwoFactorAuthenticationEntry)
        {
            OnTwoFactorAuthenticationGUI();
        }

        GUILayout.EndVertical();
        GUILayout.Space(ACCOUNT_LOGIN_BORDER_SPACING);
        GUILayout.FlexibleSpace();
        GUILayout.EndHorizontal();

        return(!signingIn);
    }
Beispiel #7
0
        static bool OnAccountGUI()
        {
            EditorGUILayout.BeginVertical();

            EditorGUILayout.LabelField(Status);

            EditorGUILayout.Separator();
            EditorGUILayout.LabelField("Account", EditorStyles.boldLabel);

            if (signingIn)
            {
                EditorGUILayout.LabelField("Signing in.");
                EditorGUILayout.EndVertical();
                return(false);
            }
            else if (APIUser.IsLoggedInWithCredentials)
            {
                OnCreatorStatusGUI();

                if (GUILayout.Button("Logout"))
                {
                    storedUsername = username = null;
                    storedPassword = password = null;

                    ApiCredentials.Clear();
                    VRC.Tools.ClearCookies();
                    APIUser.Logout();
                    VRCContentManagerWindow.ClearContent();
                }
            }
            else
            {
                if (signingIn)
                {
                    EditorGUILayout.LabelField("Signing in.");
                }
                else
                {
                    Init();

                    username = EditorGUILayout.TextField("Username", username);
                    password = EditorGUILayout.PasswordField("Password", password);

                    if (GUILayout.Button("Sign In"))
                    {
                        SignIn(true);
                    }
                    if (GUILayout.Button("Sign up"))
                    {
                        Application.OpenURL("http://vrchat.com/register");
                    }
                }
            }

            {
                if (APIUser.CurrentUser == null || APIUser.CurrentUser.hasSuperPowers)
                {
                    EditorGUILayout.Separator();
                    EditorGUILayout.LabelField("API", EditorStyles.boldLabel);

                    ApiServerEnvironment newEnv = (ApiServerEnvironment)EditorGUILayout.EnumPopup("Use API", serverEnvironment);
                    if (serverEnvironment != newEnv)
                    {
                        serverEnvironment = newEnv;
                    }

                    if (APIUser.CurrentUser == null)
                    {
                        EditorGUILayout.EndVertical();
                        return(false);
                    }
                }
                else
                {
                    EditorGUILayout.Separator();
                    EditorGUILayout.LabelField("API", EditorStyles.boldLabel);

                    ApiServerEnvironment newEnv = (EditorGUILayout.Popup("Use API", serverEnvironment != ApiServerEnvironment.Beta ? 1 : 0, new string[] { "Beta", "Release" }) == 0 ? ApiServerEnvironment.Beta : ApiServerEnvironment.Release);
                    if (serverEnvironment != newEnv)
                    {
                        serverEnvironment = newEnv;
                    }
                }
            }

            // Future proof upload
            {
                EditorGUILayout.Separator();
                EditorGUILayout.LabelField("Publish", EditorStyles.boldLabel);
                bool futureProofPublish = UnityEditor.EditorPrefs.GetBool("futureProofPublish", DefaultFutureProofPublishEnabled);

                futureProofPublish = EditorGUILayout.Toggle("Future Proof Publish", futureProofPublish);

                if (UnityEditor.EditorPrefs.GetBool("futureProofPublish", DefaultFutureProofPublishEnabled) != futureProofPublish)
                {
                    UnityEditor.EditorPrefs.SetBool("futureProofPublish", futureProofPublish);
                }
            }

            if (APIUser.CurrentUser != null)
            {
                // custom vrchat install location
                OnVRCInstallPathGUI();
            }

            // debugging
            if (APIUser.CurrentUser != null && APIUser.CurrentUser.hasSuperPowers)
            {
                EditorGUILayout.Separator();
                EditorGUILayout.LabelField("Developer", EditorStyles.boldLabel);

                // API logging
                {
                    bool isLoggingEnabled = UnityEditor.EditorPrefs.GetBool("apiLoggingEnabled");
                    bool enableLogging    = EditorGUILayout.Toggle("API Logging Enabled", isLoggingEnabled);
                    if (enableLogging != isLoggingEnabled)
                    {
                        if (enableLogging)
                        {
                            VRC.Core.Logger.AddDebugLevel(DebugLevel.API);
                        }
                        else
                        {
                            VRC.Core.Logger.RemoveDebugLevel(DebugLevel.API);
                        }

                        UnityEditor.EditorPrefs.SetBool("apiLoggingEnabled", enableLogging);
                    }
                }

                // All logging
                {
                    bool isLoggingEnabled = UnityEditor.EditorPrefs.GetBool("allLoggingEnabled");
                    bool enableLogging    = EditorGUILayout.Toggle("All Logging Enabled", isLoggingEnabled);
                    if (enableLogging != isLoggingEnabled)
                    {
                        if (enableLogging)
                        {
                            VRC.Core.Logger.AddDebugLevel(DebugLevel.All);
                        }
                        else
                        {
                            VRC.Core.Logger.RemoveDebugLevel(DebugLevel.All);
                        }

                        UnityEditor.EditorPrefs.SetBool("allLoggingEnabled", enableLogging);
                    }
                }
            }
            else
            {
                if (UnityEditor.EditorPrefs.GetBool("apiLoggingEnabled"))
                {
                    UnityEditor.EditorPrefs.SetBool("apiLoggingEnabled", false);
                }
                if (UnityEditor.EditorPrefs.GetBool("allLoggingEnabled"))
                {
                    UnityEditor.EditorPrefs.SetBool("allLoggingEnabled", false);
                }
            }

            EditorGUILayout.EndVertical();

            return(true);
        }
Beispiel #8
0
        internal static void Update()
        {
            if (State == ConnectionState.CONNECTED)
            {
                lock (userDatasLock)
                {
                    // Check if user changed
                    string uuid        = APIUser.CurrentUser == null ? "" : APIUser.CurrentUser.id ?? "";
                    string displayName = APIUser.CurrentUser == null ? "" : APIUser.CurrentUser.displayName ?? "";
                    string authToken   = ApiCredentials.GetAuthToken() ?? "";

                    Credentials c = ApiCredentials.GetWebCredentials() as Credentials;

                    if (!uuid.Equals(userUuid))
                    {
                        VRCModLogger.Log("new UUID: " + uuid);
                        DiscordManager.UserChanged(displayName);

                        if (!uuid.Equals("") && "".Equals(authToken))
                        {
                            string password = typeof(ApiCredentials).GetField("password", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null) as string;
                            authToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(ApiCredentials.GetUsername() + ":" + password));
                        }

                        if (uuid.Equals(""))
                        {
                            userUuid = uuid;
                            VRCModLogger.Log("Resetting data");
                            ResetDatas();
                            VRCModLogger.Log("Logging out");
                            LogoutCommand logoutCommand = CommandManager.CreateInstance("LOGOUT", client) as LogoutCommand;
                            logoutCommand.LogOut();
                            VRCModLogger.Log("Done");
                        }
                        else
                        {
                            userUuid = uuid;
                            VRCModLogger.Log("Getting current instanceId");
                            if (RoomManager.currentRoom != null && RoomManager.currentRoom.id != null && RoomManager.currentRoom.currentInstanceIdOnly != null)
                            {
                                userInstanceId = RoomManager.currentRoom.id + ":" + RoomManager.currentRoom.currentInstanceIdOnly;
                            }
                            VRCModLogger.Log("Getting current modList");
                            modlist = ModDesc.GetAllMods();
                            VRCModLogger.Log("Getting current environment");
                            ApiServerEnvironment env = VRCApplicationSetup._instance.ServerEnvironment;
                            string stringEnv         = "";
                            if (env == ApiServerEnvironment.Dev)
                            {
                                stringEnv = "dev";
                            }
                            if (env == ApiServerEnvironment.Beta)
                            {
                                stringEnv = "beta";
                            }
                            if (env == ApiServerEnvironment.Release)
                            {
                                stringEnv = "release";
                            }
                            VRCModLogger.Log("Env: " + env);
                            VRCModLogger.Log("Authenticating");
                            AuthCommand authCommand = CommandManager.CreateInstance("AUTH", client, false) as AuthCommand;
                            authCommand.Auth(authToken, stringEnv, userInstanceId, modlist);
                            VRCModLogger.Log("Done");
                        }
                    }

                    if (IsAuthenticated)
                    {
                        string roomId = "";
                        if (RoomManager.currentRoom != null && RoomManager.currentRoom.id != null && RoomManager.currentRoom.currentInstanceIdOnly != null)
                        {
                            roomId = RoomManager.currentRoom.id + ":" + RoomManager.currentRoom.currentInstanceIdOnly;
                        }
                        if (!userInstanceId.Equals(roomId))
                        {
                            VRCModLogger.Log("Updating instance id");
                            userInstanceId = roomId;
                            if (roomId != "")
                            {
                                DiscordManager.RoomChanged(RoomManager.currentRoom.name, roomId, RoomManager.currentRoom.currentInstanceAccess, RoomManager.currentRoom.capacity);
                            }
                            else
                            {
                                DiscordManager.RoomChanged("", roomId, ApiWorldInstance.AccessType.InviteOnly, 0);
                            }
                            ((InstanceChangedCommand)CommandManager.CreateInstance("INSTANCECHANGED", client)).Send(userInstanceId);
                            VRCModLogger.Log("Done");
                        }
                    }
                }
            }
        }
Beispiel #9
0
 public static void SetApiUrlFromEnvironment(ApiServerEnvironment env)
 {
     SetApiUrl(GetApiUrlForEnvironment(env));
 }
        static bool OnAccountGUI()
        {
            EditorGUILayout.BeginVertical();

            EditorGUILayout.LabelField(Status);

            EditorGUILayout.LabelField("Account", EditorStyles.boldLabel);

            if (signingIn)
            {
                EditorGUILayout.LabelField("Signing in.");
                EditorGUILayout.EndVertical();
                return(false);
            }
            else if (APIUser.IsLoggedInWithCredentials)
            {
                EditorGUILayout.PrefixLabel("Logged in as " + APIUser.CurrentUser.displayName);
                EditorGUILayout.LabelField("Developer Status: " + APIUser.CurrentUser.developerType);

                if (GUILayout.Button("Logout"))
                {
                    storedUsername = username = null;
                    storedPassword = password = null;

                    APIUser.Logout();
                }
            }
            else
            {
                if (signingIn)
                {
                    EditorGUILayout.LabelField("Signing in.");
                }
                else
                {
                    Init();

                    username = EditorGUILayout.TextField("Username", username);
                    password = EditorGUILayout.PasswordField("Password", password);

                    if (GUILayout.Button("Sign In"))
                    {
                        SignIn(true);
                    }
                    if (GUILayout.Button("Sign up"))
                    {
                        Application.OpenURL("http://vrchat.com/register");
                    }
                }
            }

            {
                if (APIUser.CurrentUser == null || APIUser.CurrentUser.developerType == APIUser.DeveloperType.Internal)
                {
                    EditorGUILayout.LabelField("API", EditorStyles.boldLabel);

                    ApiServerEnvironment newEnv = (ApiServerEnvironment)EditorGUILayout.EnumPopup("Use API", serverEnvironment);
                    if (serverEnvironment != newEnv)
                    {
                        serverEnvironment = newEnv;
                    }

                    if (APIUser.CurrentUser == null)
                    {
                        EditorGUILayout.EndVertical();
                        return(false);
                    }
                }
                else
                {
                    EditorGUILayout.LabelField("API", EditorStyles.boldLabel);

                    ApiServerEnvironment newEnv = (EditorGUILayout.Popup("Use API", serverEnvironment != ApiServerEnvironment.Beta ? 1 : 0, new string[] { "Beta", "Release" }) == 0 ? ApiServerEnvironment.Beta : ApiServerEnvironment.Release);
                    if (serverEnvironment != newEnv)
                    {
                        serverEnvironment = newEnv;
                    }
                }
            }

            // Future proof upload
            {
                EditorGUILayout.LabelField("Publish", EditorStyles.boldLabel);
                bool futureProofPublish = UnityEditor.EditorPrefs.GetBool("futureProofPublish", DefaultFutureProofPublishEnabled);

                futureProofPublish = EditorGUILayout.Toggle("Future Proof Publish", futureProofPublish);

                if (UnityEditor.EditorPrefs.GetBool("futureProofPublish", DefaultFutureProofPublishEnabled) != futureProofPublish)
                {
                    UnityEditor.EditorPrefs.SetBool("futureProofPublish", futureProofPublish);
                }
            }

            if (APIUser.CurrentUser != null)
            {
                // custom vrchat install location
                OnVRCInstallPathGUI();
            }

            EditorGUILayout.EndVertical();

            return(true);
        }