Ejemplo n.º 1
0
        protected void DrawRecord(int recordIndex, out bool recordRemoved)
        {
            recordRemoved = false;
            PrefsRecord record = filteredRecords[recordIndex];

            ActEditorGUI.Separator();

            using (ActEditorGUI.Horizontal(ActEditorGUI.PanelWithBackground))
            {
                if (GUILayout.Button(new GUIContent("X", "Delete this pref."), ActEditorGUI.CompactButton, GUILayout.Width(20)))
                {
                    record.Delete();
                    allRecords.Remove(record);
                    filteredRecords.Remove(record);
                    recordRemoved = true;
                    return;
                }

                GUI.enabled = record.dirtyValue || record.dirtyKey && record.prefType != PrefsRecord.PrefsType.Unknown;
                if (GUILayout.Button(new GUIContent("S", "Save changes in this pref."), ActEditorGUI.CompactButton, GUILayout.Width(20)))
                {
                    record.Save();
                    GUIUtility.keyboardControl = 0;
                }
                GUI.enabled = true;

                GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown;

                if (record.Obscured)
                {
                    GUI.enabled &= record.obscuredType == ObscuredPrefs.DataType.String ||
                                   record.obscuredType == ObscuredPrefs.DataType.Int ||
                                   record.obscuredType == ObscuredPrefs.DataType.Float;
                    if (GUILayout.Button(new GUIContent("D", "Decrypt this pref using ObscuredPrefs"), ActEditorGUI.CompactButton, GUILayout.Width(25)))
                    {
                        record.Decrypt();
                        GUIUtility.keyboardControl = 0;
                    }
                }
                else
                {
                    if (GUILayout.Button(new GUIContent("E", "Encrypt this pref using ObscuredPrefs"), ActEditorGUI.CompactButton, GUILayout.Width(25)))
                    {
                        record.Encrypt();
                        GUIUtility.keyboardControl = 0;
                    }
                }
                GUI.enabled = true;

                if (GUILayout.Button(new GUIContent("...", "Other operations"), ActEditorGUI.CompactButton, GUILayout.Width(25)))
                {
                    ShowOtherMenu(record);
                }

                Color guiColor = GUI.color;
                if (record.Obscured)
                {
                    GUI.color = obscuredColor;
                }

                GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown;

                if (record.Obscured && !(record.obscuredType == ObscuredPrefs.DataType.String ||
                                         record.obscuredType == ObscuredPrefs.DataType.Int ||
                                         record.obscuredType == ObscuredPrefs.DataType.Float))
                {
                    GUI.enabled = false;
                    EditorGUILayout.TextField(record.Key, GUILayout.MaxWidth(200), GUILayout.MinWidth(50));
                    GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown;
                }
                else
                {
                    record.Key = EditorGUILayout.TextField(record.Key, GUILayout.MaxWidth(200), GUILayout.MinWidth(50));
                }

                if ((record.prefType == PrefsRecord.PrefsType.String && !record.Obscured) || (record.Obscured && record.obscuredType == ObscuredPrefs.DataType.String))
                {
                    // to avoid TextMeshGenerator error because of too much characters
                    if (record.StringValue.Length > 16382)
                    {
                        GUI.enabled = false;
                        EditorGUILayout.TextField(STRING_TOO_LONG, GUILayout.MinWidth(150));
                        GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown;
                    }
                    else
                    {
                        record.StringValue = EditorGUILayout.TextField(record.StringValue, GUILayout.MinWidth(150));
                    }
                }
                else if (record.prefType == PrefsRecord.PrefsType.Int || (record.Obscured && record.obscuredType == ObscuredPrefs.DataType.Int))
                {
                    record.IntValue = EditorGUILayout.IntField(record.IntValue, GUILayout.MinWidth(150));
                }
                else if (record.prefType == PrefsRecord.PrefsType.Float || (record.Obscured && record.obscuredType == ObscuredPrefs.DataType.Float))
                {
                    record.FloatValue = EditorGUILayout.FloatField(record.FloatValue, GUILayout.MinWidth(150));
                }
                else if (record.Obscured)
                {
                    GUI.enabled = false;
                    EditorGUILayout.TextField(UNSUPPORTED_VALUE_DESCRIPTION, GUILayout.MinWidth(150));
                    GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown;
                }
                else
                {
                    GUI.enabled = false;
                    EditorGUILayout.TextField(UNKNOWN_VALUE_DESCRIPTION, GUILayout.MinWidth(150));
                    GUI.enabled = record.prefType != PrefsRecord.PrefsType.Unknown;
                }
                GUI.color   = guiColor;
                GUI.enabled = true;

                EditorGUILayout.LabelField(record.DisplayType, GUILayout.Width(70));
            }
        }
