189 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			189 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using UnityEditor; | ||
|  | using UnityEngine; | ||
|  | 
 | ||
|  | using Codice.Utils; | ||
|  | using PlasticGui; | ||
|  | using PlasticGui.WorkspaceWindow.Home; | ||
|  | using Unity.PlasticSCM.Editor.UI; | ||
|  | 
 | ||
|  | namespace Unity.PlasticSCM.Editor.Configuration | ||
|  | { | ||
|  |     internal class EncryptionConfigurationDialog : PlasticDialog | ||
|  |     { | ||
|  |         protected override Rect DefaultRect | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 var baseRect = base.DefaultRect; | ||
|  |                 return new Rect(baseRect.x, baseRect.y, 650, 425); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         internal static EncryptionConfigurationDialogData RequestEncryptionPassword( | ||
|  |             string server, | ||
|  |             EditorWindow parentWindow) | ||
|  |         { | ||
|  |             EncryptionConfigurationDialog dialog = Create(server); | ||
|  | 
 | ||
|  |             ResponseType dialogResult = dialog.RunModal(parentWindow); | ||
|  | 
 | ||
|  |             EncryptionConfigurationDialogData result = | ||
|  |                 dialog.BuildEncryptionConfigurationData(); | ||
|  | 
 | ||
|  |             result.Result = dialogResult == ResponseType.Ok; | ||
|  |             return result; | ||
|  |         } | ||
|  | 
 | ||
|  |         protected override void OnModalGUI() | ||
|  |         { | ||
|  |             Title(PlasticLocalization.Name.EncryptionConfiguration.GetString()); | ||
|  | 
 | ||
|  |             GUILayout.Space(20); | ||
|  | 
 | ||
|  |             Paragraph(PlasticLocalization.Name.EncryptionConfigurationExplanation.GetString(mOrganizationInfo.DisplayName)); | ||
|  | 
 | ||
|  |             DoPasswordArea(); | ||
|  | 
 | ||
|  |             Paragraph(PlasticLocalization.Name.EncryptionConfigurationRemarks.GetString(mOrganizationInfo.DisplayName)); | ||
|  | 
 | ||
|  |             GUILayout.Space(10); | ||
|  | 
 | ||
|  |             DoNotificationArea(); | ||
|  | 
 | ||
|  |             GUILayout.Space(10); | ||
|  | 
 | ||
|  |             DoButtonsArea(); | ||
|  |         } | ||
|  | 
 | ||
|  |         protected override string GetTitle() | ||
|  |         { | ||
|  |             return PlasticLocalization.Name.EncryptionConfiguration.GetString(); | ||
|  |         } | ||
|  | 
 | ||
|  |         EncryptionConfigurationDialogData BuildEncryptionConfigurationData() | ||
|  |         { | ||
|  |             return new EncryptionConfigurationDialogData( | ||
|  |                 CryptoServices.GetEncryptedPassword(mPassword.Trim())); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoPasswordArea() | ||
|  |         { | ||
|  |             Paragraph(PlasticLocalization.Name.EncryptionConfigurationEnterPassword.GetString()); | ||
|  | 
 | ||
|  |             GUILayout.Space(5); | ||
|  | 
 | ||
|  |             mPassword = EntryBuilder.CreatePasswordEntry( | ||
|  |                 PlasticLocalization.Name.Password.GetString(), | ||
|  |                 mPassword, PASSWORD_TEXT_WIDTH, PASSWORD_TEXT_X); | ||
|  | 
 | ||
|  |             GUILayout.Space(5); | ||
|  | 
 | ||
|  |             mRetypePassword = EntryBuilder.CreatePasswordEntry( | ||
|  |                 PlasticLocalization.Name.RetypePassword.GetString(), | ||
|  |                 mRetypePassword, PASSWORD_TEXT_WIDTH, PASSWORD_TEXT_X); | ||
|  | 
 | ||
|  |             GUILayout.Space(18f); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoNotificationArea() | ||
|  |         { | ||
|  |             if (string.IsNullOrEmpty(mErrorMessage)) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             var rect = GUILayoutUtility.GetRect( | ||
|  |                 GUILayoutUtility.GetLastRect().width, 30); | ||
|  | 
 | ||
|  |             EditorGUI.HelpBox(rect, mErrorMessage, MessageType.Error); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoButtonsArea() | ||
|  |         { | ||
|  |             using (new EditorGUILayout.HorizontalScope()) | ||
|  |             { | ||
|  |                 GUILayout.FlexibleSpace(); | ||
|  | 
 | ||
|  |                 if (Application.platform == RuntimePlatform.WindowsEditor) | ||
|  |                 { | ||
|  |                     DoOkButton(); | ||
|  |                     DoCancelButton(); | ||
|  |                     return; | ||
|  |                 } | ||
|  | 
 | ||
|  |                 DoCancelButton(); | ||
|  |                 DoOkButton(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoOkButton() | ||
|  |         { | ||
|  |             if (!AcceptButton(PlasticLocalization.Name.OkButton.GetString())) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             OkButtonWithValidationAction(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void DoCancelButton() | ||
|  |         { | ||
|  |             if (!NormalButton(PlasticLocalization.Name.CancelButton.GetString())) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             CancelButtonAction(); | ||
|  |         } | ||
|  | 
 | ||
|  |         void OkButtonWithValidationAction() | ||
|  |         { | ||
|  |             if (IsValidPassword( | ||
|  |                     mPassword.Trim(), mRetypePassword.Trim(), | ||
|  |                     out mErrorMessage)) | ||
|  |             { | ||
|  |                 mErrorMessage = string.Empty; | ||
|  |                 OkButtonAction(); | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             mPassword = string.Empty; | ||
|  |             mRetypePassword = string.Empty; | ||
|  |         } | ||
|  | 
 | ||
|  |         static bool IsValidPassword( | ||
|  |             string password, string retypePassword, | ||
|  |             out string errorMessage) | ||
|  |         { | ||
|  |             errorMessage = string.Empty; | ||
|  | 
 | ||
|  |             if (string.IsNullOrEmpty(password)) | ||
|  |             { | ||
|  |                 errorMessage = PlasticLocalization.Name.InvalidEmptyPassword.GetString(); | ||
|  |                 return false; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (!password.Equals(retypePassword)) | ||
|  |             { | ||
|  |                 errorMessage = PlasticLocalization.Name.PasswordDoesntMatch.GetString(); | ||
|  |                 return false; | ||
|  |             } | ||
|  | 
 | ||
|  |             return true; | ||
|  |         } | ||
|  | 
 | ||
|  |         static EncryptionConfigurationDialog Create(string server) | ||
|  |         { | ||
|  |             var instance = CreateInstance<EncryptionConfigurationDialog>(); | ||
|  |             instance.mOrganizationInfo = OrganizationsInformation.FromServer(server); | ||
|  |             instance.mEnterKeyAction = instance.OkButtonWithValidationAction; | ||
|  |             instance.mEscapeKeyAction = instance.CancelButtonAction; | ||
|  |             return instance; | ||
|  |         } | ||
|  | 
 | ||
|  |         string mPassword = string.Empty; | ||
|  |         string mRetypePassword = string.Empty; | ||
|  |         string mErrorMessage = string.Empty; | ||
|  | 
 | ||
|  |         OrganizationInfo mOrganizationInfo; | ||
|  | 
 | ||
|  |         const float PASSWORD_TEXT_WIDTH = 250f; | ||
|  |         const float PASSWORD_TEXT_X = 200f; | ||
|  |     } | ||
|  | } | ||
|  | 
 |