You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
5.6 KiB
196 lines
5.6 KiB
using UnityEditor; |
|
using UnityEngine; |
|
|
|
using Codice.Utils; |
|
using PlasticGui; |
|
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.GetString( |
|
PlasticLocalization.Name.EncryptionConfiguration)); |
|
|
|
GUILayout.Space(20); |
|
|
|
Paragraph(PlasticLocalization.GetString( |
|
PlasticLocalization.Name.EncryptionConfigurationExplanation, mServer)); |
|
|
|
DoPasswordArea(); |
|
|
|
Paragraph(PlasticLocalization.GetString( |
|
PlasticLocalization.Name.EncryptionConfigurationRemarks, mServer)); |
|
|
|
GUILayout.Space(10); |
|
|
|
DoNotificationArea(); |
|
|
|
GUILayout.Space(10); |
|
|
|
DoButtonsArea(); |
|
} |
|
|
|
protected override string GetTitle() |
|
{ |
|
return PlasticLocalization.GetString( |
|
PlasticLocalization.Name.EncryptionConfiguration); |
|
} |
|
|
|
EncryptionConfigurationDialogData BuildEncryptionConfigurationData() |
|
{ |
|
return new EncryptionConfigurationDialogData( |
|
CryptoServices.GetEncryptedPassword(mPassword.Trim())); |
|
} |
|
|
|
void DoPasswordArea() |
|
{ |
|
Paragraph(PlasticLocalization.GetString( |
|
PlasticLocalization.Name.EncryptionConfigurationEnterPassword)); |
|
|
|
GUILayout.Space(5); |
|
|
|
mPassword = PasswordEntry(PlasticLocalization.GetString( |
|
PlasticLocalization.Name.Password), mPassword, |
|
PASSWORD_TEXT_WIDTH, PASSWORD_TEXT_X); |
|
|
|
GUILayout.Space(5); |
|
|
|
mRetypePassword = PasswordEntry(PlasticLocalization.GetString( |
|
PlasticLocalization.Name.RetypePassword), 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.GetString( |
|
PlasticLocalization.Name.OkButton))) |
|
return; |
|
|
|
OkButtonWithValidationAction(); |
|
} |
|
|
|
void DoCancelButton() |
|
{ |
|
if (!NormalButton(PlasticLocalization.GetString( |
|
PlasticLocalization.Name.CancelButton))) |
|
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.GetString( |
|
PlasticLocalization.Name.InvalidEmptyPassword); |
|
return false; |
|
} |
|
|
|
if (!password.Equals(retypePassword)) |
|
{ |
|
errorMessage = PlasticLocalization.GetString( |
|
PlasticLocalization.Name.PasswordDoesntMatch); |
|
return false; |
|
} |
|
|
|
return true; |
|
} |
|
|
|
static EncryptionConfigurationDialog Create(string server) |
|
{ |
|
var instance = CreateInstance<EncryptionConfigurationDialog>(); |
|
instance.mServer = server; |
|
instance.mEnterKeyAction = instance.OkButtonWithValidationAction; |
|
instance.mEscapeKeyAction = instance.CancelButtonAction; |
|
return instance; |
|
} |
|
|
|
string mPassword = string.Empty; |
|
string mRetypePassword = string.Empty; |
|
string mErrorMessage = string.Empty; |
|
|
|
string mServer = string.Empty; |
|
|
|
const float PASSWORD_TEXT_WIDTH = 250f; |
|
const float PASSWORD_TEXT_X = 200f; |
|
} |
|
} |
|
|
|
|