Ejemplo n.º 2
0
        // ----------------------------------------------------------------------------
        // GUI
        // ----------------------------------------------------------------------------

        private void OnGUI()
        {
            if (allRecords == null)
            {
                allRecords = new List <PrefsRecord>();
            }
            if (filteredRecords == null)
            {
                filteredRecords = new List <PrefsRecord>();
            }

            using (ActEditorGUI.Horizontal(ActEditorGUI.Toolbar))
            {
                if (GUILayout.Button(new GUIContent("+", "Create new prefs record."), EditorStyles.toolbarButton, GUILayout.Width(20)))
                {
                    addingNewRecord = true;
                }

                if (GUILayout.Button(new GUIContent("Refresh", "Re-read and re-parse all prefs."), EditorStyles.toolbarButton, GUILayout.Width(50)))
                {
                    RefreshData();
                    GUIUtility.keyboardControl = 0;
                    scrollPosition             = Vector2.zero;
                    recordsCurrentPage         = 0;
                }

                EditorGUI.BeginChangeCheck();
                sortingType = (SortingType)EditorGUILayout.EnumPopup(sortingType, EditorStyles.toolbarDropDown, GUILayout.Width(110));
                if (EditorGUI.EndChangeCheck())
                {
                    ApplySorting();
                }

                GUILayout.Space(10);

                EditorGUI.BeginChangeCheck();
                searchPattern = ActEditorGUI.SearchToolbar(searchPattern);
                if (EditorGUI.EndChangeCheck())
                {
                    ApplyFiltering();
                }

                EditorGUI.BeginChangeCheck();
                EditorGUIUtility.labelWidth = 80;
                GUILayout.Label(new GUIContent("Crypto key", "ObscuredPrefs crypto key to use."), ActEditorGUI.ToolbarLabel, GUILayout.ExpandWidth(false));

                string newKey = EditorGUILayout.TextField(ObscuredPrefs.CryptoKey, EditorStyles.toolbarTextField, GUILayout.ExpandWidth(true));
                EditorGUIUtility.labelWidth = 0;
                if (EditorGUI.EndChangeCheck())
                {
                    ObscuredPrefs.CryptoKey = newKey;
                }
            }

            if (addingNewRecord)
            {
                using (ActEditorGUI.Horizontal(ActEditorGUI.PanelWithBackground))
                {
                    string[] types = { "String", "Int", "Float" };
                    newRecordType = EditorGUILayout.Popup(newRecordType, types, GUILayout.Width(50));

                    newRecordEncrypted = GUILayout.Toggle(newRecordEncrypted, new GUIContent("E", "Create new pref as encrypted ObscuredPref?"), ActEditorGUI.CompactButton, GUILayout.Width(25));

                    Color guiColor = GUI.color;
                    if (newRecordEncrypted)
                    {
                        GUI.color = obscuredColor;
                    }

                    GUILayout.Label("Key:", GUILayout.ExpandWidth(false));
                    newRecordKey = EditorGUILayout.TextField(newRecordKey);
                    GUILayout.Label("Value:", GUILayout.ExpandWidth(false));

                    if (newRecordType == 0)
                    {
                        newRecordStringValue = EditorGUILayout.TextField(newRecordStringValue);
                    }
                    else if (newRecordType == 1)
                    {
                        newRecordIntValue = EditorGUILayout.IntField(newRecordIntValue);
                    }
                    else
                    {
                        newRecordFloatValue = EditorGUILayout.FloatField(newRecordFloatValue);
                    }

                    GUI.color = guiColor;

                    if (GUILayout.Button("OK", ActEditorGUI.CompactButton, GUILayout.Width(30)))
                    {
                        if (string.IsNullOrEmpty(newRecordKey) ||
                            (newRecordType == 0 && string.IsNullOrEmpty(newRecordStringValue)) ||
                            (newRecordType == 1 && newRecordIntValue == 0) ||
                            (newRecordType == 2 && Math.Abs(newRecordFloatValue) < 0.00000001f))
                        {
                            ShowNotification(new GUIContent("Please fill in the pref first!"));
                        }
                        else
                        {
                            PrefsRecord newRecord;

                            if (newRecordType == 0)
                            {
                                newRecord = new PrefsRecord(newRecordKey, newRecordStringValue, newRecordEncrypted);
                            }
                            else if (newRecordType == 1)
                            {
                                newRecord = new PrefsRecord(newRecordKey, newRecordIntValue, newRecordEncrypted);
                            }
                            else
                            {
                                newRecord = new PrefsRecord(newRecordKey, newRecordFloatValue, newRecordEncrypted);
                            }

                            if (newRecord.Save())
                            {
                                allRecords.Add(newRecord);
                                ApplySorting();
                                CloseNewRecordPanel();
                            }
                        }
                    }

                    if (GUILayout.Button("Cancel", ActEditorGUI.CompactButton, GUILayout.Width(60)))
                    {
                        CloseNewRecordPanel();
                    }
                }
            }

            using (ActEditorGUI.Vertical(ActEditorGUI.PanelWithBackground))
            {
                GUILayout.Space(5);

                DrawRecordsPages();

                GUILayout.Space(5);

                GUI.enabled = filteredRecords.Count > 0;
                using (ActEditorGUI.Horizontal())
                {
                    if (GUILayout.Button("Encrypt ALL", ActEditorGUI.CompactButton))
                    {
                        if (EditorUtility.DisplayDialog("Obscure ALL prefs in list?", "This will apply obscuration to ALL unobscured prefs in the list.\nAre you sure you wish to do this?", "Yep", "Oh, no!"))
                        {
                            foreach (PrefsRecord record in filteredRecords)
                            {
                                record.Encrypt();
                            }
                            GUIUtility.keyboardControl = 0;
                            ApplySorting();
                        }
                    }

                    if (GUILayout.Button("Decrypt ALL", ActEditorGUI.CompactButton))
                    {
                        if (EditorUtility.DisplayDialog("UnObscure ALL prefs in list?", "This will remove obscuration from ALL obscured prefs in the list if possible.\nAre you sure you wish to do this?", "Yep", "Oh, no!"))
                        {
                            foreach (PrefsRecord record in filteredRecords)
                            {
                                record.Decrypt();
                            }
                            GUIUtility.keyboardControl = 0;
                            ApplySorting();
                        }
                    }

                    if (GUILayout.Button("Save ALL", ActEditorGUI.CompactButton))
                    {
                        if (EditorUtility.DisplayDialog("Save changes to ALL prefs in list?", "Are you sure you wish to save changes to ALL prefs in the list? This can't be undone!", "Yep", "Oh, no!"))
                        {
                            foreach (PrefsRecord record in filteredRecords)
                            {
                                record.Save();
                            }
                            GUIUtility.keyboardControl = 0;
                            ApplySorting();
                        }
                    }

                    if (GUILayout.Button("Delete ALL", ActEditorGUI.CompactButton))
                    {
                        if (EditorUtility.DisplayDialog("Delete ALL prefs in list?", "Are you sure you wish to delete the ALL prefs in the list? This can't be undone!", "Yep", "Oh, no!"))
                        {
                            foreach (PrefsRecord record in filteredRecords)
                            {
                                record.Delete();
                            }

                            RefreshData();
                            GUIUtility.keyboardControl = 0;
                        }
                    }
                }
                GUI.enabled = true;
            }
        }
