Merge
This commit is contained in:
commit
6e8cf2baa6
50 changed files with 1485 additions and 279 deletions
|
@ -10053,6 +10053,114 @@ ELSE
|
||||||
UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordResetSMSBody WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetLetter' AND [PropertyName]= N'PasswordResetLinkSmsBody'
|
UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordResetSMSBody WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetLetter' AND [PropertyName]= N'PasswordResetLinkSmsBody'
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
-- USER PASSWORD RESET EMAIL PINCODE TEMPLATE
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'From' )
|
||||||
|
BEGIN
|
||||||
|
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetPincodeLetter', N'From', N'support@HostingCompany.com')
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
DECLARE @UserPasswordResetPincodeLetterHtmlBody nvarchar(2500)
|
||||||
|
|
||||||
|
Set @UserPasswordResetPincodeLetterHtmlBody = N'<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Password reset notification</title>
|
||||||
|
<style type="text/css">
|
||||||
|
.Summary { background-color: ##ffffff; padding: 5px; }
|
||||||
|
.Summary .Header { padding: 10px 0px 10px 10px; font-size: 16pt; background-color: ##E5F2FF; color: ##1F4978; border-bottom: solid 2px ##86B9F7; }
|
||||||
|
.Summary A { color: ##0153A4; }
|
||||||
|
.Summary { font-family: Tahoma; font-size: 9pt; }
|
||||||
|
.Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; }
|
||||||
|
.Summary H2 { font-size: 1.3em; color: ##1F4978; }
|
||||||
|
.Summary TABLE { border: solid 1px ##e5e5e5; }
|
||||||
|
.Summary TH,
|
||||||
|
.Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; }
|
||||||
|
.Summary TD { padding: 8px; font-size: 9pt; }
|
||||||
|
.Summary UL LI { font-size: 1.1em; font-weight: bold; }
|
||||||
|
.Summary UL UL LI { font-size: 0.9em; font-weight: normal; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="Summary">
|
||||||
|
<div class="Header">
|
||||||
|
<img src="#logoUrl#">
|
||||||
|
</div>
|
||||||
|
<h1>Password reset notification</h1>
|
||||||
|
|
||||||
|
<ad:if test="#user#">
|
||||||
|
<p>
|
||||||
|
Hello #user.FirstName#,
|
||||||
|
</p>
|
||||||
|
</ad:if>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We received a request to reset the password for your account. Your password reset pincode:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
#passwordResetPincode#
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you have any questions regarding your hosting account, feel free to contact our support department at any time.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Best regards
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</body>';
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'HtmlBody' )
|
||||||
|
BEGIN
|
||||||
|
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetPincodeLetter', N'HtmlBody', @UserPasswordResetPincodeLetterHtmlBody)
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordResetPincodeLetterHtmlBody WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'HtmlBody'
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'Priority' )
|
||||||
|
BEGIN
|
||||||
|
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetPincodeLetter', N'Priority', N'Normal')
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'Subject' )
|
||||||
|
BEGIN
|
||||||
|
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetPincodeLetter', N'Subject', N'Password reset notification')
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'LogoUrl' )
|
||||||
|
BEGIN
|
||||||
|
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetPincodeLetter', N'LogoUrl', N'https://controlpanel.virtuworks.net/App_Themes/Default/Images/logo.png')
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE @UserPasswordResetPincodeLetterTextBody nvarchar(2500)
|
||||||
|
|
||||||
|
Set @UserPasswordResetPincodeLetterTextBody = N'=========================================
|
||||||
|
Password reset notification
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
<ad:if test="#user#">
|
||||||
|
Hello #user.FirstName#,
|
||||||
|
</ad:if>
|
||||||
|
|
||||||
|
We received a request to reset the password for your account. Your password reset pincode:
|
||||||
|
|
||||||
|
#passwordResetPincode#
|
||||||
|
|
||||||
|
If you have any questions regarding your hosting account, feel free to contact our support department at any time.
|
||||||
|
|
||||||
|
Best regards'
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'TextBody' )
|
||||||
|
BEGIN
|
||||||
|
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetPincodeLetter', N'TextBody', @UserPasswordResetPincodeLetterTextBody)
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordResetPincodeLetterTextBody WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'TextBody'
|
||||||
|
GO
|
||||||
|
|
||||||
DECLARE @UserPasswordPincodeSMSBody nvarchar(2500)
|
DECLARE @UserPasswordPincodeSMSBody nvarchar(2500)
|
||||||
|
|
||||||
|
@ -10060,12 +10168,12 @@ Set @UserPasswordPincodeSMSBody = N'
|
||||||
Your password reset pincode:
|
Your password reset pincode:
|
||||||
#passwordResetPincode#'
|
#passwordResetPincode#'
|
||||||
|
|
||||||
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetLetter' AND [PropertyName]= N'PasswordResetPincodeSmsBody' )
|
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'PasswordResetPincodeSmsBody' )
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetLetter', N'PasswordResetPincodeSmsBody', @UserPasswordPincodeSMSBody)
|
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetPincodeLetter', N'PasswordResetPincodeSmsBody', @UserPasswordPincodeSMSBody)
|
||||||
END
|
END
|
||||||
ELSE
|
ELSE
|
||||||
UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordPincodeSMSBody WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetLetter' AND [PropertyName]= N'PasswordResetPincodeSmsBody'
|
UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordPincodeSMSBody WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetPincodeLetter' AND [PropertyName]= N'PasswordResetPincodeSmsBody'
|
||||||
GO
|
GO
|
||||||
|
|
||||||
-- Exchange setup EMAIL TEMPLATE
|
-- Exchange setup EMAIL TEMPLATE
|
||||||
|
|
|
@ -56,6 +56,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
public const string TWILIO_PHONEFROM_KEY = "TwilioPhoneFrom";
|
public const string TWILIO_PHONEFROM_KEY = "TwilioPhoneFrom";
|
||||||
|
|
||||||
public const string WEBDAV_PASSWORD_RESET_ENABLED_KEY = "WebdavPswResetEnabled";
|
public const string WEBDAV_PASSWORD_RESET_ENABLED_KEY = "WebdavPswResetEnabled";
|
||||||
|
public const string WEBDAV_PASSWORD_RESET_LINK_LIFE_SPAN = "WebdavPswdResetLinkLifeSpan";
|
||||||
|
|
||||||
// key to access to wpi main & custom feed in wpi settings
|
// key to access to wpi main & custom feed in wpi settings
|
||||||
public const string WPI_MAIN_FEED_KEY = "WpiMainFeedUrl";
|
public const string WPI_MAIN_FEED_KEY = "WpiMainFeedUrl";
|
||||||
|
|
|
@ -67,6 +67,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
public const string RDS_POLICY = "RdsPolicy";
|
public const string RDS_POLICY = "RdsPolicy";
|
||||||
public const string USER_PASSWORD_EXPIRATION_LETTER = "UserPasswordExpirationLetter";
|
public const string USER_PASSWORD_EXPIRATION_LETTER = "UserPasswordExpirationLetter";
|
||||||
public const string USER_PASSWORD_RESET_LETTER = "UserPasswordResetLetter";
|
public const string USER_PASSWORD_RESET_LETTER = "UserPasswordResetLetter";
|
||||||
|
public const string USER_PASSWORD_RESET_PINCODE_LETTER = "UserPasswordResetPincodeLetter";
|
||||||
public const string HOSTED_ORGANIZATION_PASSWORD_POLICY = "MailboxPasswordPolicy";
|
public const string HOSTED_ORGANIZATION_PASSWORD_POLICY = "MailboxPasswordPolicy";
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
// This source code was auto-generated by wsdl, Version=2.0.50727.3038.
|
// This source code was auto-generated by wsdl, Version=2.0.50727.3038.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
||||||
using WebsitePanel.Providers;
|
using WebsitePanel.Providers;
|
||||||
using WebsitePanel.Providers.Common;
|
using WebsitePanel.Providers.Common;
|
||||||
|
@ -36,6 +37,10 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceProviderItem))]
|
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceProviderItem))]
|
||||||
public partial class esOrganizations : Microsoft.Web.Services3.WebServicesClientProtocol {
|
public partial class esOrganizations : Microsoft.Web.Services3.WebServicesClientProtocol {
|
||||||
|
|
||||||
|
private System.Threading.SendOrPostCallback AddSupportServiceLevelOperationCompleted;
|
||||||
|
|
||||||
|
private System.Threading.SendOrPostCallback GetSupportServiceLevelOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback CheckPhoneNumberIsInUseOperationCompleted;
|
private System.Threading.SendOrPostCallback CheckPhoneNumberIsInUseOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback DeletePasswordresetAccessTokenOperationCompleted;
|
private System.Threading.SendOrPostCallback DeletePasswordresetAccessTokenOperationCompleted;
|
||||||
|
@ -86,6 +91,8 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback SendResetUserPasswordPincodeSmsOperationCompleted;
|
private System.Threading.SendOrPostCallback SendResetUserPasswordPincodeSmsOperationCompleted;
|
||||||
|
|
||||||
|
private System.Threading.SendOrPostCallback SendResetUserPasswordPincodeEmailOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback AddOrganizationDomainOperationCompleted;
|
private System.Threading.SendOrPostCallback AddOrganizationDomainOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback ChangeOrganizationDomainTypeOperationCompleted;
|
private System.Threading.SendOrPostCallback ChangeOrganizationDomainTypeOperationCompleted;
|
||||||
|
@ -128,6 +135,8 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback SendResetUserPasswordEmailOperationCompleted;
|
private System.Threading.SendOrPostCallback SendResetUserPasswordEmailOperationCompleted;
|
||||||
|
|
||||||
|
private System.Threading.SendOrPostCallback CreatePasswordResetAccessTokenOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback CreateSecurityGroupOperationCompleted;
|
private System.Threading.SendOrPostCallback CreateSecurityGroupOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback GetSecurityGroupGeneralSettingsOperationCompleted;
|
private System.Threading.SendOrPostCallback GetSecurityGroupGeneralSettingsOperationCompleted;
|
||||||
|
@ -160,15 +169,17 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback DeleteSupportServiceLevelOperationCompleted;
|
private System.Threading.SendOrPostCallback DeleteSupportServiceLevelOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback AddSupportServiceLevelOperationCompleted;
|
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback GetSupportServiceLevelOperationCompleted;
|
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public esOrganizations() {
|
public esOrganizations() {
|
||||||
this.Url = "http://localhost:9002/esOrganizations.asmx";
|
this.Url = "http://localhost:9002/esOrganizations.asmx";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public event AddSupportServiceLevelCompletedEventHandler AddSupportServiceLevelCompleted;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public event GetSupportServiceLevelCompletedEventHandler GetSupportServiceLevelCompleted;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event CheckPhoneNumberIsInUseCompletedEventHandler CheckPhoneNumberIsInUseCompleted;
|
public event CheckPhoneNumberIsInUseCompletedEventHandler CheckPhoneNumberIsInUseCompleted;
|
||||||
|
|
||||||
|
@ -244,6 +255,9 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event SendResetUserPasswordPincodeSmsCompletedEventHandler SendResetUserPasswordPincodeSmsCompleted;
|
public event SendResetUserPasswordPincodeSmsCompletedEventHandler SendResetUserPasswordPincodeSmsCompleted;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public event SendResetUserPasswordPincodeEmailCompletedEventHandler SendResetUserPasswordPincodeEmailCompleted;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event AddOrganizationDomainCompletedEventHandler AddOrganizationDomainCompleted;
|
public event AddOrganizationDomainCompletedEventHandler AddOrganizationDomainCompleted;
|
||||||
|
|
||||||
|
@ -307,6 +321,9 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event SendResetUserPasswordEmailCompletedEventHandler SendResetUserPasswordEmailCompleted;
|
public event SendResetUserPasswordEmailCompletedEventHandler SendResetUserPasswordEmailCompleted;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public event CreatePasswordResetAccessTokenCompletedEventHandler CreatePasswordResetAccessTokenCompleted;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event CreateSecurityGroupCompletedEventHandler CreateSecurityGroupCompleted;
|
public event CreateSecurityGroupCompletedEventHandler CreateSecurityGroupCompleted;
|
||||||
|
|
||||||
|
@ -356,10 +373,89 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
public event DeleteSupportServiceLevelCompletedEventHandler DeleteSupportServiceLevelCompleted;
|
public event DeleteSupportServiceLevelCompletedEventHandler DeleteSupportServiceLevelCompleted;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event AddSupportServiceLevelCompletedEventHandler AddSupportServiceLevelCompleted;
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/AddSupportServiceLevel", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
|
public int AddSupportServiceLevel(string levelName, string levelDescription) {
|
||||||
|
object[] results = this.Invoke("AddSupportServiceLevel", new object[] {
|
||||||
|
levelName,
|
||||||
|
levelDescription});
|
||||||
|
return ((int)(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event GetSupportServiceLevelCompletedEventHandler GetSupportServiceLevelCompleted;
|
public System.IAsyncResult BeginAddSupportServiceLevel(string levelName, string levelDescription, System.AsyncCallback callback, object asyncState) {
|
||||||
|
return this.BeginInvoke("AddSupportServiceLevel", new object[] {
|
||||||
|
levelName,
|
||||||
|
levelDescription}, callback, asyncState);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public int EndAddSupportServiceLevel(System.IAsyncResult asyncResult) {
|
||||||
|
object[] results = this.EndInvoke(asyncResult);
|
||||||
|
return ((int)(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void AddSupportServiceLevelAsync(string levelName, string levelDescription) {
|
||||||
|
this.AddSupportServiceLevelAsync(levelName, levelDescription, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void AddSupportServiceLevelAsync(string levelName, string levelDescription, object userState) {
|
||||||
|
if ((this.AddSupportServiceLevelOperationCompleted == null)) {
|
||||||
|
this.AddSupportServiceLevelOperationCompleted = new System.Threading.SendOrPostCallback(this.OnAddSupportServiceLevelOperationCompleted);
|
||||||
|
}
|
||||||
|
this.InvokeAsync("AddSupportServiceLevel", new object[] {
|
||||||
|
levelName,
|
||||||
|
levelDescription}, this.AddSupportServiceLevelOperationCompleted, userState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnAddSupportServiceLevelOperationCompleted(object arg) {
|
||||||
|
if ((this.AddSupportServiceLevelCompleted != null)) {
|
||||||
|
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||||
|
this.AddSupportServiceLevelCompleted(this, new AddSupportServiceLevelCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetSupportServiceLevel", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
|
public ServiceLevel GetSupportServiceLevel(int levelID) {
|
||||||
|
object[] results = this.Invoke("GetSupportServiceLevel", new object[] {
|
||||||
|
levelID});
|
||||||
|
return ((ServiceLevel)(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public System.IAsyncResult BeginGetSupportServiceLevel(int levelID, System.AsyncCallback callback, object asyncState) {
|
||||||
|
return this.BeginInvoke("GetSupportServiceLevel", new object[] {
|
||||||
|
levelID}, callback, asyncState);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public ServiceLevel EndGetSupportServiceLevel(System.IAsyncResult asyncResult) {
|
||||||
|
object[] results = this.EndInvoke(asyncResult);
|
||||||
|
return ((ServiceLevel)(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void GetSupportServiceLevelAsync(int levelID) {
|
||||||
|
this.GetSupportServiceLevelAsync(levelID, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void GetSupportServiceLevelAsync(int levelID, object userState) {
|
||||||
|
if ((this.GetSupportServiceLevelOperationCompleted == null)) {
|
||||||
|
this.GetSupportServiceLevelOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSupportServiceLevelOperationCompleted);
|
||||||
|
}
|
||||||
|
this.InvokeAsync("GetSupportServiceLevel", new object[] {
|
||||||
|
levelID}, this.GetSupportServiceLevelOperationCompleted, userState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGetSupportServiceLevelOperationCompleted(object arg) {
|
||||||
|
if ((this.GetSupportServiceLevelCompleted != null)) {
|
||||||
|
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||||
|
this.GetSupportServiceLevelCompleted(this, new GetSupportServiceLevelCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CheckPhoneNumberIsInUse", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CheckPhoneNumberIsInUse", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
|
@ -1463,6 +1559,50 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SendResetUserPasswordPincodeEmail", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
|
public ResultObject SendResetUserPasswordPincodeEmail(System.Guid token, string mailTo) {
|
||||||
|
object[] results = this.Invoke("SendResetUserPasswordPincodeEmail", new object[] {
|
||||||
|
token,
|
||||||
|
mailTo});
|
||||||
|
return ((ResultObject)(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public System.IAsyncResult BeginSendResetUserPasswordPincodeEmail(System.Guid token, string mailTo, System.AsyncCallback callback, object asyncState) {
|
||||||
|
return this.BeginInvoke("SendResetUserPasswordPincodeEmail", new object[] {
|
||||||
|
token,
|
||||||
|
mailTo}, callback, asyncState);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public ResultObject EndSendResetUserPasswordPincodeEmail(System.IAsyncResult asyncResult) {
|
||||||
|
object[] results = this.EndInvoke(asyncResult);
|
||||||
|
return ((ResultObject)(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void SendResetUserPasswordPincodeEmailAsync(System.Guid token, string mailTo) {
|
||||||
|
this.SendResetUserPasswordPincodeEmailAsync(token, mailTo, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void SendResetUserPasswordPincodeEmailAsync(System.Guid token, string mailTo, object userState) {
|
||||||
|
if ((this.SendResetUserPasswordPincodeEmailOperationCompleted == null)) {
|
||||||
|
this.SendResetUserPasswordPincodeEmailOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSendResetUserPasswordPincodeEmailOperationCompleted);
|
||||||
|
}
|
||||||
|
this.InvokeAsync("SendResetUserPasswordPincodeEmail", new object[] {
|
||||||
|
token,
|
||||||
|
mailTo}, this.SendResetUserPasswordPincodeEmailOperationCompleted, userState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSendResetUserPasswordPincodeEmailOperationCompleted(object arg) {
|
||||||
|
if ((this.SendResetUserPasswordPincodeEmailCompleted != null)) {
|
||||||
|
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||||
|
this.SendResetUserPasswordPincodeEmailCompleted(this, new SendResetUserPasswordPincodeEmailCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/AddOrganizationDomain", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/AddOrganizationDomain", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
public int AddOrganizationDomain(int itemId, string domainName) {
|
public int AddOrganizationDomain(int itemId, string domainName) {
|
||||||
|
@ -2697,6 +2837,50 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CreatePasswordResetAccessToken", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
|
public AccessToken CreatePasswordResetAccessToken(int itemId, int accountId) {
|
||||||
|
object[] results = this.Invoke("CreatePasswordResetAccessToken", new object[] {
|
||||||
|
itemId,
|
||||||
|
accountId});
|
||||||
|
return ((AccessToken)(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public System.IAsyncResult BeginCreatePasswordResetAccessToken(int itemId, int accountId, System.AsyncCallback callback, object asyncState) {
|
||||||
|
return this.BeginInvoke("CreatePasswordResetAccessToken", new object[] {
|
||||||
|
itemId,
|
||||||
|
accountId}, callback, asyncState);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public AccessToken EndCreatePasswordResetAccessToken(System.IAsyncResult asyncResult) {
|
||||||
|
object[] results = this.EndInvoke(asyncResult);
|
||||||
|
return ((AccessToken)(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void CreatePasswordResetAccessTokenAsync(int itemId, int accountId) {
|
||||||
|
this.CreatePasswordResetAccessTokenAsync(itemId, accountId, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void CreatePasswordResetAccessTokenAsync(int itemId, int accountId, object userState) {
|
||||||
|
if ((this.CreatePasswordResetAccessTokenOperationCompleted == null)) {
|
||||||
|
this.CreatePasswordResetAccessTokenOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreatePasswordResetAccessTokenOperationCompleted);
|
||||||
|
}
|
||||||
|
this.InvokeAsync("CreatePasswordResetAccessToken", new object[] {
|
||||||
|
itemId,
|
||||||
|
accountId}, this.CreatePasswordResetAccessTokenOperationCompleted, userState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCreatePasswordResetAccessTokenOperationCompleted(object arg) {
|
||||||
|
if ((this.CreatePasswordResetAccessTokenCompleted != null)) {
|
||||||
|
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||||
|
this.CreatePasswordResetAccessTokenCompleted(this, new CreatePasswordResetAccessTokenCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CreateSecurityGroup", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CreateSecurityGroup", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
public int CreateSecurityGroup(int itemId, string displayName) {
|
public int CreateSecurityGroup(int itemId, string displayName) {
|
||||||
|
@ -3419,97 +3603,64 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/AddSupportServiceLevel", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
|
||||||
public int AddSupportServiceLevel(string levelName, string levelDescription) {
|
|
||||||
object[] results = this.Invoke("AddSupportServiceLevel", new object[] {
|
|
||||||
levelName,
|
|
||||||
levelDescription});
|
|
||||||
return ((int)(results[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public System.IAsyncResult BeginAddSupportServiceLevel(string levelName, string levelDescription, System.AsyncCallback callback, object asyncState) {
|
|
||||||
return this.BeginInvoke("AddSupportServiceLevel", new object[] {
|
|
||||||
levelName,
|
|
||||||
levelDescription}, callback, asyncState);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public int EndAddSupportServiceLevel(System.IAsyncResult asyncResult) {
|
|
||||||
object[] results = this.EndInvoke(asyncResult);
|
|
||||||
return ((int)(results[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public void AddSupportServiceLevelAsync(string levelName, string levelDescription) {
|
|
||||||
this.AddSupportServiceLevelAsync(levelName, levelDescription, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public void AddSupportServiceLevelAsync(string levelName, string levelDescription, object userState) {
|
|
||||||
if ((this.AddSupportServiceLevelOperationCompleted == null)) {
|
|
||||||
this.AddSupportServiceLevelOperationCompleted = new System.Threading.SendOrPostCallback(this.OnAddSupportServiceLevelOperationCompleted);
|
|
||||||
}
|
|
||||||
this.InvokeAsync("AddSupportServiceLevel", new object[] {
|
|
||||||
levelName,
|
|
||||||
levelDescription}, this.AddSupportServiceLevelOperationCompleted, userState);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnAddSupportServiceLevelOperationCompleted(object arg) {
|
|
||||||
if ((this.AddSupportServiceLevelCompleted != null)) {
|
|
||||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
|
||||||
this.AddSupportServiceLevelCompleted(this, new AddSupportServiceLevelCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetSupportServiceLevel", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
|
||||||
public ServiceLevel GetSupportServiceLevel(int levelID) {
|
|
||||||
object[] results = this.Invoke("GetSupportServiceLevel", new object[] {
|
|
||||||
levelID});
|
|
||||||
return ((ServiceLevel)(results[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public System.IAsyncResult BeginGetSupportServiceLevel(int levelID, System.AsyncCallback callback, object asyncState) {
|
|
||||||
return this.BeginInvoke("GetSupportServiceLevel", new object[] {
|
|
||||||
levelID}, callback, asyncState);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public ServiceLevel EndGetSupportServiceLevel(System.IAsyncResult asyncResult) {
|
|
||||||
object[] results = this.EndInvoke(asyncResult);
|
|
||||||
return ((ServiceLevel)(results[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public void GetSupportServiceLevelAsync(int levelID) {
|
|
||||||
this.GetSupportServiceLevelAsync(levelID, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public void GetSupportServiceLevelAsync(int levelID, object userState) {
|
|
||||||
if ((this.GetSupportServiceLevelOperationCompleted == null)) {
|
|
||||||
this.GetSupportServiceLevelOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSupportServiceLevelOperationCompleted);
|
|
||||||
}
|
|
||||||
this.InvokeAsync("GetSupportServiceLevel", new object[] {
|
|
||||||
levelID}, this.GetSupportServiceLevelOperationCompleted, userState);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnGetSupportServiceLevelOperationCompleted(object arg) {
|
|
||||||
if ((this.GetSupportServiceLevelCompleted != null)) {
|
|
||||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
|
||||||
this.GetSupportServiceLevelCompleted(this, new GetSupportServiceLevelCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public new void CancelAsync(object userState) {
|
public new void CancelAsync(object userState) {
|
||||||
base.CancelAsync(userState);
|
base.CancelAsync(userState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
public delegate void AddSupportServiceLevelCompletedEventHandler(object sender, AddSupportServiceLevelCompletedEventArgs e);
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
public partial class AddSupportServiceLevelCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||||
|
|
||||||
|
private object[] results;
|
||||||
|
|
||||||
|
internal AddSupportServiceLevelCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||||
|
base(exception, cancelled, userState) {
|
||||||
|
this.results = results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public int Result {
|
||||||
|
get {
|
||||||
|
this.RaiseExceptionIfNecessary();
|
||||||
|
return ((int)(this.results[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
public delegate void GetSupportServiceLevelCompletedEventHandler(object sender, GetSupportServiceLevelCompletedEventArgs e);
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
public partial class GetSupportServiceLevelCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||||
|
|
||||||
|
private object[] results;
|
||||||
|
|
||||||
|
internal GetSupportServiceLevelCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||||
|
base(exception, cancelled, userState) {
|
||||||
|
this.results = results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public ServiceLevel Result {
|
||||||
|
get {
|
||||||
|
this.RaiseExceptionIfNecessary();
|
||||||
|
return ((ServiceLevel)(this.results[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
public delegate void CheckPhoneNumberIsInUseCompletedEventHandler(object sender, CheckPhoneNumberIsInUseCompletedEventArgs e);
|
public delegate void CheckPhoneNumberIsInUseCompletedEventHandler(object sender, CheckPhoneNumberIsInUseCompletedEventArgs e);
|
||||||
|
@ -4050,6 +4201,32 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
public delegate void SendResetUserPasswordPincodeEmailCompletedEventHandler(object sender, SendResetUserPasswordPincodeEmailCompletedEventArgs e);
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
public partial class SendResetUserPasswordPincodeEmailCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||||
|
|
||||||
|
private object[] results;
|
||||||
|
|
||||||
|
internal SendResetUserPasswordPincodeEmailCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||||
|
base(exception, cancelled, userState) {
|
||||||
|
this.results = results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public ResultObject Result {
|
||||||
|
get {
|
||||||
|
this.RaiseExceptionIfNecessary();
|
||||||
|
return ((ResultObject)(this.results[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
public delegate void AddOrganizationDomainCompletedEventHandler(object sender, AddOrganizationDomainCompletedEventArgs e);
|
public delegate void AddOrganizationDomainCompletedEventHandler(object sender, AddOrganizationDomainCompletedEventArgs e);
|
||||||
|
@ -4574,6 +4751,32 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
public delegate void SendResetUserPasswordEmailCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
|
public delegate void SendResetUserPasswordEmailCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
public delegate void CreatePasswordResetAccessTokenCompletedEventHandler(object sender, CreatePasswordResetAccessTokenCompletedEventArgs e);
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
public partial class CreatePasswordResetAccessTokenCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||||
|
|
||||||
|
private object[] results;
|
||||||
|
|
||||||
|
internal CreatePasswordResetAccessTokenCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||||
|
base(exception, cancelled, userState) {
|
||||||
|
this.results = results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public AccessToken Result {
|
||||||
|
get {
|
||||||
|
this.RaiseExceptionIfNecessary();
|
||||||
|
return ((AccessToken)(this.results[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
public delegate void CreateSecurityGroupCompletedEventHandler(object sender, CreateSecurityGroupCompletedEventArgs e);
|
public delegate void CreateSecurityGroupCompletedEventHandler(object sender, CreateSecurityGroupCompletedEventArgs e);
|
||||||
|
@ -4923,56 +5126,4 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
|
||||||
public delegate void AddSupportServiceLevelCompletedEventHandler(object sender, AddSupportServiceLevelCompletedEventArgs e);
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
|
||||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
|
||||||
public partial class AddSupportServiceLevelCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
|
||||||
|
|
||||||
private object[] results;
|
|
||||||
|
|
||||||
internal AddSupportServiceLevelCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
|
||||||
base(exception, cancelled, userState) {
|
|
||||||
this.results = results;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public int Result {
|
|
||||||
get {
|
|
||||||
this.RaiseExceptionIfNecessary();
|
|
||||||
return ((int)(this.results[0]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
|
||||||
public delegate void GetSupportServiceLevelCompletedEventHandler(object sender, GetSupportServiceLevelCompletedEventArgs e);
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
|
||||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
|
||||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
|
||||||
public partial class GetSupportServiceLevelCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
|
||||||
|
|
||||||
private object[] results;
|
|
||||||
|
|
||||||
internal GetSupportServiceLevelCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
|
||||||
base(exception, cancelled, userState) {
|
|
||||||
this.results = results;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <remarks/>
|
|
||||||
public ServiceLevel Result {
|
|
||||||
get {
|
|
||||||
this.RaiseExceptionIfNecessary();
|
|
||||||
return ((ServiceLevel)(this.results[0]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1654,15 +1654,14 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
|
|
||||||
UserInfo owner = PackageController.GetPackageOwner(org.PackageId);
|
UserInfo owner = PackageController.GetPackageOwner(org.PackageId);
|
||||||
OrganizationUser user = OrganizationController.GetUserGeneralSettingsWithExtraData(accessToken.ItemId,
|
OrganizationUser user = OrganizationController.GetUserGeneralSettingsWithExtraData(accessToken.ItemId, accessToken.AccountId);
|
||||||
accessToken.AccountId);
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(phoneTo))
|
if (string.IsNullOrEmpty(phoneTo))
|
||||||
{
|
{
|
||||||
phoneTo = user.MobilePhone;
|
phoneTo = user.MobilePhone;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserSettings settings = UserController.GetUserSettings(owner.UserId, UserSettings.USER_PASSWORD_RESET_LETTER);
|
UserSettings settings = UserController.GetUserSettings(owner.UserId, UserSettings.USER_PASSWORD_RESET_PINCODE_LETTER);
|
||||||
|
|
||||||
string body = settings["PasswordResetPincodeSmsBody"];
|
string body = settings["PasswordResetPincodeSmsBody"];
|
||||||
|
|
||||||
|
@ -1700,6 +1699,90 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ResultObject SendResetUserPasswordPincodeEmail(Guid token, string mailTo = null)
|
||||||
|
{
|
||||||
|
var result = TaskManager.StartResultTask<ResultObject>("ORGANIZATION", "SEND_USER_PASSWORD_RESET_EMAIL_PINCODE");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var accessToken = OrganizationController.GetAccessToken(token, AccessTokenTypes.PasswrodReset);
|
||||||
|
|
||||||
|
if (accessToken == null)
|
||||||
|
{
|
||||||
|
throw new Exception(string.Format("Access token not found"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// load organization
|
||||||
|
Organization org = GetOrganization(accessToken.ItemId);
|
||||||
|
|
||||||
|
if (org == null)
|
||||||
|
{
|
||||||
|
throw new Exception(string.Format("Organization not found"));
|
||||||
|
}
|
||||||
|
|
||||||
|
UserInfo owner = PackageController.GetPackageOwner(org.PackageId);
|
||||||
|
OrganizationUser user = OrganizationController.GetUserGeneralSettingsWithExtraData(accessToken.ItemId, accessToken.AccountId);
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(mailTo))
|
||||||
|
{
|
||||||
|
mailTo = user.PrimaryEmailAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserSettings settings = UserController.GetUserSettings(owner.UserId, UserSettings.USER_PASSWORD_RESET_PINCODE_LETTER);
|
||||||
|
|
||||||
|
var generalSettings = OrganizationController.GetOrganizationGeneralSettings(accessToken.ItemId);
|
||||||
|
|
||||||
|
var logoUrl = generalSettings != null ? generalSettings.OrganizationLogoUrl : string.Empty;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(logoUrl))
|
||||||
|
{
|
||||||
|
logoUrl = settings["LogoUrl"];
|
||||||
|
}
|
||||||
|
|
||||||
|
string from = settings["From"];
|
||||||
|
|
||||||
|
string subject = settings["Subject"];
|
||||||
|
string body = owner.HtmlMail ? settings["HtmlBody"] : settings["TextBody"];
|
||||||
|
bool isHtml = owner.HtmlMail;
|
||||||
|
|
||||||
|
MailPriority priority = MailPriority.Normal;
|
||||||
|
|
||||||
|
if (!String.IsNullOrEmpty(settings["Priority"]))
|
||||||
|
{
|
||||||
|
priority = (MailPriority)Enum.Parse(typeof(MailPriority), settings["Priority"], true);
|
||||||
|
}
|
||||||
|
|
||||||
|
string pincode = GeneratePincode() ;
|
||||||
|
|
||||||
|
Hashtable items = new Hashtable();
|
||||||
|
|
||||||
|
items["user"] = user;
|
||||||
|
items["logoUrl"] = logoUrl;
|
||||||
|
items["passwordResetPincode"] = pincode;
|
||||||
|
|
||||||
|
body = PackageController.EvaluateTemplate(body, items);
|
||||||
|
|
||||||
|
SetAccessTokenResponse(token, pincode);
|
||||||
|
|
||||||
|
TaskManager.Write("Organization ID : " + user.ItemId);
|
||||||
|
TaskManager.Write("Account : " + user.DisplayName);
|
||||||
|
TaskManager.Write("MailTo : " + mailTo);
|
||||||
|
|
||||||
|
// send mail message
|
||||||
|
MailHelper.SendMessage(from, mailTo, null, subject, body, priority, isHtml);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
TaskManager.WriteError(ex);
|
||||||
|
TaskManager.CompleteResultTask(result);
|
||||||
|
result.AddError("", ex);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
TaskManager.CompleteResultTask();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private static string GeneratePincode()
|
private static string GeneratePincode()
|
||||||
{
|
{
|
||||||
var random = new Random(Guid.NewGuid().GetHashCode());
|
var random = new Random(Guid.NewGuid().GetHashCode());
|
||||||
|
@ -1877,7 +1960,9 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
var webdavPortalUrl = new Uri(settings["WebdavPortalUrl"]);
|
var webdavPortalUrl = new Uri(settings["WebdavPortalUrl"]);
|
||||||
|
|
||||||
var token = CreateAccessToken(itemId, accountId, AccessTokenTypes.PasswrodReset);
|
var hours = settings.GetValueOrDefault(SystemSettings.WEBDAV_PASSWORD_RESET_LINK_LIFE_SPAN, 1);
|
||||||
|
|
||||||
|
var token = CreateAccessToken(itemId, accountId, AccessTokenTypes.PasswrodReset, hours);
|
||||||
|
|
||||||
tokenGuid = token.AccessTokenGuid;
|
tokenGuid = token.AccessTokenGuid;
|
||||||
|
|
||||||
|
@ -1892,7 +1977,21 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return resultUrl.ToString();
|
return resultUrl.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AccessToken CreateAccessToken(int itemId, int accountId, AccessTokenTypes type)
|
public static AccessToken CreatePasswordResetAccessToken(int itemId, int accountId)
|
||||||
|
{
|
||||||
|
var settings = GetWebDavSystemSettings();
|
||||||
|
|
||||||
|
if (settings == null || !settings.GetValueOrDefault(SystemSettings.WEBDAV_PASSWORD_RESET_ENABLED_KEY, false))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var hours = settings.GetValueOrDefault(SystemSettings.WEBDAV_PASSWORD_RESET_LINK_LIFE_SPAN, 1);
|
||||||
|
|
||||||
|
return CreateAccessToken(itemId, accountId, AccessTokenTypes.PasswrodReset, hours);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AccessToken CreateAccessToken(int itemId, int accountId, AccessTokenTypes type, int hours)
|
||||||
{
|
{
|
||||||
var token = new AccessToken
|
var token = new AccessToken
|
||||||
{
|
{
|
||||||
|
@ -1900,7 +1999,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
ItemId = itemId,
|
ItemId = itemId,
|
||||||
AccountId = accountId,
|
AccountId = accountId,
|
||||||
TokenType = type,
|
TokenType = type,
|
||||||
ExpirationDate = DateTime.Now.AddHours(12)
|
ExpirationDate = DateTime.Now.AddHours(hours)
|
||||||
};
|
};
|
||||||
|
|
||||||
token.Id = DataProvider.AddAccessToken(token);
|
token.Id = DataProvider.AddAccessToken(token);
|
||||||
|
@ -2890,6 +2989,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
OrganizationUser retUser = orgProxy.GetOrganizationUserWithExtraData(accountName, org.OrganizationId);
|
OrganizationUser retUser = orgProxy.GetOrganizationUserWithExtraData(accountName, org.OrganizationId);
|
||||||
retUser.AccountId = accountId;
|
retUser.AccountId = accountId;
|
||||||
|
retUser.ItemId = itemId;
|
||||||
retUser.AccountName = account.AccountName;
|
retUser.AccountName = account.AccountName;
|
||||||
retUser.PrimaryEmailAddress = account.PrimaryEmailAddress;
|
retUser.PrimaryEmailAddress = account.PrimaryEmailAddress;
|
||||||
retUser.AccountType = account.AccountType;
|
retUser.AccountType = account.AccountType;
|
||||||
|
|
|
@ -204,6 +204,12 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return OrganizationController.SendResetUserPasswordPincodeSms(token, phoneTo);
|
return OrganizationController.SendResetUserPasswordPincodeSms(token, phoneTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[WebMethod]
|
||||||
|
public ResultObject SendResetUserPasswordPincodeEmail(Guid token, string mailTo = null)
|
||||||
|
{
|
||||||
|
return OrganizationController.SendResetUserPasswordPincodeEmail(token, mailTo);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -361,6 +367,12 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
OrganizationController.SendResetUserPasswordEmail(itemId, accountId, reason, mailTo, finalStep);
|
OrganizationController.SendResetUserPasswordEmail(itemId, accountId, reason, mailTo, finalStep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[WebMethod]
|
||||||
|
public AccessToken CreatePasswordResetAccessToken(int itemId, int accountId)
|
||||||
|
{
|
||||||
|
return OrganizationController.CreatePasswordResetAccessToken(itemId, accountId);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Security Groups
|
#region Security Groups
|
||||||
|
|
|
@ -576,6 +576,11 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
|
|
||||||
if (span != null)
|
if (span != null)
|
||||||
{
|
{
|
||||||
|
if (span.Value.Duration() == new TimeSpan().Duration())
|
||||||
|
{
|
||||||
|
return TimeSpan.MaxValue;
|
||||||
|
}
|
||||||
|
|
||||||
return span.Value;
|
return span.Value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -679,15 +684,20 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
if (!FineGrainedPasswordPolicyExist(runspace, psoName))
|
if (!FineGrainedPasswordPolicyExist(runspace, psoName))
|
||||||
{
|
{
|
||||||
CreateFineGrainedPasswordPolicy(runspace, organizationId, psoName, settings);
|
CreateFineGrainedPasswordPolicy(runspace, organizationId, psoName, settings);
|
||||||
|
|
||||||
string groupPath = GetGroupPath(organizationId);
|
|
||||||
|
|
||||||
SetFineGrainedPasswordPolicySubject(runspace, groupPath, psoName);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UpdateFineGrainedPasswordPolicy(runspace, psoName, settings);
|
UpdateFineGrainedPasswordPolicy(runspace, psoName, settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string groupPath = GetGroupPath(organizationId);
|
||||||
|
|
||||||
|
SetFineGrainedPasswordPolicySubject(runspace, groupPath, psoName);
|
||||||
|
|
||||||
|
if (settings.MaxPasswordAge == 0)
|
||||||
|
{
|
||||||
|
SetPasswordNeverExpiresInFineGrainedPasswordPolicy(runspace, psoName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -706,6 +716,24 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
return string.Format("{0}-PSO", organizationId);
|
return string.Format("{0}-PSO", organizationId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetPasswordNeverExpiresInFineGrainedPasswordPolicy(Runspace runspace, string psoName)
|
||||||
|
{
|
||||||
|
var psoObject = GetFineGrainedPasswordPolicy(runspace, psoName);
|
||||||
|
|
||||||
|
var distinguishedName = GetPSObjectProperty(psoObject, "DistinguishedName") as string;
|
||||||
|
|
||||||
|
var cmd = new Command("Set-ADObject");
|
||||||
|
cmd.Parameters.Add("Identity", distinguishedName);
|
||||||
|
|
||||||
|
var hashTable = new Hashtable();
|
||||||
|
|
||||||
|
hashTable.Add("msDS-MaximumPasswordAge", "-9223372036854775808");
|
||||||
|
|
||||||
|
cmd.Parameters.Add("Replace", hashTable);
|
||||||
|
|
||||||
|
ExecuteShellCommand(runspace, cmd);
|
||||||
|
}
|
||||||
|
|
||||||
private bool FineGrainedPasswordPolicyExist(Runspace runspace, string psoName)
|
private bool FineGrainedPasswordPolicyExist(Runspace runspace, string psoName)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -759,12 +787,12 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
|
|
||||||
var cmd = new Command("Add-ADFineGrainedPasswordPolicySubject");
|
var cmd = new Command("Add-ADFineGrainedPasswordPolicySubject");
|
||||||
cmd.Parameters.Add("Identity", psoName);
|
cmd.Parameters.Add("Identity", psoName);
|
||||||
cmd.Parameters.Add("Subjects", entry.Properties[ADAttributes.SAMAccountName].Value.ToString());
|
cmd.Parameters.Add("Subjects", entry.Properties[ADAttributes.DistinguishedName].Value.ToString());
|
||||||
|
|
||||||
ExecuteShellCommand(runspace, cmd);
|
ExecuteShellCommand(runspace, cmd);
|
||||||
|
|
||||||
cmd = new Command("Set-ADGroup");
|
cmd = new Command("Set-ADGroup");
|
||||||
cmd.Parameters.Add("Identity", entry.Properties[ADAttributes.SAMAccountName].Value.ToString());
|
cmd.Parameters.Add("Identity", entry.Properties[ADAttributes.DistinguishedName].Value.ToString());
|
||||||
cmd.Parameters.Add("GroupScope", "Global");
|
cmd.Parameters.Add("GroupScope", "Global");
|
||||||
|
|
||||||
ExecuteShellCommand(runspace, cmd);
|
ExecuteShellCommand(runspace, cmd);
|
||||||
|
|
|
@ -75,6 +75,16 @@ namespace WebsitePanel.WebDav.Core.Config.Entities
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string AccountIdKey
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
SessionKeysElement sessionKey =
|
||||||
|
_sessionKeys.FirstOrDefault(x => x.Key == SessionKeysElement.AccountIdKey);
|
||||||
|
return sessionKey != null ? sessionKey.Value : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string ResourseRenderCount
|
public string ResourseRenderCount
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
|
@ -16,6 +16,7 @@ namespace WebsitePanel.WebDav.Core.Config.WebConfigSections
|
||||||
public const string ResourseRenderCountKey = "ResourseRenderCountSessionKey";
|
public const string ResourseRenderCountKey = "ResourseRenderCountSessionKey";
|
||||||
public const string ItemIdSessionKey = "ItemId";
|
public const string ItemIdSessionKey = "ItemId";
|
||||||
public const string OwaEditFoldersSessionKey = "OwaEditFoldersSession";
|
public const string OwaEditFoldersSessionKey = "OwaEditFoldersSession";
|
||||||
|
public const string AccountIdKey = "AccountIdKey";
|
||||||
|
|
||||||
[ConfigurationProperty(KeyKey, IsKey = true, IsRequired = true)]
|
[ConfigurationProperty(KeyKey, IsKey = true, IsRequired = true)]
|
||||||
public string Key
|
public string Key
|
||||||
|
|
|
@ -8,5 +8,15 @@
|
||||||
string result = source.Remove(index, target.Length).Insert(index, newValue);
|
string result = source.Remove(index, target.Length).Insert(index, newValue);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string Tail(this string source, int tailLength)
|
||||||
|
{
|
||||||
|
if (source == null || tailLength >= source.Length)
|
||||||
|
{
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
return source.Substring(source.Length - tailLength);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -25,21 +25,21 @@ namespace WebsitePanel.WebDavPortal
|
||||||
);
|
);
|
||||||
|
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
name: AccountRouteNames.PasswordResetEmail,
|
name: AccountRouteNames.PasswordResetLogin,
|
||||||
url: "account/password-reset/step-1",
|
url: "account/password-reset/step-1",
|
||||||
defaults: new { controller = "Account", action = "PasswordResetEmail" }
|
defaults: new { controller = "Account", action = "PasswordResetLogin" }
|
||||||
);
|
);
|
||||||
|
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
name: AccountRouteNames.PasswordResetSms,
|
name: AccountRouteNames.PasswordResetPincodeSendOptions,
|
||||||
url: "account/password-reset/step-2/{token}",
|
url: "account/password-reset/step-2/{token}",
|
||||||
defaults: new { controller = "Account", action = "PasswordResetSms" }
|
defaults: new { controller = "Account", action = "PasswordResetPincodeSendOptions" }
|
||||||
);
|
);
|
||||||
|
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
name: AccountRouteNames.PasswordResetSendSms,
|
name: AccountRouteNames.PasswordResetPincode,
|
||||||
url: "account/password-reset/send-new-sms/{token}",
|
url: "account/password-reset/step-3/{token}",
|
||||||
defaults: new { controller = "Account", action = "PasswordResetSendSms" }
|
defaults: new { controller = "Account", action = "PasswordResetPincode" }
|
||||||
);
|
);
|
||||||
|
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
|
|
|
@ -12,9 +12,9 @@ namespace WebsitePanel.WebDavPortal.UI.Routes
|
||||||
public const string UserProfile = "UserProfileRoute";
|
public const string UserProfile = "UserProfileRoute";
|
||||||
|
|
||||||
public const string PasswordChange = "PasswordChangeRoute";
|
public const string PasswordChange = "PasswordChangeRoute";
|
||||||
public const string PasswordResetEmail = "PasswordResetEmailRoute";
|
public const string PasswordResetLogin = "PasswordResetLoginRoute";
|
||||||
public const string PasswordResetSms = "PasswordResetSmsRoute";
|
public const string PasswordResetPincodeSendOptions = "PasswordResetPincodeSendOptionsRoute";
|
||||||
public const string PasswordResetSendSms = "PasswordResetSendSmsRoute";
|
public const string PasswordResetPincode = "PasswordResetPincodeRoute";
|
||||||
public const string PasswordResetFinalStep = "PasswordResetFinalStepRoute";
|
public const string PasswordResetFinalStep = "PasswordResetFinalStepRoute";
|
||||||
public const string PasswordResetSuccess = "PasswordResetSuccess";
|
public const string PasswordResetSuccess = "PasswordResetSuccess";
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ using WebsitePanel.WebDav.Core.Wsp.Framework;
|
||||||
using WebsitePanel.WebDavPortal.CustomAttributes;
|
using WebsitePanel.WebDavPortal.CustomAttributes;
|
||||||
using WebsitePanel.WebDavPortal.Models;
|
using WebsitePanel.WebDavPortal.Models;
|
||||||
using WebsitePanel.WebDavPortal.Models.Account;
|
using WebsitePanel.WebDavPortal.Models.Account;
|
||||||
|
using WebsitePanel.WebDavPortal.Models.Account.Enums;
|
||||||
using WebsitePanel.WebDavPortal.Models.Common;
|
using WebsitePanel.WebDavPortal.Models.Common;
|
||||||
using WebsitePanel.WebDavPortal.Models.Common.EditorTemplates;
|
using WebsitePanel.WebDavPortal.Models.Common.EditorTemplates;
|
||||||
using WebsitePanel.WebDavPortal.Models.Common.Enums;
|
using WebsitePanel.WebDavPortal.Models.Common.Enums;
|
||||||
|
@ -162,16 +163,16 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public ActionResult PasswordResetEmail()
|
public ActionResult PasswordResetLogin()
|
||||||
{
|
{
|
||||||
var model = new PasswordResetEmailModel();
|
var model = new PasswordResetLoginModel();
|
||||||
|
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public ActionResult PasswordResetEmail(PasswordResetEmailModel model)
|
public ActionResult PasswordResetLogin(PasswordResetLoginModel model)
|
||||||
{
|
{
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
{
|
{
|
||||||
|
@ -187,17 +188,117 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
WspContext.Services.Organizations.SendResetUserPasswordEmail(exchangeAccount.ItemId, exchangeAccount.AccountId, Resources.Messages.PasswordResetUserReason, exchangeAccount.PrimaryEmailAddress, false);
|
var tokenEntity = WspContext.Services.Organizations.CreatePasswordResetAccessToken(exchangeAccount.ItemId, exchangeAccount.AccountId);
|
||||||
|
|
||||||
return View("PasswordResetEmailSent");
|
return RedirectToRoute(AccountRouteNames.PasswordResetPincodeSendOptions, new {token = tokenEntity.AccessTokenGuid.ToString("N")});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public ActionResult PasswordResetSms(Guid token)
|
public ActionResult PasswordResetPincodeSendOptions(Guid token)
|
||||||
{
|
{
|
||||||
var model = new PasswordResetSmsModel();
|
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
||||||
|
|
||||||
|
if (accessToken == null)
|
||||||
|
{
|
||||||
|
AddMessage(MessageType.Error, Resources.Messages.IncorrectPasswordResetUrl);
|
||||||
|
|
||||||
|
return RedirectToRoute(AccountRouteNames.PasswordResetLogin);
|
||||||
|
}
|
||||||
|
|
||||||
|
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId, accessToken.AccountId);
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(user.MobilePhone))
|
||||||
|
{
|
||||||
|
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeEmail(accessToken.AccessTokenGuid, user.PrimaryEmailAddress);
|
||||||
|
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
AddMessage(MessageType.Success, Resources.Messages.PincodeEmailWasSent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddMessage(MessageType.Error, Resources.Messages.PincodeEmailWasNotSent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RedirectToRoute(AccountRouteNames.PasswordResetPincode);
|
||||||
|
}
|
||||||
|
|
||||||
|
var model = new PasswordResetPincodeSendOptionsModel();
|
||||||
|
|
||||||
|
model.MobileNumber = user.MobilePhone;
|
||||||
|
model.Email = user.PrimaryEmailAddress;
|
||||||
|
|
||||||
|
return View(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public ActionResult PasswordResetPincodeSendOptions(Guid token, PasswordResetPincodeSendOptionsModel model)
|
||||||
|
{
|
||||||
|
if (!ModelState.IsValid)
|
||||||
|
{
|
||||||
|
return View(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
||||||
|
|
||||||
|
if (accessToken == null)
|
||||||
|
{
|
||||||
|
AddMessage(MessageType.Error, Resources.Messages.IncorrectPasswordResetUrl);
|
||||||
|
|
||||||
|
return RedirectToRoute(AccountRouteNames.PasswordResetLogin);
|
||||||
|
}
|
||||||
|
|
||||||
|
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId, accessToken.AccountId);
|
||||||
|
|
||||||
|
switch (model.Method)
|
||||||
|
{
|
||||||
|
case PincodeSendMethod.Mobile:
|
||||||
|
{
|
||||||
|
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeSms(accessToken.AccessTokenGuid, user.MobilePhone);
|
||||||
|
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
AddMessage(MessageType.Success, Resources.Messages.SmsWasSent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddMessage(MessageType.Error, Resources.Messages.SmsWasNotSent);
|
||||||
|
|
||||||
|
return RedirectToRoute(AccountRouteNames.PasswordResetPincodeSendOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PincodeSendMethod.Email:
|
||||||
|
{
|
||||||
|
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeEmail(accessToken.AccessTokenGuid, user.PrimaryEmailAddress);
|
||||||
|
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
AddMessage(MessageType.Success, Resources.Messages.PincodeEmailWasSent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddMessage(MessageType.Error, Resources.Messages.PincodeEmailWasNotSent);
|
||||||
|
|
||||||
|
return RedirectToRoute(AccountRouteNames.PasswordResetPincodeSendOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return RedirectToRoute(AccountRouteNames.PasswordResetPincode);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[AllowAnonymous]
|
||||||
|
public ActionResult PasswordResetPincode(Guid token)
|
||||||
|
{
|
||||||
|
var model = new PasswordResetPincodeModel();
|
||||||
|
|
||||||
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
||||||
|
|
||||||
|
@ -207,25 +308,13 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
{
|
{
|
||||||
AddMessage(MessageType.Error, Resources.Messages.IncorrectPasswordResetUrl);
|
AddMessage(MessageType.Error, Resources.Messages.IncorrectPasswordResetUrl);
|
||||||
|
|
||||||
return View(model);
|
return RedirectToRoute(AccountRouteNames.PasswordResetLogin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (accessToken != null && accessToken.IsSmsSent == false)
|
if (accessToken != null && accessToken.IsSmsSent == false)
|
||||||
{
|
{
|
||||||
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId,
|
return RedirectToRoute(AccountRouteNames.PasswordResetPincodeSendOptions);
|
||||||
accessToken.AccountId);
|
|
||||||
|
|
||||||
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeSms(token, user.MobilePhone);
|
|
||||||
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
AddMessage(MessageType.Success, Resources.Messages.SmsWasSent);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AddMessage(MessageType.Error, Resources.Messages.SmsWasNotSent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return View(model);
|
return View(model);
|
||||||
|
@ -233,7 +322,7 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public ActionResult PasswordResetSms(Guid token, PasswordResetSmsModel model)
|
public ActionResult PasswordResetPincode(Guid token, PasswordResetPincodeModel model)
|
||||||
{
|
{
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
{
|
{
|
||||||
|
@ -267,15 +356,21 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tokenEntity = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
||||||
|
var account = WspContext.Services.Organizations.GetUserGeneralSettings(tokenEntity.ItemId,
|
||||||
|
tokenEntity.AccountId);
|
||||||
|
|
||||||
var model = new PasswordEditor();
|
var model = new PasswordResetFinalStepModel();
|
||||||
|
|
||||||
|
model.PasswordEditor.Settings = WspContext.Services.Organizations.GetOrganizationPasswordSettings(tokenEntity.ItemId);
|
||||||
|
model.Login = account.UserPrincipalName;
|
||||||
|
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public ActionResult PasswordResetFinalStep(Guid token, string pincode, PasswordEditor model)
|
public ActionResult PasswordResetFinalStep(Guid token, string pincode, PasswordResetFinalStepModel model)
|
||||||
{
|
{
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
{
|
{
|
||||||
|
@ -293,12 +388,10 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
|
|
||||||
WspContext.Services.Organizations.SetUserPassword(
|
WspContext.Services.Organizations.SetUserPassword(
|
||||||
tokenEntity.ItemId, tokenEntity.AccountId,
|
tokenEntity.ItemId, tokenEntity.AccountId,
|
||||||
model.NewPassword);
|
model.PasswordEditor.NewPassword);
|
||||||
|
|
||||||
WspContext.Services.Organizations.DeletePasswordresetAccessToken(token);
|
WspContext.Services.Organizations.DeletePasswordresetAccessToken(token);
|
||||||
|
|
||||||
AddMessage(MessageType.Success, Resources.Messages.PasswordSuccessfullyChanged);
|
|
||||||
|
|
||||||
return RedirectToRoute(AccountRouteNames.PasswordResetSuccess);
|
return RedirectToRoute(AccountRouteNames.PasswordResetSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,35 +402,6 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[AllowAnonymous]
|
|
||||||
public ActionResult PasswordResetSendSms(Guid token)
|
|
||||||
{
|
|
||||||
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
|
||||||
|
|
||||||
if (accessToken == null)
|
|
||||||
{
|
|
||||||
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
|
|
||||||
}
|
|
||||||
|
|
||||||
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId,
|
|
||||||
accessToken.AccountId);
|
|
||||||
|
|
||||||
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeSms(accessToken.AccessTokenGuid,
|
|
||||||
user.MobilePhone);
|
|
||||||
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
AddMessage(MessageType.Success, Resources.Messages.SmsWasSent);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AddMessage(MessageType.Error, Resources.Messages.SmsWasNotSent);
|
|
||||||
}
|
|
||||||
|
|
||||||
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Helpers
|
#region Helpers
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -358,7 +422,7 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
{
|
{
|
||||||
AddMessage(MessageType.Error, Resources.Messages.IncorrectSmsResponse);
|
AddMessage(MessageType.Error, Resources.Messages.IncorrectSmsResponse);
|
||||||
|
|
||||||
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
|
return RedirectToRoute(AccountRouteNames.PasswordResetPincode); //todo
|
||||||
}
|
}
|
||||||
|
|
||||||
var tokenEntity = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
var tokenEntity = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace WebsitePanel.WebDavPortal.Models.Account.Enums
|
||||||
|
{
|
||||||
|
public enum PincodeSendMethod
|
||||||
|
{
|
||||||
|
Mobile,
|
||||||
|
Email
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
using WebsitePanel.WebDavPortal.Models.Common.EditorTemplates;
|
||||||
|
|
||||||
|
namespace WebsitePanel.WebDavPortal.Models.Account
|
||||||
|
{
|
||||||
|
public class PasswordResetFinalStepModel
|
||||||
|
{
|
||||||
|
public PasswordResetFinalStepModel()
|
||||||
|
{
|
||||||
|
PasswordEditor = new PasswordEditor();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Login { get; set; }
|
||||||
|
public PasswordEditor PasswordEditor { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ using WebsitePanel.WebDavPortal.Resources;
|
||||||
|
|
||||||
namespace WebsitePanel.WebDavPortal.Models.Account
|
namespace WebsitePanel.WebDavPortal.Models.Account
|
||||||
{
|
{
|
||||||
public class PasswordResetEmailModel
|
public class PasswordResetLoginModel
|
||||||
{
|
{
|
||||||
[Required]
|
[Required]
|
||||||
[Display(ResourceType = typeof(Resources.UI), Name = "Email")]
|
[Display(ResourceType = typeof(Resources.UI), Name = "Email")]
|
|
@ -3,7 +3,7 @@ using WebsitePanel.WebDavPortal.Models.Common;
|
||||||
|
|
||||||
namespace WebsitePanel.WebDavPortal.Models.Account
|
namespace WebsitePanel.WebDavPortal.Models.Account
|
||||||
{
|
{
|
||||||
public class PasswordResetSmsModel
|
public class PasswordResetPincodeModel
|
||||||
{
|
{
|
||||||
[Required]
|
[Required]
|
||||||
public string Sms { get; set; }
|
public string Sms { get; set; }
|
|
@ -0,0 +1,11 @@
|
||||||
|
using WebsitePanel.WebDavPortal.Models.Account.Enums;
|
||||||
|
|
||||||
|
namespace WebsitePanel.WebDavPortal.Models.Account
|
||||||
|
{
|
||||||
|
public class PasswordResetPincodeSendOptionsModel
|
||||||
|
{
|
||||||
|
public PincodeSendMethod Method { get; set; }
|
||||||
|
public string MobileNumber { get; set; }
|
||||||
|
public string Email { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -160,7 +160,7 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Please enter the verification code we sent to your phone. If you didn't receive a code, you can {0}..
|
/// Looks up a localized string similar to Please enter the verification code we sent to you. If you didn't receive a code, you can {0}..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string PasswordResetSmsHintFormat {
|
public static string PasswordResetSmsHintFormat {
|
||||||
get {
|
get {
|
||||||
|
@ -213,6 +213,24 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Pincode was not sent to your email address..
|
||||||
|
/// </summary>
|
||||||
|
public static string PincodeEmailWasNotSent {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("PincodeEmailWasNotSent", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Pincode was sent to your email address..
|
||||||
|
/// </summary>
|
||||||
|
public static string PincodeEmailWasSent {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("PincodeEmailWasSent", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to {0} field is required.
|
/// Looks up a localized string similar to {0} field is required.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -151,7 +151,7 @@
|
||||||
<value>A message was sent to your email address. Please check your email for further instructions.</value>
|
<value>A message was sent to your email address. Please check your email for further instructions.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordResetSmsHintFormat" xml:space="preserve">
|
<data name="PasswordResetSmsHintFormat" xml:space="preserve">
|
||||||
<value>Please enter the verification code we sent to your phone. If you didn't receive a code, you can {0}.</value>
|
<value>Please enter the verification code we sent to you. If you didn't receive a code, you can {0}.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="PasswordResetUserReason" xml:space="preserve">
|
<data name="PasswordResetUserReason" xml:space="preserve">
|
||||||
<value>Webdav portal user request.</value>
|
<value>Webdav portal user request.</value>
|
||||||
|
@ -168,6 +168,12 @@
|
||||||
<data name="PhoneNumberInvalid" xml:space="preserve">
|
<data name="PhoneNumberInvalid" xml:space="preserve">
|
||||||
<value>Phone number is invalid</value>
|
<value>Phone number is invalid</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="PincodeEmailWasNotSent" xml:space="preserve">
|
||||||
|
<value>Pincode was not sent to your email address.</value>
|
||||||
|
</data>
|
||||||
|
<data name="PincodeEmailWasSent" xml:space="preserve">
|
||||||
|
<value>Pincode was sent to your email address.</value>
|
||||||
|
</data>
|
||||||
<data name="Required" xml:space="preserve">
|
<data name="Required" xml:space="preserve">
|
||||||
<value>{0} field is required</value>
|
<value>{0} field is required</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -654,6 +654,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Password must meet the following requirements:.
|
||||||
|
/// </summary>
|
||||||
|
public static string PasswordFollowingRequirements {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("PasswordFollowingRequirements", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Password never expires. If you want to change password then please click {0}..
|
/// Looks up a localized string similar to Password never expires. If you want to change password then please click {0}..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -690,6 +699,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Pincode.
|
||||||
|
/// </summary>
|
||||||
|
public static string Pincode {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Pincode", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Please wait....
|
/// Looks up a localized string similar to Please wait....
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -798,6 +816,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Send.
|
||||||
|
/// </summary>
|
||||||
|
public static string Send {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Send", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Send email.
|
/// Looks up a localized string similar to Send email.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -807,6 +834,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to When you click the send button below, a Password Reset PIN will be sent to your Cell Phone or Email Address..
|
||||||
|
/// </summary>
|
||||||
|
public static string SendPincodeTo {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("SendPincodeTo", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Size.
|
/// Looks up a localized string similar to Size.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -915,6 +951,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to You are changing password for '{0}' account..
|
||||||
|
/// </summary>
|
||||||
|
public static string YouRChangingPswForFormat {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("YouRChangingPswForFormat", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Zip/Postal Code.
|
/// Looks up a localized string similar to Zip/Postal Code.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -405,4 +405,19 @@
|
||||||
<data name="NewPasswordBeenSet" xml:space="preserve">
|
<data name="NewPasswordBeenSet" xml:space="preserve">
|
||||||
<value>Your new password has been set.</value>
|
<value>Your new password has been set.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="PasswordFollowingRequirements" xml:space="preserve">
|
||||||
|
<value>Password must meet the following requirements:</value>
|
||||||
|
</data>
|
||||||
|
<data name="YouRChangingPswForFormat" xml:space="preserve">
|
||||||
|
<value>You are changing password for '{0}' account.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Pincode" xml:space="preserve">
|
||||||
|
<value>Pincode</value>
|
||||||
|
</data>
|
||||||
|
<data name="Send" xml:space="preserve">
|
||||||
|
<value>Send</value>
|
||||||
|
</data>
|
||||||
|
<data name="SendPincodeTo" xml:space="preserve">
|
||||||
|
<value>When you click the send button below, a Password Reset PIN will be sent to your Cell Phone or Email Address.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -36,7 +36,7 @@
|
||||||
<button type="submit" class="btn btn-default">Sign in</button>
|
<button type="submit" class="btn btn-default">Sign in</button>
|
||||||
@if (Model.PasswordResetEnabled)
|
@if (Model.PasswordResetEnabled)
|
||||||
{
|
{
|
||||||
<a href="@Url.RouteUrl(AccountRouteNames.PasswordResetEmail)" class="forgot-your-password-link">@UI.ForgotYourPassword</a>
|
<a href="@Url.RouteUrl(AccountRouteNames.PasswordResetLogin)" class="forgot-your-password-link">@UI.ForgotYourPassword</a>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
@{
|
@using WebsitePanel.WebDavPortal.Resources
|
||||||
|
@using WebsitePanel.WebDavPortal.UI.Routes
|
||||||
|
@model WebsitePanel.WebDavPortal.Models.Account.PasswordResetFinalStepModel
|
||||||
|
@{
|
||||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||||
}
|
}
|
||||||
@using WebsitePanel.WebDavPortal.Resources
|
|
||||||
@using WebsitePanel.WebDavPortal.UI.Routes
|
|
||||||
@model WebsitePanel.WebDavPortal.Models.Common.EditorTemplates.PasswordEditor
|
|
||||||
|
|
||||||
<div class="container row">
|
<div class="container row">
|
||||||
@using (Html.BeginRouteForm(AccountRouteNames.PasswordResetFinalStep, FormMethod.Post, new { @class = "form-horizontal user-password-reset-final-step bs-val-styles col-lg-9 col-lg-offset-3", id = "user-password-reset" }))
|
@using (Html.BeginRouteForm(AccountRouteNames.PasswordResetFinalStep, FormMethod.Post, new { @class = "form-horizontal user-password-reset-final-step bs-val-styles col-lg-9 col-lg-offset-3", id = "user-password-reset" }))
|
||||||
|
@ -13,7 +13,13 @@
|
||||||
<h3>@UI.PasswordReset</h3>
|
<h3>@UI.PasswordReset</h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@Html.EditorFor(x=>x)
|
<div class="form-group">
|
||||||
|
<span>
|
||||||
|
@string.Format(UI.YouRChangingPswForFormat, Model.Login)
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@Html.EditorFor(x => x.PasswordEditor)
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
|
@ -23,5 +29,64 @@
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@if (Model.PasswordEditor.Settings != null)
|
||||||
|
{
|
||||||
|
<div class="form-group hidden" id="password-hint-popup">
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
@string.Format(Messages.PasswordMinLengthFormat, Model.PasswordEditor.Settings.MinimumLength)
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
@string.Format(Messages.PasswordMaxLengthFormat, Model.PasswordEditor.Settings.MaximumLength)
|
||||||
|
</li>
|
||||||
|
|
||||||
|
@if (Model.PasswordEditor.Settings.PasswordComplexityEnabled)
|
||||||
|
{
|
||||||
|
if (Model.PasswordEditor.Settings.UppercaseLettersCount > 0)
|
||||||
|
{
|
||||||
|
<li>
|
||||||
|
@string.Format(Messages.PasswordUppercaseCountFormat, Model.PasswordEditor.Settings.UppercaseLettersCount)
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
if (Model.PasswordEditor.Settings.NumbersCount > 0)
|
||||||
|
{
|
||||||
|
<li>
|
||||||
|
@string.Format(Messages.PasswordNumbersCountFormat, Model.PasswordEditor.Settings.NumbersCount)
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
if (Model.PasswordEditor.Settings.SymbolsCount > 0)
|
||||||
|
{
|
||||||
|
<li>
|
||||||
|
@string.Format(Messages.PasswordSymbolsCountFormat, Model.PasswordEditor.Settings.SymbolsCount)
|
||||||
|
</li>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
@section scripts{
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
if ($(document).width() < 800) {
|
||||||
|
$('.password-input').data('placement', "bottom");
|
||||||
|
}
|
||||||
|
|
||||||
|
$(".password-input").popover({
|
||||||
|
html: true,
|
||||||
|
title: '@UI.PasswordFollowingRequirements',
|
||||||
|
content: function() {
|
||||||
|
return $('#password-hint-popup').html();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.blur(function() {
|
||||||
|
$(this).popover('hide');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
@using WebsitePanel.WebDavPortal.Resources
|
@using WebsitePanel.WebDavPortal.Resources
|
||||||
@using WebsitePanel.WebDavPortal.UI.Routes
|
@using WebsitePanel.WebDavPortal.UI.Routes
|
||||||
@model WebsitePanel.WebDavPortal.Models.Account.PasswordResetEmailModel
|
@model WebsitePanel.WebDavPortal.Models.Account.PasswordResetLoginModel
|
||||||
|
|
||||||
@{
|
@{
|
||||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
|
|
||||||
<div class="container row">
|
<div class="container row">
|
||||||
@using (Html.BeginRouteForm(AccountRouteNames.PasswordResetEmail, FormMethod.Post, new { @class = "user-password-reset-email bs-val-styles col-lg-10 col-lg-offset-3", id = "user-password-reset" }))
|
@using (Html.BeginRouteForm(AccountRouteNames.PasswordResetLogin, FormMethod.Post, new { @class = "user-password-reset-email bs-val-styles col-lg-10 col-lg-offset-3", id = "user-password-reset" }))
|
||||||
{
|
{
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<h3>@UI.PasswordReset</h3>
|
<h3>@UI.PasswordReset</h3>
|
||||||
|
@ -18,6 +18,6 @@
|
||||||
@Html.TextBoxFor(x => x.Email, new { @class = "form-control", placeholder = UI.Login })
|
@Html.TextBoxFor(x => x.Email, new { @class = "form-control", placeholder = UI.Login })
|
||||||
@Html.ValidationMessageFor(x => x.Email)
|
@Html.ValidationMessageFor(x => x.Email)
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-default">@UI.SendEmail</button>
|
<button type="submit" class="btn btn-default">@UI.Next</button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
|
@ -1,6 +1,6 @@
|
||||||
@using WebsitePanel.WebDavPortal.Resources
|
@using WebsitePanel.WebDavPortal.Resources
|
||||||
@using WebsitePanel.WebDavPortal.UI.Routes
|
@using WebsitePanel.WebDavPortal.UI.Routes
|
||||||
@model WebsitePanel.WebDavPortal.Models.Account.PasswordResetSmsModel
|
@model WebsitePanel.WebDavPortal.Models.Account.PasswordResetPincodeModel
|
||||||
|
|
||||||
@{
|
@{
|
||||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
@if (Model.IsTokenExist)
|
@if (Model.IsTokenExist)
|
||||||
{
|
{
|
||||||
<div class="container row">
|
<div class="container row">
|
||||||
@using (Html.BeginRouteForm(AccountRouteNames.PasswordResetSms, FormMethod.Post, new {@class = "user-password-reset-sms bs-val-styles col-lg-9 col-lg-offset-3", id = "user-password-reset"}))
|
@using (Html.BeginRouteForm(AccountRouteNames.PasswordResetPincode, FormMethod.Post, new {@class = "user-password-reset-sms bs-val-styles col-lg-9 col-lg-offset-3", id = "user-password-reset"}))
|
||||||
{
|
{
|
||||||
@Html.HiddenFor(x=>x.IsTokenExist)
|
@Html.HiddenFor(x=>x.IsTokenExist)
|
||||||
|
|
||||||
|
@ -17,9 +17,9 @@
|
||||||
<h3>@UI.PasswordReset</h3>
|
<h3>@UI.PasswordReset</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="@Html.IdFor(x => x.Sms)" class="control-label">@Html.Raw(string.Format(Messages.PasswordResetSmsHintFormat, Html.RouteLink(UI.TryAgain.ToLowerInvariant(), AccountRouteNames.PasswordResetSendSms)))</label>
|
<label for="@Html.IdFor(x => x.Sms)" class="control-label">@Html.Raw(string.Format(Messages.PasswordResetSmsHintFormat, Html.RouteLink(UI.TryAgain.ToLowerInvariant(), AccountRouteNames.PasswordResetPincodeSendOptions)))</label>
|
||||||
<div >
|
<div >
|
||||||
@Html.TextBoxFor(x => x.Sms, new {@class = "form-control", placeholder = UI.Sms})
|
@Html.TextBoxFor(x => x.Sms, new {@class = "form-control", placeholder = UI.Pincode})
|
||||||
@Html.ValidationMessageFor(x => x.Sms)
|
@Html.ValidationMessageFor(x => x.Sms)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -0,0 +1,55 @@
|
||||||
|
@using WebsitePanel.WebDav.Core.Extensions
|
||||||
|
@using WebsitePanel.WebDavPortal.Models.Account.Enums
|
||||||
|
@using WebsitePanel.WebDavPortal.Resources
|
||||||
|
@using WebsitePanel.WebDavPortal.UI.Routes
|
||||||
|
@model WebsitePanel.WebDavPortal.Models.Account.PasswordResetPincodeSendOptionsModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
var indexOf = Model.Email.IndexOf('@');
|
||||||
|
|
||||||
|
var maskedEmail = string.Empty;
|
||||||
|
for (int i = 0; i < indexOf - 1; i++)
|
||||||
|
{
|
||||||
|
maskedEmail += '*';
|
||||||
|
}
|
||||||
|
|
||||||
|
maskedEmail += Model.Email.Substring(indexOf - 1);
|
||||||
|
|
||||||
|
var maskedPhone = string.Empty;
|
||||||
|
for (int i = 0; i < Model.MobileNumber.Count() - 5; i++)
|
||||||
|
{
|
||||||
|
maskedPhone += '*';
|
||||||
|
}
|
||||||
|
|
||||||
|
maskedPhone += Model.MobileNumber.Tail(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container row">
|
||||||
|
@using (Html.BeginRouteForm(AccountRouteNames.PasswordResetPincodeSendOptions, FormMethod.Post, new { @class = "user-password-pincode-send-options bs-val-styles col-lg-10 col-lg-offset-3", id = "user-password-reset" }))
|
||||||
|
{
|
||||||
|
<div class="form-group">
|
||||||
|
<h3>@UI.PasswordReset</h3>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="input-group">
|
||||||
|
<label class="control-label">@UI.SendPincodeTo </label>
|
||||||
|
</div>
|
||||||
|
<div class="radio">
|
||||||
|
<label for="mobile-radio">
|
||||||
|
@Html.RadioButtonFor(x => x.Method, PincodeSendMethod.Mobile, new { id = "mobile-radio" })
|
||||||
|
@UI.MobilePhone: @maskedPhone
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="radio">
|
||||||
|
<label for="email-radio">
|
||||||
|
@Html.RadioButtonFor(x => x.Method, PincodeSendMethod.Email, new { id = "email-radio" })
|
||||||
|
@UI.Email: @maskedEmail
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-default">@UI.Send</button>
|
||||||
|
}
|
||||||
|
</div>
|
|
@ -8,7 +8,7 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="@Html.IdFor(x => x.NewPassword)" class="col-sm-2 control-label">@UI.NewPassword</label>
|
<label for="@Html.IdFor(x => x.NewPassword)" class="col-sm-2 control-label">@UI.NewPassword</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
@Html.PasswordFor(x => x.NewPassword, new { @class = "form-control", placeholder = UI.NewPassword, maxlength })
|
@Html.PasswordFor(x => x.NewPassword, new { @class = "form-control password-input", placeholder = UI.NewPassword, maxlength })
|
||||||
@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(m => m.NewPassword).ToHtmlString()))
|
@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(m => m.NewPassword).ToHtmlString()))
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="@Html.IdFor(x => x.NewPasswordConfirmation)" class="col-sm-2 control-label">@UI.NewPasswordConfirmation</label>
|
<label for="@Html.IdFor(x => x.NewPasswordConfirmation)" class="col-sm-2 control-label">@UI.NewPasswordConfirmation</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
@Html.PasswordFor(x => x.NewPasswordConfirmation, new { @class = "form-control", placeholder = UI.NewPasswordConfirmation, maxlength })
|
@Html.PasswordFor(x => x.NewPasswordConfirmation, new { @class = "form-control" , placeholder = UI.NewPasswordConfirmation, maxlength })
|
||||||
@Html.ValidationMessageFor(x => x.NewPasswordConfirmation)
|
@Html.ValidationMessageFor(x => x.NewPasswordConfirmation)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
<add key="UserGroupsKey" value="UserGroups" />
|
<add key="UserGroupsKey" value="UserGroups" />
|
||||||
<add key="OwaEditFoldersSession" value="OwaEditFolders" />
|
<add key="OwaEditFoldersSession" value="OwaEditFolders" />
|
||||||
<add key="PasswordResetSmsKey" value="PasswordResetSms" />
|
<add key="PasswordResetSmsKey" value="PasswordResetSms" />
|
||||||
|
<add key="AccountIdKey" value="AccountId" />
|
||||||
</sessionKeys>
|
</sessionKeys>
|
||||||
<fileIcons defaultPath="~/Content/Images/other-icon.png" folderPath="~/Content/Images/folder_100x100.png">
|
<fileIcons defaultPath="~/Content/Images/other-icon.png" folderPath="~/Content/Images/folder_100x100.png">
|
||||||
<add extension=".txt" path="~/Content/Images/txt-icon.png" />
|
<add extension=".txt" path="~/Content/Images/txt-icon.png" />
|
||||||
|
|
|
@ -196,9 +196,12 @@
|
||||||
<Compile Include="Mapping\Profiles\Webdav\ResourceTableItemProfile.cs" />
|
<Compile Include="Mapping\Profiles\Webdav\ResourceTableItemProfile.cs" />
|
||||||
<Compile Include="ModelBinders\DataTables\JqueryDataTableModelBinder.cs" />
|
<Compile Include="ModelBinders\DataTables\JqueryDataTableModelBinder.cs" />
|
||||||
<Compile Include="Models\AccountModel.cs" />
|
<Compile Include="Models\AccountModel.cs" />
|
||||||
|
<Compile Include="Models\Account\Enums\PincodeSendMethod.cs" />
|
||||||
<Compile Include="Models\Account\PasswordChangeModel.cs" />
|
<Compile Include="Models\Account\PasswordChangeModel.cs" />
|
||||||
<Compile Include="Models\Account\PasswordResetEmailModel.cs" />
|
<Compile Include="Models\Account\PasswordResetLoginModel.cs" />
|
||||||
<Compile Include="Models\Account\PasswordResetSmsModel.cs" />
|
<Compile Include="Models\Account\PasswordResetFinalStepModel.cs" />
|
||||||
|
<Compile Include="Models\Account\PasswordResetPincodeSendOptionsModel.cs" />
|
||||||
|
<Compile Include="Models\Account\PasswordResetPincodeModel.cs" />
|
||||||
<Compile Include="Models\Account\UserProfile.cs" />
|
<Compile Include="Models\Account\UserProfile.cs" />
|
||||||
<Compile Include="Models\Common\AjaxModel.cs" />
|
<Compile Include="Models\Common\AjaxModel.cs" />
|
||||||
<Compile Include="Models\Common\DataTable\JqueryDataTableBaseEntity.cs" />
|
<Compile Include="Models\Common\DataTable\JqueryDataTableBaseEntity.cs" />
|
||||||
|
@ -485,11 +488,12 @@
|
||||||
<Content Include="Views\Shared\EditorTemplates\CountrySelector.cshtml" />
|
<Content Include="Views\Shared\EditorTemplates\CountrySelector.cshtml" />
|
||||||
<Content Include="Views\Account\PasswordChange.cshtml" />
|
<Content Include="Views\Account\PasswordChange.cshtml" />
|
||||||
<Content Include="Views\Shared\EditorTemplates\PasswordEditor.cshtml" />
|
<Content Include="Views\Shared\EditorTemplates\PasswordEditor.cshtml" />
|
||||||
<Content Include="Views\Account\PasswordResetEmail.cshtml" />
|
<Content Include="Views\Account\PasswordResetLogin.cshtml" />
|
||||||
<Content Include="Views\Account\PasswordResetEmailSent.cshtml" />
|
<Content Include="Views\Account\PasswordResetEmailSent.cshtml" />
|
||||||
<Content Include="Views\Account\PasswordResetSms.cshtml" />
|
<Content Include="Views\Account\PasswordResetPincode.cshtml" />
|
||||||
<Content Include="Views\Account\PasswordResetFinalStep.cshtml" />
|
<Content Include="Views\Account\PasswordResetFinalStep.cshtml" />
|
||||||
<Content Include="Views\Account\PasswordSuccessfullyChanged.cshtml" />
|
<Content Include="Views\Account\PasswordSuccessfullyChanged.cshtml" />
|
||||||
|
<Content Include="Views\Account\PasswordResetPincodeSendOptions.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Models\FileSystem\Enums\" />
|
<Folder Include="Models\FileSystem\Enums\" />
|
||||||
|
@ -510,6 +514,7 @@
|
||||||
<EmbeddedResource Include="Resources\Messages.resx">
|
<EmbeddedResource Include="Resources\Messages.resx">
|
||||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Messages.Designer.cs</LastGenOutput>
|
<LastGenOutput>Messages.Designer.cs</LastGenOutput>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Resources\UI.resx">
|
<EmbeddedResource Include="Resources\UI.resx">
|
||||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
|
|
@ -124,7 +124,7 @@ table.BorderFillBox td .Brick {padding:0; line-height:normal; margin-bottom:9px;
|
||||||
.GridFooter {clear:both; font-size:8pt; color:#888; padding:8px 5px; border:1px solid #ddd; margin:10px 0 20px 0;}
|
.GridFooter {clear:both; font-size:8pt; color:#888; padding:8px 5px; border:1px solid #ddd; margin:10px 0 20px 0;}
|
||||||
.GridFooter img {vertical-align:-2px !important;}
|
.GridFooter img {vertical-align:-2px !important;}
|
||||||
.FormBody fieldset {padding:5px 10px 10px 10px; border:1px solid #ccc; margin-top:10px;}
|
.FormBody fieldset {padding:5px 10px 10px 10px; border:1px solid #ccc; margin-top:10px;}
|
||||||
.PreviewArea {background:#f0ad4e; padding:15px; margin:20px; color:#fff; font-size:14px;}
|
.PreviewArea {background:#f0ad4e; padding:15px; margin:20px; color:#000; font-size:14px;}
|
||||||
.HostingPlanGroup .Header {clear:both; background:#aa73c1; color:#fff; height:30px !important; line-height:30px;}
|
.HostingPlanGroup .Header {clear:both; background:#aa73c1; color:#fff; height:30px !important; line-height:30px;}
|
||||||
.HostingPlanGroup .Header span {font-size:inherit; line-height:inherit;}
|
.HostingPlanGroup .Header span {font-size:inherit; line-height:inherit;}
|
||||||
.HostingPlanGroup .Header .Left {float:left; font-weight:bold;}
|
.HostingPlanGroup .Header .Left {float:left; font-weight:bold;}
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="ddlPriorityItem.High" xml:space="preserve">
|
||||||
|
<value>High</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlPriorityItem.Low" xml:space="preserve">
|
||||||
|
<value>Low</value>
|
||||||
|
</data>
|
||||||
|
<data name="ddlPriorityItem.Normal" xml:space="preserve">
|
||||||
|
<value>Normal</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblFrom.Text" xml:space="preserve">
|
||||||
|
<value>From:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblHtmlBody.Text" xml:space="preserve">
|
||||||
|
<value>HTML Body:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblLogoUrl.Text" xml:space="preserve">
|
||||||
|
<value>Logo Url:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblNoChangesHtmlBody" xml:space="preserve">
|
||||||
|
<value>No Changes HTML Body:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblNoChangesTextBody.Text" xml:space="preserve">
|
||||||
|
<value>No Changes Text Body:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblPasswordResetLinkSmsBody.Text" xml:space="preserve">
|
||||||
|
<value>Password Reset Link Sms Body:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblPasswordResetPincodeSmsBody.Text" xml:space="preserve">
|
||||||
|
<value>Password Reset Link Pincode Body:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblPriority.Text" xml:space="preserve">
|
||||||
|
<value>Priority:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblSubject.Text" xml:space="preserve">
|
||||||
|
<value>Subject:</value>
|
||||||
|
</data>
|
||||||
|
<data name="lblTextBody.Text" xml:space="preserve">
|
||||||
|
<value>Text Body:</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -192,4 +192,7 @@
|
||||||
<data name="TwilioSettings.Text" xml:space="preserve">
|
<data name="TwilioSettings.Text" xml:space="preserve">
|
||||||
<value>Twilio</value>
|
<value>Twilio</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="lblPasswordResetLinkLifeSpan.Text" xml:space="preserve">
|
||||||
|
<value>Password Reset Link Life Span (hours):</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -156,4 +156,7 @@
|
||||||
<data name="lnkOrganizationUserPasswordResetLetter.Text" xml:space="preserve">
|
<data name="lnkOrganizationUserPasswordResetLetter.Text" xml:space="preserve">
|
||||||
<value>Organization User Password Reset Letter</value>
|
<value>Organization User Password Reset Letter</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="lnkOrganizationUserPasswordResetPincodeLetter.Text" xml:space="preserve">
|
||||||
|
<value>Organization User Password Reset Pincode Letter</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -120,6 +120,9 @@
|
||||||
<data name="btnResetPassoword.Text" xml:space="preserve">
|
<data name="btnResetPassoword.Text" xml:space="preserve">
|
||||||
<value>Send Password Reset Email</value>
|
<value>Send Password Reset Email</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="chkDontSaveAsMobile.Text" xml:space="preserve">
|
||||||
|
<value>Don't save as user mobile</value>
|
||||||
|
</data>
|
||||||
<data name="locEmailAddress.Text" xml:space="preserve">
|
<data name="locEmailAddress.Text" xml:space="preserve">
|
||||||
<value>Email:</value>
|
<value>Email:</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
<asp:Localize ID="locMobile" runat="server" meta:resourcekey="locMobile"></asp:Localize></td>
|
<asp:Localize ID="locMobile" runat="server" meta:resourcekey="locMobile"></asp:Localize></td>
|
||||||
<td>
|
<td>
|
||||||
<asp:TextBox runat="server" ID="txtMobile" CssClass="TextBox200" />
|
<asp:TextBox runat="server" ID="txtMobile" CssClass="TextBox200" />
|
||||||
|
<asp:CheckBox ID="chkDontSaveAsMobile" runat="server" Text="Don't save as mobile" meta:resourcekey="chkDontSaveAsMobile" Checked="True" />
|
||||||
<asp:RequiredFieldValidator ID="valMobile" runat="server" ErrorMessage="*" ControlToValidate="txtMobile" ValidationGroup="ResetUserPassword"></asp:RequiredFieldValidator>
|
<asp:RequiredFieldValidator ID="valMobile" runat="server" ErrorMessage="*" ControlToValidate="txtMobile" ValidationGroup="ResetUserPassword"></asp:RequiredFieldValidator>
|
||||||
<asp:RegularExpressionValidator ID="regexMobileValid" runat="server" ValidationExpression="^\+?\d+$" ValidationGroup="ResetUserPassword" ControlToValidate="txtMobile" ErrorMessage="Invalid Mobile Format"></asp:RegularExpressionValidator>
|
<asp:RegularExpressionValidator ID="regexMobileValid" runat="server" ValidationExpression="^\+?\d+$" ValidationGroup="ResetUserPassword" ControlToValidate="txtMobile" ErrorMessage="Invalid Mobile Format"></asp:RegularExpressionValidator>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -39,11 +39,13 @@ namespace WebsitePanel.Portal.ExchangeServer
|
||||||
|
|
||||||
if (rbtnEmail.Checked)
|
if (rbtnEmail.Checked)
|
||||||
{
|
{
|
||||||
ES.Services.Organizations.SendResetUserPasswordEmail(PanelRequest.ItemID,PanelRequest.AccountID, txtReason.Text, txtEmailAddress.Text, true);
|
ES.Services.Organizations.SendResetUserPasswordEmail(PanelRequest.ItemID, PanelRequest.AccountID,
|
||||||
|
txtReason.Text, txtEmailAddress.Text, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var result = ES.Services.Organizations.SendResetUserPasswordLinkSms(PanelRequest.ItemID, PanelRequest.AccountID, txtReason.Text, txtMobile.Text);
|
var result = ES.Services.Organizations.SendResetUserPasswordLinkSms(PanelRequest.ItemID,
|
||||||
|
PanelRequest.AccountID, txtReason.Text, txtMobile.Text);
|
||||||
|
|
||||||
if (!result.IsSuccess)
|
if (!result.IsSuccess)
|
||||||
{
|
{
|
||||||
|
@ -51,6 +53,49 @@ namespace WebsitePanel.Portal.ExchangeServer
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chkDontSaveAsMobile.Checked == false)
|
||||||
|
{
|
||||||
|
OrganizationUser user = ES.Services.Organizations.GetUserGeneralSettings(PanelRequest.ItemID,
|
||||||
|
PanelRequest.AccountID);
|
||||||
|
|
||||||
|
ES.Services.Organizations.SetUserGeneralSettings(
|
||||||
|
PanelRequest.ItemID, PanelRequest.AccountID,
|
||||||
|
user.DisplayName,
|
||||||
|
string.Empty,
|
||||||
|
false,
|
||||||
|
user.Disabled,
|
||||||
|
user.Locked,
|
||||||
|
|
||||||
|
user.FirstName,
|
||||||
|
user.Initials,
|
||||||
|
user.LastName,
|
||||||
|
|
||||||
|
user.Address,
|
||||||
|
user.City,
|
||||||
|
user.State,
|
||||||
|
user.Zip,
|
||||||
|
user.Country,
|
||||||
|
|
||||||
|
user.JobTitle,
|
||||||
|
user.Company,
|
||||||
|
user.Department,
|
||||||
|
user.Office,
|
||||||
|
user.Manager == null ? null : user.Manager.AccountName,
|
||||||
|
|
||||||
|
user.BusinessPhone,
|
||||||
|
user.Fax,
|
||||||
|
user.HomePhone,
|
||||||
|
txtMobile.Text,
|
||||||
|
user.Pager,
|
||||||
|
user.WebPage,
|
||||||
|
user.Notes,
|
||||||
|
user.ExternalEmail,
|
||||||
|
user.SubscriberNumber,
|
||||||
|
user.LevelId,
|
||||||
|
user.IsVIP,
|
||||||
|
user.UserMustChangePassword);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Response.Redirect(PortalUtils.EditUrl("ItemID", PanelRequest.ItemID.ToString(),
|
Response.Redirect(PortalUtils.EditUrl("ItemID", PanelRequest.ItemID.ToString(),
|
||||||
|
|
|
@ -147,6 +147,15 @@ namespace WebsitePanel.Portal.ExchangeServer {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::System.Web.UI.WebControls.TextBox txtMobile;
|
protected global::System.Web.UI.WebControls.TextBox txtMobile;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// chkDontSaveAsMobile control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.CheckBox chkDontSaveAsMobile;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// valMobile control.
|
/// valMobile control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -49,12 +49,5 @@
|
||||||
<td class="Normal" colspan="2">
|
<td class="Normal" colspan="2">
|
||||||
<asp:TextBox ID="txtBodyPasswordResetLinkSmsBody" runat="server" Rows="15" TextMode="MultiLine" Width="680px" CssClass="NormalTextBox" Wrap="false"></asp:TextBox></td>
|
<asp:TextBox ID="txtBodyPasswordResetLinkSmsBody" runat="server" Rows="15" TextMode="MultiLine" Width="680px" CssClass="NormalTextBox" Wrap="false"></asp:TextBox></td>
|
||||||
</tr>
|
</tr>
|
||||||
tr>
|
|
||||||
<td class="SubHead" colspan="2"><br /><br /><asp:Label ID="lblPasswordResetPincodeSmsBody" runat="server" meta:resourcekey="lblPasswordResetPincodeSmsBody" Text="Password Reset Link Pincode Body:"></asp:Label></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="Normal" colspan="2">
|
|
||||||
<asp:TextBox ID="txtPasswordResetPincodeSmsBody" runat="server" Rows="15" TextMode="MultiLine" Width="680px" CssClass="NormalTextBox" Wrap="false"></asp:TextBox></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
</table>
|
|
@ -20,7 +20,6 @@ namespace WebsitePanel.Portal
|
||||||
txtLogoUrl.Text = settings["LogoUrl"];
|
txtLogoUrl.Text = settings["LogoUrl"];
|
||||||
|
|
||||||
txtBodyPasswordResetLinkSmsBody.Text = settings["PasswordResetLinkSmsBody"];
|
txtBodyPasswordResetLinkSmsBody.Text = settings["PasswordResetLinkSmsBody"];
|
||||||
txtPasswordResetPincodeSmsBody.Text = settings["PasswordResetPincodeSmsBody"];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveSettings(UserSettings settings)
|
public void SaveSettings(UserSettings settings)
|
||||||
|
@ -33,7 +32,6 @@ namespace WebsitePanel.Portal
|
||||||
settings["LogoUrl"] = txtLogoUrl.Text;
|
settings["LogoUrl"] = txtLogoUrl.Text;
|
||||||
|
|
||||||
settings["PasswordResetLinkSmsBody"]= txtBodyPasswordResetLinkSmsBody.Text;
|
settings["PasswordResetLinkSmsBody"]= txtBodyPasswordResetLinkSmsBody.Text;
|
||||||
settings["PasswordResetPincodeSmsBody"] =txtPasswordResetPincodeSmsBody.Text;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -137,23 +137,5 @@ namespace WebsitePanel.Portal {
|
||||||
/// To modify move field declaration from designer file to code-behind file.
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::System.Web.UI.WebControls.TextBox txtBodyPasswordResetLinkSmsBody;
|
protected global::System.Web.UI.WebControls.TextBox txtBodyPasswordResetLinkSmsBody;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// lblPasswordResetPincodeSmsBody control.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Auto-generated field.
|
|
||||||
/// To modify move field declaration from designer file to code-behind file.
|
|
||||||
/// </remarks>
|
|
||||||
protected global::System.Web.UI.WebControls.Label lblPasswordResetPincodeSmsBody;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// txtPasswordResetPincodeSmsBody control.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Auto-generated field.
|
|
||||||
/// To modify move field declaration from designer file to code-behind file.
|
|
||||||
/// </remarks>
|
|
||||||
protected global::System.Web.UI.WebControls.TextBox txtPasswordResetPincodeSmsBody;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SettingsUserPasswordResetPincodeLetter.ascx.cs" Inherits="WebsitePanel.Portal.SettingsUserPasswordResetPincodeLetter" %>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" width="150" nowrap><asp:Label ID="lblFrom" runat="server" meta:resourcekey="lblFrom" Text="From:"></asp:Label></td>
|
||||||
|
<td class="Normal" width="100%">
|
||||||
|
<asp:TextBox ID="txtFrom" runat="server" Width="500px" CssClass="NormalTextBox"></asp:TextBox></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead"><asp:Label ID="lblSubject" runat="server" meta:resourcekey="lblSubject" Text="Subject:"></asp:Label></td>
|
||||||
|
<td class="Normal">
|
||||||
|
<asp:TextBox ID="txtSubject" runat="server" Width="500px" CssClass="NormalTextBox"></asp:TextBox></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead"><asp:Label ID="lblPriority" runat="server" meta:resourcekey="lblPriority" Text="Priority"></asp:Label></td>
|
||||||
|
<td class="Normal">
|
||||||
|
<asp:DropDownList ID="ddlPriority" runat="server" CssClass="NormalTextBox" resourcekey="ddlPriority">
|
||||||
|
<asp:ListItem Value="High">High</asp:ListItem>
|
||||||
|
<asp:ListItem Value="Normal">Normal</asp:ListItem>
|
||||||
|
<asp:ListItem Value="Low">Low</asp:ListItem>
|
||||||
|
</asp:DropDownList>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead"><asp:Label ID="lblLogoUrl" runat="server" meta:resourcekey="lblLogoUrl" Text="Logo Url:"></asp:Label></td>
|
||||||
|
<td class="Normal">
|
||||||
|
<asp:TextBox ID="txtLogoUrl" runat="server" Width="500px" CssClass="NormalTextBox"></asp:TextBox></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" colspan="2"><br /><br /><asp:Label ID="lblHtmlBody" runat="server" meta:resourcekey="lblHtmlBody" Text="HTML Body:"></asp:Label></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="Normal" colspan="2">
|
||||||
|
<asp:TextBox ID="txtHtmlBody" runat="server" Rows="15" TextMode="MultiLine" Width="680px" CssClass="NormalTextBox" Wrap="false"></asp:TextBox></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" colspan="2"><br /><br /><asp:Label ID="lblTextBody" runat="server" meta:resourcekey="lblTextBody" Text="Text Body:"></asp:Label></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="Normal" colspan="2">
|
||||||
|
<asp:TextBox ID="txtTextBody" runat="server" Rows="15" TextMode="MultiLine" Width="680px" CssClass="NormalTextBox" Wrap="false"></asp:TextBox></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" colspan="2"><br /><br /><asp:Label ID="lblPasswordResetPincodeSmsBody" runat="server" meta:resourcekey="lblPasswordResetPincodeSmsBody" Text="Password Reset Link Pincode Body:"></asp:Label></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="Normal" colspan="2">
|
||||||
|
<asp:TextBox ID="txtPasswordResetPincodeSmsBody" runat="server" Rows="15" TextMode="MultiLine" Width="680px" CssClass="NormalTextBox" Wrap="false"></asp:TextBox></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
|
@ -0,0 +1,37 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web;
|
||||||
|
using System.Web.UI;
|
||||||
|
using System.Web.UI.WebControls;
|
||||||
|
using WebsitePanel.EnterpriseServer;
|
||||||
|
|
||||||
|
namespace WebsitePanel.Portal
|
||||||
|
{
|
||||||
|
public partial class SettingsUserPasswordResetPincodeLetter : WebsitePanelControlBase, IUserSettingsEditorControl
|
||||||
|
{
|
||||||
|
public void BindSettings(UserSettings settings)
|
||||||
|
{
|
||||||
|
txtFrom.Text = settings["From"];
|
||||||
|
txtSubject.Text = settings["Subject"];
|
||||||
|
Utils.SelectListItem(ddlPriority, settings["Priority"]);
|
||||||
|
txtHtmlBody.Text = settings["HtmlBody"];
|
||||||
|
txtTextBody.Text = settings["TextBody"];
|
||||||
|
txtLogoUrl.Text = settings["LogoUrl"];
|
||||||
|
|
||||||
|
txtPasswordResetPincodeSmsBody.Text = settings["PasswordResetPincodeSmsBody"];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveSettings(UserSettings settings)
|
||||||
|
{
|
||||||
|
settings["From"] = txtFrom.Text;
|
||||||
|
settings["Subject"] = txtSubject.Text;
|
||||||
|
settings["Priority"] = ddlPriority.SelectedValue;
|
||||||
|
settings["HtmlBody"] = txtHtmlBody.Text;
|
||||||
|
settings["TextBody"] = txtTextBody.Text;
|
||||||
|
settings["LogoUrl"] = txtLogoUrl.Text;
|
||||||
|
|
||||||
|
settings["PasswordResetPincodeSmsBody"] = txtPasswordResetPincodeSmsBody.Text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,141 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace WebsitePanel.Portal {
|
||||||
|
|
||||||
|
|
||||||
|
public partial class SettingsUserPasswordResetPincodeLetter {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lblFrom control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Label lblFrom;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtFrom control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtFrom;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lblSubject control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Label lblSubject;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtSubject control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtSubject;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lblPriority control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Label lblPriority;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ddlPriority control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.DropDownList ddlPriority;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lblLogoUrl control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Label lblLogoUrl;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtLogoUrl control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtLogoUrl;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lblHtmlBody control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Label lblHtmlBody;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtHtmlBody control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtHtmlBody;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lblTextBody control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Label lblTextBody;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtTextBody control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtTextBody;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lblPasswordResetPincodeSmsBody control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Label lblPasswordResetPincodeSmsBody;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtPasswordResetPincodeSmsBody control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtPasswordResetPincodeSmsBody;
|
||||||
|
}
|
||||||
|
}
|
|
@ -92,10 +92,15 @@
|
||||||
<asp:CheckBox ID="chkEnablePasswordReset" runat="server" Text="Yes" meta:resourcekey="chkEnablePasswordReset" />
|
<asp:CheckBox ID="chkEnablePasswordReset" runat="server" Text="Yes" meta:resourcekey="chkEnablePasswordReset" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="SubHead" style="width:200px;"><asp:Localize ID="lblPasswordResetLinkLifeSpan" runat="server" meta:resourcekey="lblPasswordResetLinkLifeSpan" />
|
||||||
|
<td><asp:TextBox runat="server" ID="txtPasswordResetLinkLifeSpan" Width="450px" /></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="SubHead" style="width:200px;"><asp:Localize ID="lblWebdavPortalUrl" runat="server" meta:resourcekey="lblWebdavPortalUrl" />
|
<td class="SubHead" style="width:200px;"><asp:Localize ID="lblWebdavPortalUrl" runat="server" meta:resourcekey="lblWebdavPortalUrl" />
|
||||||
<td><asp:TextBox runat="server" ID="txtWebdavPortalUrl" Width="450px" /></td>
|
<td><asp:TextBox runat="server" ID="txtWebdavPortalUrl" Width="450px" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
</asp:Panel>
|
</asp:Panel>
|
||||||
|
|
||||||
|
|
|
@ -166,6 +166,7 @@ namespace WebsitePanel.Portal
|
||||||
{
|
{
|
||||||
chkEnablePasswordReset.Checked = Utils.ParseBool(settings[WSP.SystemSettings.WEBDAV_PASSWORD_RESET_ENABLED_KEY], false);
|
chkEnablePasswordReset.Checked = Utils.ParseBool(settings[WSP.SystemSettings.WEBDAV_PASSWORD_RESET_ENABLED_KEY], false);
|
||||||
txtWebdavPortalUrl.Text = settings[WEBDAV_PORTAL_URL];
|
txtWebdavPortalUrl.Text = settings[WEBDAV_PORTAL_URL];
|
||||||
|
txtPasswordResetLinkLifeSpan.Text = settings[WSP.SystemSettings.WEBDAV_PASSWORD_RESET_LINK_LIFE_SPAN];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Twilio portal
|
// Twilio portal
|
||||||
|
@ -262,6 +263,7 @@ namespace WebsitePanel.Portal
|
||||||
settings = new WSP.SystemSettings();
|
settings = new WSP.SystemSettings();
|
||||||
settings[WEBDAV_PORTAL_URL] = txtWebdavPortalUrl.Text;
|
settings[WEBDAV_PORTAL_URL] = txtWebdavPortalUrl.Text;
|
||||||
settings[WSP.SystemSettings.WEBDAV_PASSWORD_RESET_ENABLED_KEY] = chkEnablePasswordReset.Checked.ToString();
|
settings[WSP.SystemSettings.WEBDAV_PASSWORD_RESET_ENABLED_KEY] = chkEnablePasswordReset.Checked.ToString();
|
||||||
|
settings[WSP.SystemSettings.WEBDAV_PASSWORD_RESET_LINK_LIFE_SPAN] = txtPasswordResetLinkLifeSpan.Text;
|
||||||
result = ES.Services.System.SetSystemSettings(WSP.SystemSettings.WEBDAV_PORTAL_SETTINGS, settings);
|
result = ES.Services.System.SetSystemSettings(WSP.SystemSettings.WEBDAV_PORTAL_SETTINGS, settings);
|
||||||
|
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
|
|
|
@ -264,6 +264,24 @@ namespace WebsitePanel.Portal {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::System.Web.UI.WebControls.CheckBox chkEnablePasswordReset;
|
protected global::System.Web.UI.WebControls.CheckBox chkEnablePasswordReset;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lblPasswordResetLinkLifeSpan control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.Localize lblPasswordResetLinkLifeSpan;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// txtPasswordResetLinkLifeSpan control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.TextBox txtPasswordResetLinkLifeSpan;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// lblWebdavPortalUrl control.
|
/// lblWebdavPortalUrl control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -50,6 +50,10 @@
|
||||||
<asp:HyperLink ID="lnkOrganizationUserPasswordResetLetter" runat="server" meta:resourcekey="lnkOrganizationUserPasswordResetLetter"
|
<asp:HyperLink ID="lnkOrganizationUserPasswordResetLetter" runat="server" meta:resourcekey="lnkOrganizationUserPasswordResetLetter"
|
||||||
Text="User Password Reset Letter" NavigateUrl='<%# GetSettingsLink("UserPasswordResetLetter", "SettingsUserPasswordResetLetter") %>'></asp:HyperLink>
|
Text="User Password Reset Letter" NavigateUrl='<%# GetSettingsLink("UserPasswordResetLetter", "SettingsUserPasswordResetLetter") %>'></asp:HyperLink>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<asp:HyperLink ID="lnkOrganizationUserPasswordResetPincodeLetter" runat="server" meta:resourcekey="lnkOrganizationUserPasswordResetPincodeLetter"
|
||||||
|
Text="User Password Reset Pincode Letter" NavigateUrl='<%# GetSettingsLink("UserPasswordResetPincodeLetter", "SettingsUserPasswordResetPincodeLetter") %>'></asp:HyperLink>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="FormFooter">
|
<div class="FormFooter">
|
||||||
|
|
|
@ -120,6 +120,15 @@ namespace WebsitePanel.Portal {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::System.Web.UI.WebControls.HyperLink lnkOrganizationUserPasswordResetLetter;
|
protected global::System.Web.UI.WebControls.HyperLink lnkOrganizationUserPasswordResetLetter;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// lnkOrganizationUserPasswordResetPincodeLetter control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.HyperLink lnkOrganizationUserPasswordResetPincodeLetter;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// btnCancel control.
|
/// btnCancel control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -350,6 +350,10 @@
|
||||||
<DependentUpon>UserPasswordExpirationNotificationView.ascx</DependentUpon>
|
<DependentUpon>UserPasswordExpirationNotificationView.ascx</DependentUpon>
|
||||||
<SubType>ASPXCodeBehind</SubType>
|
<SubType>ASPXCodeBehind</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="SettingsUserPasswordResetPincodeLetter.ascx.cs">
|
||||||
|
<DependentUpon>SettingsUserPasswordResetPincodeLetter.ascx</DependentUpon>
|
||||||
|
<SubType>ASPXCodeBehind</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="SearchObject.ascx.cs">
|
<Compile Include="SearchObject.ascx.cs">
|
||||||
<DependentUpon>SearchObject.ascx</DependentUpon>
|
<DependentUpon>SearchObject.ascx</DependentUpon>
|
||||||
<SubType>ASPXCodeBehind</SubType>
|
<SubType>ASPXCodeBehind</SubType>
|
||||||
|
@ -357,6 +361,9 @@
|
||||||
<Compile Include="SearchObject.ascx.designer.cs">
|
<Compile Include="SearchObject.ascx.designer.cs">
|
||||||
<DependentUpon>SearchObject.ascx</DependentUpon>
|
<DependentUpon>SearchObject.ascx</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="SettingsUserPasswordResetPincodeLetter.ascx.designer.cs">
|
||||||
|
<DependentUpon>SettingsUserPasswordResetPincodeLetter.ascx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="VPS2012\RemoteDesktop\Connect.aspx.cs">
|
<Compile Include="VPS2012\RemoteDesktop\Connect.aspx.cs">
|
||||||
<DependentUpon>Connect.aspx</DependentUpon>
|
<DependentUpon>Connect.aspx</DependentUpon>
|
||||||
<SubType>ASPXCodeBehind</SubType>
|
<SubType>ASPXCodeBehind</SubType>
|
||||||
|
@ -4900,6 +4907,7 @@
|
||||||
<Content Include="ScheduleTaskControls\UserPasswordExpirationNotificationView.ascx" />
|
<Content Include="ScheduleTaskControls\UserPasswordExpirationNotificationView.ascx" />
|
||||||
<Content Include="SettingsUserPasswordExpirationLetter.ascx" />
|
<Content Include="SettingsUserPasswordExpirationLetter.ascx" />
|
||||||
<Content Include="SettingsUserPasswordResetLetter.ascx" />
|
<Content Include="SettingsUserPasswordResetLetter.ascx" />
|
||||||
|
<Content Include="SettingsUserPasswordResetPincodeLetter.ascx" />
|
||||||
<Content Include="VPS2012\RemoteDesktop\Connect.aspx" />
|
<Content Include="VPS2012\RemoteDesktop\Connect.aspx" />
|
||||||
<Content Include="VPS2012\RemoteDesktop\msrdp.cab" />
|
<Content Include="VPS2012\RemoteDesktop\msrdp.cab" />
|
||||||
<Content Include="VPS2012\TestVirtualMachineTemplate.aspx" />
|
<Content Include="VPS2012\TestVirtualMachineTemplate.aspx" />
|
||||||
|
@ -5014,6 +5022,7 @@
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="ExchangeServer\App_LocalResources\OrganizationSettingsGeneralSettings.ascx.resx" />
|
<Content Include="ExchangeServer\App_LocalResources\OrganizationSettingsGeneralSettings.ascx.resx" />
|
||||||
<Content Include="App_LocalResources\SettingsUserPasswordResetLetter.ascx.resx" />
|
<Content Include="App_LocalResources\SettingsUserPasswordResetLetter.ascx.resx" />
|
||||||
|
<Content Include="App_LocalResources\SettingsUserPasswordResetPincodeLetter.ascx.resx" />
|
||||||
<Content Include="App_LocalResources\VpsMenu.ascx.resx">
|
<Content Include="App_LocalResources\VpsMenu.ascx.resx">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Content>
|
</Content>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue