A game about forced loneliness, made by TACStudios
1using UnityEditor;
2using UnityEngine;
3
4using Codice.Utils;
5using PlasticGui;
6using PlasticGui.WorkspaceWindow.Home;
7using Unity.PlasticSCM.Editor.UI;
8
9namespace Unity.PlasticSCM.Editor.Configuration
10{
11 internal class EncryptionConfigurationDialog : PlasticDialog
12 {
13 protected override Rect DefaultRect
14 {
15 get
16 {
17 var baseRect = base.DefaultRect;
18 return new Rect(baseRect.x, baseRect.y, 650, 425);
19 }
20 }
21
22 internal static EncryptionConfigurationDialogData RequestEncryptionPassword(
23 string server,
24 EditorWindow parentWindow)
25 {
26 EncryptionConfigurationDialog dialog = Create(server);
27
28 ResponseType dialogResult = dialog.RunModal(parentWindow);
29
30 EncryptionConfigurationDialogData result =
31 dialog.BuildEncryptionConfigurationData();
32
33 result.Result = dialogResult == ResponseType.Ok;
34 return result;
35 }
36
37 protected override void OnModalGUI()
38 {
39 Title(PlasticLocalization.Name.EncryptionConfiguration.GetString());
40
41 GUILayout.Space(20);
42
43 Paragraph(PlasticLocalization.Name.EncryptionConfigurationExplanation.GetString(mOrganizationInfo.DisplayName));
44
45 DoPasswordArea();
46
47 Paragraph(PlasticLocalization.Name.EncryptionConfigurationRemarks.GetString(mOrganizationInfo.DisplayName));
48
49 GUILayout.Space(10);
50
51 DoNotificationArea();
52
53 GUILayout.Space(10);
54
55 DoButtonsArea();
56 }
57
58 protected override string GetTitle()
59 {
60 return PlasticLocalization.Name.EncryptionConfiguration.GetString();
61 }
62
63 EncryptionConfigurationDialogData BuildEncryptionConfigurationData()
64 {
65 return new EncryptionConfigurationDialogData(
66 CryptoServices.GetEncryptedPassword(mPassword.Trim()));
67 }
68
69 void DoPasswordArea()
70 {
71 Paragraph(PlasticLocalization.Name.EncryptionConfigurationEnterPassword.GetString());
72
73 GUILayout.Space(5);
74
75 mPassword = PasswordEntry(PlasticLocalization.Name.Password.GetString(),
76 mPassword, PASSWORD_TEXT_WIDTH, PASSWORD_TEXT_X);
77
78 GUILayout.Space(5);
79
80 mRetypePassword = PasswordEntry(PlasticLocalization.Name.RetypePassword.GetString(),
81 mRetypePassword, PASSWORD_TEXT_WIDTH, PASSWORD_TEXT_X);
82
83 GUILayout.Space(18f);
84 }
85
86 void DoNotificationArea()
87 {
88 if (string.IsNullOrEmpty(mErrorMessage))
89 return;
90
91 var rect = GUILayoutUtility.GetRect(
92 GUILayoutUtility.GetLastRect().width, 30);
93
94 EditorGUI.HelpBox(rect, mErrorMessage, MessageType.Error);
95 }
96
97 void DoButtonsArea()
98 {
99 using (new EditorGUILayout.HorizontalScope())
100 {
101 GUILayout.FlexibleSpace();
102
103 if (Application.platform == RuntimePlatform.WindowsEditor)
104 {
105 DoOkButton();
106 DoCancelButton();
107 return;
108 }
109
110 DoCancelButton();
111 DoOkButton();
112 }
113 }
114
115 void DoOkButton()
116 {
117 if (!AcceptButton(PlasticLocalization.Name.OkButton.GetString()))
118 return;
119
120 OkButtonWithValidationAction();
121 }
122
123 void DoCancelButton()
124 {
125 if (!NormalButton(PlasticLocalization.Name.CancelButton.GetString()))
126 return;
127
128 CancelButtonAction();
129 }
130
131 void OkButtonWithValidationAction()
132 {
133 if (IsValidPassword(
134 mPassword.Trim(), mRetypePassword.Trim(),
135 out mErrorMessage))
136 {
137 mErrorMessage = string.Empty;
138 OkButtonAction();
139 return;
140 }
141
142 mPassword = string.Empty;
143 mRetypePassword = string.Empty;
144 }
145
146 static bool IsValidPassword(
147 string password, string retypePassword,
148 out string errorMessage)
149 {
150 errorMessage = string.Empty;
151
152 if (string.IsNullOrEmpty(password))
153 {
154 errorMessage = PlasticLocalization.Name.InvalidEmptyPassword.GetString();
155 return false;
156 }
157
158 if (!password.Equals(retypePassword))
159 {
160 errorMessage = PlasticLocalization.Name.PasswordDoesntMatch.GetString();
161 return false;
162 }
163
164 return true;
165 }
166
167 static EncryptionConfigurationDialog Create(string server)
168 {
169 var instance = CreateInstance<EncryptionConfigurationDialog>();
170 instance.mOrganizationInfo = OrganizationsInformation.FromServer(server);
171 instance.mEnterKeyAction = instance.OkButtonWithValidationAction;
172 instance.mEscapeKeyAction = instance.CancelButtonAction;
173 return instance;
174 }
175
176 string mPassword = string.Empty;
177 string mRetypePassword = string.Empty;
178 string mErrorMessage = string.Empty;
179
180 OrganizationInfo mOrganizationInfo;
181
182 const float PASSWORD_TEXT_WIDTH = 250f;
183 const float PASSWORD_TEXT_X = 200f;
184 }
185}
186