Ejemplo n.º 3
0
        private void DrawRecordsPages()
        {
            recordsTotalPages = Math.Max(1, (int)Math.Ceiling((double)filteredRecords.Count / RECORDS_PER_PAGE));

            if (recordsCurrentPage < 0)
            {
                recordsCurrentPage = 0;
            }
            if (recordsCurrentPage + 1 > recordsTotalPages)
            {
                recordsCurrentPage = recordsTotalPages - 1;
            }

            int fromRecord = recordsCurrentPage * RECORDS_PER_PAGE;
            int toRecord   = fromRecord + Math.Min(RECORDS_PER_PAGE, filteredRecords.Count - fromRecord);

            if (recordsTotalPages > 1)
            {
                GUILayout.Label("Prefs " + fromRecord + " - " + toRecord + " from " + filteredRecords.Count);
            }

            scrollPosition = GUILayout.BeginScrollView(scrollPosition);
            for (int i = fromRecord; i < toRecord; i++)
            {
                bool recordRemoved;
                DrawRecord(i, out recordRemoved);
                if (recordRemoved)
                {
                    break;
                }
            }
            GUILayout.EndScrollView();

            if (recordsTotalPages <= 1)
            {
                return;
            }

            GUILayout.Space(5);
            using (ActEditorGUI.Horizontal())
            {
                GUILayout.FlexibleSpace();

                GUI.enabled = recordsCurrentPage > 0;
                if (GUILayout.Button("<<", GUILayout.Width(50)))
                {
                    RemoveNotification();
                    recordsCurrentPage = 0;
                    scrollPosition     = Vector2.zero;
                }
                if (GUILayout.Button("<", GUILayout.Width(50)))
                {
                    RemoveNotification();
                    recordsCurrentPage--;
                    scrollPosition = Vector2.zero;
                }
                GUI.enabled = true;
                GUILayout.Label(recordsCurrentPage + 1 + " of " + recordsTotalPages, ActEditorGUI.CenteredLabel, GUILayout.Width(100));
                GUI.enabled = recordsCurrentPage < recordsTotalPages - 1;
                if (GUILayout.Button(">", GUILayout.Width(50)))
                {
                    RemoveNotification();
                    recordsCurrentPage++;
                    scrollPosition = Vector2.zero;
                }
                if (GUILayout.Button(">>", GUILayout.Width(50)))
                {
                    RemoveNotification();
                    recordsCurrentPage = recordsTotalPages - 1;
                    scrollPosition     = Vector2.zero;
                }
                GUI.enabled = true;

                GUILayout.FlexibleSpace();
            }
        }
        private void OnGUI()
        {
            if (whitelist == null)
            {
                whitelist = new List <AllowedAssembly>();
                LoadAndParseWhitelist();
            }

            var tmpStyle = new GUIStyle(EditorStyles.largeLabel)
            {
                alignment = TextAnchor.MiddleCenter,
                fontStyle = FontStyle.Bold
            };

            GUILayout.Label("User-defined Whitelist of Assemblies trusted by Injection Detector", tmpStyle);

            scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
            var whitelistUpdated = false;

            var count = whitelist.Count;

            if (count > 0)
            {
                for (var i = 0; i < count; i++)
                {
                    var assembly = whitelist[i];
                    using (ActEditorGUI.Horizontal())
                    {
                        GUILayout.Label(assembly.ToString());
                        if (GUILayout.Button(new GUIContent("-", "Remove Assembly from Whitelist"), GUILayout.Width(30)))
                        {
                            whitelist.Remove(assembly);
                            whitelistUpdated = true;
                        }
                    }
                }
            }
            else
            {
                tmpStyle = new GUIStyle(EditorStyles.largeLabel)
                {
                    alignment = TextAnchor.MiddleCenter
                };
                GUILayout.Label("- no Assemblies added so far (use buttons below to add) -", tmpStyle);
            }

            if (manualAssemblyWhitelisting)
            {
                manualAssemblyWhitelistingName = EditorGUILayout.TextField(manualAssemblyWhitelistingName);

                using (ActEditorGUI.Horizontal())
                {
                    if (GUILayout.Button("Save"))
                    {
                        try
                        {
                            var assName = new AssemblyName(manualAssemblyWhitelistingName);
                            var res     = TryWhitelistAssemblyName(assName, true);
                            if (res != WhitelistingResult.Exists)
                            {
                                whitelistUpdated = true;
                            }
                            manualAssemblyWhitelisting     = false;
                            manualAssemblyWhitelistingName = InitialCustomName;
                        }
                        catch (FileLoadException error)
                        {
                            ShowNotification(new GUIContent(error.Message));
                        }

                        GUI.FocusControl("");
                    }

                    if (GUILayout.Button("Cancel"))
                    {
                        manualAssemblyWhitelisting     = false;
                        manualAssemblyWhitelistingName = InitialCustomName;
                        GUI.FocusControl("");
                    }
                }
            }

            EditorGUILayout.EndScrollView();

            using (ActEditorGUI.Horizontal())
            {
                GUILayout.Space(20);
                if (GUILayout.Button("Add Assembly"))
                {
                    var assemblyPath = EditorUtility.OpenFilePanel("Choose an Assembly to add", "", "dll");
                    if (!string.IsNullOrEmpty(assemblyPath))
                    {
                        whitelistUpdated |= TryWhitelistAssemblies(new[] { assemblyPath }, true);
                    }
                }

                if (GUILayout.Button("Add Assemblies from folder"))
                {
                    var selectedFolder = EditorUtility.OpenFolderPanel("Choose a folder with Assemblies", "", "");
                    if (!string.IsNullOrEmpty(selectedFolder))
                    {
                        var libraries = ActEditorGlobalStuff.FindLibrariesAt(selectedFolder);
                        whitelistUpdated |= TryWhitelistAssemblies(libraries);
                    }
                }

                if (!manualAssemblyWhitelisting)
                {
                    if (GUILayout.Button("Add Assembly manually"))
                    {
                        manualAssemblyWhitelisting = true;
                    }
                }

                if (count > 0)
                {
                    if (GUILayout.Button("Clear"))
                    {
                        if (EditorUtility.DisplayDialog("Please confirm",
                                                        "Are you sure you wish to completely clear your Injection Detector whitelist?", "Yes", "No"))
                        {
                            whitelist.Clear();
                            whitelistUpdated = true;
                        }
                    }
                }
                GUILayout.Space(20);
            }

            GUILayout.Space(20);

            if (whitelistUpdated)
            {
                WriteWhitelist();
            }
        }