Merge
|
@ -10031,6 +10031,37 @@ UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordResetLetterTextBo
|
|||
GO
|
||||
|
||||
|
||||
|
||||
|
||||
DECLARE @UserPasswordResetSMSBody nvarchar(2500)
|
||||
|
||||
Set @UserPasswordResetSMSBody = N'Password reset link:
|
||||
#passwordResetLink#
|
||||
'
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetLetter' AND [PropertyName]= N'PasswordResetLinkSmsBody' )
|
||||
BEGIN
|
||||
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetLetter', N'PasswordResetLinkSmsBody', @UserPasswordResetSMSBody)
|
||||
END
|
||||
ELSE
|
||||
UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordResetSMSBody WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetLetter' AND [PropertyName]= N'PasswordResetLinkSmsBody'
|
||||
GO
|
||||
|
||||
|
||||
DECLARE @UserPasswordPincodeSMSBody nvarchar(2500)
|
||||
|
||||
Set @UserPasswordPincodeSMSBody = N'
|
||||
Your password reset pincode:
|
||||
#passwordResetPincode#'
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM [dbo].[UserSettings] WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetLetter' AND [PropertyName]= N'PasswordResetPincodeSmsBody' )
|
||||
BEGIN
|
||||
INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [PropertyValue]) VALUES (1, N'UserPasswordResetLetter', N'PasswordResetPincodeSmsBody', @UserPasswordPincodeSMSBody)
|
||||
END
|
||||
ELSE
|
||||
UPDATE [dbo].[UserSettings] SET [PropertyValue] = @UserPasswordPincodeSMSBody WHERE [UserID] = 1 AND [SettingsName]= N'UserPasswordResetLetter' AND [PropertyName]= N'PasswordResetPincodeSmsBody'
|
||||
GO
|
||||
|
||||
-- Exchange setup EMAIL TEMPLATE
|
||||
|
||||
|
||||
|
@ -10690,7 +10721,6 @@ GO
|
|||
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSearchObject')
|
||||
DROP PROCEDURE GetSearchObject
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[GetSearchObject]
|
||||
(
|
||||
@ActorID int,
|
||||
|
|
6
WebsitePanel/Sources/Tools/.nuget/NuGet.Config
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<solution>
|
||||
<add key="disableSourceControlIntegration" value="true" />
|
||||
</solution>
|
||||
</configuration>
|
BIN
WebsitePanel/Sources/Tools/.nuget/NuGet.exe
Normal file
144
WebsitePanel/Sources/Tools/.nuget/NuGet.targets
Normal file
|
@ -0,0 +1,144 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir>
|
||||
|
||||
<!-- Enable the restore command to run before builds -->
|
||||
<RestorePackages Condition=" '$(RestorePackages)' == '' ">false</RestorePackages>
|
||||
|
||||
<!-- Property that enables building a package from a project -->
|
||||
<BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>
|
||||
|
||||
<!-- Determines if package restore consent is required to restore packages -->
|
||||
<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>
|
||||
|
||||
<!-- Download NuGet.exe if it does not already exist -->
|
||||
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(PackageSources)' == '' ">
|
||||
<!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
|
||||
<!-- The official NuGet package source (https://www.nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
|
||||
<!--
|
||||
<PackageSource Include="https://www.nuget.org/api/v2/" />
|
||||
<PackageSource Include="https://my-nuget-source/nuget/" />
|
||||
-->
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
|
||||
<!-- Windows specific commands -->
|
||||
<NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
|
||||
<!-- We need to launch nuget.exe with the mono command if we're not on windows -->
|
||||
<NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<PackagesProjectConfig Condition=" '$(OS)' == 'Windows_NT'">$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config</PackagesProjectConfig>
|
||||
<PackagesProjectConfig Condition=" '$(OS)' != 'Windows_NT'">$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config</PackagesProjectConfig>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<PackagesConfig Condition="Exists('$(MSBuildProjectDirectory)\packages.config')">$(MSBuildProjectDirectory)\packages.config</PackagesConfig>
|
||||
<PackagesConfig Condition="Exists('$(PackagesProjectConfig)')">$(PackagesProjectConfig)</PackagesConfig>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- NuGet command -->
|
||||
<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\NuGet.exe</NuGetExePath>
|
||||
<PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>
|
||||
|
||||
<NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
|
||||
<NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 "$(NuGetExePath)"</NuGetCommand>
|
||||
|
||||
<PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>
|
||||
|
||||
<RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
|
||||
<NonInteractiveSwitch Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' ">-NonInteractive</NonInteractiveSwitch>
|
||||
|
||||
<PaddedSolutionDir Condition=" '$(OS)' == 'Windows_NT'">"$(SolutionDir) "</PaddedSolutionDir>
|
||||
<PaddedSolutionDir Condition=" '$(OS)' != 'Windows_NT' ">"$(SolutionDir)"</PaddedSolutionDir>
|
||||
|
||||
<!-- Commands -->
|
||||
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand>
|
||||
<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand>
|
||||
|
||||
<!-- We need to ensure packages are restored prior to assembly resolve -->
|
||||
<BuildDependsOn Condition="$(RestorePackages) == 'true'">
|
||||
RestorePackages;
|
||||
$(BuildDependsOn);
|
||||
</BuildDependsOn>
|
||||
|
||||
<!-- Make the build depend on restore packages -->
|
||||
<BuildDependsOn Condition="$(BuildPackage) == 'true'">
|
||||
$(BuildDependsOn);
|
||||
BuildPackage;
|
||||
</BuildDependsOn>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="CheckPrerequisites">
|
||||
<!-- Raise an error if we're unable to locate nuget.exe -->
|
||||
<Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
|
||||
<!--
|
||||
Take advantage of MsBuild's build dependency tracking to make sure that we only ever download nuget.exe once.
|
||||
This effectively acts as a lock that makes sure that the download operation will only happen once and all
|
||||
parallel builds will have to wait for it to complete.
|
||||
-->
|
||||
<MsBuild Targets="_DownloadNuGet" Projects="$(MSBuildThisFileFullPath)" Properties="Configuration=NOT_IMPORTANT;DownloadNuGetExe=$(DownloadNuGetExe)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="_DownloadNuGet">
|
||||
<DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')" />
|
||||
</Target>
|
||||
|
||||
<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
|
||||
<Exec Command="$(RestoreCommand)"
|
||||
Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />
|
||||
|
||||
<Exec Command="$(RestoreCommand)"
|
||||
LogStandardErrorAsError="true"
|
||||
Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
|
||||
<Exec Command="$(BuildCommand)"
|
||||
Condition=" '$(OS)' != 'Windows_NT' " />
|
||||
|
||||
<Exec Command="$(BuildCommand)"
|
||||
LogStandardErrorAsError="true"
|
||||
Condition=" '$(OS)' == 'Windows_NT' " />
|
||||
</Target>
|
||||
|
||||
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
|
||||
<ParameterGroup>
|
||||
<OutputFilename ParameterType="System.String" Required="true" />
|
||||
</ParameterGroup>
|
||||
<Task>
|
||||
<Reference Include="System.Core" />
|
||||
<Using Namespace="System" />
|
||||
<Using Namespace="System.IO" />
|
||||
<Using Namespace="System.Net" />
|
||||
<Using Namespace="Microsoft.Build.Framework" />
|
||||
<Using Namespace="Microsoft.Build.Utilities" />
|
||||
<Code Type="Fragment" Language="cs">
|
||||
<![CDATA[
|
||||
try {
|
||||
OutputFilename = Path.GetFullPath(OutputFilename);
|
||||
|
||||
Log.LogMessage("Downloading latest version of NuGet.exe...");
|
||||
WebClient webClient = new WebClient();
|
||||
webClient.DownloadFile("https://www.nuget.org/nuget.exe", OutputFilename);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Log.LogErrorFromException(ex);
|
||||
return false;
|
||||
}
|
||||
]]>
|
||||
</Code>
|
||||
</Task>
|
||||
</UsingTask>
|
||||
</Project>
|
|
@ -47,6 +47,14 @@ namespace WebsitePanel.EnterpriseServer
|
|||
public const string PACKAGE_DISPLAY_SETTINGS = "PackageDisplaySettings";
|
||||
public const string RDS_SETTINGS = "RdsSettings";
|
||||
public const string WEBDAV_PORTAL_SETTINGS = "WebdavPortalSettings";
|
||||
public const string TWILIO_SETTINGS = "TwilioSettings";
|
||||
|
||||
|
||||
//Keys
|
||||
public const string TWILIO_ACCOUNTSID_KEY = "TwilioAccountSid";
|
||||
public const string TWILIO_AUTHTOKEN_KEY = "TwilioAuthToken";
|
||||
public const string TWILIO_PHONEFROM_KEY = "TwilioPhoneFrom";
|
||||
|
||||
public const string WEBDAV_PASSWORD_RESET_ENABLED_KEY = "WebdavPswResetEnabled";
|
||||
|
||||
// key to access to wpi main & custom feed in wpi settings
|
||||
|
|
|
@ -11,6 +11,12 @@
|
|||
//
|
||||
// This source code was auto-generated by wsdl, Version=2.0.50727.3038.
|
||||
//
|
||||
|
||||
using WebsitePanel.Providers;
|
||||
using WebsitePanel.Providers.Common;
|
||||
using WebsitePanel.Providers.HostedSolution;
|
||||
using WebsitePanel.Providers.ResultObjects;
|
||||
|
||||
namespace WebsitePanel.EnterpriseServer {
|
||||
using System.Xml.Serialization;
|
||||
using System.Web.Services;
|
||||
|
@ -19,10 +25,6 @@ namespace WebsitePanel.EnterpriseServer {
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Data;
|
||||
using WebsitePanel.Providers.HostedSolution;
|
||||
using WebsitePanel.Providers.Common;
|
||||
using WebsitePanel.Providers.ResultObjects;
|
||||
using WebsitePanel.Providers;
|
||||
|
||||
|
||||
/// <remarks/>
|
||||
|
@ -4311,24 +4313,26 @@ namespace WebsitePanel.EnterpriseServer {
|
|||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetMailboxSetupInstructions", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public string GetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup) {
|
||||
public string GetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup, string passwordResetUrl) {
|
||||
object[] results = this.Invoke("GetMailboxSetupInstructions", new object[] {
|
||||
itemId,
|
||||
accountId,
|
||||
pmm,
|
||||
emailMode,
|
||||
signup});
|
||||
signup,
|
||||
passwordResetUrl});
|
||||
return ((string)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.IAsyncResult BeginGetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup, System.AsyncCallback callback, object asyncState) {
|
||||
public System.IAsyncResult BeginGetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup, string passwordResetUrl, System.AsyncCallback callback, object asyncState) {
|
||||
return this.BeginInvoke("GetMailboxSetupInstructions", new object[] {
|
||||
itemId,
|
||||
accountId,
|
||||
pmm,
|
||||
emailMode,
|
||||
signup}, callback, asyncState);
|
||||
signup,
|
||||
passwordResetUrl}, callback, asyncState);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
|
@ -4338,12 +4342,12 @@ namespace WebsitePanel.EnterpriseServer {
|
|||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetMailboxSetupInstructionsAsync(int itemId, int accountId, bool pmm, bool emailMode, bool signup) {
|
||||
this.GetMailboxSetupInstructionsAsync(itemId, accountId, pmm, emailMode, signup, null);
|
||||
public void GetMailboxSetupInstructionsAsync(int itemId, int accountId, bool pmm, bool emailMode, bool signup, string passwordResetUrl) {
|
||||
this.GetMailboxSetupInstructionsAsync(itemId, accountId, pmm, emailMode, signup, passwordResetUrl, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetMailboxSetupInstructionsAsync(int itemId, int accountId, bool pmm, bool emailMode, bool signup, object userState) {
|
||||
public void GetMailboxSetupInstructionsAsync(int itemId, int accountId, bool pmm, bool emailMode, bool signup, string passwordResetUrl, object userState) {
|
||||
if ((this.GetMailboxSetupInstructionsOperationCompleted == null)) {
|
||||
this.GetMailboxSetupInstructionsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetMailboxSetupInstructionsOperationCompleted);
|
||||
}
|
||||
|
@ -4352,7 +4356,8 @@ namespace WebsitePanel.EnterpriseServer {
|
|||
accountId,
|
||||
pmm,
|
||||
emailMode,
|
||||
signup}, this.GetMailboxSetupInstructionsOperationCompleted, userState);
|
||||
signup,
|
||||
passwordResetUrl}, this.GetMailboxSetupInstructionsOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnGetMailboxSetupInstructionsOperationCompleted(object arg) {
|
||||
|
|
|
@ -80,6 +80,12 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
|||
|
||||
private System.Threading.SendOrPostCallback SetDefaultOrganizationOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback GetUserGeneralSettingsWithExtraDataOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback SendResetUserPasswordLinkSmsOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback SendResetUserPasswordPincodeSmsOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback AddOrganizationDomainOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback ChangeOrganizationDomainTypeOperationCompleted;
|
||||
|
@ -229,6 +235,15 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
|||
/// <remarks/>
|
||||
public event SetDefaultOrganizationCompletedEventHandler SetDefaultOrganizationCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event GetUserGeneralSettingsWithExtraDataCompletedEventHandler GetUserGeneralSettingsWithExtraDataCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event SendResetUserPasswordLinkSmsCompletedEventHandler SendResetUserPasswordLinkSmsCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event SendResetUserPasswordPincodeSmsCompletedEventHandler SendResetUserPasswordPincodeSmsCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event AddOrganizationDomainCompletedEventHandler AddOrganizationDomainCompleted;
|
||||
|
||||
|
@ -1310,6 +1325,144 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
|||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetUserGeneralSettingsWithExtraData", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public OrganizationUser GetUserGeneralSettingsWithExtraData(int itemId, int accountId) {
|
||||
object[] results = this.Invoke("GetUserGeneralSettingsWithExtraData", new object[] {
|
||||
itemId,
|
||||
accountId});
|
||||
return ((OrganizationUser)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.IAsyncResult BeginGetUserGeneralSettingsWithExtraData(int itemId, int accountId, System.AsyncCallback callback, object asyncState) {
|
||||
return this.BeginInvoke("GetUserGeneralSettingsWithExtraData", new object[] {
|
||||
itemId,
|
||||
accountId}, callback, asyncState);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public OrganizationUser EndGetUserGeneralSettingsWithExtraData(System.IAsyncResult asyncResult) {
|
||||
object[] results = this.EndInvoke(asyncResult);
|
||||
return ((OrganizationUser)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetUserGeneralSettingsWithExtraDataAsync(int itemId, int accountId) {
|
||||
this.GetUserGeneralSettingsWithExtraDataAsync(itemId, accountId, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetUserGeneralSettingsWithExtraDataAsync(int itemId, int accountId, object userState) {
|
||||
if ((this.GetUserGeneralSettingsWithExtraDataOperationCompleted == null)) {
|
||||
this.GetUserGeneralSettingsWithExtraDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUserGeneralSettingsWithExtraDataOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("GetUserGeneralSettingsWithExtraData", new object[] {
|
||||
itemId,
|
||||
accountId}, this.GetUserGeneralSettingsWithExtraDataOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnGetUserGeneralSettingsWithExtraDataOperationCompleted(object arg) {
|
||||
if ((this.GetUserGeneralSettingsWithExtraDataCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.GetUserGeneralSettingsWithExtraDataCompleted(this, new GetUserGeneralSettingsWithExtraDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SendResetUserPasswordLinkSms", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public ResultObject SendResetUserPasswordLinkSms(int itemId, int accountId, string reason, string phoneTo) {
|
||||
object[] results = this.Invoke("SendResetUserPasswordLinkSms", new object[] {
|
||||
itemId,
|
||||
accountId,
|
||||
reason,
|
||||
phoneTo});
|
||||
return ((ResultObject)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.IAsyncResult BeginSendResetUserPasswordLinkSms(int itemId, int accountId, string reason, string phoneTo, System.AsyncCallback callback, object asyncState) {
|
||||
return this.BeginInvoke("SendResetUserPasswordLinkSms", new object[] {
|
||||
itemId,
|
||||
accountId,
|
||||
reason,
|
||||
phoneTo}, callback, asyncState);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public ResultObject EndSendResetUserPasswordLinkSms(System.IAsyncResult asyncResult) {
|
||||
object[] results = this.EndInvoke(asyncResult);
|
||||
return ((ResultObject)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SendResetUserPasswordLinkSmsAsync(int itemId, int accountId, string reason, string phoneTo) {
|
||||
this.SendResetUserPasswordLinkSmsAsync(itemId, accountId, reason, phoneTo, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SendResetUserPasswordLinkSmsAsync(int itemId, int accountId, string reason, string phoneTo, object userState) {
|
||||
if ((this.SendResetUserPasswordLinkSmsOperationCompleted == null)) {
|
||||
this.SendResetUserPasswordLinkSmsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSendResetUserPasswordLinkSmsOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("SendResetUserPasswordLinkSms", new object[] {
|
||||
itemId,
|
||||
accountId,
|
||||
reason,
|
||||
phoneTo}, this.SendResetUserPasswordLinkSmsOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnSendResetUserPasswordLinkSmsOperationCompleted(object arg) {
|
||||
if ((this.SendResetUserPasswordLinkSmsCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.SendResetUserPasswordLinkSmsCompleted(this, new SendResetUserPasswordLinkSmsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SendResetUserPasswordPincodeSms", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public ResultObject SendResetUserPasswordPincodeSms(System.Guid token, string phoneTo) {
|
||||
object[] results = this.Invoke("SendResetUserPasswordPincodeSms", new object[] {
|
||||
token,
|
||||
phoneTo});
|
||||
return ((ResultObject)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.IAsyncResult BeginSendResetUserPasswordPincodeSms(System.Guid token, string phoneTo, System.AsyncCallback callback, object asyncState) {
|
||||
return this.BeginInvoke("SendResetUserPasswordPincodeSms", new object[] {
|
||||
token,
|
||||
phoneTo}, callback, asyncState);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public ResultObject EndSendResetUserPasswordPincodeSms(System.IAsyncResult asyncResult) {
|
||||
object[] results = this.EndInvoke(asyncResult);
|
||||
return ((ResultObject)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SendResetUserPasswordPincodeSmsAsync(System.Guid token, string phoneTo) {
|
||||
this.SendResetUserPasswordPincodeSmsAsync(token, phoneTo, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SendResetUserPasswordPincodeSmsAsync(System.Guid token, string phoneTo, object userState) {
|
||||
if ((this.SendResetUserPasswordPincodeSmsOperationCompleted == null)) {
|
||||
this.SendResetUserPasswordPincodeSmsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSendResetUserPasswordPincodeSmsOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("SendResetUserPasswordPincodeSms", new object[] {
|
||||
token,
|
||||
phoneTo}, this.SendResetUserPasswordPincodeSmsOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnSendResetUserPasswordPincodeSmsOperationCompleted(object arg) {
|
||||
if ((this.SendResetUserPasswordPincodeSmsCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.SendResetUserPasswordPincodeSmsCompleted(this, new SendResetUserPasswordPincodeSmsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <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)]
|
||||
public int AddOrganizationDomain(int itemId, string domainName) {
|
||||
|
@ -2495,21 +2648,23 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
|||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SendResetUserPasswordEmail", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public void SendResetUserPasswordEmail(int itemId, int accountId, string reason, string mailTo) {
|
||||
public void SendResetUserPasswordEmail(int itemId, int accountId, string reason, string mailTo, bool finalStep) {
|
||||
this.Invoke("SendResetUserPasswordEmail", new object[] {
|
||||
itemId,
|
||||
accountId,
|
||||
reason,
|
||||
mailTo});
|
||||
mailTo,
|
||||
finalStep});
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.IAsyncResult BeginSendResetUserPasswordEmail(int itemId, int accountId, string reason, string mailTo, System.AsyncCallback callback, object asyncState) {
|
||||
public System.IAsyncResult BeginSendResetUserPasswordEmail(int itemId, int accountId, string reason, string mailTo, bool finalStep, System.AsyncCallback callback, object asyncState) {
|
||||
return this.BeginInvoke("SendResetUserPasswordEmail", new object[] {
|
||||
itemId,
|
||||
accountId,
|
||||
reason,
|
||||
mailTo}, callback, asyncState);
|
||||
mailTo,
|
||||
finalStep}, callback, asyncState);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
|
@ -2518,12 +2673,12 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
|||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SendResetUserPasswordEmailAsync(int itemId, int accountId, string reason, string mailTo) {
|
||||
this.SendResetUserPasswordEmailAsync(itemId, accountId, reason, mailTo, null);
|
||||
public void SendResetUserPasswordEmailAsync(int itemId, int accountId, string reason, string mailTo, bool finalStep) {
|
||||
this.SendResetUserPasswordEmailAsync(itemId, accountId, reason, mailTo, finalStep, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SendResetUserPasswordEmailAsync(int itemId, int accountId, string reason, string mailTo, object userState) {
|
||||
public void SendResetUserPasswordEmailAsync(int itemId, int accountId, string reason, string mailTo, bool finalStep, object userState) {
|
||||
if ((this.SendResetUserPasswordEmailOperationCompleted == null)) {
|
||||
this.SendResetUserPasswordEmailOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSendResetUserPasswordEmailOperationCompleted);
|
||||
}
|
||||
|
@ -2531,7 +2686,8 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
|||
itemId,
|
||||
accountId,
|
||||
reason,
|
||||
mailTo}, this.SendResetUserPasswordEmailOperationCompleted, userState);
|
||||
mailTo,
|
||||
finalStep}, this.SendResetUserPasswordEmailOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnSendResetUserPasswordEmailOperationCompleted(object arg) {
|
||||
|
@ -3816,6 +3972,84 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
|
|||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void SetDefaultOrganizationCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void GetUserGeneralSettingsWithExtraDataCompletedEventHandler(object sender, GetUserGeneralSettingsWithExtraDataCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class GetUserGeneralSettingsWithExtraDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal GetUserGeneralSettingsWithExtraDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public OrganizationUser Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((OrganizationUser)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void SendResetUserPasswordLinkSmsCompletedEventHandler(object sender, SendResetUserPasswordLinkSmsCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class SendResetUserPasswordLinkSmsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal SendResetUserPasswordLinkSmsCompletedEventArgs(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/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void SendResetUserPasswordPincodeSmsCompletedEventHandler(object sender, SendResetUserPasswordPincodeSmsCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class SendResetUserPasswordPincodeSmsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal SendResetUserPasswordPincodeSmsCompletedEventArgs(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/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void AddOrganizationDomainCompletedEventHandler(object sender, AddOrganizationDomainCompletedEventArgs e);
|
||||
|
|
|
@ -2564,7 +2564,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
}
|
||||
|
||||
public static string GetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup)
|
||||
public static string GetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup, string passwordResetUrl)
|
||||
{
|
||||
#region Demo Mode
|
||||
if (IsDemoMode)
|
||||
|
@ -2589,12 +2589,11 @@ namespace WebsitePanel.EnterpriseServer
|
|||
if (String.IsNullOrEmpty(body))
|
||||
return null;
|
||||
|
||||
string result = EvaluateMailboxTemplate(itemId, accountId, pmm, false, false, body);
|
||||
string result = EvaluateMailboxTemplate(itemId, accountId, pmm, false, false, body, passwordResetUrl);
|
||||
return user.HtmlMail ? result : result.Replace("\n", "<br/>");
|
||||
}
|
||||
|
||||
private static string EvaluateMailboxTemplate(int itemId, int accountId,
|
||||
bool pmm, bool emailMode, bool signup, string template)
|
||||
private static string EvaluateMailboxTemplate(int itemId, int accountId, bool pmm, bool emailMode, bool signup, string template, string passwordResetUrl)
|
||||
{
|
||||
Hashtable items = new Hashtable();
|
||||
|
||||
|
@ -2616,7 +2615,10 @@ namespace WebsitePanel.EnterpriseServer
|
|||
items["AccountDomain"] = account.PrimaryEmailAddress.Substring(account.PrimaryEmailAddress.IndexOf("@") + 1);
|
||||
items["DefaultDomain"] = org.DefaultDomain;
|
||||
|
||||
var passwordResetUrl = OrganizationController.GenerateUserPasswordResetLink(account.ItemId, account.AccountId);
|
||||
Guid token;
|
||||
|
||||
passwordResetUrl = OrganizationController.GenerateUserPasswordResetLink(account.ItemId, account.AccountId, out token, string.Empty, passwordResetUrl);
|
||||
|
||||
if (!string.IsNullOrEmpty(passwordResetUrl))
|
||||
{
|
||||
items["PswResetUrl"] = passwordResetUrl;
|
||||
|
@ -2694,8 +2696,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
if (to == null)
|
||||
to = user.Email;
|
||||
|
||||
subject = EvaluateMailboxTemplate(itemId, accountId, false, true, signup, subject);
|
||||
body = EvaluateMailboxTemplate(itemId, accountId, false, true, signup, body);
|
||||
subject = EvaluateMailboxTemplate(itemId, accountId, false, true, signup, subject, string.Empty);
|
||||
body = EvaluateMailboxTemplate(itemId, accountId, false, true, signup, body, string.Empty);
|
||||
|
||||
// send message
|
||||
return MailHelper.SendMessage(from, to, cc, subject, body, priority, isHtml);
|
||||
|
|
|
@ -30,10 +30,13 @@ using System;
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Globalization;
|
||||
using System.Net.Mail;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Twilio;
|
||||
using WebsitePanel.EnterpriseServer.Code.HostedSolution;
|
||||
using WebsitePanel.EnterpriseServer.Code.SharePoint;
|
||||
using WebsitePanel.EnterpriseServer.Extensions;
|
||||
|
@ -1560,6 +1563,173 @@ namespace WebsitePanel.EnterpriseServer
|
|||
return expiredUsersDb;
|
||||
}
|
||||
|
||||
public static ResultObject SendResetUserPasswordLinkSms(int itemId, int accountId, string reason,
|
||||
string phoneTo = null)
|
||||
{
|
||||
var result = TaskManager.StartResultTask<ResultObject>("ORGANIZATION", "SEND_USER_PASSWORD_RESET_SMS",
|
||||
itemId);
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
// load organization
|
||||
Organization org = GetOrganization(itemId);
|
||||
|
||||
if (org == null)
|
||||
{
|
||||
throw new Exception(string.Format("Organization not found (ItemId = {0})", itemId));
|
||||
}
|
||||
|
||||
UserInfo owner = PackageController.GetPackageOwner(org.PackageId);
|
||||
OrganizationUser user = OrganizationController.GetUserGeneralSettingsWithExtraData(itemId, accountId);
|
||||
|
||||
user.ItemId = itemId;
|
||||
|
||||
if (string.IsNullOrEmpty(phoneTo))
|
||||
{
|
||||
phoneTo = user.MobilePhone;
|
||||
}
|
||||
|
||||
UserSettings settings = UserController.GetUserSettings(owner.UserId,
|
||||
UserSettings.USER_PASSWORD_RESET_LETTER);
|
||||
|
||||
|
||||
string body = settings["PasswordResetLinkSmsBody"];
|
||||
|
||||
var pincode = GeneratePincode();
|
||||
Guid token;
|
||||
|
||||
var items = new Hashtable();
|
||||
|
||||
items["passwordResetLink"] = GenerateUserPasswordResetLink(user.ItemId, user.AccountId, out token, pincode);
|
||||
|
||||
body = PackageController.EvaluateTemplate(body, items);
|
||||
|
||||
TaskManager.Write("Organization ID : " + user.ItemId);
|
||||
TaskManager.Write("Account : " + user.DisplayName);
|
||||
TaskManager.Write("Reason : " + reason);
|
||||
TaskManager.Write("SmsTo : " + phoneTo);
|
||||
|
||||
// send Sms message
|
||||
var response = SendSms(phoneTo, body);
|
||||
|
||||
if (response.RestException != null)
|
||||
{
|
||||
throw new Exception(response.RestException.Message);
|
||||
}
|
||||
|
||||
SetAccessTokenResponse(token, pincode);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
TaskManager.WriteError(ex);
|
||||
TaskManager.CompleteResultTask(result);
|
||||
result.AddError("", ex);
|
||||
return result;
|
||||
}
|
||||
|
||||
TaskManager.CompleteResultTask();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static ResultObject SendResetUserPasswordPincodeSms(Guid token, string phoneTo = null)
|
||||
{
|
||||
var result = TaskManager.StartResultTask<ResultObject>("ORGANIZATION", "SEND_USER_PASSWORD_RESET_SMS_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(phoneTo))
|
||||
{
|
||||
phoneTo = user.MobilePhone;
|
||||
}
|
||||
|
||||
UserSettings settings = UserController.GetUserSettings(owner.UserId, UserSettings.USER_PASSWORD_RESET_LETTER);
|
||||
|
||||
string body = settings["PasswordResetPincodeSmsBody"];
|
||||
|
||||
var items = new Hashtable();
|
||||
|
||||
var pincode = GeneratePincode();
|
||||
|
||||
items["passwordResetPincode"] = pincode;
|
||||
|
||||
body = PackageController.EvaluateTemplate(body, items);
|
||||
|
||||
TaskManager.Write("Organization ID : " + user.ItemId);
|
||||
TaskManager.Write("Account : " + user.DisplayName);
|
||||
TaskManager.Write("SmsTo : " + phoneTo);
|
||||
|
||||
// send Sms message
|
||||
var response = SendSms(phoneTo, body);
|
||||
|
||||
if (response.RestException != null)
|
||||
{
|
||||
throw new Exception(response.RestException.Message);
|
||||
}
|
||||
|
||||
SetAccessTokenResponse(token, pincode);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
TaskManager.WriteError(ex);
|
||||
TaskManager.CompleteResultTask(result);
|
||||
result.AddError("", ex);
|
||||
return result;
|
||||
}
|
||||
|
||||
TaskManager.CompleteResultTask();
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string GeneratePincode()
|
||||
{
|
||||
var random = new Random(Guid.NewGuid().GetHashCode());
|
||||
|
||||
return random.Next(10000, 99999).ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
private static SMSMessage SendSms(string to, string body)
|
||||
{
|
||||
SystemSettings settings = SystemController.GetSystemSettingsInternal(SystemSettings.TWILIO_SETTINGS, false);
|
||||
|
||||
if (settings == null)
|
||||
{
|
||||
throw new Exception("Twilio settings are not set");
|
||||
}
|
||||
|
||||
string accountSid = settings.GetValueOrDefault(SystemSettings.TWILIO_ACCOUNTSID_KEY, string.Empty);
|
||||
string authToken = settings.GetValueOrDefault(SystemSettings.TWILIO_AUTHTOKEN_KEY, string.Empty);
|
||||
string phoneFrom = settings.GetValueOrDefault(SystemSettings.TWILIO_PHONEFROM_KEY, string.Empty);
|
||||
|
||||
if (string.IsNullOrEmpty(accountSid) || string.IsNullOrEmpty(accountSid) || string.IsNullOrEmpty(accountSid))
|
||||
{
|
||||
throw new Exception("Twilio settings are not set (System settings)");
|
||||
}
|
||||
|
||||
var client = new TwilioRestClient(accountSid, authToken);
|
||||
|
||||
return client.SendSmsMessage(phoneFrom, to, body);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Send reset user password email
|
||||
/// </summary>
|
||||
|
@ -1567,7 +1737,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
/// <param name="accountId">User Id</param>
|
||||
/// <param name="reason">Reason why reset email is sent.</param>
|
||||
/// <param name="mailTo">Optional, if null accountID user PrimaryEmailAddress will be used</param>
|
||||
public static void SendResetUserPasswordEmail(int itemId, int accountId, string reason, string mailTo = null)
|
||||
/// <param name="finalStep">Url direction</param>
|
||||
public static void SendResetUserPasswordEmail(int itemId, int accountId, string reason, string mailTo, bool finalStep)
|
||||
{
|
||||
// load organization
|
||||
Organization org = GetOrganization(itemId);
|
||||
|
@ -1581,11 +1752,9 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
|
||||
UserInfo owner = PackageController.GetPackageOwner(org.PackageId);
|
||||
OrganizationUser user = OrganizationController.GetAccount(itemId, accountId);
|
||||
OrganizationUser user = OrganizationController.GetUserGeneralSettingsWithExtraData(itemId, accountId);
|
||||
|
||||
OrganizationUser settings = orgProxy.GetUserGeneralSettings(user.AccountName, org.OrganizationId);
|
||||
|
||||
user.PasswordExpirationDateTime = settings.PasswordExpirationDateTime;
|
||||
user.ItemId = itemId;
|
||||
|
||||
if (string.IsNullOrEmpty(mailTo))
|
||||
{
|
||||
|
@ -1596,16 +1765,16 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
var logoUrl = generalSettings != null ? generalSettings.OrganizationLogoUrl : string.Empty;
|
||||
|
||||
SendUserPasswordEmail(owner, user, reason, mailTo, logoUrl, UserSettings.USER_PASSWORD_RESET_LETTER, "USER_PASSWORD_RESET_LETTER");
|
||||
SendUserPasswordEmail(owner, user, reason, mailTo, logoUrl, UserSettings.USER_PASSWORD_RESET_LETTER, "USER_PASSWORD_RESET_LETTER", finalStep);
|
||||
}
|
||||
|
||||
public static void SendUserExpirationPasswordEmail(UserInfo owner, OrganizationUser user, string reason,
|
||||
string mailTo, string logoUrl)
|
||||
{
|
||||
SendUserPasswordEmail(owner, user, reason, user.PrimaryEmailAddress, logoUrl, UserSettings.USER_PASSWORD_EXPIRATION_LETTER, "USER_PASSWORD_EXPIRATION_LETTER");
|
||||
SendUserPasswordEmail(owner, user, reason, user.PrimaryEmailAddress, logoUrl, UserSettings.USER_PASSWORD_EXPIRATION_LETTER, "USER_PASSWORD_EXPIRATION_LETTER", false);
|
||||
}
|
||||
|
||||
public static void SendUserPasswordEmail(UserInfo owner, OrganizationUser user, string reason, string mailTo, string logoUrl, string settingsName, string taskName)
|
||||
public static void SendUserPasswordEmail(UserInfo owner, OrganizationUser user, string reason, string mailTo, string logoUrl, string settingsName, string taskName, bool finalStep)
|
||||
{
|
||||
UserSettings settings = UserController.GetUserSettings(owner.UserId,
|
||||
settingsName);
|
||||
|
@ -1632,14 +1801,23 @@ namespace WebsitePanel.EnterpriseServer
|
|||
priority = (MailPriority) Enum.Parse(typeof (MailPriority), settings["Priority"], true);
|
||||
}
|
||||
|
||||
Guid token;
|
||||
|
||||
string pincode = finalStep ? GeneratePincode() : null;
|
||||
|
||||
Hashtable items = new Hashtable();
|
||||
|
||||
items["user"] = user;
|
||||
items["logoUrl"] = logoUrl;
|
||||
items["passwordResetLink"] = GenerateUserPasswordResetLink(user.ItemId, user.AccountId);
|
||||
items["passwordResetLink"] = GenerateUserPasswordResetLink(user.ItemId, user.AccountId, out token, pincode);
|
||||
|
||||
body = PackageController.EvaluateTemplate(body, items);
|
||||
|
||||
if (finalStep)
|
||||
{
|
||||
SetAccessTokenResponse(token, pincode);
|
||||
}
|
||||
|
||||
TaskManager.Write("Organization ID : " + user.ItemId);
|
||||
TaskManager.Write("Account : " + user.DisplayName);
|
||||
TaskManager.Write("Reason : " + reason);
|
||||
|
@ -1658,6 +1836,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static AccessToken GetAccessToken(Guid accessToken, AccessTokenTypes type)
|
||||
{
|
||||
return ObjectUtils.FillObjectFromDataReader<AccessToken>(DataProvider.GetAccessTokenByAccessToken(accessToken, type));
|
||||
|
@ -1678,23 +1858,38 @@ namespace WebsitePanel.EnterpriseServer
|
|||
return SystemController.GetSystemSettingsInternal(SystemSettings.WEBDAV_PORTAL_SETTINGS, false);
|
||||
}
|
||||
|
||||
public static string GenerateUserPasswordResetLink(int itemId, int accountId)
|
||||
public static string GenerateUserPasswordResetLink(int itemId, int accountId, out Guid tokenGuid, string pincode = null, string resetUrl = null)
|
||||
{
|
||||
string passwordResetUrlFormat = "account/password-reset/step-2";
|
||||
|
||||
var settings = GetWebDavSystemSettings();
|
||||
tokenGuid = new Guid();
|
||||
|
||||
if (settings == null || !settings.GetValueOrDefault(SystemSettings.WEBDAV_PASSWORD_RESET_ENABLED_KEY, false) || !settings.Contains("WebdavPortalUrl"))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(resetUrl) == false)
|
||||
{
|
||||
return resetUrl;
|
||||
}
|
||||
|
||||
string passwordResetUrlFormat = string.IsNullOrEmpty(pincode) ? "account/password-reset/step-2" : "account/password-reset/step-final";
|
||||
|
||||
var webdavPortalUrl = new Uri(settings["WebdavPortalUrl"]);
|
||||
|
||||
var token = CreateAccessToken(itemId, accountId, AccessTokenTypes.PasswrodReset);
|
||||
|
||||
return webdavPortalUrl.Append(passwordResetUrlFormat)
|
||||
.Append(token.AccessTokenGuid.ToString("n")).ToString();
|
||||
tokenGuid = token.AccessTokenGuid;
|
||||
|
||||
var resultUrl = webdavPortalUrl.Append(passwordResetUrlFormat)
|
||||
.Append(token.AccessTokenGuid.ToString("n"));
|
||||
|
||||
if (string.IsNullOrEmpty(pincode) == false)
|
||||
{
|
||||
resultUrl = resultUrl.Append(pincode);
|
||||
}
|
||||
|
||||
return resultUrl.ToString();
|
||||
}
|
||||
|
||||
private static AccessToken CreateAccessToken(int itemId, int accountId, AccessTokenTypes type)
|
||||
|
@ -1804,7 +1999,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
AccountLockoutDuration = GetValueSafe(parts, 9, 0),
|
||||
ResetAccountLockoutCounterAfter = GetValueSafe(parts, 10, 0),
|
||||
LockoutSettingsEnabled = GetValueSafe(parts, 11, false),
|
||||
PasswordComplexityEnabled = GetValueSafe(parts, 11, true),
|
||||
PasswordComplexityEnabled = GetValueSafe(parts, 12, true),
|
||||
MaxPasswordAge = GetValueSafe(parts, 13, 42),
|
||||
};
|
||||
|
||||
|
||||
|
@ -2668,6 +2864,50 @@ namespace WebsitePanel.EnterpriseServer
|
|||
return (account);
|
||||
}
|
||||
|
||||
public static OrganizationUser GetUserGeneralSettingsWithExtraData(int itemId, int accountId)
|
||||
{
|
||||
OrganizationUser account = null;
|
||||
Organization org = null;
|
||||
|
||||
try
|
||||
{
|
||||
// load organization
|
||||
org = GetOrganization(itemId);
|
||||
if (org == null)
|
||||
return null;
|
||||
|
||||
// load account
|
||||
account = GetAccount(itemId, accountId);
|
||||
}
|
||||
catch (Exception) { }
|
||||
|
||||
try
|
||||
{
|
||||
// get mailbox settings
|
||||
Organizations orgProxy = GetOrganizationProxy(org.ServiceId);
|
||||
string accountName = GetAccountName(account.AccountName);
|
||||
|
||||
|
||||
OrganizationUser retUser = orgProxy.GetOrganizationUserWithExtraData(accountName, org.OrganizationId);
|
||||
retUser.AccountId = accountId;
|
||||
retUser.AccountName = account.AccountName;
|
||||
retUser.PrimaryEmailAddress = account.PrimaryEmailAddress;
|
||||
retUser.AccountType = account.AccountType;
|
||||
retUser.CrmUserId = CRMController.GetCrmUserId(accountId);
|
||||
retUser.IsOCSUser = DataProvider.CheckOCSUserExists(accountId);
|
||||
retUser.IsLyncUser = DataProvider.CheckLyncUserExists(accountId);
|
||||
retUser.IsBlackBerryUser = BlackBerryController.CheckBlackBerryUserExists(accountId);
|
||||
retUser.SubscriberNumber = account.SubscriberNumber;
|
||||
retUser.LevelId = account.LevelId;
|
||||
retUser.IsVIP = account.IsVIP;
|
||||
|
||||
return retUser;
|
||||
}
|
||||
catch { }
|
||||
|
||||
return (account);
|
||||
}
|
||||
|
||||
public static int SetUserGeneralSettings(int itemId, int accountId, string displayName,
|
||||
string password, bool hideAddressBook, bool disabled, bool locked, string firstName, string initials,
|
||||
string lastName, string address, string city, string state, string zip, string country,
|
||||
|
|
|
@ -57,11 +57,6 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// send mail message
|
||||
// MailHelper.SendMessage(mailFrom, mailTo, mailSubject, mailBody, false);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,6 +12,8 @@
|
|||
<AssemblyName>WebsitePanel.EnterpriseServer.Code</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||
<RestorePackages>true</RestorePackages>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -42,6 +44,9 @@
|
|||
<HintPath>..\..\Lib\Microsoft.Web.Services3.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="RestSharp">
|
||||
<HintPath>..\packages\RestSharp.105.0.1\lib\net4\RestSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
|
@ -55,6 +60,9 @@
|
|||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="Twilio.Api">
|
||||
<HintPath>..\packages\Twilio.3.6.29\lib\3.5\Twilio.Api.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WebsitePanel.EnterpriseServer.Base, Version=2.1.0.1, Culture=neutral, PublicKeyToken=da8782a6fc4d0081, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll</HintPath>
|
||||
|
@ -202,8 +210,17 @@
|
|||
<Name>WebsitePanel.Whois</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
|
||||
</Target>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="RestSharp" version="105.0.1" targetFramework="net40" />
|
||||
<package id="Twilio" version="3.6.29" targetFramework="net40" />
|
||||
</packages>
|
|
@ -315,9 +315,9 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
|
||||
[WebMethod]
|
||||
public string GetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup)
|
||||
public string GetMailboxSetupInstructions(int itemId, int accountId, bool pmm, bool emailMode, bool signup, string passwordResetUrl)
|
||||
{
|
||||
return ExchangeServerController.GetMailboxSetupInstructions(itemId, accountId, pmm, emailMode, signup);
|
||||
return ExchangeServerController.GetMailboxSetupInstructions(itemId, accountId, pmm, emailMode, signup, passwordResetUrl);
|
||||
}
|
||||
|
||||
[WebMethod]
|
||||
|
|
|
@ -185,6 +185,26 @@ namespace WebsitePanel.EnterpriseServer
|
|||
OrganizationController.SetDefaultOrganization(newDefaultOrganizationId, currentDefaultOrganizationId);
|
||||
}
|
||||
|
||||
[WebMethod]
|
||||
public OrganizationUser GetUserGeneralSettingsWithExtraData(int itemId, int accountId)
|
||||
{
|
||||
return OrganizationController.GetUserGeneralSettingsWithExtraData(itemId, accountId);
|
||||
}
|
||||
|
||||
[WebMethod]
|
||||
public ResultObject SendResetUserPasswordLinkSms(int itemId, int accountId, string reason, string phoneTo = null)
|
||||
{
|
||||
return OrganizationController.SendResetUserPasswordLinkSms(itemId, accountId, reason, phoneTo);
|
||||
}
|
||||
|
||||
|
||||
[WebMethod]
|
||||
public ResultObject SendResetUserPasswordPincodeSms(Guid token, string phoneTo = null)
|
||||
{
|
||||
return OrganizationController.SendResetUserPasswordPincodeSms(token, phoneTo);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Domains
|
||||
|
@ -336,9 +356,9 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
|
||||
[WebMethod]
|
||||
public void SendResetUserPasswordEmail(int itemId, int accountId, string reason, string mailTo = null)
|
||||
public void SendResetUserPasswordEmail(int itemId, int accountId, string reason, string mailTo, bool finalStep)
|
||||
{
|
||||
OrganizationController.SendResetUserPasswordEmail(itemId, accountId, reason, mailTo);
|
||||
OrganizationController.SendResetUserPasswordEmail(itemId, accountId, reason, mailTo, finalStep);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -102,5 +102,7 @@ namespace WebsitePanel.Providers.HostedSolution
|
|||
void ApplyPasswordSettings(string organizationId, OrganizationPasswordSettings passwordSettings);
|
||||
|
||||
bool CheckPhoneNumberIsInUse(string phoneNumber, string userSamAccountName = null);
|
||||
|
||||
OrganizationUser GetOrganizationUserWithExtraData(string loginName, string organizationId);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
public int MinimumLength { get; set; }
|
||||
public int MaximumLength { get; set; }
|
||||
public int EnforcePasswordHistory { get; set; }
|
||||
public int MaxPasswordAge { get; set; }
|
||||
|
||||
public bool LockoutSettingsEnabled { get; set; }
|
||||
public int AccountLockoutDuration { get; set; }
|
||||
|
|
|
@ -741,6 +741,7 @@ namespace WebsitePanel.Providers.HostedSolution
|
|||
cmd.Parameters.Add("PasswordHistoryCount", settings.EnforcePasswordHistory);
|
||||
cmd.Parameters.Add("ComplexityEnabled", false);
|
||||
cmd.Parameters.Add("ReversibleEncryptionEnabled", false);
|
||||
cmd.Parameters.Add("MaxPasswordAge", new TimeSpan(settings.MaxPasswordAge * 24, 0, 0));
|
||||
|
||||
if (settings.LockoutSettingsEnabled)
|
||||
{
|
||||
|
@ -777,6 +778,7 @@ namespace WebsitePanel.Providers.HostedSolution
|
|||
cmd.Parameters.Add("PasswordHistoryCount", settings.EnforcePasswordHistory);
|
||||
cmd.Parameters.Add("ComplexityEnabled", false);
|
||||
cmd.Parameters.Add("ReversibleEncryptionEnabled", false);
|
||||
cmd.Parameters.Add("MaxPasswordAge", new TimeSpan(settings.MaxPasswordAge*24, 0, 0));
|
||||
|
||||
if (settings.LockoutSettingsEnabled)
|
||||
{
|
||||
|
@ -1008,10 +1010,30 @@ namespace WebsitePanel.Providers.HostedSolution
|
|||
retUser.UserPrincipalName = (string)entry.InvokeGet(ADAttributes.UserPrincipalName);
|
||||
retUser.UserMustChangePassword = GetUserMustChangePassword(entry);
|
||||
|
||||
return retUser;
|
||||
}
|
||||
|
||||
public OrganizationUser GetOrganizationUserWithExtraData(string loginName, string organizationId)
|
||||
{
|
||||
HostedSolutionLog.LogStart("GetOrganizationUserWithExtraData");
|
||||
HostedSolutionLog.DebugInfo("loginName : {0}", loginName);
|
||||
HostedSolutionLog.DebugInfo("organizationId : {0}", organizationId);
|
||||
|
||||
if (string.IsNullOrEmpty(loginName))
|
||||
throw new ArgumentNullException("loginName");
|
||||
|
||||
var psoName = FormOrganizationPSOName(organizationId);
|
||||
|
||||
string path = GetUserPath(organizationId, loginName);
|
||||
|
||||
OrganizationUser retUser = GetUser(organizationId, path);
|
||||
|
||||
DirectoryEntry entry = ActiveDirectoryUtils.GetADObject(path);
|
||||
|
||||
retUser.PasswordExpirationDateTime = GetPasswordExpirationDate(psoName, entry);
|
||||
|
||||
HostedSolutionLog.LogEnd("GetOrganizationUserWithExtraData");
|
||||
|
||||
return retUser;
|
||||
}
|
||||
|
||||
|
|
|
@ -98,6 +98,8 @@ namespace WebsitePanel.Providers.HostedSolution {
|
|||
|
||||
private System.Threading.SendOrPostCallback CheckPhoneNumberIsInUseOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback GetOrganizationUserWithExtraDataOperationCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public Organizations() {
|
||||
this.Url = "http://localhost:9003/Organizations.asmx";
|
||||
|
@ -196,6 +198,9 @@ namespace WebsitePanel.Providers.HostedSolution {
|
|||
/// <remarks/>
|
||||
public event CheckPhoneNumberIsInUseCompletedEventHandler CheckPhoneNumberIsInUseCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event GetOrganizationUserWithExtraDataCompletedEventHandler GetOrganizationUserWithExtraDataCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/OrganizationExists", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
|
@ -1773,6 +1778,51 @@ namespace WebsitePanel.Providers.HostedSolution {
|
|||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetOrganizationUserWithExtraData", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public OrganizationUser GetOrganizationUserWithExtraData(string loginName, string organizationId) {
|
||||
object[] results = this.Invoke("GetOrganizationUserWithExtraData", new object[] {
|
||||
loginName,
|
||||
organizationId});
|
||||
return ((OrganizationUser)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.IAsyncResult BeginGetOrganizationUserWithExtraData(string loginName, string organizationId, System.AsyncCallback callback, object asyncState) {
|
||||
return this.BeginInvoke("GetOrganizationUserWithExtraData", new object[] {
|
||||
loginName,
|
||||
organizationId}, callback, asyncState);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public OrganizationUser EndGetOrganizationUserWithExtraData(System.IAsyncResult asyncResult) {
|
||||
object[] results = this.EndInvoke(asyncResult);
|
||||
return ((OrganizationUser)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetOrganizationUserWithExtraDataAsync(string loginName, string organizationId) {
|
||||
this.GetOrganizationUserWithExtraDataAsync(loginName, organizationId, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void GetOrganizationUserWithExtraDataAsync(string loginName, string organizationId, object userState) {
|
||||
if ((this.GetOrganizationUserWithExtraDataOperationCompleted == null)) {
|
||||
this.GetOrganizationUserWithExtraDataOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetOrganizationUserWithExtraDataOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("GetOrganizationUserWithExtraData", new object[] {
|
||||
loginName,
|
||||
organizationId}, this.GetOrganizationUserWithExtraDataOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnGetOrganizationUserWithExtraDataOperationCompleted(object arg) {
|
||||
if ((this.GetOrganizationUserWithExtraDataCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.GetOrganizationUserWithExtraDataCompleted(this, new GetOrganizationUserWithExtraDataCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public new void CancelAsync(object userState) {
|
||||
base.CancelAsync(userState);
|
||||
|
@ -2188,4 +2238,30 @@ namespace WebsitePanel.Providers.HostedSolution {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void GetOrganizationUserWithExtraDataCompletedEventHandler(object sender, GetOrganizationUserWithExtraDataCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||
public partial class GetOrganizationUserWithExtraDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||
|
||||
private object[] results;
|
||||
|
||||
internal GetOrganizationUserWithExtraDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||
base(exception, cancelled, userState) {
|
||||
this.results = results;
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public OrganizationUser Result {
|
||||
get {
|
||||
this.RaiseExceptionIfNecessary();
|
||||
return ((OrganizationUser)(this.results[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -273,5 +273,11 @@ namespace WebsitePanel.Server
|
|||
{
|
||||
return Organization.CheckPhoneNumberIsInUse(phoneNumber, userSamAccountName);
|
||||
}
|
||||
|
||||
[WebMethod, SoapHeader("settings")]
|
||||
public OrganizationUser GetOrganizationUserWithExtraData(string loginName, string organizationId)
|
||||
{
|
||||
return Organization.GetOrganizationUserWithExtraData(loginName, organizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -236,18 +236,12 @@
|
|||
<Content Include="bin\WebsitePanel.Providers.OS.Windows2012.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.RemoteDesktopServices.Windows2012.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.RemoteDesktopServices.Windows2012.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.SharePoint.Sps20.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.SharePoint.Sps20.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.SharePoint.Sps30.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.SharePoint.Sps30.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Statistics.AWStats.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Statistics.AWStats.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Statistics.SmarterStats.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Statistics.SmarterStats.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Virtualization.HyperV.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Virtualization.HyperV.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Virtualization.HyperV2012R2.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Virtualization.HyperV2012R2.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.VirtualizationForPC.HyperVForPC.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Web.HeliconZoo.dll" />
|
||||
|
@ -260,8 +254,6 @@
|
|||
<Content Include="bin\WebsitePanel.Providers.Web.IIs80.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Web.WebDav.dll" />
|
||||
<Content Include="bin\WebsitePanel.Providers.Web.WebDav.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Server.Client.dll" />
|
||||
<Content Include="bin\WebsitePanel.Server.Client.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Server.dll" />
|
||||
<Content Include="bin\WebsitePanel.Server.pdb" />
|
||||
<Content Include="bin\WebsitePanel.Server.Utils.dll" />
|
||||
|
@ -434,10 +426,6 @@
|
|||
<Project>{684C932A-6C75-46AC-A327-F3689D89EB42}</Project>
|
||||
<Name>WebsitePanel.Providers.Base</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\WebsitePanel.Server.Client\WebsitePanel.Server.Client.csproj">
|
||||
<Project>{990c4a2a-34a5-4be0-9546-e10abdfffd0e}</Project>
|
||||
<Name>WebsitePanel.Server.Client</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\WebsitePanel.Server.Utils\WebsitePanel.Server.Utils.csproj">
|
||||
<Project>{E91E52F3-9555-4D00-B577-2B1DBDD87CA7}</Project>
|
||||
<Name>WebsitePanel.Server.Utils</Name>
|
||||
|
|
|
@ -70,7 +70,7 @@ namespace WebsitePanel.WebDav.Core.Config.Entities
|
|||
get
|
||||
{
|
||||
SessionKeysElement sessionKey =
|
||||
_sessionKeys.FirstOrDefault(x => x.Key == SessionKeysElement.PassswordResetSmsKey);
|
||||
_sessionKeys.FirstOrDefault(x => x.Key == SessionKeysElement.PasswordResetSmsKey);
|
||||
return sessionKey != null ? sessionKey.Value : null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace WebsitePanel.WebDav.Core.Config.WebConfigSections
|
|||
public const string WebDavManagerKey = "WebDavManagerSessionKey";
|
||||
public const string UserGroupsKey = "UserGroupsKey";
|
||||
public const string WebDavRootFolderPermissionsKey = "WebDavRootFolderPermissionsKey";
|
||||
public const string PassswordResetSmsKey = "PassswordResetSmsKey";
|
||||
public const string PasswordResetSmsKey = "PasswordResetSmsKey";
|
||||
public const string ResourseRenderCountKey = "ResourseRenderCountSessionKey";
|
||||
public const string ItemIdSessionKey = "ItemId";
|
||||
public const string OwaEditFoldersSessionKey = "OwaEditFoldersSession";
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using log4net;
|
||||
using WebsitePanel.WebDav.Core.Config;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||
using WebsitePanel.WebDav.Core.Interfaces.Services;
|
||||
|
@ -9,10 +10,12 @@ namespace WebsitePanel.WebDav.Core.Security.Authentication
|
|||
public class SmsAuthenticationService : ISmsAuthenticationService
|
||||
{
|
||||
private ISmsDistributionService _smsService;
|
||||
private readonly ILog Log;
|
||||
|
||||
public SmsAuthenticationService(ISmsDistributionService smsService)
|
||||
{
|
||||
_smsService = smsService;
|
||||
Log = LogManager.GetLogger(this.GetType());
|
||||
}
|
||||
|
||||
public bool VerifyResponse( Guid token, string response)
|
||||
|
|
|
@ -38,14 +38,20 @@ namespace WebsitePanel.WebDavPortal
|
|||
|
||||
routes.MapRoute(
|
||||
name: AccountRouteNames.PasswordResetSendSms,
|
||||
url: "account/password-reset/step-final/{token}",
|
||||
url: "account/password-reset/send-new-sms/{token}",
|
||||
defaults: new { controller = "Account", action = "PasswordResetSendSms" }
|
||||
);
|
||||
|
||||
routes.MapRoute(
|
||||
name: AccountRouteNames.PasswordResetFinalStep,
|
||||
url: "account/password-reset/send-new-sms/{token}",
|
||||
defaults: new { controller = "Account", action = "PasswordResetFinalStep" }
|
||||
url: "account/password-reset/step-final/{token}/{pincode}",
|
||||
defaults: new { controller = "Account", action = "PasswordResetFinalStep", pincode = UrlParameter.Optional }
|
||||
);
|
||||
|
||||
routes.MapRoute(
|
||||
name: AccountRouteNames.PasswordResetSuccess,
|
||||
url: "account/password-reset/success",
|
||||
defaults: new { controller = "Account", action = "PasswordSuccessfullyChanged" }
|
||||
);
|
||||
|
||||
routes.MapRoute(
|
||||
|
|
|
@ -16,6 +16,7 @@ namespace WebsitePanel.WebDavPortal.UI.Routes
|
|||
public const string PasswordResetSms = "PasswordResetSmsRoute";
|
||||
public const string PasswordResetSendSms = "PasswordResetSendSmsRoute";
|
||||
public const string PasswordResetFinalStep = "PasswordResetFinalStepRoute";
|
||||
public const string PasswordResetSuccess = "PasswordResetSuccess";
|
||||
|
||||
public const string PhoneNumberIsAvailible = "PhoneNumberIsAvailibleRoute";
|
||||
}
|
||||
|
|
|
@ -4,6 +4,8 @@ using System.Net;
|
|||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
using AutoMapper;
|
||||
using log4net;
|
||||
using Microsoft.Web.Services3.Addressing;
|
||||
using WebsitePanel.Providers.HostedSolution;
|
||||
using WebsitePanel.WebDav.Core.Config;
|
||||
using WebsitePanel.WebDav.Core.Security.Authentication;
|
||||
|
@ -27,12 +29,15 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
private readonly ICryptography _cryptography;
|
||||
private readonly IAuthenticationService _authenticationService;
|
||||
private readonly ISmsAuthenticationService _smsAuthService;
|
||||
private readonly ILog Log;
|
||||
|
||||
public AccountController(ICryptography cryptography, IAuthenticationService authenticationService, ISmsAuthenticationService smsAuthService)
|
||||
{
|
||||
_cryptography = cryptography;
|
||||
_authenticationService = authenticationService;
|
||||
_smsAuthService = smsAuthService;
|
||||
|
||||
Log = LogManager.GetLogger(this.GetType());
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
|
@ -182,7 +187,7 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
return View(model);
|
||||
}
|
||||
|
||||
WspContext.Services.Organizations.SendResetUserPasswordEmail(exchangeAccount.ItemId, exchangeAccount.AccountId, Resources.Messages.PasswordResetUserReason, exchangeAccount.PrimaryEmailAddress);
|
||||
WspContext.Services.Organizations.SendResetUserPasswordEmail(exchangeAccount.ItemId, exchangeAccount.AccountId, Resources.Messages.PasswordResetUserReason, exchangeAccount.PrimaryEmailAddress, false);
|
||||
|
||||
return View("PasswordResetEmailSent");
|
||||
}
|
||||
|
@ -205,11 +210,15 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
return View(model);
|
||||
}
|
||||
|
||||
if (accessToken.IsSmsSent == false)
|
||||
{
|
||||
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId, accessToken.AccountId);
|
||||
|
||||
if (SendPasswordResetSms(accessToken.AccessTokenGuid, user.MobilePhone))
|
||||
if (accessToken != null && accessToken.IsSmsSent == false)
|
||||
{
|
||||
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId,
|
||||
accessToken.AccountId);
|
||||
|
||||
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeSms(token, user.MobilePhone);
|
||||
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
AddMessage(MessageType.Success, Resources.Messages.SmsWasSent);
|
||||
}
|
||||
|
@ -249,15 +258,16 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
|
||||
[HttpGet]
|
||||
[AllowAnonymous]
|
||||
public ActionResult PasswordResetFinalStep(Guid token)
|
||||
public ActionResult PasswordResetFinalStep(Guid token, string pincode)
|
||||
{
|
||||
var smsResponse = Session[WebDavAppConfigManager.Instance.SessionKeys.PasswordResetSmsKey] as string;
|
||||
var result = VerifyPincode(token, pincode);
|
||||
|
||||
if (_smsAuthService.VerifyResponse(token, smsResponse) == false)
|
||||
if (result != null)
|
||||
{
|
||||
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
var model = new PasswordEditor();
|
||||
|
||||
return View(model);
|
||||
|
@ -265,20 +275,18 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
public ActionResult PasswordResetFinalStep(Guid token, PasswordEditor model)
|
||||
public ActionResult PasswordResetFinalStep(Guid token, string pincode, PasswordEditor model)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
{
|
||||
return View(model);
|
||||
}
|
||||
|
||||
var smsResponse = Session[WebDavAppConfigManager.Instance.SessionKeys.PasswordResetSmsKey] as string;
|
||||
var result = VerifyPincode(token, pincode);
|
||||
|
||||
if (_smsAuthService.VerifyResponse(token, smsResponse) == false)
|
||||
if (result != null)
|
||||
{
|
||||
AddMessage(MessageType.Error, Resources.Messages.IncorrectSmsResponse);
|
||||
|
||||
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
|
||||
return result;
|
||||
}
|
||||
|
||||
var tokenEntity = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
||||
|
@ -291,7 +299,14 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
|
||||
AddMessage(MessageType.Success, Resources.Messages.PasswordSuccessfullyChanged);
|
||||
|
||||
return RedirectToRoute(AccountRouteNames.Login);
|
||||
return RedirectToRoute(AccountRouteNames.PasswordResetSuccess);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[AllowAnonymous]
|
||||
public ActionResult PasswordSuccessfullyChanged()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
|
@ -308,8 +323,10 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId,
|
||||
accessToken.AccountId);
|
||||
|
||||
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeSms(accessToken.AccessTokenGuid,
|
||||
user.MobilePhone);
|
||||
|
||||
if (SendPasswordResetSms(accessToken.AccessTokenGuid, user.MobilePhone))
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
AddMessage(MessageType.Success, Resources.Messages.SmsWasSent);
|
||||
}
|
||||
|
@ -323,22 +340,37 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
|
||||
#region Helpers
|
||||
|
||||
private bool SendPasswordResetSms(Guid token, string mobilePhone)
|
||||
/// <summary>
|
||||
/// Verify pincode, if it's absent - verifying pincode from session
|
||||
/// </summary>
|
||||
/// <param name="token">Password reset token</param>
|
||||
/// <param name="pincode">Pincode to verify if session pincode is absent</param>
|
||||
private ActionResult VerifyPincode(Guid token, string pincode)
|
||||
{
|
||||
var response = _smsAuthService.SendRequestMessage(mobilePhone);
|
||||
var smsResponse = Session[WebDavAppConfigManager.Instance.SessionKeys.PasswordResetSmsKey] as string;
|
||||
|
||||
if (string.IsNullOrEmpty(response))
|
||||
if (string.IsNullOrEmpty(pincode) == false)
|
||||
{
|
||||
return false;
|
||||
smsResponse = pincode;
|
||||
}
|
||||
WspContext.Services.Organizations.SetAccessTokenResponse(token, response);
|
||||
|
||||
return true;
|
||||
if (_smsAuthService.VerifyResponse(token, smsResponse) == false)
|
||||
{
|
||||
AddMessage(MessageType.Error, Resources.Messages.IncorrectSmsResponse);
|
||||
|
||||
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
|
||||
}
|
||||
|
||||
var tokenEntity = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
|
||||
|
||||
Session[WebDavAppConfigManager.Instance.SessionKeys.ItemId] = tokenEntity.ItemId;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private UserProfile GetUserProfileModel(int itemId, int accountId)
|
||||
{
|
||||
var user = WspContext.Services.Organizations.GetUserGeneralSettings(itemId, accountId);
|
||||
var user = WspContext.Services.Organizations.GetUserGeneralSettingsWithExtraData(itemId, accountId);
|
||||
|
||||
return Mapper.Map<OrganizationUser, UserProfile>(user);
|
||||
}
|
||||
|
|
|
@ -60,6 +60,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Account.
|
||||
/// </summary>
|
||||
public static string Account {
|
||||
get {
|
||||
return ResourceManager.GetString("Account", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Actions.
|
||||
/// </summary>
|
||||
|
@ -123,6 +132,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to You can now access your {0}..
|
||||
/// </summary>
|
||||
public static string CanAccessYourFormat {
|
||||
get {
|
||||
return ResourceManager.GetString("CanAccessYourFormat", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Cancel.
|
||||
/// </summary>
|
||||
|
@ -537,6 +555,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Your new password has been set..
|
||||
/// </summary>
|
||||
public static string NewPasswordBeenSet {
|
||||
get {
|
||||
return ResourceManager.GetString("NewPasswordBeenSet", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Confirm password.
|
||||
/// </summary>
|
||||
|
@ -627,6 +654,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Password never expires. If you want to change password then please click {0}..
|
||||
/// </summary>
|
||||
public static string PasswordNeverExpiresFormat {
|
||||
get {
|
||||
return ResourceManager.GetString("PasswordNeverExpiresFormat", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Password reset.
|
||||
/// </summary>
|
||||
|
|
|
@ -393,4 +393,16 @@
|
|||
<data name="Login" xml:space="preserve">
|
||||
<value>Login</value>
|
||||
</data>
|
||||
<data name="PasswordNeverExpiresFormat" xml:space="preserve">
|
||||
<value>Password never expires. If you want to change password then please click {0}.</value>
|
||||
</data>
|
||||
<data name="Account" xml:space="preserve">
|
||||
<value>Account</value>
|
||||
</data>
|
||||
<data name="CanAccessYourFormat" xml:space="preserve">
|
||||
<value>You can now access your {0}.</value>
|
||||
</data>
|
||||
<data name="NewPasswordBeenSet" xml:space="preserve">
|
||||
<value>Your new password has been set.</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,18 @@
|
|||
@using WebsitePanel.WebDavPortal.Resources
|
||||
@using WebsitePanel.WebDavPortal.UI.Routes
|
||||
|
||||
@{
|
||||
string message = string.Format(UI.CanAccessYourFormat, Html.RouteLink(UI.Account,AccountRouteNames.Login));
|
||||
}
|
||||
|
||||
|
||||
<div class="container row">
|
||||
<div class="form-group">
|
||||
<h3>@Messages.PasswordSuccessfullyChanged</h3>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div>
|
||||
@UI.NewPasswordBeenSet @Html.Raw(message)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -6,7 +6,16 @@
|
|||
@{
|
||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||
|
||||
var passwordExpriationText = string.Format(UI.PasswordExpirationFormat, Model.PasswordExpirationDateTime.ToString(Formats.DateFormatWithTime), Html.RouteLink(UI.Here.ToLowerInvariant(), AccountRouteNames.PasswordChange));
|
||||
var passwordExpriationText = string.Empty;
|
||||
|
||||
if (Model.PasswordExpirationDateTime == DateTime.MaxValue)
|
||||
{
|
||||
passwordExpriationText = string.Format(UI.PasswordNeverExpiresFormat, Html.RouteLink(UI.Here.ToLowerInvariant(), AccountRouteNames.PasswordChange));
|
||||
}
|
||||
else
|
||||
{
|
||||
passwordExpriationText = string.Format(UI.PasswordExpirationFormat, Model.PasswordExpirationDateTime.ToString(Formats.DateFormatWithTime), Html.RouteLink(UI.Here.ToLowerInvariant(), AccountRouteNames.PasswordChange));
|
||||
}
|
||||
}
|
||||
|
||||
<div class="container row">
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
<add key="ItemIdSessionKey" value="ItemId" />
|
||||
<add key="UserGroupsKey" value="UserGroups" />
|
||||
<add key="OwaEditFoldersSession" value="OwaEditFolders" />
|
||||
<add key="PassswordResetSmsKey" value="PassswordResetSms" />
|
||||
<add key="PasswordResetSmsKey" value="PasswordResetSms" />
|
||||
</sessionKeys>
|
||||
<fileIcons defaultPath="~/Content/Images/other-icon.png" folderPath="~/Content/Images/folder_100x100.png">
|
||||
<add extension=".txt" path="~/Content/Images/txt-icon.png" />
|
||||
|
@ -101,7 +101,6 @@
|
|||
<add extension=".txt" mimeType="text/plain" isTargetBlank="true" />
|
||||
<add extension=".pdf" mimeType="application/pdf" isTargetBlank="true" />
|
||||
</typeOpener>
|
||||
<twilio accountSid="s" authorizationToken="s" phoneFrom="s"/>
|
||||
</webDavExplorerConfigurationSettings>
|
||||
<!--
|
||||
For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.
|
||||
|
|
|
@ -489,6 +489,7 @@
|
|||
<Content Include="Views\Account\PasswordResetEmailSent.cshtml" />
|
||||
<Content Include="Views\Account\PasswordResetSms.cshtml" />
|
||||
<Content Include="Views\Account\PasswordResetFinalStep.cshtml" />
|
||||
<Content Include="Views\Account\PasswordSuccessfullyChanged.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Models\FileSystem\Enums\" />
|
||||
|
|
|
@ -124,7 +124,7 @@
|
|||
</Group>
|
||||
<Group pageID="SpaceHome" titleresourcekey="VPS" disabled="True">
|
||||
<Icon pageID="SpaceVPS" resourceGroup="VPS" imageUrl="icons/vps_48.png" />
|
||||
<Icon pageID="SpaceVPS2012" resourceGroup="VPS2012" imageUrl="icons/vps_48.png" />
|
||||
<Icon pageID="SpaceVPS2012" resourceGroup="VPS2012" imageUrl="icons/vps2012_48.png" />
|
||||
<Icon pageID="SpaceVPSForPC" resourceGroup="VPSForPC" imageUrl="icons/vpsforpc_48.png" />
|
||||
</Group>
|
||||
<!--
|
||||
|
|
|
@ -653,33 +653,33 @@
|
|||
|
||||
<ModuleDefinition id="VPS2012">
|
||||
<Controls>
|
||||
<Control key="" src="WebsitePanel/VPS2012/VdcHome.ascx" title="VdcHome" type="View" />
|
||||
<Control key="vdc_create_server" src="WebsitePanel/VPS2012/VdcCreateServer.ascx" title="VdcCreateServer" type="View" />
|
||||
<Control key="vdc_import_server" src="WebsitePanel/VPS2012/VdcImportServer.ascx" title="VdcImportServer" type="View" />
|
||||
<Control key="vdc_external_network" src="WebsitePanel/VPS2012/VdcExternalNetwork.ascx" title="VdcExternalNetwork" type="View" />
|
||||
<Control key="vdc_management_network" src="WebsitePanel/VPS2012/VdcManagementNetwork.ascx" title="VdcManagementNetwork" type="View" />
|
||||
<Control key="vdc_allocate_external_ip" src="WebsitePanel/VPS2012/VdcAddExternalAddress.ascx" title="VdcAddExternalAddress" type="View" />
|
||||
<Control key="vdc_private_network" src="WebsitePanel/VPS2012/VdcPrivateNetwork.ascx" title="VdcPrivateNetwork" type="View" />
|
||||
<Control key="vdc_permissions" src="WebsitePanel/VPS2012/VdcPermissions.ascx" title="VdcPermissions" type="View" />
|
||||
<Control key="vdc_audit_log" src="WebsitePanel/VPS2012/VdcAuditLog.ascx" title="VdcAuditLog" type="View" />
|
||||
<Control key="" src="WebsitePanel/VPS2012/VdcHome.ascx" title="VdcHome" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vdc_create_server" src="WebsitePanel/VPS2012/VdcCreateServer.ascx" title="VdcCreateServer" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vdc_import_server" src="WebsitePanel/VPS2012/VdcImportServer.ascx" title="VdcImportServer" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vdc_external_network" src="WebsitePanel/VPS2012/VdcExternalNetwork.ascx" title="VdcExternalNetwork" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vdc_management_network" src="WebsitePanel/VPS2012/VdcManagementNetwork.ascx" title="VdcManagementNetwork" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vdc_allocate_external_ip" src="WebsitePanel/VPS2012/VdcAddExternalAddress.ascx" title="VdcAddExternalAddress" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vdc_private_network" src="WebsitePanel/VPS2012/VdcPrivateNetwork.ascx" title="VdcPrivateNetwork" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vdc_permissions" src="WebsitePanel/VPS2012/VdcPermissions.ascx" title="VdcPermissions" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vdc_audit_log" src="WebsitePanel/VPS2012/VdcAuditLog.ascx" title="VdcAuditLog" type="View" icon="vps2012_48.png" />
|
||||
|
||||
<Control key="vps_general" src="WebsitePanel/VPS2012/VpsDetailsGeneral.ascx" title="VpsDetailsGeneral" type="View" />
|
||||
<Control key="vps_config" src="WebsitePanel/VPS2012/VpsDetailsConfiguration.ascx" title="VpsDetailsConfiguration" type="View" />
|
||||
<Control key="vps_edit_config" src="WebsitePanel/VPS2012/VpsDetailsEditConfiguration.ascx" title="VpsDetailsEditConfiguration" type="View" />
|
||||
<Control key="vps_dvd" src="WebsitePanel/VPS2012/VpsDetailsDvd.ascx" title="VpsDetailsDvd" type="View" />
|
||||
<Control key="vps_insert_dvd" src="WebsitePanel/VPS2012/VpsDetailsInsertDvd.ascx" title="VpsDetailsInsertDvd" type="View" />
|
||||
<Control key="vps_snapshots" src="WebsitePanel/VPS2012/VpsDetailsSnapshots.ascx" title="VpsDetailsSnapshots" type="View" />
|
||||
<Control key="vps_replication" src="WebsitePanel/VPS2012/VpsDetailsReplications.ascx" title="VpsDetailReplications" type="View" />
|
||||
<Control key="vps_network" src="WebsitePanel/VPS2012/VpsDetailsNetwork.ascx" title="VpsDetailsNetwork" type="View" />
|
||||
<Control key="vps_add_external_ip" src="WebsitePanel/VPS2012/VpsDetailsAddExternalAddress.ascx" title="VpsDetailsAddExternalAddress" type="View" />
|
||||
<Control key="vps_add_private_ip" src="WebsitePanel/VPS2012/VpsDetailsAddPrivateAddress.ascx" title="VpsDetailsAddPrivateAddress" type="View" />
|
||||
<Control key="vps_permissions" src="WebsitePanel/VPS2012/VpsDetailsPermissions.ascx" title="VpsDetailsNetworking" type="View" />
|
||||
<Control key="vps_tools" src="WebsitePanel/VPS2012/VpsDetailsTools.ascx" title="VpsDetailsTools" type="View" />
|
||||
<Control key="vps_audit_log" src="WebsitePanel/VPS2012/VpsDetailsAuditLog.ascx" title="VpsDetailsAuditLog" type="View" />
|
||||
<Control key="vps_help" src="WebsitePanel/VPS2012/VpsDetailsHelp.ascx" title="VpsDetailsHelp" type="View" />
|
||||
<Control key="vps_tools_delete" src="WebsitePanel/VPS2012/VpsToolsDeleteServer.ascx" title="VpsToolsDeleteServer" type="View" />
|
||||
<Control key="vps_tools_move" src="WebsitePanel/VPS2012/VpsMoveServer.ascx" title="VpsMoveServer" type="View" />
|
||||
<Control key="vps_tools_reinstall" src="WebsitePanel/VPS2012/VpsToolsReinstallServer.ascx" title="VpsToolsReinstallServer" type="View" />
|
||||
<Control key="vps_general" src="WebsitePanel/VPS2012/VpsDetailsGeneral.ascx" title="VpsDetailsGeneral" type="View" icon="vps2012_48.png"/>
|
||||
<Control key="vps_config" src="WebsitePanel/VPS2012/VpsDetailsConfiguration.ascx" title="VpsDetailsConfiguration" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_edit_config" src="WebsitePanel/VPS2012/VpsDetailsEditConfiguration.ascx" title="VpsDetailsEditConfiguration" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_dvd" src="WebsitePanel/VPS2012/VpsDetailsDvd.ascx" title="VpsDetailsDvd" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_insert_dvd" src="WebsitePanel/VPS2012/VpsDetailsInsertDvd.ascx" title="VpsDetailsInsertDvd" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_snapshots" src="WebsitePanel/VPS2012/VpsDetailsSnapshots.ascx" title="VpsDetailsSnapshots" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_replication" src="WebsitePanel/VPS2012/VpsDetailsReplications.ascx" title="VpsDetailReplications" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_network" src="WebsitePanel/VPS2012/VpsDetailsNetwork.ascx" title="VpsDetailsNetwork" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_add_external_ip" src="WebsitePanel/VPS2012/VpsDetailsAddExternalAddress.ascx" title="VpsDetailsAddExternalAddress" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_add_private_ip" src="WebsitePanel/VPS2012/VpsDetailsAddPrivateAddress.ascx" title="VpsDetailsAddPrivateAddress" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_permissions" src="WebsitePanel/VPS2012/VpsDetailsPermissions.ascx" title="VpsDetailsNetworking" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_tools" src="WebsitePanel/VPS2012/VpsDetailsTools.ascx" title="VpsDetailsTools" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_audit_log" src="WebsitePanel/VPS2012/VpsDetailsAuditLog.ascx" title="VpsDetailsAuditLog" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_help" src="WebsitePanel/VPS2012/VpsDetailsHelp.ascx" title="VpsDetailsHelp" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_tools_delete" src="WebsitePanel/VPS2012/VpsToolsDeleteServer.ascx" title="VpsToolsDeleteServer" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_tools_move" src="WebsitePanel/VPS2012/VpsMoveServer.ascx" title="VpsMoveServer" type="View" icon="vps2012_48.png" />
|
||||
<Control key="vps_tools_reinstall" src="WebsitePanel/VPS2012/VpsToolsReinstallServer.ascx" title="VpsToolsReinstallServer" type="View" icon="vps2012_48.png" />
|
||||
</Controls>
|
||||
</ModuleDefinition>
|
||||
|
||||
|
@ -736,4 +736,11 @@
|
|||
<Control key="" src="WebsitePanel/OrganizationMenu.ascx" title="OrganizationMenu" type="View" />
|
||||
</Controls>
|
||||
</ModuleDefinition>
|
||||
|
||||
<!-- Virtual Personal Servers -->
|
||||
<ModuleDefinition id="VpsMenu">
|
||||
<Controls>
|
||||
<Control key="" src="WebsitePanel/VpsMenu.ascx" title="VpsMenu" type="View" />
|
||||
</Controls>
|
||||
</ModuleDefinition>
|
||||
</ModuleDefinitions>
|
|
@ -660,7 +660,7 @@
|
|||
</Content>
|
||||
</Page>
|
||||
|
||||
<Page name="SpaceVPS2012" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True" skin="VPS.ascx" adminskin="VPS.ascx">
|
||||
<Page name="SpaceVPS2012" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True">
|
||||
<Content id="LeftPane">
|
||||
<Module moduleDefinitionID="UserAccountMenu" title="UserMenu" container="Clear.ascx">
|
||||
<ModuleData ref="UserMenu"/>
|
||||
|
@ -668,9 +668,11 @@
|
|||
<Module moduleDefinitionID="SpaceMenu" title="SpaceMenu" container="Clear.ascx">
|
||||
<ModuleData ref="SpaceMenu"/>
|
||||
</Module>
|
||||
<Module moduleDefinitionID="VpsMenu" title="VpsMenu" container="Clear.ascx">
|
||||
</Module>
|
||||
</Content>
|
||||
<Content id="ContentPane">
|
||||
<Module moduleDefinitionID="VPS2012" title="VirtualPrivateServers2012" icon="" container="VPS2012.ascx" admincontainer="VPS2012.ascx" readOnlyRoles="PlatformCSR,ResellerCSR"/>
|
||||
<Module moduleDefinitionID="VPS2012" title="VirtualPrivateServers2012" icon="vps2012_48.png" readOnlyRoles="PlatformCSR,ResellerCSR"/>
|
||||
</Content>
|
||||
</Page>
|
||||
|
||||
|
|
|
@ -816,4 +816,83 @@
|
|||
<data name="ModuleTitle.RDSServersEditServer" xml:space="preserve">
|
||||
<value>Edit RDS Server</value>
|
||||
</data>
|
||||
|
||||
<data name="ModuleTitle.VirtualPrivateServers2012" xml:space="preserve">
|
||||
<value>Virtual Private Servers</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VdcCreateServer" xml:space="preserve">
|
||||
<value>Create New VPS</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VdcImportServer" xml:space="preserve">
|
||||
<value>Import VPS</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VdcExternalNetwork" xml:space="preserve">
|
||||
<value>External Network</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VdcManagementNetwork" xml:space="preserve">
|
||||
<value>Management Network</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VdcAddExternalAddress" xml:space="preserve">
|
||||
<value>Allocate IP Addresses</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VdcPrivateNetwork" xml:space="preserve">
|
||||
<value>Private Network</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VdcPermissions" xml:space="preserve">
|
||||
<value>User Permissions</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VdcAuditLog" xml:space="preserve">
|
||||
<value>Audit Log</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsGeneral" xml:space="preserve">
|
||||
<value>General</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsConfiguration" xml:space="preserve">
|
||||
<value>Configuration</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsEditConfiguration" xml:space="preserve">
|
||||
<value>Edit Configuration</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsDvd" xml:space="preserve">
|
||||
<value>DVD</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsInsertDvd" xml:space="preserve">
|
||||
<value>DVD</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsSnapshots" xml:space="preserve">
|
||||
<value>Snapshots</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailReplications" xml:space="preserve">
|
||||
<value>Replication</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsNetwork" xml:space="preserve">
|
||||
<value>Network</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsAddExternalAddress" xml:space="preserve">
|
||||
<value>Network</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsAddPrivateAddress" xml:space="preserve">
|
||||
<value>Network</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsNetworking" xml:space="preserve">
|
||||
<value>Permissions</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsTools" xml:space="preserve">
|
||||
<value>Tools</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsAuditLog" xml:space="preserve">
|
||||
<value>Audit Log</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsDetailsHelp" xml:space="preserve">
|
||||
<value>Help</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsToolsDeleteServer" xml:space="preserve">
|
||||
<value>Delete Server</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsMoveServer" xml:space="preserve">
|
||||
<value>Move VPS</value>
|
||||
</data>
|
||||
<data name="ModuleTitle.VpsToolsReinstallServer" xml:space="preserve">
|
||||
<value>Re-install Server</value>
|
||||
</data>
|
||||
</root>
|
|
@ -5178,7 +5178,6 @@
|
|||
<data name="Quota.VPSForPC.StartShutdownAllowed" xml:space="preserve">
|
||||
<value>Allow user to Start, Turn off VPS</value>
|
||||
</data>
|
||||
|
||||
<data name="ResourceGroup.VPS2012" xml:space="preserve">
|
||||
<value>Virtual Private Servers 2012</value>
|
||||
</data>
|
||||
|
@ -5245,7 +5244,6 @@
|
|||
<data name="Quota.VPS2012.StartShutdownAllowed" xml:space="preserve">
|
||||
<value>Allow user to Start, Turn off VPS</value>
|
||||
</data>
|
||||
|
||||
<data name="Error.CreateCheckPointError" xml:space="preserve">
|
||||
<value>Error creating CheckPoint</value>
|
||||
</data>
|
||||
|
@ -5852,4 +5850,7 @@
|
|||
<data name="Error.UNABLETOLOADPASSWORDSETTINGS" xml:space="preserve">
|
||||
<value>Unable to load password settings</value>
|
||||
</data>
|
||||
<data name="Error.SEND_USER_PASSWORD_RESET_SMS" xml:space="preserve">
|
||||
<value>Sms was not sent.</value>
|
||||
</data>
|
||||
</root>
|
|
@ -42,3 +42,4 @@ Default skin template. The following skins are provided as examples only.
|
|||
|
||||
|
||||
<asp:ImageButton SkinID="VpsDelete" runat="server" ImageUrl="Images/VPS/delete.png" ImageAlign="AbsMiddle" Width="16" Height="16"/>
|
||||
<asp:ImageButton SkinID="VpsDelete2012" runat="server" ImageUrl="Images/VPS2012/delete.png" ImageAlign="AbsMiddle" Width="16" Height="16"/>
|
After Width: | Height: | Size: 242 B |
|
@ -44,6 +44,8 @@ Default skin template. The following skins are provided as examples only.
|
|||
|
||||
<asp:Image runat="server" SkinID="OptionEnabled" ImageUrl="images/Exchange/checkbox.png" ImageAlign="AbsMiddle" Width="16" Height="16" />
|
||||
<asp:Image runat="server" SkinID="OptionDisabled" ImageUrl="images/VPS/delete.png" ImageAlign="AbsMiddle" Width="16" Height="16" />
|
||||
<asp:Image runat="server" SkinID="OptionDisabled2012" ImageUrl="images/VPS2012/delete.png" ImageAlign="AbsMiddle" Width="16" Height="16" />
|
||||
|
||||
<asp:Image runat="server" SkinID="Vps16" ImageUrl="images/VPS/server.png" ImageAlign="AbsMiddle" Width="16" Height="16" />
|
||||
<asp:Image runat="server" SkinID="Vps2012_16" ImageUrl="images/VPS2012/server.png" ImageAlign="AbsMiddle" Width="16" Height="16" />
|
||||
<asp:Image runat="server" SkinID="Rdc16" ImageUrl="images/VPS/rdc16.png" ImageAlign="AbsMiddle" Width="16" Height="16" />
|
After Width: | Height: | Size: 313 B |
After Width: | Height: | Size: 271 B |
After Width: | Height: | Size: 271 B |
After Width: | Height: | Size: 271 B |
After Width: | Height: | Size: 284 B |
After Width: | Height: | Size: 284 B |
After Width: | Height: | Size: 284 B |
After Width: | Height: | Size: 800 B |
After Width: | Height: | Size: 167 B |
After Width: | Height: | Size: 361 B |
After Width: | Height: | Size: 361 B |
After Width: | Height: | Size: 241 B |
After Width: | Height: | Size: 163 B |
After Width: | Height: | Size: 247 B |
After Width: | Height: | Size: 373 B |
After Width: | Height: | Size: 291 B |
After Width: | Height: | Size: 291 B |
After Width: | Height: | Size: 339 B |
After Width: | Height: | Size: 741 B |
|
@ -293,6 +293,10 @@ UL.ActionButtons LI {margin-bottom: 12px;}
|
|||
.ActionButtonRename {padding: 3px 2px 3px 20px; background: transparent url(../images/VPS/rename.gif) left center no-repeat;}
|
||||
.ActionButtonDeleteSnapshot {padding: 3px 2px 3px 20px; background: transparent url(../images/VPS/delete3.png) left center no-repeat;}
|
||||
.ActionButtonDeleteSnapshotTree {padding: 3px 2px 3px 20px; background: transparent url(../images/VPS/delete4.png) left center no-repeat;}
|
||||
.ActionButtonApplySnapshot2012 {padding: 3px 2px 3px 20px; background: transparent url(../images/VPS2012/apply.png) left center no-repeat;}
|
||||
.ActionButtonRename2012 {padding: 3px 2px 3px 20px; background: transparent url(../images/VPS2012/rename.png) left center no-repeat;}
|
||||
.ActionButtonDeleteSnapshot2012 {padding: 3px 2px 3px 20px; background: transparent url(../images/VPS2012/delete3.png) left center no-repeat;}
|
||||
.ActionButtonDeleteSnapshotTree2012 {padding: 3px 2px 3px 20px; background: transparent url(../images/VPS2012/delete4.png) left center no-repeat;}
|
||||
.CodeEditor {width: 100%; height: 360px; font-size: 13px; white-space: pre; line-height: 16px; font-family: Consolas, Monospace;}
|
||||
.pnlControl {height:20px; margin:5px 5px; text-align:left;}
|
||||
.pnlControl span {display:inline-block; width:100px;}
|
||||
|
|
|
@ -141,6 +141,12 @@
|
|||
<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>
|
||||
|
|
|
@ -180,4 +180,16 @@
|
|||
<data name="locEnablePasswordReset.Text" xml:space="preserve">
|
||||
<value>Enable password reset:</value>
|
||||
</data>
|
||||
<data name="lblAccountSid.Text" xml:space="preserve">
|
||||
<value>AccountSID</value>
|
||||
</data>
|
||||
<data name="lblAuthToken.Text" xml:space="preserve">
|
||||
<value>AuthToken</value>
|
||||
</data>
|
||||
<data name="lblPhoneFrom.Text" xml:space="preserve">
|
||||
<value>Phone From</value>
|
||||
</data>
|
||||
<data name="TwilioSettings.Text" xml:space="preserve">
|
||||
<value>Twilio</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,138 @@
|
|||
<?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="locMenuTitle.Text" xml:space="preserve">
|
||||
<value>VPS Menu</value>
|
||||
</data>
|
||||
<data name="Text.VPSHome" xml:space="preserve">
|
||||
<value>Virtual Personal Servers</value>
|
||||
</data>
|
||||
<data name="Text.AuditLog" xml:space="preserve">
|
||||
<value>Audit Log</value>
|
||||
</data>
|
||||
<data name="Text.ExternalNetwork" xml:space="preserve">
|
||||
<value>External Network</value>
|
||||
</data>
|
||||
<data name="Text.ManagementNetwork" xml:space="preserve">
|
||||
<value>Management Network</value>
|
||||
</data>
|
||||
<data name="Text.PrivateNetwork" xml:space="preserve">
|
||||
<value>Private Network</value>
|
||||
</data>
|
||||
</root>
|
|
@ -219,4 +219,13 @@
|
|||
<data name="valResetAccountLockout.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name="lblMaxPasswordAge.Text" xml:space="preserve">
|
||||
<value>Max Password Age (days):</value>
|
||||
</data>
|
||||
<data name="valCorrectMaxPasswordAge.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name="valRequireMaxPasswordAge.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
</root>
|
|
@ -123,10 +123,22 @@
|
|||
<data name="locEmailAddress.Text" xml:space="preserve">
|
||||
<value>Email:</value>
|
||||
</data>
|
||||
<data name="locMobile.Text" xml:space="preserve">
|
||||
<value>Mobile</value>
|
||||
</data>
|
||||
<data name="locReason.Text" xml:space="preserve">
|
||||
<value>Reason:</value>
|
||||
</data>
|
||||
<data name="locSendTo.Text" xml:space="preserve">
|
||||
<value>Send to:</value>
|
||||
</data>
|
||||
<data name="locTitle.Text" xml:space="preserve">
|
||||
<value>Reset Password</value>
|
||||
</data>
|
||||
<data name="rbtnEmail.Text" xml:space="preserve">
|
||||
<value>Email</value>
|
||||
</data>
|
||||
<data name="rbtnMobile.Text" xml:space="preserve">
|
||||
<value>Mobile</value>
|
||||
</data>
|
||||
</root>
|
|
@ -51,7 +51,7 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
{
|
||||
BindPasswordSettings();
|
||||
|
||||
string instructions = ES.Services.ExchangeServer.GetMailboxSetupInstructions(PanelRequest.ItemID, PanelRequest.AccountID, false, false, false);
|
||||
string instructions = ES.Services.ExchangeServer.GetMailboxSetupInstructions(PanelRequest.ItemID, PanelRequest.AccountID, false, false, false, " ");
|
||||
if (!string.IsNullOrEmpty(instructions))
|
||||
{
|
||||
chkSendInstructions.Checked = chkSendInstructions.Visible = sendInstructionEmail.Visible = true;
|
||||
|
|
|
@ -47,7 +47,12 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
// load content
|
||||
litContent.Text = ES.Services.ExchangeServer.GetMailboxSetupInstructions(
|
||||
PanelRequest.ItemID, PanelRequest.AccountID,
|
||||
false, false, false);
|
||||
false, false, false,
|
||||
PortalUtils.EditUrl("ItemID", PanelRequest.ItemID.ToString(),
|
||||
"user_reset_password",
|
||||
"SpaceID=" + PanelSecurity.PackageId,
|
||||
"Context=Mailbox",
|
||||
"AccountID=" + PanelRequest.AccountID).Trim('~'));
|
||||
|
||||
// bind user details
|
||||
PackageInfo package = ES.Services.Packages.GetPackage(PanelSecurity.PackageId);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
|
||||
<script type="text/javascript" src="/JavaScript/jquery.min.js?v=1.4.4"></script>
|
||||
|
||||
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
|
||||
<wsp:EnableAsyncTasksSupport ID="asyncTasks" runat="server" />
|
||||
|
||||
<div id="ExchangeContainer">
|
||||
<div class="Module">
|
||||
|
@ -23,18 +23,18 @@
|
|||
</div>
|
||||
<div class="FormBody">
|
||||
|
||||
<wsp:CollectionTabs id="tabs" runat="server" SelectedTab="organization_settings_password_settings" />
|
||||
<wsp:CollectionTabs ID="tabs" runat="server" SelectedTab="organization_settings_password_settings" />
|
||||
|
||||
<wsp:SimpleMessageBox id="messageBox" runat="server" />
|
||||
<wsp:SimpleMessageBox ID="messageBox" runat="server" />
|
||||
<asp:UpdatePanel runat="server" ID="PasswordPolicyPanel" UpdateMode="Conditional" ChildrenAsTriggers="true">
|
||||
<ContentTemplate>
|
||||
<wsp:CollapsiblePanel id="colPasswordSettings" runat="server" TargetControlID="panelPasswordSettings" meta:resourcekey="colPasswordSettings" Text="Password settings">
|
||||
</wsp:CollapsiblePanel>
|
||||
<wsp:CollapsiblePanel ID="colPasswordSettings" runat="server" TargetControlID="panelPasswordSettings" meta:ResourceKey="colPasswordSettings" Text="Password settings"></wsp:CollapsiblePanel>
|
||||
|
||||
<asp:Panel runat="server" ID="panelPasswordSettings">
|
||||
<table id="PolicyTable" runat="server" cellpadding="2">
|
||||
<tr>
|
||||
<td class="Normal" style="width:150px;"><asp:Label ID="lblMinimumLength" runat="server"
|
||||
<td class="Normal" style="width: 150px;">
|
||||
<asp:Label ID="lblMinimumLength" runat="server"
|
||||
meta:resourcekey="lblMinimumLength" Text="Minimum length:"></asp:Label></td>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtMinimumLength" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
|
@ -44,7 +44,8 @@
|
|||
Display="Dynamic" ErrorMessage="*" ValidationExpression="\d{1,3}" ValidationGroup="SettingsEditor"></asp:RegularExpressionValidator></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Normal"><asp:Label ID="lblMaximumLength" runat="server"
|
||||
<td class="Normal">
|
||||
<asp:Label ID="lblMaximumLength" runat="server"
|
||||
meta:resourcekey="lblMaximumLength" Text="Maximum length:"></asp:Label></td>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtMaximumLength" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
|
@ -55,7 +56,8 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Normal" style="width:150px;"><asp:Label ID="lblEnforcePasswordHistory" runat="server"
|
||||
<td class="Normal" style="width: 150px;">
|
||||
<asp:Label ID="lblEnforcePasswordHistory" runat="server"
|
||||
meta:resourcekey="lblEnforcePasswordHistory" Text="Enforce Password History:"></asp:Label></td>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtEnforcePasswordHistory" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
|
@ -64,14 +66,26 @@
|
|||
<asp:RegularExpressionValidator ID="valCorrectEnforcePasswordHistory" runat="server" ControlToValidate="txtEnforcePasswordHistory" meta:resourcekey="valCorrectEnforcePasswordHistory"
|
||||
Display="Dynamic" ErrorMessage="*" ValidationExpression="\d{1,3}" ValidationGroup="SettingsEditor"></asp:RegularExpressionValidator></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Normal" style="width: 150px;">
|
||||
<asp:Label ID="lblMaxPasswordAge" runat="server"
|
||||
meta:resourcekey="lblMaxPasswordAge" Text="Max Password Age (days):"></asp:Label></td>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtMaxPasswordAge" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valRequireMaxPasswordAge" runat="server" ControlToValidate="txtMaxPasswordAge" meta:resourcekey="valRequireMaxPasswordAge"
|
||||
ErrorMessage="*" ValidationGroup="SettingsEditor" Display="Dynamic"></asp:RequiredFieldValidator>
|
||||
<asp:RegularExpressionValidator ID="valCorrectMaxPasswordAge" runat="server" ControlToValidate="txtMaxPasswordAge" meta:resourcekey="valCorrectMaxPasswordAge"
|
||||
Display="Dynamic" ErrorMessage="*" ValidationExpression="\d{1,3}" ValidationGroup="SettingsEditor"></asp:RegularExpressionValidator></td>
|
||||
</tr>
|
||||
<tr id="RowChkLockOutSettigns" runat="server">
|
||||
<td colspan="2" class="NormalBold">
|
||||
<asp:CheckBox id="chkLockOutSettigns" runat="server" meta:resourcekey="chkLockOutSettigns"
|
||||
<asp:CheckBox ID="chkLockOutSettigns" runat="server" meta:resourcekey="chkLockOutSettigns"
|
||||
Text="Enable Lockout Settings" CssClass="NormalBold" AutoPostBack="true" OnCheckedChanged="chkLockOutSettigns_CheckedChanged" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="RowAccountLockoutDuration" runat="server">
|
||||
<td class="Normal" style="width:150px;"><asp:Label ID="lblAccountLockoutDuration" runat="server"
|
||||
<td class="Normal" style="width: 150px;">
|
||||
<asp:Label ID="lblAccountLockoutDuration" runat="server"
|
||||
meta:resourcekey="lblAccountLockoutDuration" Text="Account Lockout Duration (minutes):"></asp:Label></td>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtAccountLockoutDuration" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
|
@ -85,7 +99,8 @@
|
|||
<asp:Label ID="lblLockedOut" runat="server"
|
||||
meta:resourcekey="lblLockedOut" Text="Account Lockout threshold:"></asp:Label>
|
||||
</td>
|
||||
<td class="Normal"><asp:TextBox ID="txtLockedOut" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtLockedOut" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valRequiredLockedOut" runat="server" ControlToValidate="txtLockedOut" meta:resourcekey="valRequiredLockedOut"
|
||||
ErrorMessage="*" ValidationGroup="SettingsEditor" Display="Dynamic"></asp:RequiredFieldValidator>
|
||||
<asp:RegularExpressionValidator ID="valCorrectLockedOut" runat="server" ControlToValidate="txtLockedOut" meta:resourcekey="valCorrectLockedOut"
|
||||
|
@ -97,7 +112,8 @@
|
|||
<asp:Label ID="lblResetAccountLockout" runat="server"
|
||||
meta:resourcekey="lblResetAccountLockout" Text="Reset account lockout counter after (minutes):"></asp:Label>
|
||||
</td>
|
||||
<td class="Normal"><asp:TextBox ID="txtResetAccountLockout" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtResetAccountLockout" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valRequireResetAccountLockout" runat="server" ControlToValidate="txtResetAccountLockout" meta:resourcekey="valRequireResetAccountLockout"
|
||||
ErrorMessage="*" ValidationGroup="SettingsEditor" Display="Dynamic"></asp:RequiredFieldValidator>
|
||||
<asp:RegularExpressionValidator ID="valResetAccountLockout" runat="server" ControlToValidate="txtResetAccountLockout" meta:resourcekey="valResetAccountLockout"
|
||||
|
@ -107,7 +123,7 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2" class="NormalBold">
|
||||
<asp:CheckBox id="chkPasswordComplexity" runat="server" meta:resourcekey="chkPasswordComplexity"
|
||||
<asp:CheckBox ID="chkPasswordComplexity" runat="server" meta:resourcekey="chkPasswordComplexity"
|
||||
Text="Enable Password Complexity" CssClass="NormalBold" AutoPostBack="true" OnCheckedChanged="chkPasswordComplexity_CheckedChanged" />
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -116,7 +132,8 @@
|
|||
<asp:Label ID="lblMinimumUppercase" runat="server"
|
||||
meta:resourcekey="lblMinimumUppercase" Text="Uppercase letters:"></asp:Label>
|
||||
</td>
|
||||
<td class="Normal"><asp:TextBox ID="txtMinimumUppercase" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtMinimumUppercase" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valRequireUppercase" runat="server" ControlToValidate="txtMinimumUppercase" meta:resourcekey="valRequireUppercase"
|
||||
ErrorMessage="*" ValidationGroup="SettingsEditor" Display="Dynamic"></asp:RequiredFieldValidator>
|
||||
<asp:RegularExpressionValidator ID="valCorrectUppercase" runat="server" ControlToValidate="txtMinimumUppercase" meta:resourcekey="valCorrectUppercase"
|
||||
|
@ -128,7 +145,8 @@
|
|||
<asp:Label ID="lblMinimumNumbers" runat="server"
|
||||
meta:resourcekey="lblMinimumNumbers" Text="Numbers:"></asp:Label>
|
||||
</td>
|
||||
<td class="Normal"><asp:TextBox ID="txtMinimumNumbers" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtMinimumNumbers" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valRequireNumbers" runat="server" ControlToValidate="txtMinimumNumbers" meta:resourcekey="valRequireNumbers"
|
||||
ErrorMessage="*" ValidationGroup="SettingsEditor" Display="Dynamic"></asp:RequiredFieldValidator>
|
||||
<asp:RegularExpressionValidator ID="valCorrectNumbers" runat="server" ControlToValidate="txtMinimumNumbers" meta:resourcekey="valCorrectNumbers"
|
||||
|
@ -140,7 +158,8 @@
|
|||
<asp:Label ID="lblMinimumSymbols" runat="server"
|
||||
meta:resourcekey="lblMinimumSymbols" Text="Non-alphanumeric symbols:"></asp:Label>
|
||||
</td>
|
||||
<td class="Normal"><asp:TextBox ID="txtMinimumSymbols" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtMinimumSymbols" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valRequireSymbols" runat="server" ControlToValidate="txtMinimumSymbols" meta:resourcekey="valRequireSymbols"
|
||||
ErrorMessage="*" ValidationGroup="SettingsEditor" Display="Dynamic"></asp:RequiredFieldValidator>
|
||||
<asp:RegularExpressionValidator ID="valCorrectSymbols" runat="server" ControlToValidate="txtMinimumSymbols" meta:resourcekey="valCorrectSymbols"
|
||||
|
@ -149,7 +168,7 @@
|
|||
</tr>
|
||||
<tr id="rowEqualUsername" runat="server" visible="false">
|
||||
<td class="Normal" colspan="2">
|
||||
<asp:CheckBox id="chkNotEqualUsername" runat="server" meta:resourcekey="chkNotEqualUsername" Text="Should not be equal to username" />
|
||||
<asp:CheckBox ID="chkNotEqualUsername" runat="server" meta:resourcekey="chkNotEqualUsername" Text="Should not be equal to username" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -158,7 +177,7 @@
|
|||
</asp:UpdatePanel>
|
||||
|
||||
<div class="FormFooterClean">
|
||||
<wsp:ItemButtonPanel id="buttonPanel" runat="server" ValidationGroup="SettingsEditor"
|
||||
<wsp:ItemButtonPanel ID="buttonPanel" runat="server" ValidationGroup="SettingsEditor"
|
||||
OnSaveClick="btnSave_Click" OnSaveExitClick="btnSaveExit_Click" />
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
|
@ -59,6 +60,8 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
txtResetAccountLockout.Text = PasswordPolicyEditor.GetValueSafe(parts, 10, "0");
|
||||
chkLockOutSettigns.Checked = PasswordPolicyEditor.GetValueSafe(parts, 11, false);
|
||||
chkPasswordComplexity.Checked = PasswordPolicyEditor.GetValueSafe(parts, 12, true);
|
||||
|
||||
txtMaxPasswordAge.Text = PasswordPolicyEditor.GetValueSafe(parts, 13, "42");
|
||||
}
|
||||
|
||||
private void BindSettings(OrganizationPasswordSettings settings)
|
||||
|
@ -75,6 +78,8 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
txtResetAccountLockout.Text = settings.ResetAccountLockoutCounterAfter.ToString();
|
||||
chkLockOutSettigns.Checked = settings.LockoutSettingsEnabled;
|
||||
chkPasswordComplexity.Checked = settings.PasswordComplexityEnabled;
|
||||
|
||||
txtMaxPasswordAge.Text = settings.MaxPasswordAge.ToString();
|
||||
}
|
||||
|
||||
private OrganizationPasswordSettings GetSettings()
|
||||
|
@ -94,6 +99,8 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
settings.LockoutSettingsEnabled = chkLockOutSettigns.Checked;
|
||||
settings.PasswordComplexityEnabled =chkPasswordComplexity.Checked;
|
||||
|
||||
settings.MaxPasswordAge = Utils.ParseInt(txtMaxPasswordAge.Text, 42);
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
|
|
|
@ -210,6 +210,42 @@ namespace WebsitePanel.Portal.ExchangeServer {
|
|||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RegularExpressionValidator valCorrectEnforcePasswordHistory;
|
||||
|
||||
/// <summary>
|
||||
/// lblMaxPasswordAge 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 lblMaxPasswordAge;
|
||||
|
||||
/// <summary>
|
||||
/// txtMaxPasswordAge 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 txtMaxPasswordAge;
|
||||
|
||||
/// <summary>
|
||||
/// valRequireMaxPasswordAge 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.RequiredFieldValidator valRequireMaxPasswordAge;
|
||||
|
||||
/// <summary>
|
||||
/// valCorrectMaxPasswordAge 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.RegularExpressionValidator valCorrectMaxPasswordAge;
|
||||
|
||||
/// <summary>
|
||||
/// RowChkLockOutSettigns control.
|
||||
/// </summary>
|
||||
|
|
|
@ -17,17 +17,41 @@
|
|||
</div>
|
||||
|
||||
<div class="FormBody">
|
||||
<asp:UpdatePanel ID="PasswrodResetUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
|
||||
<ContentTemplate>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td class="FormLabel150" valign="top"><asp:Localize ID="locEmailAddress" runat="server" meta:resourcekey="locEmailAddress" ></asp:Localize></td>
|
||||
<td class="FormLabel150">
|
||||
<asp:Localize ID="locSendTo" runat="server" meta:resourcekey="locSendTo" Text="Send to:"></asp:Localize></td>
|
||||
<td class="FormRBtnL">
|
||||
<asp:RadioButton ID="rbtnEmail" runat="server" meta:resourcekey="rbtnEmail" Text="Email" GroupName="SendToGroup" AutoPostBack="true" Checked="true" OnCheckedChanged="SendToGroupCheckedChanged" />
|
||||
<asp:RadioButton ID="rbtnMobile" runat="server" meta:resourcekey="rbtnMobile" Text="Mobile" GroupName="SendToGroup" AutoPostBack="true" OnCheckedChanged="SendToGroupCheckedChanged" />
|
||||
<br />
|
||||
<br />
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="EmailRow" runat="server">
|
||||
<td class="FormLabel150" valign="top">
|
||||
<asp:Localize ID="locEmailAddress" runat="server" meta:resourcekey="locEmailAddress"></asp:Localize></td>
|
||||
<td>
|
||||
<asp:TextBox runat="server" ID="txtEmailAddress" CssClass="TextBox200" />
|
||||
<asp:RequiredFieldValidator ID="valEmailAddress" runat="server" ErrorMessage="*" ControlToValidate="txtEmailAddress" ValidationGroup="ResetUserPassword"></asp:RequiredFieldValidator>
|
||||
<asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ValidationGroup="ResetUserPassword" ControlToValidate="txtEmailAddress" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="MobileRow" runat="server" visible="False">
|
||||
<td class="FormLabel150" valign="top">
|
||||
<asp:Localize ID="locMobile" runat="server" meta:resourcekey="locMobile"></asp:Localize></td>
|
||||
<td>
|
||||
<asp:TextBox runat="server" ID="txtMobile" CssClass="TextBox200" />
|
||||
<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>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="FormLabel150"><asp:Localize ID="locReason" runat="server" meta:resourcekey="locReason" Text="Reason:"></asp:Localize></td>
|
||||
<td class="FormLabel150">
|
||||
<asp:Localize ID="locReason" runat="server" meta:resourcekey="locReason" Text="Reason:"></asp:Localize></td>
|
||||
<td>
|
||||
<asp:TextBox ID="txtReason" runat="server" CssClass="TextBox200" Rows="4" TextMode="MultiLine"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valReason" runat="server" ErrorMessage="*" ControlToValidate="txtReason" ValidationGroup="ResetUserPassword"></asp:RequiredFieldValidator>
|
||||
|
@ -35,8 +59,11 @@
|
|||
</tr>
|
||||
</table>
|
||||
|
||||
</ContentTemplate>
|
||||
</asp:UpdatePanel>
|
||||
|
||||
<div class="FormFooterClean">
|
||||
<asp:Button id="btnResetPassoword" runat="server" Text="Send Password Reset Email" CssClass="Button1" meta:resourcekey="btnResetPassoword" ValidationGroup="ResetUserPassword" OnClick="btnResetPassoword_Click"></asp:Button>
|
||||
<asp:Button ID="btnResetPassoword" runat="server" Text="Send Password Reset Email" CssClass="Button1" meta:resourcekey="btnResetPassoword" ValidationGroup="ResetUserPassword" OnClick="btnResetPassoword_Click"></asp:Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -26,6 +26,8 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
litDisplayName.Text = PortalAntiXSS.Encode(user.DisplayName);
|
||||
|
||||
txtEmailAddress.Text = user.PrimaryEmailAddress;
|
||||
|
||||
txtMobile.Text = user.MobilePhone;
|
||||
}
|
||||
|
||||
protected void btnResetPassoword_Click(object sender, EventArgs e)
|
||||
|
@ -35,11 +37,31 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
return;
|
||||
}
|
||||
|
||||
ES.Services.Organizations.SendResetUserPasswordEmail(PanelRequest.ItemID,PanelRequest.AccountID, txtReason.Text, txtEmailAddress.Text);
|
||||
if (rbtnEmail.Checked)
|
||||
{
|
||||
ES.Services.Organizations.SendResetUserPasswordEmail(PanelRequest.ItemID,PanelRequest.AccountID, txtReason.Text, txtEmailAddress.Text, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = ES.Services.Organizations.SendResetUserPasswordLinkSms(PanelRequest.ItemID, PanelRequest.AccountID, txtReason.Text, txtMobile.Text);
|
||||
|
||||
if (!result.IsSuccess)
|
||||
{
|
||||
ShowErrorMessage("SEND_USER_PASSWORD_RESET_SMS");
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Response.Redirect(PortalUtils.EditUrl("ItemID", PanelRequest.ItemID.ToString(),
|
||||
(PanelRequest.Context == "Mailbox") ? "mailboxes" : "users",
|
||||
"SpaceID=" + PanelSecurity.PackageId));
|
||||
}
|
||||
|
||||
protected void SendToGroupCheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
EmailRow.Visible = rbtnEmail.Checked;
|
||||
MobileRow.Visible = !rbtnEmail.Checked;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -39,6 +39,51 @@ namespace WebsitePanel.Portal.ExchangeServer {
|
|||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal litDisplayName;
|
||||
|
||||
/// <summary>
|
||||
/// PasswrodResetUpdatePanel control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.UpdatePanel PasswrodResetUpdatePanel;
|
||||
|
||||
/// <summary>
|
||||
/// locSendTo 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 locSendTo;
|
||||
|
||||
/// <summary>
|
||||
/// rbtnEmail 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.RadioButton rbtnEmail;
|
||||
|
||||
/// <summary>
|
||||
/// rbtnMobile 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.RadioButton rbtnMobile;
|
||||
|
||||
/// <summary>
|
||||
/// EmailRow control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.HtmlControls.HtmlTableRow EmailRow;
|
||||
|
||||
/// <summary>
|
||||
/// locEmailAddress control.
|
||||
/// </summary>
|
||||
|
@ -75,6 +120,51 @@ namespace WebsitePanel.Portal.ExchangeServer {
|
|||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RegularExpressionValidator regexEmailValid;
|
||||
|
||||
/// <summary>
|
||||
/// MobileRow control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.HtmlControls.HtmlTableRow MobileRow;
|
||||
|
||||
/// <summary>
|
||||
/// locMobile 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 locMobile;
|
||||
|
||||
/// <summary>
|
||||
/// txtMobile 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 txtMobile;
|
||||
|
||||
/// <summary>
|
||||
/// valMobile 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.RequiredFieldValidator valMobile;
|
||||
|
||||
/// <summary>
|
||||
/// regexMobileValid 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.RegularExpressionValidator regexMobileValid;
|
||||
|
||||
/// <summary>
|
||||
/// locReason control.
|
||||
/// </summary>
|
||||
|
|
|
@ -70,7 +70,7 @@ namespace WebsitePanel.Portal.ExchangeServer.UserControls
|
|||
if (!hideItems) tabsList.Add(CreateTab("mailbox_mailflow", "Tab.Mailflow"));
|
||||
if (!hideItems) tabsList.Add(CreateTab("mailbox_permissions", "Tab.Permissions"));
|
||||
|
||||
string instructions = ES.Services.ExchangeServer.GetMailboxSetupInstructions(PanelRequest.ItemID, PanelRequest.AccountID, false, false, false);
|
||||
string instructions = ES.Services.ExchangeServer.GetMailboxSetupInstructions(PanelRequest.ItemID, PanelRequest.AccountID, false, false, false, " ");
|
||||
if (!string.IsNullOrEmpty(instructions))
|
||||
tabsList.Add(CreateTab("mailbox_setup", "Tab.Setup"));
|
||||
|
||||
|
|
|
@ -42,4 +42,19 @@
|
|||
<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="lblPasswordResetLinkSmsBody" runat="server" meta:resourcekey="lblPasswordResetLinkSmsBody" Text="Password Reset Link Sms Body:"></asp:Label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Normal" colspan="2">
|
||||
<asp:TextBox ID="txtBodyPasswordResetLinkSmsBody" 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>
|
|
@ -18,6 +18,9 @@ namespace WebsitePanel.Portal
|
|||
txtHtmlBody.Text = settings["HtmlBody"];
|
||||
txtTextBody.Text = settings["TextBody"];
|
||||
txtLogoUrl.Text = settings["LogoUrl"];
|
||||
|
||||
txtBodyPasswordResetLinkSmsBody.Text = settings["PasswordResetLinkSmsBody"];
|
||||
txtPasswordResetPincodeSmsBody.Text = settings["PasswordResetPincodeSmsBody"];
|
||||
}
|
||||
|
||||
public void SaveSettings(UserSettings settings)
|
||||
|
@ -28,6 +31,9 @@ namespace WebsitePanel.Portal
|
|||
settings["HtmlBody"] = txtHtmlBody.Text;
|
||||
settings["TextBody"] = txtTextBody.Text;
|
||||
settings["LogoUrl"] = txtLogoUrl.Text;
|
||||
|
||||
settings["PasswordResetLinkSmsBody"]= txtBodyPasswordResetLinkSmsBody.Text;
|
||||
settings["PasswordResetPincodeSmsBody"] =txtPasswordResetPincodeSmsBody.Text;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -119,5 +119,41 @@ namespace WebsitePanel.Portal {
|
|||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox txtTextBody;
|
||||
|
||||
/// <summary>
|
||||
/// lblPasswordResetLinkSmsBody 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 lblPasswordResetLinkSmsBody;
|
||||
|
||||
/// <summary>
|
||||
/// txtBodyPasswordResetLinkSmsBody 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 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,6 +98,24 @@
|
|||
</tr>
|
||||
</table>
|
||||
</asp:Panel>
|
||||
|
||||
<wsp:CollapsiblePanel ID="TwilioSettings" runat="server" TargetControlID="PanelTwilioSettings" meta:resourcekey="TwilioSettings" Text="Webdav Portal" />
|
||||
<asp:Panel ID="PanelTwilioSettings" runat="server" Height="0" style="overflow:hidden;">
|
||||
<table>
|
||||
<tr>
|
||||
<td class="SubHead" style="width:200px;"><asp:Localize ID="lblAccountSid" runat="server" meta:resourcekey="lblAccountSid" />
|
||||
<td><asp:TextBox runat="server" ID="txtAccountSid" Width="450px" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="SubHead" style="width:200px;"><asp:Localize ID="lblAuthToken" runat="server" meta:resourcekey="lblAuthToken" />
|
||||
<td><asp:TextBox runat="server" ID="txtAuthToken" Width="450px" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="SubHead" style="width:200px;"><asp:Localize ID="lblPhoneFrom" runat="server" meta:resourcekey="lblPhoneFrom" />
|
||||
<td><asp:TextBox runat="server" ID="txtPhoneFrom" Width="450px" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</asp:Panel>
|
||||
</div>
|
||||
<div class="FormFooter">
|
||||
<asp:Button runat="server" ID="btnSaveSettings" meta:resourcekey="btnSaveSettings"
|
||||
|
|
|
@ -167,6 +167,17 @@ namespace WebsitePanel.Portal
|
|||
chkEnablePasswordReset.Checked = Utils.ParseBool(settings[WSP.SystemSettings.WEBDAV_PASSWORD_RESET_ENABLED_KEY], false);
|
||||
txtWebdavPortalUrl.Text = settings[WEBDAV_PORTAL_URL];
|
||||
}
|
||||
|
||||
// Twilio portal
|
||||
settings = ES.Services.System.GetSystemSettings(WSP.SystemSettings.TWILIO_SETTINGS);
|
||||
|
||||
if (settings != null)
|
||||
{
|
||||
txtAccountSid.Text = settings.GetValueOrDefault(WSP.SystemSettings.TWILIO_ACCOUNTSID_KEY, string.Empty);
|
||||
txtAuthToken.Text = settings.GetValueOrDefault(WSP.SystemSettings.TWILIO_AUTHTOKEN_KEY, string.Empty);
|
||||
txtPhoneFrom.Text = settings.GetValueOrDefault(WSP.SystemSettings.TWILIO_PHONEFROM_KEY, string.Empty);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void SaveSettings()
|
||||
|
@ -253,6 +264,19 @@ namespace WebsitePanel.Portal
|
|||
settings[WSP.SystemSettings.WEBDAV_PASSWORD_RESET_ENABLED_KEY] = chkEnablePasswordReset.Checked.ToString();
|
||||
result = ES.Services.System.SetSystemSettings(WSP.SystemSettings.WEBDAV_PORTAL_SETTINGS, settings);
|
||||
|
||||
if (result < 0)
|
||||
{
|
||||
ShowResultMessage(result);
|
||||
return;
|
||||
}
|
||||
|
||||
// Twilio portal
|
||||
settings = new WSP.SystemSettings();
|
||||
settings[WSP.SystemSettings.TWILIO_ACCOUNTSID_KEY] = txtAccountSid.Text;
|
||||
settings[WSP.SystemSettings.TWILIO_AUTHTOKEN_KEY] = txtAuthToken.Text;
|
||||
settings[WSP.SystemSettings.TWILIO_PHONEFROM_KEY] = txtPhoneFrom.Text;
|
||||
result = ES.Services.System.SetSystemSettings(WSP.SystemSettings.TWILIO_SETTINGS, settings);
|
||||
|
||||
if (result < 0)
|
||||
{
|
||||
ShowResultMessage(result);
|
||||
|
|
|
@ -282,6 +282,78 @@ namespace WebsitePanel.Portal {
|
|||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox txtWebdavPortalUrl;
|
||||
|
||||
/// <summary>
|
||||
/// TwilioSettings control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.CollapsiblePanel TwilioSettings;
|
||||
|
||||
/// <summary>
|
||||
/// PanelTwilioSettings 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.Panel PanelTwilioSettings;
|
||||
|
||||
/// <summary>
|
||||
/// lblAccountSid 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 lblAccountSid;
|
||||
|
||||
/// <summary>
|
||||
/// txtAccountSid 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 txtAccountSid;
|
||||
|
||||
/// <summary>
|
||||
/// lblAuthToken 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 lblAuthToken;
|
||||
|
||||
/// <summary>
|
||||
/// txtAuthToken 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 txtAuthToken;
|
||||
|
||||
/// <summary>
|
||||
/// lblPhoneFrom 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 lblPhoneFrom;
|
||||
|
||||
/// <summary>
|
||||
/// txtPhoneFrom 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 txtPhoneFrom;
|
||||
|
||||
/// <summary>
|
||||
/// btnSaveSettings control.
|
||||
/// </summary>
|
||||
|
|
|
@ -210,4 +210,13 @@
|
|||
<data name="valResetAccountLockout.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name="lblMaxPasswordAge.Text" xml:space="preserve">
|
||||
<value>Max Password Age (days):</value>
|
||||
</data>
|
||||
<data name="valCorrectMaxPasswordAge.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name="valRequireMaxPasswordAge.Text" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
</root>
|
|
@ -37,6 +37,16 @@
|
|||
<asp:RegularExpressionValidator ID="valCorrectEnforcePasswordHistory" runat="server" ControlToValidate="txtEnforcePasswordHistory" meta:resourcekey="valCorrectEnforcePasswordHistory"
|
||||
Display="Dynamic" ErrorMessage="*" ValidationExpression="\d{1,3}" ValidationGroup="SettingsEditor"></asp:RegularExpressionValidator></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Normal" style="width:150px;"><asp:Label ID="lblMaxPasswordAge" runat="server"
|
||||
meta:resourcekey="lblMaxPasswordAge" Text="Max Password Age (days):"></asp:Label></td>
|
||||
<td class="Normal">
|
||||
<asp:TextBox ID="txtMaxPasswordAge" runat="server" CssClass="NormalTextBox" Width="40px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valRequireMaxPasswordAge" runat="server" ControlToValidate="txtMaxPasswordAge" meta:resourcekey="valRequireMaxPasswordAge"
|
||||
ErrorMessage="*" ValidationGroup="SettingsEditor" Display="Dynamic"></asp:RequiredFieldValidator>
|
||||
<asp:RegularExpressionValidator ID="valCorrectMaxPasswordAge" runat="server" ControlToValidate="txtMaxPasswordAge" meta:resourcekey="valCorrectMaxPasswordAge"
|
||||
Display="Dynamic" ErrorMessage="*" ValidationExpression="\d{1,3}" ValidationGroup="SettingsEditor"></asp:RegularExpressionValidator></td>
|
||||
</tr>
|
||||
<tr id="RowChkLockOutSettigns" runat="server">
|
||||
<td colspan="2" class="NormalBold">
|
||||
<asp:CheckBox id="chkLockOutSettigns" runat="server" meta:resourcekey="chkLockOutSettigns"
|
||||
|
|
|
@ -64,6 +64,8 @@ namespace WebsitePanel.Portal
|
|||
sb.Append(chkLockOutSettigns.Checked.ToString()).Append(";");
|
||||
sb.Append(chkPasswordComplexity.Checked.ToString()).Append(";");
|
||||
|
||||
sb.Append(txtMaxPasswordAge.Text).Append(";");
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
set
|
||||
|
@ -79,6 +81,7 @@ namespace WebsitePanel.Portal
|
|||
txtMinimumSymbols.Text = "0";
|
||||
txtLockedOut.Text = "3";
|
||||
chkPasswordComplexity.Checked = true;
|
||||
txtMaxPasswordAge.Text = "42";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -100,6 +103,8 @@ namespace WebsitePanel.Portal
|
|||
txtResetAccountLockout.Text = GetValueSafe(parts, 10, "0");
|
||||
chkLockOutSettigns.Checked = GetValueSafe(parts, 11, false) && ShowLockoutSettings;
|
||||
chkPasswordComplexity.Checked = GetValueSafe(parts, 12, true);
|
||||
|
||||
txtMaxPasswordAge.Text = GetValueSafe(parts, 13, "42");
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
@ -154,6 +159,8 @@ namespace WebsitePanel.Portal
|
|||
}
|
||||
|
||||
public static T GetValueSafe<T>(string[] array, int index, T defaultValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (array.Length > index)
|
||||
{
|
||||
|
@ -164,6 +171,8 @@ namespace WebsitePanel.Portal
|
|||
|
||||
return (T)Convert.ChangeType(array[index], typeof(T));
|
||||
}
|
||||
}
|
||||
catch{}
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
|
|
@ -147,6 +147,42 @@ namespace WebsitePanel.Portal {
|
|||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RegularExpressionValidator valCorrectEnforcePasswordHistory;
|
||||
|
||||
/// <summary>
|
||||
/// lblMaxPasswordAge 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 lblMaxPasswordAge;
|
||||
|
||||
/// <summary>
|
||||
/// txtMaxPasswordAge 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 txtMaxPasswordAge;
|
||||
|
||||
/// <summary>
|
||||
/// valRequireMaxPasswordAge 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.RequiredFieldValidator valRequireMaxPasswordAge;
|
||||
|
||||
/// <summary>
|
||||
/// valCorrectMaxPasswordAge 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.RegularExpressionValidator valCorrectMaxPasswordAge;
|
||||
|
||||
/// <summary>
|
||||
/// RowChkLockOutSettigns control.
|
||||
/// </summary>
|
||||
|
|
|
@ -6,23 +6,8 @@
|
|||
|
||||
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
|
||||
|
||||
<div id="VpsContainer">
|
||||
<div class="Module">
|
||||
|
||||
<div class="Header">
|
||||
<wsp:Breadcrumb id="breadcrumb" runat="server" />
|
||||
</div>
|
||||
|
||||
<div class="Left">
|
||||
<wsp:Menu id="menu" runat="server" SelectedItem="vdc_external_network" />
|
||||
</div>
|
||||
|
||||
<div class="Content">
|
||||
<div class="Center">
|
||||
<div class="Title">
|
||||
<asp:Image ID="imgIcon" SkinID="Network48" runat="server" />
|
||||
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Allocate IP Addresses"></asp:Localize>
|
||||
</div>
|
||||
<div class="FormBody">
|
||||
|
||||
<wsp:AllocatePackageIPAddresses id="allocateAddresses" runat="server"
|
||||
|
@ -33,7 +18,3 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -21,42 +21,6 @@ namespace WebsitePanel.Portal.VPS2012 {
|
|||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
|
||||
|
||||
/// <summary>
|
||||
/// breadcrumb control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb;
|
||||
|
||||
/// <summary>
|
||||
/// menu control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu;
|
||||
|
||||
/// <summary>
|
||||
/// imgIcon 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.Image imgIcon;
|
||||
|
||||
/// <summary>
|
||||
/// locTitle 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 locTitle;
|
||||
|
||||
/// <summary>
|
||||
/// allocateAddresses control.
|
||||
/// </summary>
|
||||
|
|
|
@ -5,23 +5,8 @@
|
|||
<%@ Register Src="UserControls/Menu.ascx" TagName="Menu" TagPrefix="wsp" %>
|
||||
<%@ Register Src="UserControls/Breadcrumb.ascx" TagName="Breadcrumb" TagPrefix="wsp" %>
|
||||
|
||||
<div id="VpsContainer">
|
||||
<div class="Module">
|
||||
|
||||
<div class="Header">
|
||||
<wsp:Breadcrumb id="breadcrumb" runat="server" />
|
||||
</div>
|
||||
|
||||
<div class="Left">
|
||||
<wsp:Menu id="menu" runat="server" SelectedItem="vdc_audit_log" />
|
||||
</div>
|
||||
|
||||
<div class="Content">
|
||||
<div class="Center">
|
||||
<div class="Title">
|
||||
<asp:Image ID="imgIcon" SkinID="AuditLog48" runat="server" />
|
||||
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Audit Log"></asp:Localize>
|
||||
</div>
|
||||
<div class="FormBody">
|
||||
|
||||
<wsp:AuditLogControl id="auditLog" runat="server" LogSource="VPS2012" />
|
||||
|
@ -29,6 +14,3 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -12,42 +12,6 @@ namespace WebsitePanel.Portal.VPS2012 {
|
|||
|
||||
public partial class VdcAuditLog {
|
||||
|
||||
/// <summary>
|
||||
/// breadcrumb control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb;
|
||||
|
||||
/// <summary>
|
||||
/// menu control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu;
|
||||
|
||||
/// <summary>
|
||||
/// imgIcon 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.Image imgIcon;
|
||||
|
||||
/// <summary>
|
||||
/// locTitle 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 locTitle;
|
||||
|
||||
/// <summary>
|
||||
/// auditLog control.
|
||||
/// </summary>
|
||||
|
|
|
@ -11,23 +11,8 @@
|
|||
|
||||
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
|
||||
|
||||
<div id="VpsContainer">
|
||||
<div class="Module">
|
||||
|
||||
<div class="Header">
|
||||
<wsp:Breadcrumb id="breadcrumb" runat="server" />
|
||||
</div>
|
||||
|
||||
<div class="Left">
|
||||
<wsp:Menu id="menu" runat="server" SelectedItem="" />
|
||||
</div>
|
||||
|
||||
<div class="Content">
|
||||
<div class="Center">
|
||||
<div class="Title">
|
||||
<asp:Image ID="imgIcon" SkinID="AddServer48" runat="server" />
|
||||
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Create New VPS"></asp:Localize>
|
||||
</div>
|
||||
<div class="FormBody">
|
||||
|
||||
<wsp:SimpleMessageBox id="messageBox" runat="server" />
|
||||
|
@ -576,5 +561,3 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -21,42 +21,6 @@ namespace WebsitePanel.Portal.VPS2012 {
|
|||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
|
||||
|
||||
/// <summary>
|
||||
/// breadcrumb control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb;
|
||||
|
||||
/// <summary>
|
||||
/// menu control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu;
|
||||
|
||||
/// <summary>
|
||||
/// imgIcon 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.Image imgIcon;
|
||||
|
||||
/// <summary>
|
||||
/// locTitle 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 locTitle;
|
||||
|
||||
/// <summary>
|
||||
/// messageBox control.
|
||||
/// </summary>
|
||||
|
|
|
@ -6,23 +6,8 @@
|
|||
<%@ Register Src="../UserControls/PackageIPAddresses.ascx" TagName="PackageIPAddresses" TagPrefix="wsp" %>
|
||||
|
||||
|
||||
<div id="VpsContainer">
|
||||
<div class="Module">
|
||||
|
||||
<div class="Header">
|
||||
<wsp:Breadcrumb id="breadcrumb" runat="server" />
|
||||
</div>
|
||||
|
||||
<div class="Left">
|
||||
<wsp:Menu id="menu" runat="server" SelectedItem="vdc_external_network" />
|
||||
</div>
|
||||
|
||||
<div class="Content">
|
||||
<div class="Center">
|
||||
<div class="Title">
|
||||
<asp:Image ID="Image1" SkinID="Network48" runat="server" />
|
||||
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="External Network"></asp:Localize>
|
||||
</div>
|
||||
<div class="FormBody">
|
||||
|
||||
|
||||
|
@ -56,6 +41,3 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -12,42 +12,6 @@ namespace WebsitePanel.Portal.VPS2012 {
|
|||
|
||||
public partial class VdcExternalNetwork {
|
||||
|
||||
/// <summary>
|
||||
/// breadcrumb control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb;
|
||||
|
||||
/// <summary>
|
||||
/// menu control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu;
|
||||
|
||||
/// <summary>
|
||||
/// Image1 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.Image Image1;
|
||||
|
||||
/// <summary>
|
||||
/// locTitle 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 locTitle;
|
||||
|
||||
/// <summary>
|
||||
/// packageAddresses control.
|
||||
/// </summary>
|
||||
|
|
|
@ -6,29 +6,15 @@
|
|||
<%@ Register Src="../UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %>
|
||||
<%@ Register Src="../UserControls/SearchBox.ascx" TagName="SearchBox" TagPrefix="wsp" %>
|
||||
|
||||
<div id="VpsContainer">
|
||||
<div class="Module">
|
||||
|
||||
<div class="Header">
|
||||
<wsp:Breadcrumb id="breadcrumb" runat="server" />
|
||||
</div>
|
||||
|
||||
<div class="Left">
|
||||
<wsp:Menu id="menu" runat="server" SelectedItem="" />
|
||||
</div>
|
||||
|
||||
<div class="Content">
|
||||
<div class="Center">
|
||||
<div class="Title">
|
||||
<asp:Image ID="imgIcon" SkinID="Servers48" runat="server" />
|
||||
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Virtual Private Servers"></asp:Localize>
|
||||
</div>
|
||||
|
||||
<div class="FormBody">
|
||||
|
||||
<wsp:SimpleMessageBox id="messageBox" runat="server" />
|
||||
|
||||
<div class="FormButtonsBarClean">
|
||||
<div class="FormButtonsBarCleanLeft">
|
||||
<div class="FormButtonsBar">
|
||||
<div class="Left">
|
||||
<asp:Button ID="btnCreate" runat="server" meta:resourcekey="btnCreate"
|
||||
Text="Create VPS" CssClass="Button1" CausesValidation="False"
|
||||
onclick="btnCreate_Click" />
|
||||
|
@ -36,7 +22,7 @@
|
|||
Text="Import VPS" CssClass="Button1" CausesValidation="False"
|
||||
onclick="btnImport_Click" />
|
||||
</div>
|
||||
<div class="FormButtonsBarCleanRight">
|
||||
<div class="Right">
|
||||
<wsp:SearchBox ID="searchBox" runat="server" />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -49,7 +35,7 @@
|
|||
<asp:TemplateField HeaderText="gvServersName" SortExpression="ItemName" meta:resourcekey="gvServersName">
|
||||
<ItemStyle></ItemStyle>
|
||||
<ItemTemplate>
|
||||
<asp:Image runat="server" SkinID="Vps16" />
|
||||
<asp:Image runat="server" SkinID="Vps2012_16" />
|
||||
<asp:hyperlink id="lnk1" runat="server"
|
||||
NavigateUrl='<%# GetServerEditUrl(Eval("ItemID").ToString()) %>'>
|
||||
<%# Eval("ItemName") %>
|
||||
|
@ -81,7 +67,7 @@
|
|||
</asp:TemplateField>
|
||||
<asp:TemplateField>
|
||||
<ItemTemplate>
|
||||
<asp:ImageButton ID="cmdDelete" runat="server" Text="Delete" SkinID="VpsDelete"
|
||||
<asp:ImageButton ID="cmdDelete" runat="server" Text="Delete" SkinID="VpsDelete2012"
|
||||
CommandName="DeleteItem" CommandArgument='<%# Eval("ItemID") %>'
|
||||
meta:resourcekey="cmdDelete"></asp:ImageButton>
|
||||
</ItemTemplate>
|
||||
|
@ -140,5 +126,3 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -12,42 +12,6 @@ namespace WebsitePanel.Portal.VPS2012 {
|
|||
|
||||
public partial class VdcHome {
|
||||
|
||||
/// <summary>
|
||||
/// breadcrumb control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb;
|
||||
|
||||
/// <summary>
|
||||
/// menu control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu;
|
||||
|
||||
/// <summary>
|
||||
/// imgIcon 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.Image imgIcon;
|
||||
|
||||
/// <summary>
|
||||
/// locTitle 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 locTitle;
|
||||
|
||||
/// <summary>
|
||||
/// messageBox control.
|
||||
/// </summary>
|
||||
|
|
|
@ -11,23 +11,8 @@
|
|||
|
||||
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
|
||||
|
||||
<div id="VpsContainer">
|
||||
<div class="Module">
|
||||
|
||||
<div class="Header">
|
||||
<wsp:Breadcrumb id="breadcrumb" runat="server" />
|
||||
</div>
|
||||
|
||||
<div class="Left">
|
||||
<wsp:Menu id="menu" runat="server" SelectedItem="" />
|
||||
</div>
|
||||
|
||||
<div class="Content">
|
||||
<div class="Center">
|
||||
<div class="Title">
|
||||
<asp:Image ID="imgIcon" SkinID="AddServer48" runat="server" />
|
||||
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Import VPS"></asp:Localize>
|
||||
</div>
|
||||
<div class="FormBody">
|
||||
|
||||
<wsp:SimpleMessageBox id="messageBox" runat="server" />
|
||||
|
@ -284,5 +269,3 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -21,42 +21,6 @@ namespace WebsitePanel.Portal.VPS2012 {
|
|||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
|
||||
|
||||
/// <summary>
|
||||
/// breadcrumb control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb;
|
||||
|
||||
/// <summary>
|
||||
/// menu control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu;
|
||||
|
||||
/// <summary>
|
||||
/// imgIcon 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.Image imgIcon;
|
||||
|
||||
/// <summary>
|
||||
/// locTitle 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 locTitle;
|
||||
|
||||
/// <summary>
|
||||
/// messageBox control.
|
||||
/// </summary>
|
||||
|
|
|
@ -4,36 +4,15 @@
|
|||
<%@ Register Src="../UserControls/PackageIPAddresses.ascx" TagName="PackageIPAddresses" TagPrefix="wsp" %>
|
||||
|
||||
|
||||
<div id="VpsContainer">
|
||||
<div class="Module">
|
||||
|
||||
<div class="Header">
|
||||
<wsp:Breadcrumb id="breadcrumb" runat="server" />
|
||||
</div>
|
||||
|
||||
<div class="Left">
|
||||
<wsp:Menu id="menu" runat="server" SelectedItem="vdc_management_network" />
|
||||
</div>
|
||||
|
||||
<div class="Content">
|
||||
<div class="Center">
|
||||
<div class="Title">
|
||||
<asp:Image ID="imgIcon" SkinID="Network48" runat="server" />
|
||||
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Management Network"></asp:Localize>
|
||||
</div>
|
||||
<div class="FormBody">
|
||||
|
||||
|
||||
<wsp:PackageIPAddresses id="packageAddresses" runat="server"
|
||||
Pool="VpsManagementNetwork"
|
||||
EditItemControl="vps_general"
|
||||
SpaceHomeControl="vdc_management_network"
|
||||
AllocateAddressesControl=""
|
||||
ManageAllowed="true" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -12,42 +12,6 @@ namespace WebsitePanel.Portal.VPS2012 {
|
|||
|
||||
public partial class VdcManagementNetwork {
|
||||
|
||||
/// <summary>
|
||||
/// breadcrumb control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb;
|
||||
|
||||
/// <summary>
|
||||
/// menu control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu;
|
||||
|
||||
/// <summary>
|
||||
/// imgIcon 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.Image imgIcon;
|
||||
|
||||
/// <summary>
|
||||
/// locTitle 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 locTitle;
|
||||
|
||||
/// <summary>
|
||||
/// packageAddresses control.
|
||||
/// </summary>
|
||||
|
|
|
@ -7,23 +7,8 @@
|
|||
|
||||
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
|
||||
|
||||
<div id="VpsContainer">
|
||||
<div class="Module">
|
||||
|
||||
<div class="Header">
|
||||
<wsp:Breadcrumb id="breadcrumb" runat="server" />
|
||||
</div>
|
||||
|
||||
<div class="Left">
|
||||
<wsp:Menu id="menu" runat="server" SelectedItem="vdc_permissions" />
|
||||
</div>
|
||||
|
||||
<div class="Content">
|
||||
<div class="Center">
|
||||
<div class="Title">
|
||||
<asp:Image ID="imgIcon" SkinID="Server48" runat="server" />
|
||||
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="User Permissions"></asp:Localize>
|
||||
</div>
|
||||
<div class="FormBody">
|
||||
|
||||
<wsp:SimpleMessageBox id="messageBox" runat="server" />
|
||||
|
@ -116,6 +101,3 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -21,42 +21,6 @@ namespace WebsitePanel.Portal.VPS2012 {
|
|||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
|
||||
|
||||
/// <summary>
|
||||
/// breadcrumb control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Breadcrumb breadcrumb;
|
||||
|
||||
/// <summary>
|
||||
/// menu control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::WebsitePanel.Portal.VPS2012.UserControls.Menu menu;
|
||||
|
||||
/// <summary>
|
||||
/// imgIcon 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.Image imgIcon;
|
||||
|
||||
/// <summary>
|
||||
/// locTitle 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 locTitle;
|
||||
|
||||
/// <summary>
|
||||
/// messageBox control.
|
||||
/// </summary>
|
||||
|
|