This commit is contained in:
me 2015-04-29 10:15:41 +04:00
commit ec10aa7f0c
328 changed files with 70724 additions and 2992 deletions

View file

@ -3,7 +3,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.7</ProductVersion>
<ProductVersion>3.9</ProductVersion>
<ProjectGuid>{ead7c528-ea3d-40e8-9688-9f1d8dc8d758}</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>Websitepanel-SchedulerService</OutputName>

View file

@ -3,7 +3,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.7</ProductVersion>
<ProductVersion>3.9</ProductVersion>
<ProjectGuid>f963a4af-cc72-4512-b636-829345c35318</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>WebsitePanelInstaller</OutputName>

View file

@ -1,6 +1,8 @@
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\Release\EnterpriseServer -o Setup.WIXInstaller\EnterpriseServerFiles.wxs -gg -sreg -srd -var wix.BUILDESPATH -cg EnterpriseServerFiles -dr INSTALLENTERPRISESERVERFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\debug\EnterpriseServer -o Setup.WIXInstaller\EnterpriseServerFiles.wxs -gg -sreg -srd -var wix.BUILDESPATH -cg EnterpriseServerFiles -dr INSTALLENTERPRISESERVERFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\Release\Server -o Setup.WIXInstaller\ServerFiles.wxs -gg -sreg -srd -var wix.BUILDSPATH -cg ServerFiles -dr INSTALLSERVERFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\debug\Server -o Setup.WIXInstaller\ServerFiles.wxs -gg -sreg -srd -var wix.BUILDSPATH -cg ServerFiles -dr INSTALLSERVERFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\Release\Portal -o Setup.WIXInstaller\PortalFiles.wxs -gg -sreg -srd -var wix.BUILDPPATH -cg PortalFiles -dr INSTALLPORTALFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\debug\Portal -o Setup.WIXInstaller\PortalFiles.wxs -gg -sreg -srd -var wix.BUILDPPATH -cg PortalFiles -dr INSTALLPORTALFOLDER
"%WIX%\bin\heat.exe" dir ..\..\WebsitePanel\Build\debug\WebDavPortal -o Setup.WIXInstaller\WebDavPortalFiles.wxs -gg -sreg -srd -var wix.BUILDWDPPATH -cg WebDavPortalFiles -dr INSTALLWEBDAVPORTALFOLDER

View file

@ -1,5 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Include>
<?define PROJECTPATH = "..\..\..\WebsitePanel"?>
<?define VERSION="2.1"?>
<?define NAME="WebsitePanel"?>
<?define ServerTitle="Server"?>
<?define ServerDescription="WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one."?>
<?define EServerTitle="Enterprise Server"?>
<?define EServerDescription="Enterprise Server is the heart of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications."?>
<?define PortalTitle="Portal"?>
<?define PortalDescription="WebsitePanel Portal is a control panel itself with user interface which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc."?>
<?define VERSION="$(var.Version)"?>
<?define sql_release_version = "$(var.Version)"?> <!--N'${release.version}'-->
<?define sql_build_date = "$(var.BuildDate)"?> <!-- '${release.date}T00:00:00' - ISO 8601 Format (YYYY-MM-DDTHH:MM:SS) -->
</Include>

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
<copyright file="VerifyReadyDlg.wxs" company="Outercurve Foundation">
Copyright (c) 2004, Outercurve Foundation.
This software is released under Microsoft Reciprocal License (MS-RL).
The license and further copyright text can be found in the file
LICENSE.TXT at the root directory of the distribution.
</copyright>
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<UI>
<Dialog Id="CustomVerifyReadyDlg" Width="370" Height="270" Title="!(loc.VerifyReadyDlg_Title)" TrackDiskSpace="yes">
<Control Id="Install" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgInstall)">
<Condition Action="show">NOT Installed AND ALLUSERS</Condition>
<Condition Action="enable">NOT Installed</Condition>
<Condition Action="default">NOT Installed</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="InstallNoShield" Type="PushButton" ElevationShield="no" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgInstall)">
<Condition Action="show">NOT Installed AND NOT ALLUSERS</Condition>
<Condition Action="enable">NOT Installed</Condition>
<Condition Action="default">NOT Installed</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="Change" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgChange)">
<Condition Action="show">WixUI_InstallMode = "Change" AND ALLUSERS AND (ADDLOCAL OR REMOVE)</Condition>
<Condition Action="enable">WixUI_InstallMode = "Change"</Condition>
<Condition Action="default">WixUI_InstallMode = "Change"</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="ChangeNoShield" Type="PushButton" ElevationShield="no" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgChange)">
<Condition Action="show">WixUI_InstallMode = "Change" AND (NOT ALLUSERS OR (NOT ADDLOCAL AND NOT REMOVE))</Condition>
<Condition Action="enable">WixUI_InstallMode = "Change"</Condition>
<Condition Action="default">WixUI_InstallMode = "Change"</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="Repair" Type="PushButton" X="212" Y="243" Width="80" Height="17" Default="yes" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgRepair)">
<Condition Action="show">WixUI_InstallMode = "Repair"</Condition>
<Condition Action="enable">WixUI_InstallMode = "Repair"</Condition>
<Condition Action="default">WixUI_InstallMode = "Repair"</Condition>
<Publish Event="ReinstallMode" Value="ecmus"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="Reinstall" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="Remove" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgRemove)">
<Condition Action="show">WixUI_InstallMode = "Remove" AND ALLUSERS</Condition>
<Condition Action="enable">WixUI_InstallMode = "Remove"</Condition>
<Publish Event="Remove" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="RemoveNoShield" Type="PushButton" ElevationShield="no" X="212" Y="243" Width="80" Height="17" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgRemove)">
<Condition Action="show">WixUI_InstallMode = "Remove" AND NOT ALLUSERS</Condition>
<Condition Action="enable">WixUI_InstallMode = "Remove"</Condition>
<Publish Event="Remove" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="Update" Type="PushButton" ElevationShield="yes" X="212" Y="243" Width="80" Height="17" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgUpdate)">
<Condition Action="show">WixUI_InstallMode = "Update" AND ALLUSERS</Condition>
<Condition Action="enable">WixUI_InstallMode = "Update"</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="UpdateNoShield" Type="PushButton" ElevationShield="no" X="212" Y="243" Width="80" Height="17" Hidden="yes" Disabled="yes" Text="!(loc.VerifyReadyDlgUpdate)">
<Condition Action="show">WixUI_InstallMode = "Update" AND NOT ALLUSERS</Condition>
<Condition Action="enable">WixUI_InstallMode = "Update"</Condition>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
<Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
<Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
</Control>
<Control Id="InstallTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgInstallTitle)">
<Condition Action="show">NOT Installed</Condition>
</Control>
<Control Id="InstallText" Type="Text" X="25" Y="70" Width="320" Height="160" Hidden="yes" Text="!(loc.VerifyReadyDlgInstallText)&#13;&#10;&#13;&#10;[CUSTOM_INSTALL_TEXT]" Transparent="yes">
<Condition Action="show">NOT Installed</Condition>
</Control>
<Control Id="ChangeTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgChangeTitle)">
<Condition Action="show">WixUI_InstallMode = "Change"</Condition>
</Control>
<Control Id="ChangeText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" Text="!(loc.VerifyReadyDlgChangeText)">
<Condition Action="show">WixUI_InstallMode = "Change"</Condition>
</Control>
<Control Id="RepairTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgRepairTitle)">
<Condition Action="show">WixUI_InstallMode = "Repair"</Condition>
</Control>
<Control Id="RepairText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" NoPrefix="yes" Text="!(loc.VerifyReadyDlgRepairText)">
<Condition Action="show">WixUI_InstallMode = "Repair"</Condition>
</Control>
<Control Id="RemoveTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgRemoveTitle)">
<Condition Action="show">WixUI_InstallMode = "Remove"</Condition>
</Control>
<Control Id="RemoveText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" NoPrefix="yes" Text="!(loc.VerifyReadyDlgRemoveText)">
<Condition Action="show">WixUI_InstallMode = "Remove"</Condition>
</Control>
<Control Id="UpdateTitle" Type="Text" X="15" Y="15" Width="300" Height="15" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="!(loc.VerifyReadyDlgUpdateTitle)">
<Condition Action="show">WixUI_InstallMode = "Update"</Condition>
</Control>
<Control Id="UpdateText" Type="Text" X="25" Y="70" Width="320" Height="80" Hidden="yes" NoPrefix="yes" Text="!(loc.VerifyReadyDlgUpdateText)">
<Condition Action="show">WixUI_InstallMode = "Update"</Condition>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)">
<Condition Action="default">WixUI_InstallMode = "Remove"</Condition>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.VerifyReadyDlgBannerBitmap)" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
</Dialog>
</UI>
</Fragment>
</Wix>

View file

@ -1,359 +1,295 @@
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?include Config.wxi?>
<Product Id="*" Name="WebsitePanel" Language="1033" Version="$(var.VERSION)" Manufacturer="Outercurve Foundation"
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension"
xmlns:sql="http://schemas.microsoft.com/wix/SqlExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<?include Config.Wxi?>
<Product Id="*" Name="$(var.NAME)" Language="1033" Version="$(var.VERSION)" Manufacturer="Outercurve Foundation"
UpgradeCode="F59D3AED-C1B8-46B4-AFE2-A97F3B7DFB5E">
<Package InstallerVersion="200" Compressed="yes" />
<Media Id="1" EmbedCab="yes" Cabinet="websitepanel.cab" />
<Feature Id="ServerFeature" Title="Server" Level="1" ConfigurableDirectory="INSTALLSERVERFOLDER" AllowAdvertise="no"
Description="WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one.">
<Media Id="1" EmbedCab="yes" Cabinet="websitepanel_cab" />
<!-- Use WIX_UPGRADE_DETECTED -->
<MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed."/>
<Feature Id ="WebsitePanel" Title="Website Panel" Level="1" ConfigurableDirectory="WEBSITEPANELDIR" AllowAdvertise="no" Display="expand"
Description="WebsitePanel is a complete portal for Cloud Computing Companies and IT Providers to automate the provisioning of a full suite of services on Windows servers.">
<ComponentGroupRef Id="WebsitePanelFiles" />
<Feature Id="ServerFeature" Title="$(var.ServerTitle)" Level="1" ConfigurableDirectory="INSTALLSERVERFOLDER" AllowAdvertise="no"
Description="$(var.ServerDescription)">
<ComponentGroupRef Id="ServerFiles" />
</Feature>
<Feature Id="EnterpriseServerFeature" Title="Enterprise Server" Level="1" ConfigurableDirectory="INSTALLENTERPRISESERVERFOLDER" AllowAdvertise="no"
Description="Enterprise Server is the heart of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications.">
<Feature Id="EnterpriseServerFeature" Title="$(var.EServerTitle)" Level="1" ConfigurableDirectory="INSTALLENTERPRISESERVERFOLDER" AllowAdvertise="no"
Description="$(var.ServerDescription)">
<ComponentGroupRef Id="EnterpriseServerFiles" />
<ComponentGroupRef Id="DatabaseInstallation"/>
</Feature>
<Feature Id="PortalFeature" Title="Portal" Level="1" ConfigurableDirectory="INSTALLPORTALFOLDER" AllowAdvertise="no"
Description="WebsitePanel Portal is a control panel itself with user interface which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc.">
<Feature Id="PortalFeature" Title="$(var.PortalTitle)" Level="1" ConfigurableDirectory="INSTALLPORTALFOLDER" AllowAdvertise="no"
Description="$(var.PortalDescription)">
<ComponentGroupRef Id="PortalFiles" />
</Feature>
<Feature Id="SchedulerServiceFeature" Title="Scheduler Service" Level="1" ConfigurableDirectory="INSTALLSERVICEFOLDER" AllowAdvertise="no"
Description="WebsitePanel scheduler Service">
<Feature Id="SchedulerServiceFeature" Title="Scheduler Service" Level="1" ConfigurableDirectory="INSTALLSERVICEFOLDER" AllowAdvertise="no" Description="WebsitePanel Scheduler Service">
<ComponentGroupRef Id="SchedulerServiceFiles" />
</Feature>
<Property Id="BannerBitmap">bannrbmp</Property>
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="F59D3AED-C1B8-46B4-AFE2-A97F3B7DFB5E">
<UpgradeVersion
Minimum="1.0.0.0" Maximum="99.0.0.0"
Property="PREVIOUSVERSIONSINSTALLED"
IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
<WixVariable Id="WixUIBannerBmp" Value="bannrbmp.bmp" />
<WixVariable Id="WixUIDialogBmp" Value="dlgbmp.bmp" />
<WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
<WixVariable Id ="BUILDESPATH" Value = "$(var.PROJECTPATH)\Build\$(var.BUILD)\EnterpriseServer" />
<WixVariable Id ="BUILDSPATH" Value = "$(var.PROJECTPATH)\Build\$(var.BUILD)\Server" />
<WixVariable Id ="BUILDPPATH" Value = "$(var.PROJECTPATH)\Build\$(var.BUILD)\Portal" />
<Icon Id="WebSitePanel.ico" SourceFile="WebSitePanel.ico" />
<Property Id="ARPPRODUCTICON" Value="WebSitePanel.ico" />
<Property Id="SERVERNAME" Value="localhost\SQLExpress" />
<Property Id="CONNECTIONSTRING" Value="1" />
<Property Id="DATABASENAME" Value="WebsitePanel" />
<Property Id="AUTHENTICATIONTYPE" Value="Windows Authentication" />
<Binary Id="bannrbmp" SourceFile="bannrbmp.bmp" />
<Feature Id ="WDPortalFeature" Title="WebDAV Portal" Level="100" ConfigurableDirectory="INSTALLWEBDAVPORTALFOLDER" AllowAdvertise ="no"
Description="WebsitePanel WebDAV Portal">
<ComponentGroupRef Id="WebDavPortalFiles"/>
</Feature>
</Feature>
<!--Destinations.-->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="WEBSITEPANELDIR" Name="WebsitePanel">
<Directory Id="INSTALLSERVICEFOLDER" Name="SchedulerService" />
<Directory Id="INSTALLSERVERFOLDER" Name="Server" />
<Directory Id="INSTALLENTERPRISESERVERFOLDER" Name="Enterprise Server" />
<Directory Id="INSTALLPORTALFOLDER" Name="Portal" />
<Directory Id="INSTALLWEBDAVPORTALFOLDER" Name="WebDavPortal"/>
</Directory>
</Directory>
<EnsureTable Id="ComboBox"/>
<EnsureTable Id="ListView"/>
<UI Id="CustomInstaller">
<UIRef Id="WixUI_Mondo" />
<DialogRef Id="CustomVerifyReadyDlg"/>
<TextStyle Id="DlgTitleFont" FaceName="Tahoma" Size="8" Bold="yes" />
<Dialog Id="SWebDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="SUserAccountDlg">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Specify WebsitePanel Server web settings." />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Web Settings" />
<Control Type="Text" Id="IPaddressLabel" Width="73" Height="15" X="38" Y="79" Text="IP address:" />
<Control Type="Edit" Id="IPaddressEdit" Width="214" Height="15" X="34" Y="98" Property="SIP1" />
<Control Type="ComboBox" Id="SERVER_IP_COMBO" Width="214" Height="15" X="34" Y="98" Property="PI_SERVER_IP">
<ComboBox Property="PI_SERVER_IP" />
</Control>
<Control Type="Text" Id="PortLabel" Width="73" Height="15" X="259" Y="79" Text="Port:" />
<Control Type="Edit" Id="PortEdit" Width="46" Height="15" X="259" Y="98" Property="SPORT">
<Control Type="Edit" Id="PortEdit" Width="46" Height="15" X="259" Y="98" Property="PI_SERVER_PORT">
</Control>
<Control Type="Text" Id="HostnameLabel" Width="73" Height="15" X="38" Y="124" Text="Host name:" />
<Control Type="Edit" Id="HostnameEdit" Width="266" Height="15" X="34" Y="142" Property="SHOSTNAME" Hidden="no">
<Control Type="Edit" Id="HostnameEdit" Width="266" Height="15" X="34" Y="142" Property="PI_SERVER_HOST">
</Control>
<Control Type="Text" Id="HintLabel" Width="190" Height="8" X="41" Y="165" Text="Example: www.contoso.com or panel.contoso.com" />
<Control Type="Text" Id="HintLabel" Width="190" Height="16" X="41" Y="165" Text="Example: www.contoso.com or panel.contoso.com" />
<Control Type="Text" Id="IntroLabel" Width="321" Height="30" X="26" Y="191" Text="Make sure the specified host name is pointed to this web site; otherwise you might not be able to access the application." />
<Control Type="GroupBox" Id="WebSiteSettingsGroup" Width="330" Height="124" X="22" Y="60" Text="Web Site Settings" />
</Dialog>
<Dialog Id="SUserAccountDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="SWebDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="ServerPasswordDlg">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Specify WebsitePanel Server security settings." />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Security Settings" />
<Control Type="Text" Id="DomainLabel" Width="73" Height="15" X="58" Y="116" Text="Domain:" />
<Control Type="Edit" Id="DomainEdit" Width="163" Height="15" X="142" Y="116" Property="SDOMAINNAME" />
<Control Type="Edit" Id="DomainEdit" Width="163" Height="15" X="142" Y="116" Property="PI_SERVER_DOMAIN">
<Condition Action="disable">NOT(PI_SERVER_CREATE_AD = "1")</Condition>
<Condition Action="enable">PI_SERVER_CREATE_AD = "1"</Condition>
</Control>
<Control Type="Text" Id="UserLabel" Width="73" Height="15" X="58" Y="142" Text="User Name:" />
<Control Type="Edit" Id="LoginEdit" Width="163" Height="15" X="142" Y="142" Property="SUSERNAME">
<Condition Action="disable">AUTHENTICATIONTYPE = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(AUTHENTICATIONTYPE = "Windows Authentication")</Condition>
</Control>
<Control Type="Edit" Id="LoginEdit" X="142" Y="142" Width="163" Height="15" Property="PI_SERVER_LOGIN" />
<Control Type="Text" Id="PasswordLabel" Width="73" Height="15" X="58" Y="169" Text="Password:" />
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="169" Property="SPASSWORD" Hidden="no" Password="yes">
<Condition Action="disable">AUTHENTICATIONTYPE = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(AUTHENTICATIONTYPE = "Windows Authentication")</Condition>
</Control>
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="169" Property="PI_SERVER_PASSWORD" Password="yes" />
<Control Type="Text" Id="ConfirmPasswordLabel" Width="73" Height="15" X="58" Y="195" Text="Confirm Password:" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="195" Property="SCONFIRMPASSWORD" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="195" Property="PI_SERVER_PASSWORD_CONFIRM" Password="yes" />
<Control Type="Text" Id="IntroLabel" Width="341" Height="30" X="15" Y="62" Text="Please specify a new Windows user account for the web site anonymous access and application pool identity." />
<Control Type="CheckBox" Id="CreateADAccountCheckBox" Width="202" Height="17" X="58" Y="90" Text="Create Active Directory account" Property="SCREATEADACOUNT" />
<Control Type="CheckBox" Id="CreateADAccountCheckBox" Width="202" Height="17" X="58" Y="90" Text="Create Active Directory account" Property="PI_SERVER_CREATE_AD" CheckBoxValue="1" />
<Control Type="PushButton" Id="SelectUserButton" X="305" Y="142" Width="15" Height="15" Text="..." />
</Dialog>
<Dialog Id="ServerPasswordDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="SUserAccountDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="ESWebDlg" Order="9">&amp;EnterpriseServerFeature=3</Publish>
<Publish Event="NewDialog" Value="DatabaseConnectionDlg" Order="8">&amp;SchedulerServiceFeature=3</Publish>
<Publish Event="NewDialog" Value="PWebDlg" Order="7">&amp;PortalFeature=3</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="2" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Specify a new password for this server." />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Set Server Password" />
<Control Type="Text" Id="PasswordLabel" Width="50" Height="17" X="52" Y="110" Text="Password:" />
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="110" Property="SERVERPASSWORD" />
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="110" Property="SERVER_ACCESS_PASSWORD" Password="yes" />
<Control Type="Text" Id="ConfirmPasswordLabel" Width="72" Height="17" X="52" Y="136" Text="Confirm password:" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="136" Property="CONFIRMSERVERPASSWORD" Hidden="no" Password="yes" />
<Control Type="CheckBox" Id="ChangeServerPasswordCheckBox" Width="160" Height="17" X="52" Y="84" Property="CHANGESERVERAPASSWORD" Text="Reset Server Password" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="136" Property="SERVER_ACCESS_PASSWORD_CONFIRM" Password="yes" />
<Control Type="Text" Id="IntroLabel" Width="341" Height="27" X="15" Y="52" Text="Please, specify a password which will be used to access this Server from the Enterprise Server component. Click Next to continue." />
</Dialog>
<Dialog Id="ESWebDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="ServerPasswordDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="ESUserAccountDlg">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Specify WebsitePanel Enterprise Server web settings." />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Web Settings" />
<Control Type="Text" Id="IPaddressLabel" Width="73" Height="15" X="38" Y="79" Text="IP address:" />
<Control Type="Edit" Id="IPaddressEdit" Width="214" Height="15" X="34" Y="98" Property="ESIP1" />
<Control Type="ComboBox" Id="ESERVER_IP_COMBO" Width="214" Height="15" X="34" Y="98" Property="PI_ESERVER_IP">
<ComboBox Property="PI_ESERVER_IP" />
</Control>
<Control Type="Text" Id="PortLabel" Width="73" Height="15" X="259" Y="79" Text="Port:" />
<Control Type="Edit" Id="PortEdit" Width="46" Height="15" X="259" Y="98" Property="ESPORT" />
<Control Type="Edit" Id="PortEdit" Width="46" Height="15" X="259" Y="98" Property="PI_ESERVER_PORT" />
<Control Type="Text" Id="HostnameLabel" Width="73" Height="15" X="38" Y="124" Text="Host name:" />
<Control Type="Edit" Id="HostnameEdit" Width="266" Height="15" X="34" Y="142" Property="ESHOSTNAME" Hidden="no" />
<Control Type="Text" Id="HintLabel" Width="190" Height="8" X="41" Y="165" Text="Example: www.contoso.com or panel.contoso.com" />
<Control Type="Edit" Id="HostnameEdit" Width="266" Height="15" X="34" Y="142" Property="PI_ESERVER_HOST" />
<Control Type="Text" Id="HintLabel" Width="190" Height="16" X="41" Y="165" Text="Example: www.contoso.com or panel.contoso.com" />
<Control Type="Text" Id="IntroLabel" Width="321" Height="30" X="26" Y="191" Text="Make sure the specified host name is pointed to this web site; otherwise you might not be able to access the application." />
<Control Type="GroupBox" Id="WebSiteSettingsGroup" Width="330" Height="124" X="22" Y="60" Text="Web Site Settings" />
</Dialog>
<Dialog Id="ESUserAccountDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="ESWebDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="ServerAdminPasswordDlg">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Specify WebsitePanel Enterprise Server security settings." />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Security Settings" />
<Control Type="Text" Id="DomainLabel" Width="73" Height="15" X="58" Y="116" Text="Domain:" />
<Control Type="Edit" Id="DomainEdit" Width="163" Height="15" X="142" Y="116" Property="ESDOMAINNAME" />
<Control Type="Edit" Id="DomainEdit" Width="163" Height="15" X="142" Y="116" Property="PI_ESERVER_DOMAIN">
<Condition Action="disable">NOT(PI_ESERVER_CREATE_AD = "1")</Condition>
<Condition Action="enable">PI_ESERVER_CREATE_AD = "1"</Condition>
</Control>
<Control Type="Text" Id="UserLabel" Width="73" Height="15" X="58" Y="142" Text="User Name:" />
<Control Type="Edit" Id="LoginEdit" Width="163" Height="15" X="142" Y="142" Property="ESUSERNAME">
<Condition Action="disable">AUTHENTICATIONTYPE = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(AUTHENTICATIONTYPE = "Windows Authentication")</Condition>
</Control>
<Control Type="Edit" Id="LoginEdit" Width="163" Height="15" X="142" Y="142" Property="PI_ESERVER_LOGIN"/>
<Control Type="Text" Id="PasswordLabel" Width="73" Height="15" X="58" Y="169" Text="Password:" />
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="169" Property="ESPASSWORD" Hidden="no" Password="yes">
<Condition Action="disable">AUTHENTICATIONTYPE = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(AUTHENTICATIONTYPE = "Windows Authentication")</Condition>
</Control>
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="169" Property="PI_ESERVER_PASSWORD" Password="yes"/>
<Control Type="Text" Id="ConfirmPasswordLabel" Width="73" Height="15" X="58" Y="195" Text="Confirm Password:" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="195" Property="ESCONFIRMPASSWORD" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="195" Property="PI_ESERVER_PASSWORD_CONFIRM" Password="yes"/>
<Control Type="Text" Id="IntroLabel" Width="341" Height="30" X="15" Y="62" Text="Please specify a new Windows user account for the web site anonymous access and application pool identity." />
<Control Type="CheckBox" Id="CreateADAccountCheckBox" Width="202" Height="17" X="58" Y="90" Text="Create Active Directory account" Property="ESCREATEADACOUNT" />
<Control Type="CheckBox" Id="CreateADAccountCheckBox" Width="202" Height="17" X="58" Y="90" Text="Create Active Directory account" Property="PI_ESERVER_CREATE_AD" CheckBoxValue="1"/>
<Control Type="PushButton" Id="SelectUserButton" X="305" Y="142" Width="15" Height="15" Text="..." />
</Dialog>
<Dialog Id="ServerAdminPasswordDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="ESUserAccountDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="DatabaseConnectionDlg" Order="9">&amp;EnterpriseServerFeature=3</Publish>
<Publish Event="NewDialog" Value="DatabaseConnectionDlg" Order="8">&amp;SchedulerServiceFeature=3</Publish>
<Publish Event="NewDialog" Value="PWebDlg" Order="7">&amp;PortalFeature=3</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="2" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Specify a new password for the serveradmin account." />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Set Administrator Password" />
<Control Type="Text" Id="PasswordLabel" Width="50" Height="17" X="52" Y="90" Text="Password:" />
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="90" Property="SERVERADMINPASSWORD" />
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="90" Property="SERVERADMIN_PASSWORD" Password="yes"/>
<Control Type="Text" Id="ConfirmPasswordLabel" Width="72" Height="17" X="52" Y="116" Text="Confirm password:" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="116" Property="CONFIRMSERVERADMINPASSWORD" Hidden="no" Password="yes">
</Control>
<Control Type="CheckBox" Id="ChangeServeradminPasswordCheckBox" Width="160" Height="17" X="52" Y="64" Property="CHANGESERVERADMINPASSWORD" Text="Reset Serveradmin Password" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="116" Property="SERVERADMIN_PASSWORD_CONFIRM" Password="yes"/>
</Dialog>
<Dialog Id="DatabaseConnectionDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="ServerAdminPasswordDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="PWebDlg" Order="7">&amp;PortalFeature=3</Publish>
<Publish Event="NewDialog" Value="VerifyReadyDlg" Order="6">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
<Condition Action="disable">DB_CONN_CORRECT="0"</Condition>
<Condition Action="enable">DB_CONN_CORRECT="1"</Condition>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Configure WebsitePanel database connection string" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Database connection string" />
<Control Type="Text" Id="ServerLabel" Width="50" Height="17" X="75" Y="68" Text="SQL Server:" />
<Control Type="Edit" Id="ServerEdit" Width="163" Height="15" X="142" Y="68" Property="SQLSERVERNAME" />
<Control Type="ComboBox" Id="SqlServerCombo" Width="163" Height="15" X="142" Y="68" Property="DB_SERVER">
<ComboBox Property="DB_SERVER">
<ListItem Text="(local)" Value="localhost\SQLExpress"/>
</ComboBox>
</Control>
<Control Type="Text" Id="AuthenticationLabel" Width="70" Height="17" X="62" Y="94" Text="Authentication:" />
<Control Type="ComboBox" Id="AuthenticationCombo" Width="163" Height="16" X="142" Y="94" Property="SQLAUTHENTICATIONTYPE">
<ComboBox Property="SQLAUTHENTICATIONTYPE">
<Control Type="ComboBox" Id="DB_AUTH_COMBO" Width="163" Height="16" X="142" Y="94" Property="DB_AUTH" ComboList="yes">
<ComboBox Property="DB_AUTH">
<ListItem Text="Windows Authentication" Value="Windows Authentication" />
<ListItem Text="SQL Server Authentication" Value="SQL Server Authentication" />
</ComboBox>
</Control>
<Control Type="Text" Id="LoginLabel" Width="50" Height="17" X="71" Y="120" Text="Login Name:" />
<Control Type="Edit" Id="LoginEdit" Width="163" Height="15" X="142" Y="120" Property="SQLLOGIN">
<Condition Action="disable">AUTHENTICATIONTYPE = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(AUTHENTICATIONTYPE = "Windows Authentication")</Condition>
<Control Type="Edit" Id="LoginEdit" Width="163" Height="15" X="142" Y="120" Property="DB_LOGIN">
<Condition Action="disable">DB_AUTH = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(DB_AUTH = "Windows Authentication")</Condition>
</Control>
<Control Type="Text" Id="PasswordLabel" Width="50" Height="17" X="80" Y="146" Text="Password:" />
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="146" Property="SQLPASSWORD" Hidden="no" Password="yes">
<Condition Action="disable">AUTHENTICATIONTYPE = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(AUTHENTICATIONTYPE = "Windows Authentication")</Condition>
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="146" Property="DB_PASSWORD" Hidden="no" Password="yes">
<Condition Action="disable">DB_AUTH = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(DB_AUTH = "Windows Authentication")</Condition>
</Control>
<Control Type="Text" Id="DatabaseLabel" Width="50" Height="17" X="80" Y="172" Text="Database:" />
<Control Type="Edit" Id="DatabaseEdit" Width="163" Height="15" X="142" Y="172" Property="SQLDATABASENAME" />
<Control Type="Edit" Id="DB_DATABASE_EDIT" Width="163" Height="15" X="142" Y="172" Property="DB_DATABASE">
<Condition Action="disable">DB_CONN_CORRECT="0"</Condition>
<Condition Action="enable">DB_CONN_CORRECT="1"</Condition>
</Control>
<Control Type="PushButton" Id="SelectDbButton" X="305" Y="172" Width="15" Height="15" Text="...">
<Condition Action="disable">DB_CONN_CORRECT="0"</Condition>
<Condition Action="enable">DB_CONN_CORRECT="1"</Condition>
</Control>
<Control Type="PushButton" Id ="CheckConnButton" X="160" Y="200" Width="64" Height="17" Text="Test connection" />
</Dialog>
<Dialog Id="ConnectionWarningDlg" Width="250" Height="85" Title="[ProductName] Setup" NoMinimize="yes">
<Control Id="Ok" Type="PushButton" X="184" Y="60" Width="56" Height="17" Text="Ok">
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
<Control Id="Ok" Type="PushButton" X="184" Y="60" Width="56" Height="17" Text="Ok" Default="yes" Cancel="yes"/>
<Control Id="Text" Type="Text" X="8" Y="8" Width="221" Height="30">
<Text>Connection not valid.</Text>
<Text>Connection not valid. [DB_CONN_MSG]</Text>
</Control>
</Dialog>
<Dialog Id="SelectDbDlg" Width="135" Height="55" Title="Select database" NoMinimize="yes">
<Control Type="ComboBox" Id ="DB_SELECT_COMBO" X="5" Y="10" Width="125" Height="17" ComboList="yes" Property="DB_SELECT">
<ComboBox Property="DB_SELECT" />
</Control>
<Control Id="Ok" Type="PushButton" X="5" Y="30" Width="60" Height="17" Text="Ok" Default="no" Cancel="yes"/>
<Control Id="Cancel" Type="PushButton" X="70" Y="30" Width="60" Height="17" Text="Cancecl" Default="yes" Cancel="yes"/>
</Dialog>
<Dialog Id="PWebDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="DatabaseConnectionDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="PUserAccountDlg">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Specify WebsitePanel Portal web settings." />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Web Settings" />
<Control Type="Text" Id="IPaddressLabel" Width="73" Height="15" X="38" Y="79" Text="IP address:" />
<Control Type="Edit" Id="IPaddressEdit" Width="214" Height="15" X="34" Y="98" Property="PIP1" />
<Control Type="ComboBox" Id="PORTAL_IP_COMBO" Width="214" Height="15" X="34" Y="98" Property="PI_PORTAL_IP">
<ComboBox Property="PI_PORTAL_IP" />
</Control>
<Control Type="Text" Id="PortLabel" Width="73" Height="15" X="259" Y="79" Text="Port:" />
<Control Type="Edit" Id="PortEdit" Width="46" Height="15" X="259" Y="98" Property="PPORT" />
<Control Type="Edit" Id="PortEdit" Width="46" Height="15" X="259" Y="98" Property="PI_PORTAL_PORT" />
<Control Type="Text" Id="HostnameLabel" Width="73" Height="15" X="38" Y="124" Text="Host name:" />
<Control Type="Edit" Id="HostnameEdit" Width="266" Height="15" X="34" Y="142" Property="PHOSTNAME" Hidden="no" />
<Control Type="Text" Id="HintLabel" Width="190" Height="8" X="41" Y="165" Text="Example: www.contoso.com or panel.contoso.com" />
<Control Type="Edit" Id="HostnameEdit" Width="266" Height="15" X="34" Y="142" Property="PI_PORTAL_HOST" />
<Control Type="Text" Id="HintLabel" Width="190" Height="16" X="41" Y="165" Text="Example: www.contoso.com or panel.contoso.com" />
<Control Type="Text" Id="IntroLabel" Width="321" Height="30" X="26" Y="191" Text="Make sure the specified host name is pointed to this web site; otherwise you might not be able to access the application." />
<Control Type="GroupBox" Id="WebSiteSettingsGroup" Width="330" Height="124" X="22" Y="60" Text="Web Site Settings" />
</Dialog>
<Dialog Id="PUserAccountDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="PWebDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="ESUrlDlg">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Specify WebsitePanel Portal security settings." />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Security Settings" />
<Control Type="Text" Id="DomainLabel" Width="73" Height="15" X="58" Y="116" Text="Domain:" />
<Control Type="Edit" Id="DomainEdit" Width="163" Height="15" X="142" Y="116" Property="PDOMAINNAME" />
<Control Type="Edit" Id="DomainEdit" Width="163" Height="15" X="142" Y="116" Property="PI_PORTAL_DOMAIN">
<Condition Action="disable">NOT(PI_PORTAL_CREATE_AD = "1")</Condition>
<Condition Action="enable">PI_PORTAL_CREATE_AD = "1"</Condition>
</Control>
<Control Type="Text" Id="UserLabel" Width="73" Height="15" X="58" Y="142" Text="User Name:" />
<Control Type="Edit" Id="LoginEdit" Width="163" Height="15" X="142" Y="142" Property="PUSERNAME">
<Condition Action="disable">AUTHENTICATIONTYPE = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(AUTHENTICATIONTYPE = "Windows Authentication")</Condition>
</Control>
<Control Type="Edit" Id="LoginEdit" Width="163" Height="15" X="142" Y="142" Property="PI_PORTAL_LOGIN"/>
<Control Type="Text" Id="PasswordLabel" Width="73" Height="15" X="58" Y="169" Text="Password:" />
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="169" Property="PPASSWORD" Hidden="no" Password="yes">
<Condition Action="disable">AUTHENTICATIONTYPE = "Windows Authentication"</Condition>
<Condition Action="enable">NOT(AUTHENTICATIONTYPE = "Windows Authentication")</Condition>
</Control>
<Control Type="Edit" Id="PasswordEdit" Width="163" Height="15" X="142" Y="169" Property="PI_PORTAL_PASSWORD" Password="yes"/>
<Control Type="Text" Id="ConfirmPasswordLabel" Width="73" Height="15" X="58" Y="195" Text="Confirm Password:" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="195" Property="PCONFIRMPASSWORD" />
<Control Type="Edit" Id="ConfirmPasswordEdit" Width="163" Height="15" X="142" Y="195" Property="PI_PORTAL_PASSWORD_CONFIRM" Password="yes"/>
<Control Type="Text" Id="IntroLabel" Width="341" Height="30" X="15" Y="62" Text="Please specify a new Windows user account for the web site anonymous access and application pool identity." />
<Control Type="CheckBox" Id="CreateADAccountCheckBox" Width="202" Height="17" X="58" Y="90" Text="Create Active Directory account" Property="PCREATEADACOUNT" />
<Control Type="CheckBox" Id="CreateADAccountCheckBox" Width="202" Height="17" X="58" Y="90" Text="Create Active Directory account" Property="PI_PORTAL_CREATE_AD" CheckBoxValue="1" />
<Control Type="PushButton" Id="SelectUserButton" X="305" Y="142" Width="15" Height="15" Text="..." />
</Dialog>
<Dialog Id="ESUrlDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
<Publish Event="NewDialog" Value="PUserAccountDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="2" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Enter the Enterprise Server URL" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Enterprise Server URL" />
<Control Type="Text" Id="UrlLabel" Width="88" Height="17" X="50" Y="110" Text="Enterprise Server URL:" />
<Control Type="Edit" Id="ESUrlEdit" Width="163" Height="15" X="142" Y="110" Property="ESURL" />
<Control Type="Edit" Id="ESUrlEdit" Width="163" Height="15" X="142" Y="110" Property="PI_ESERVER_URL" />
<Control Type="Text" Id="IntroLabel" Width="341" Height="27" X="15" Y="52" Text="Please, specify URL which will be used to access the Enterprise Server from the Portal. Click Next to continue." />
</Dialog>
<Dialog Id="FinishDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
<Publish Event="NewDialog" Value="FinishDlg">1</Publish>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
@ -361,61 +297,395 @@
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Click Finish to exit the wizard." />
<Control Type="ScrollableText" Id="Log" Width="360" Height="174" X="4" Y="52" Property="INSTLOG" />
</Dialog>
<Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg" Order="3">LicenseAccepted = "1"</Publish>
<Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg" Order="3"></Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="SWebDlg" Order="10">&amp;ServerFeature=3</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="ESWebDlg" Order="9">&amp;EnterpriseServerFeature=3</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="DatabaseConnectionDlg" Order="8">&amp;SchedulerServiceFeature=3</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="PWebDlg" Order="7">&amp;PortalFeature=3</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="ESUrlDlg">1</Publish>
<TextStyle Id="DlgTitleFont" FaceName="Tahoma" Size="8" Bold="yes" />
<Dialog Id="PrereqCheckDlg" Width="370" Height="270" NoMinimize="yes" Title="[ProductName] Setup">
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back" />
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" Disabled="yes">
<Condition Action="enable">PI_PREREQ_OS="1" AND PI_PREREQ_IIS="1" AND PI_PREREQ_ASPNET="1"</Condition>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="2" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Title}Prerequisities check" />
<Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="Software requirements and system state checks" />
<Control Id="ReqGroupBox" Type="GroupBox" X="4" Y="49" Width="180" Height="175" Property="REQGROUP" Text="Requirements"/>
<Control Id="LogGroupBox" Type="GroupBox" X="186" Y="49" Width="180" Height="175" Property="LOGGROUP" Text="Check log"/>
<Control Id="ReqLogText" Type="Text" X="190" Y="60" Width="173" Height="159" Sunken="yes" Disabled="no" Property="REQLOG" Text="[PI_PREREQ_LOG]"/>
<Control Id="ReqCheckView" Type="ListView" X="9" Y="60" Width="173" Height="159" Property="REQCHECKLIST" Sunken="no" Disabled="no" IconSize="16">
<ListView Property="REQCHECKLIST">
</ListView>
</Control>
</Dialog>
<Dialog Id="ValidateDlg" Width="250" Height="85" Title="[ProductName] Setup" NoMinimize="yes">
<Control Id="Ok" Type="PushButton" X="184" Y="60" Width="56" Height="17" Text="Ok" Default="yes" Cancel="yes"/>
<Control Id="Text" Type="Text" X="8" Y="8" Width="221" Height="30">
<Text>[VALIDATE_MSG]</Text>
</Control>
</Dialog>
<!--All events and actions in one place-->
<!--LicenseAgreementDlg-->
<Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="PrereqCheckDlg" Order="3">LicenseAccepted = "1"</Publish>
<!--PrereqCheckDlg-->
<Publish Dialog="PrereqCheckDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
<Publish Dialog="PrereqCheckDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg">1</Publish>
<Publish Dialog="PrereqCheckDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!--CustomizeDlg-->
<Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="PrereqCheckDlg" Order="3">1</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="SWebDlg" Order="12">&amp;ServerFeature=3</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="ESWebDlg" Order="11">&amp;EnterpriseServerFeature=3</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="PWebDlg" Order="10">&amp;PortalFeature=3</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="DatabaseConnectionDlg" Order="9">&amp;SchedulerServiceFeature=3</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="CustomVerifyReadyDlg" Order="8">&amp;WDPortalFeature=3</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="CustomVerifyReadyDlg" Order="7">1</Publish>
<Publish Dialog="CustomizeDlg" Control="Next" Event="DoAction" Value="CA_RecapListUI" Order="1">1</Publish>
<!--SWebDlg-->
<Publish Dialog="SWebDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg">1</Publish>
<Publish Dialog="SWebDlg" Control="Next" Event="NewDialog" Value="SUserAccountDlg">1</Publish>
<Publish Dialog="SWebDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!--SUserAccountDlg-->
<Publish Dialog="SUserAccountDlg" Control="Back" Event="NewDialog" Value="SWebDlg">1</Publish>
<Publish Dialog="SUserAccountDlg" Control="Next" Event="NewDialog" Value="ServerPasswordDlg" Order="3">VALIDATE_OK="1"</Publish>
<Publish Dialog="SUserAccountDlg" Control="Next" Event="SpawnDialog" Value="ValidateDlg" Order="2">VALIDATE_OK="0"</Publish>
<Publish Dialog="SUserAccountDlg" Control="Next" Event="DoAction" Value="CA_ServerValidateADUI" Order="1">1</Publish>
<Publish Dialog="SUserAccountDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!-- AD User.-->
<Publish Dialog="SUserAccountDlg" Control="SelectUserButton" Event="DoAction" Value="CA_DirectoryObjectPicker" Order="2">1</Publish>
<Publish Dialog="SUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_TYPES" Value="DSOP_SCOPE_TYPE_TARGET_COMPUTER|DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN" Order="1">1</Publish>
<Publish Dialog="SUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_FLAGS" Value="DSOP_SCOPE_FLAG_STARTING_SCOPE|DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="SUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_FILTER_FLAGS" Value="DSOP_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="SUserAccountDlg" Control="SelectUserButton" Property="DSOP_DOWNLEVEL_SCOPE_FILTER_FLAGS" Value="DSOP_DOWNLEVEL_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="SUserAccountDlg" Control="SelectUserButton" Property="PI_SERVER_LOGIN" Value="[DSOP_UPN]" Order="3"><![CDATA[DSOP_UPN <> ""]]></Publish>
<Publish Dialog="SUserAccountDlg" Control="SelectUserButton" Property="PI_SERVER_LOGIN" Value="[DSOP_NAME]" Order="3"><![CDATA[DSOP_NAME <> "" AND DSOP_UPN = ""]]></Publish>
<!--ServerPasswordDlg-->
<Publish Dialog="ServerPasswordDlg" Control="Back" Event="NewDialog" Value="SUserAccountDlg">1</Publish>
<Publish Dialog="ServerPasswordDlg" Control="Next" Event="NewDialog" Value="ESWebDlg" Order="7">&amp;EnterpriseServerFeature=3 AND VALIDATE_OK = "1"</Publish>
<Publish Dialog="ServerPasswordDlg" Control="Next" Event="NewDialog" Value="PWebDlg" Order="6">&amp;PortalFeature=3 AND VALIDATE_OK = "1"</Publish>
<Publish Dialog="ServerPasswordDlg" Control="Next" Event="NewDialog" Value="DatabaseConnectionDlg" Order="5">&amp;SchedulerServiceFeature=3 AND VALIDATE_OK = "1"</Publish>
<Publish Dialog="ServerPasswordDlg" Control="Next" Event="NewDialog" Value="CustomVerifyReadyDlg" Order="4">&amp;WDPortalFeature=3 AND VALIDATE_OK = "1"</Publish>
<Publish Dialog="ServerPasswordDlg" Control="Next" Event="NewDialog" Value="CustomVerifyReadyDlg" Order="3">
<![CDATA[NOT(&EnterpriseServerFeature=3) AND NOT(&PortalFeature=3) AND NOT(&SchedulerServiceFeature=3) AND NOT(&WDPortalFeature=3) AND VALIDATE_OK = "1"]]>
</Publish>
<Publish Dialog="ServerPasswordDlg" Control="Next" Event="SpawnDialog" Value="ValidateDlg" Order="2">VALIDATE_OK = "0"</Publish>
<Publish Dialog="ServerPasswordDlg" Control="Next" Event="DoAction" Value="CA_ServerAccessValidateUI" Order="1">1</Publish>
<Publish Dialog="ServerPasswordDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!--ESWebDlg-->
<Publish Dialog="ESWebDlg" Control="Back" Event="NewDialog" Value="ServerPasswordDlg" Order="2"><![CDATA[&ServerFeature=3]]></Publish>
<Publish Dialog="ESWebDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">1</Publish>
<Publish Dialog="ESWebDlg" Control="Next" Event="NewDialog" Value="ESUserAccountDlg" Order="2">1</Publish>
<Publish Dialog="ESWebDlg" Control="Next" Event="DoAction" Value="CA_SetEServerUrlUI" Order="1">1</Publish>
<Publish Dialog="ESWebDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!--ESUserAccountDlg-->
<Publish Dialog="ESUserAccountDlg" Control="Back" Event="NewDialog" Value="ESWebDlg">1</Publish>
<Publish Dialog="ESUserAccountDlg" Control="Next" Event="NewDialog" Value="ServerAdminPasswordDlg" Order="3">VALIDATE_OK="1"</Publish>
<Publish Dialog="ESUserAccountDlg" Control="Next" Event="SpawnDialog" Value="ValidateDlg" Order="2">VALIDATE_OK="0"</Publish>
<Publish Dialog="ESUserAccountDlg" Control="Next" Event="DoAction" Value="CA_EServerValidateADUI" Order="1">1</Publish>
<Publish Dialog="ESUserAccountDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!-- AD User.-->
<Publish Dialog="ESUserAccountDlg" Control="SelectUserButton" Event="DoAction" Value="CA_DirectoryObjectPicker" Order="2">1</Publish>
<Publish Dialog="ESUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_TYPES" Value="DSOP_SCOPE_TYPE_TARGET_COMPUTER|DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN" Order="1">1</Publish>
<Publish Dialog="ESUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_FLAGS" Value="DSOP_SCOPE_FLAG_STARTING_SCOPE|DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="ESUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_FILTER_FLAGS" Value="DSOP_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="ESUserAccountDlg" Control="SelectUserButton" Property="DSOP_DOWNLEVEL_SCOPE_FILTER_FLAGS" Value="DSOP_DOWNLEVEL_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="ESUserAccountDlg" Control="SelectUserButton" Property="PI_ESERVER_LOGIN" Value="[DSOP_UPN]" Order="3"><![CDATA[DSOP_UPN <> ""]]></Publish>
<Publish Dialog="ESUserAccountDlg" Control="SelectUserButton" Property="PI_ESERVER_LOGIN" Value="[DSOP_NAME]" Order="3"><![CDATA[DSOP_NAME <> "" AND DSOP_UPN = ""]]></Publish>
<!--ServerAdminPasswordDlg-->
<Publish Dialog="ServerAdminPasswordDlg" Control="Back" Event="NewDialog" Value="ESUserAccountDlg">1</Publish>
<Publish Dialog="ServerAdminPasswordDlg" Control="Next" Event="NewDialog" Value="DatabaseConnectionDlg" Order="3"><![CDATA[(&EnterpriseServerFeature=3 OR &SchedulerServiceFeature=3) AND VALIDATE_OK="1"]]></Publish>
<Publish Dialog="ServerAdminPasswordDlg" Control="Next" Event="SpawnDialog" Value="ValidateDlg" Order="2">VALIDATE_OK="0"</Publish>
<Publish Dialog="ServerAdminPasswordDlg" Control="Next" Event="DoAction" Value="CA_ServerAdminValidateUI" Order="1">1</Publish>
<Publish Dialog="ServerAdminPasswordDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!--DatabaseConnectionDlg-->
<Publish Dialog="DatabaseConnectionDlg" Control="Back" Event="NewDialog" Value="ESUrlDlg" Order="4"><![CDATA[&PortalFeature=3 AND NOT(&EnterpriseServerFeature=3)]]></Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="Back" Event="NewDialog" Value="ServerAdminPasswordDlg" Order="3"><![CDATA[&EnterpriseServerFeature=3]]></Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="Back" Event="NewDialog" Value="ServerPasswordDlg" Order="2"><![CDATA[&ServerFeature=3]]></Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">1</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="Next" Event="NewDialog" Value="PWebDlg" Order="7">&amp;PortalFeature=3 AND DB_CONN_CORRECT="1" AND VALIDATE_OK = "1"</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="Next" Event="NewDialog" Value="CustomVerifyReadyDlg" Order="6">DB_CONN_CORRECT = "1" AND VALIDATE_OK = "1"</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="Next" Event="SpawnDialog" Value="ValidateDlg" Order="2">VALIDATE_OK = "0"</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="Next" Event="DoAction" Value="CA_DatabaseConnectionValidateUI" Order="1">1</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="CheckConnButton" Event="SpawnDialog" Value="ConnectionWarningDlg" Order="4">DB_CONN_CORRECT = "0"</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="CheckConnButton" Property="DB_CONN_CORRECT" Value="[DB_CONN_CORRECT]" Order="3">1</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="CheckConnButton" Event ="DoAction" Value="CA_DbListUI" Order="2">1</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="CheckConnButton" Event="DoAction" Value="CA_CheckConnectionUI" Order="1">1</Publish>
<Publish Dialog="DatabaseConnectionDlg" Control="SelectDbButton" Event="SpawnDialog" Value="SelectDbDlg" Order="1">1</Publish>
<!--ConnectionWarningDlg-->
<Publish Dialog="ConnectionWarningDlg" Control="Ok" Event="EndDialog" Value="Return">1</Publish>
<!--SelectDbDlg-->
<Publish Dialog="SelectDbDlg" Control="Ok" Event="EndDialog" Value="Return" Order="2">1</Publish>
<Publish Dialog="SelectDbDlg" Control="Ok" Property="DB_DATABASE" Value="[DB_SELECT]" Order="1">1</Publish>
<Publish Dialog="SelectDbDlg" Control="Cancel" Event="EndDialog" Value="Return">1</Publish>
<!--PWebDlg-->
<Publish Dialog="PWebDlg" Control="Back" Event="NewDialog" Value="DatabaseConnectionDlg" Order="3"><![CDATA[&EnterpriseServerFeature=3]]></Publish>
<Publish Dialog="PWebDlg" Control="Back" Event="NewDialog" Value="ServerPasswordDlg" Order="2"><![CDATA[&ServerFeature=3]]></Publish>
<Publish Dialog="PWebDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">1</Publish>
<Publish Dialog="PWebDlg" Control="Next" Event="NewDialog" Value="PUserAccountDlg">1</Publish>
<Publish Dialog="PWebDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!--PUserAccountDlg-->
<Publish Dialog="PUserAccountDlg" Control="Back" Event="NewDialog" Value="PWebDlg">1</Publish>
<Publish Dialog="PUserAccountDlg" Control="Next" Event="NewDialog" Value="ESUrlDlg" Order="4"><![CDATA[NOT(&EnterpriseServerFeature=3) AND VALIDATE_OK="1"]]></Publish>
<Publish Dialog="PUserAccountDlg" Control="Next" Event="NewDialog" Value="CustomVerifyReadyDlg" Order="3"><![CDATA[VALIDATE_OK="1"]]></Publish>
<Publish Dialog="PUserAccountDlg" Control="Next" Event="SpawnDialog" Value="ValidateDlg" Order="2">VALIDATE_OK="0"</Publish>
<Publish Dialog="PUserAccountDlg" Control="Next" Event="DoAction" Value="CA_PortalValidateADUI" Order="1">1</Publish>
<Publish Dialog="PUserAccountDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!-- AD User.-->
<Publish Dialog="PUserAccountDlg" Control="SelectUserButton" Event="DoAction" Value="CA_DirectoryObjectPicker" Order="2">1</Publish>
<Publish Dialog="PUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_TYPES" Value="DSOP_SCOPE_TYPE_TARGET_COMPUTER|DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN" Order="1">1</Publish>
<Publish Dialog="PUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_FLAGS" Value="DSOP_SCOPE_FLAG_STARTING_SCOPE|DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="PUserAccountDlg" Control="SelectUserButton" Property="DSOP_SCOPE_FILTER_FLAGS" Value="DSOP_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="PUserAccountDlg" Control="SelectUserButton" Property="DSOP_DOWNLEVEL_SCOPE_FILTER_FLAGS" Value="DSOP_DOWNLEVEL_FILTER_USERS" Order="1">1</Publish>
<Publish Dialog="PUserAccountDlg" Control="SelectUserButton" Property="PI_PORTAL_LOGIN" Value="[DSOP_UPN]" Order="3"><![CDATA[DSOP_UPN <> ""]]></Publish>
<Publish Dialog="PUserAccountDlg" Control="SelectUserButton" Property="PI_PORTAL_LOGIN" Value="[DSOP_NAME]" Order="3"><![CDATA[DSOP_NAME <> "" AND DSOP_UPN = ""]]></Publish>
<!--ESUrlDlg-->
<Publish Dialog="ESUrlDlg" Control="Back" Event="NewDialog" Value="PUserAccountDlg">1</Publish>
<Publish Dialog="ESUrlDlg" Control="Next" Event="NewDialog" Value="DatabaseConnectionDlg" Order="2"><![CDATA[&SchedulerServiceFeature=3]]></Publish>
<Publish Dialog="ESUrlDlg" Control="Next" Event="NewDialog" Value="CustomVerifyReadyDlg" Order="1">1</Publish>
<Publish Dialog="ESUrlDlg" Control="Cancel" Event="SpawnDialog" Value="CancelDlg">1</Publish>
<!--CustomVerifyReadyDlg-->
<Publish Dialog="CustomVerifyReadyDlg" Control="Back" Event="NewDialog" Value="DatabaseConnectionDlg" Order="16"><![CDATA[&SchedulerServiceFeature=3 AND NOT(&EnterpriseServerFeature=3)]]></Publish>
<Publish Dialog="CustomVerifyReadyDlg" Control="Back" Event="NewDialog" Value="ESUrlDlg" Order="15"><![CDATA[&PortalFeature=3 AND NOT(&EnterpriseServerFeature=3)]]></Publish>
<Publish Dialog="CustomVerifyReadyDlg" Control="Back" Event="NewDialog" Value="PUserAccountDlg" Order="14"><![CDATA[&PortalFeature=3 AND &EnterpriseServerFeature=3]]></Publish>
<Publish Dialog="CustomVerifyReadyDlg" Control="Back" Event="NewDialog" Value="DatabaseConnectionDlg" Order="13"><![CDATA[&EnterpriseServerFeature=3 AND &PortalFeature<>3]]></Publish>
<Publish Dialog="CustomVerifyReadyDlg" Control="Back" Event="NewDialog" Value="ServerPasswordDlg" Order="12"><![CDATA[&ServerFeature=3 AND &EnterpriseServerFeature<>3 AND &PortalFeature<>3]]></Publish>
<Publish Dialog="CustomVerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">1</Publish>
<!--FinishDlg-->
<Publish Dialog="FinishDlg" Control="Next" Event="NewDialog" Value="FinishDlg">1</Publish>
<!--ValidateDlg-->
<Publish Dialog="ValidateDlg" Control="Ok" Event="EndDialog" Value="Return">1</Publish>
</UI>
<Icon Id="WebSitePanel.ico" SourceFile="WebSitePanel.ico" />
<Binary Id="Assembly_CA" SourceFile="bin\WebsitePanel.WIXInstaller.CA.dll" />
<Binary Id="MsiExt.ActiveDirectory" SourceFile="..\..\..\tools\msiext\CustomActions\ActiveDirectory.dll" />
<Binary Id="MsiExt.DataSource" SourceFile="..\..\..\tools\msiext\CustomActions\DataSource.dll" />
<Binary Id="bannrbmp" SourceFile="bannrbmp.bmp" />
<Binary Id="passmark" SourceFile="passmark.ico" />
<Binary Id="failmark" SourceFile="failmark.ico" />
<Binary Id="InstallDB" SourceFile="$(var.PROJECTPATH)\Database\wix_install_db.sql" />
<Binary Id="UpdateDB" SourceFile="$(var.PROJECTPATH)\Database\wix_update_db.sql" />
<WixVariable Id="WixUIBannerBmp" Value="bannrbmp.bmp" />
<WixVariable Id="WixUIDialogBmp" Value="dlgbmp.bmp" />
<WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
<WixVariable Id="BUILDESPATH" Value = "$(var.PROJECTPATH)\Build\$(var.BUILD)\EnterpriseServer" />
<WixVariable Id="BUILDSPATH" Value = "$(var.PROJECTPATH)\Build\$(var.BUILD)\Server" />
<WixVariable Id="BUILDPPATH" Value = "$(var.PROJECTPATH)\Build\$(var.BUILD)\Portal" />
<WixVariable Id="BUILDWDPPATH" Value = "$(var.PROJECTPATH)\Build\$(var.BUILD)\WebDavPortal" />
<!--Add/Remove props. Public properties should be always in CAPS.-->
<Property Id="ARPPRODUCTICON" Value="WebSitePanel.ico" />
<!--UI props.-->
<Property Id="BannerBitmap">bannrbmp</Property>
<!--SQL props.-->
<Property Id="DB_SERVER" Secure="yes" Value="localhost\SQLExpress" />
<Property Id="DB_CONN" Secure="yes" />
<Property Id="DB_DATABASE" Secure="yes" />
<Property Id="DB_AUTH" Secure="yes" Value="Windows Authentication" />
<Property Id="DB_LOGIN" Secure="yes" />
<Property Id="DB_PASSWORD" Secure="yes" />
<Property Id="DB_CONN_CORRECT" Secure="yes" Value="0" />
<Property Id="DB_CONN_MSG" Secure="yes" />
<Property Id="DB_SELECT" Secure="yes" />
<!--Prerequisities props.-->
<!--Possible values: Passed(y), Fail(n).-->
<Property Id="PI_PREREQ_OS" Secure="yes" Value="0" />
<Property Id="PI_PREREQ_OS_TITLE" Value="Operating System" />
<Property Id="PI_PREREQ_ASPNET" Secure="yes" Value="0"/>
<Property Id="PI_PREREQ_ASPNET_TITLE" Value="Microsoft ASP.NET"/>
<Property Id="PI_PREREQ_IIS" Secure="yes" Value="0" />
<Property Id="PI_PREREQ_IIS_TITLE" Value="Web Server (IIS)" />
<Property Id="PI_PREREQ_WP_SERVER" Secure="yes" Value="0" />
<Property Id="PI_PREREQ_WP_SERVER_TITLE" Value="WebsitePanel Server" />
<Property Id="PI_PREREQ_WP_ESERVER" Secure="yes" Value="0" />
<Property Id="PI_PREREQ_WP_ESERVER_TITLE" Value="WebsitePanel Enterprise Server" />
<Property Id="PI_PREREQ_WP_PORTAL" Secure="yes" Value="0" />
<Property Id="PI_PREREQ_WP_PORTAL_TITLE" Value="WebsitePanel Portal" />
<Property Id="PI_PREREQ_WP_WDPORTAL" Secure="yes" Value="0" />
<Property Id="PI_PREREQ_WP_WDPORTAL_TITLE" Value="WebsitePanel WebDav Portal" />
<!--IP, PORT, HOSTNAME for each component. Default values.-->
<Property Id="PI_SERVER_IP" Secure="yes" Value="127.0.0.1" />
<Property Id="PI_SERVER_PORT" Secure="yes" Value="9003" />
<Property Id="PI_SERVER_HOST" Secure="yes" />
<Property Id="PI_SERVER_LOGIN" Secure="yes" />
<Property Id="PI_SERVER_PASSWORD" Secure="yes" />
<Property Id="PI_SERVER_PASSWORD_CONFIRM" Secure="yes" />
<Property Id="PI_SERVER_DOMAIN" Secure="yes" />
<Property Id="PI_SERVER_CREATE_AD" Secure="yes" />
<Property Id="PI_ESERVER_IP" Secure="yes" Value="127.0.0.1" />
<Property Id="PI_ESERVER_PORT" Secure="yes" Value="9002" />
<Property Id="PI_ESERVER_HOST" Secure="yes" />
<Property Id="PI_ESERVER_LOGIN" Secure="yes" />
<Property Id="PI_ESERVER_PASSWORD" Secure="yes" />
<Property Id="PI_ESERVER_PASSWORD_CONFIRM" Secure="yes" />
<Property Id="PI_ESERVER_DOMAIN" Secure="yes" />
<Property Id="PI_ESERVER_CREATE_AD" Secure="yes" />
<Property Id="PI_ESERVER_URL" Secure="yes" />
<Property Id="PI_PORTAL_IP" Secure="yes" Value="127.0.0.1" />
<Property Id="PI_PORTAL_PORT" Secure="yes" Value="9001" />
<Property Id="PI_PORTAL_HOST" Secure="yes" />
<Property Id="PI_PORTAL_LOGIN" Secure="yes" />
<Property Id="PI_PORTAL_PASSWORD" Secure="yes" />
<Property Id="PI_PORTAL_PASSWORD_CONFIRM" Secure="yes" />
<Property Id="PI_PORTAL_DOMAIN" Secure="yes" />
<Property Id="PI_PORTAL_CREATE_AD" Secure="yes"/>
<!---->
<Property Id="CUSTOM_INSTALL_TEXT" Secure="yes" />
<Property Id="PI_PREREQ_LOG" Secure="yes" />
<!---->
<Property Id="SERVER_ACCESS_PASSWORD" Secure="yes" />
<Property Id="SERVER_ACCESS_PASSWORD_CONFIRM" Secure="yes" />
<!---->
<Property Id="SERVERADMIN_PASSWORD" Secure="yes" />
<Property Id="SERVERADMIN_PASSWORD_CONFIRM" Secure="yes" />
<!---->
<Property Id="VALIDATE_OK" Secure="yes" Value="0" />
<Property Id="VALIDATE_MSG" Secure="yes" />
<Property Id ="WSP_ROOT" Secure="yes">
<RegistrySearch Id='Search_WSP_ROOT' Root='HKCU' Key='SOFTWARE\[ProductName]' Name='Root' Type='raw' />
</Property>
<!--CustomActions.-->
<!-- <CustomAction Id='AlreadyUpdated' Error='Product has already been updated to $(var.VERSION) or newer.' />
<CustomAction Id='NoDowngrade' Error='A later version of [ProductName] is already installed.' /> -->
<CustomAction Id="CA_CheckConnectionUI" BinaryKey="Assembly_CA" DllEntry="CheckConnectionUI" />
<!-- <CustomAction Id='CA_PropertyFinalizeInstall' Property='CA_FinalizeInstall' Value='ConnectionString=[CONNECTIONSTRING];PreviousConnectionString=[PREVIOUSCONNECTIONSTRING];ServiceFolder=[SERVICEFOLDER];PreviousCryptoKey=[PREVIOUSCRYPTOKEY]' Return="check"/> -->
<CustomAction Id="CA_PropertyFinalizeInstall" Property="CA_FinalizeInstall" Value="" Return="check"/>
<CustomAction Id="CA_FinalizeInstall" BinaryKey ="Assembly_CA" DllEntry="FinalizeInstall" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes"/>
<CustomAction Id="CA_PreInstallationAction" BinaryKey="Assembly_CA" DllEntry="PreInstallationAction" />
<CustomAction Id="CA_FinalizeUnInstall" BinaryKey="Assembly_CA" DllEntry="FinalizeUnInstall" />
<CustomAction Id="CA_PrereqCheck" BinaryKey="Assembly_CA" DllEntry="PrereqCheck" />
<CustomAction Id="CA_PrereqCheckUI" BinaryKey="Assembly_CA" DllEntry="PrereqCheckUI" />
<CustomAction Id="CA_FillIpListUI" BinaryKey="Assembly_CA" DllEntry="FillIpListUI" />
<CustomAction Id="CA_DbListUI" BinaryKey="Assembly_CA" DllEntry="DbListUI" />
<CustomAction Id="CA_ServerAccessValidateUI" BinaryKey="Assembly_CA" DllEntry="ServerAccessValidateUI" />
<CustomAction Id="CA_ServerValidateADUI" BinaryKey="Assembly_CA" DllEntry="ServerValidateADUI" />
<CustomAction Id="CA_EServerValidateADUI" BinaryKey="Assembly_CA" DllEntry="EServerValidateADUI" />
<CustomAction Id="CA_PortalValidateADUI" BinaryKey="Assembly_CA" DllEntry="PortalValidateADUI" />
<CustomAction Id="CA_ServerAdminValidateUI" BinaryKey="Assembly_CA" DllEntry="ServerAdminValidateUI" />
<CustomAction Id="CA_DatabaseConnectionValidateUI" BinaryKey="Assembly_CA" DllEntry="DatabaseConnectionValidateUI" />
<CustomAction Id="CA_RecapListUI" BinaryKey="Assembly_CA" DllEntry="RecapListUI" />
<CustomAction Id="CA_SqlServerListUI" BinaryKey="Assembly_CA" DllEntry="SqlServerListUI" />
<CustomAction Id="CA_DirectoryObjectPicker" BinaryKey="MsiExt.ActiveDirectory" DllEntry="DirectoryObjectPicker" />
<CustomAction Id="CA_SetSqlDmoListLocal" Property="SQLDMO_LIST_LOCAL" Value="(local)" Execute="immediate" />
<CustomAction Id="CA_SetSqlDmoListIndex" Property="SQLDMO_LIST_INDEX" Value="2" Execute="immediate" />
<CustomAction Id="CA_SetSqlDmoListProperty" Property="SQLDMO_LIST_PROPERTY" Value="DB_SERVER" Execute="immediate" />
<CustomAction Id="CA_SetSqlDmoListType" Property="SQLDMO_LIST_TYPE" Value="ComboBox" Execute="immediate" />
<CustomAction Id="CA_SQLDMO_ListAvailableSQLServers" BinaryKey="MsiExt.DataSource" DllEntry="SQLDMO_ListAvailableSQLServers" />
<CustomAction Id="CA_SetEServerUrlUI" BinaryKey ="Assembly_CA" DllEntry="SetEServerUrlUI" />
<!--Run corresponding install scripts.-->
<!--Server.-->
<CustomAction Id="CA_PropertyOnServerInstall" Property="CA_OnServerInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.ServerTitle);ComponentCode=server;ComponentDescription=$(var.ServerDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLSERVERFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=[];InstallerType=[];InstallerPath=[];IISVersion=[];SetupXml=[];WebSiteIP=[PI_SERVER_IP];WebSitePort=[PI_SERVER_PORT];WebSiteDomain=[PI_SERVER_HOST];UserDomain=[PI_SERVER_DOMAIN];UserAccount=[PI_SERVER_LOGIN];UserPassword=[PI_SERVER_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnServerInstall" BinaryKey ="Assembly_CA" DllEntry="OnServerInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--EServer.-->
<CustomAction Id="CA_PropertyOnEServerInstall" Property="CA_OnEServerInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.EServerTitle);ComponentCode=enterpriseserver;ComponentDescription=$(var.EServerDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLENTERPRISESERVERFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=[];InstallerType=[];InstallerPath=[];IISVersion=[];SetupXml=[];WebSiteIP=[PI_ESERVER_IP];WebSitePort=[PI_ESERVER_PORT];WebSiteDomain=[PI_ESERVER_HOST];UserDomain=[PI_ESERVER_DOMAIN];UserAccount=[PI_ESERVER_LOGIN];UserPassword=[PI_ESERVER_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnEServerInstall" BinaryKey ="Assembly_CA" DllEntry="OnEServerInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--Portal.-->
<CustomAction Id="CA_PropertyOnPortalInstall" Property="CA_OnPortalInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.PortalTitle);ComponentCode=portal;ComponentDescription=$(var.PortalDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLPORTALFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=[];InstallerType=[];InstallerPath=[];IISVersion=[];SetupXml=[];WebSiteIP=[PI_PORTAL_IP];WebSitePort=[PI_PORTAL_PORT];WebSiteDomain=[PI_PORTAL_HOST];UserDomain=[PI_PORTAL_DOMAIN];UserAccount=[PI_PORTAL_LOGIN];UserPassword=[PI_PORTAL_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnPortalInstall" BinaryKey ="Assembly_CA" DllEntry="OnPortalInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--Run corresponding uninstall scripts.-->
<CustomAction Id="CA_PropertyOnServerRemove" Property="CA_OnServerRemove" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=server;BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnServerRemove" BinaryKey="Assembly_CA" DllEntry="OnServerRemove" Impersonate="no" Execute="deferred" HideTarget="no" />
<CustomAction Id="CA_PropertyOnEServerRemove" Property="CA_OnEServerRemove" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=enterpriseserver;BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnEServerRemove" BinaryKey="Assembly_CA" DllEntry="OnEServerRemove" Impersonate="no" Execute="deferred" HideTarget="no" />
<CustomAction Id="CA_PropertyOnPortalRemove" Property="CA_OnPortalRemove" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=portal;BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnPortalRemove" BinaryKey="Assembly_CA" DllEntry="OnPortalRemove" Impersonate="no" Execute="deferred" HideTarget="no" />
<!---->
<SetProperty Id="WEBSITEPANELDIR" After="AppSearch" Value="[WSP_ROOT]">WSP_ROOT</SetProperty>
<!--Exe sequence.-->
<InstallExecuteSequence>
<Custom Action="PropertyFinalizeInstall" After='InstallValidate'/>
<Custom Action="FinalizeUnInstall" After="InstallValidate">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
<RemoveExistingProducts After="InstallValidate" />
<Custom Action='FinalizeInstall' After='InstallFiles' >NOT Installed or REINSTALL</Custom>
<!--<Custom Action="CA_PropertyFinalizeInstall" After='InstallValidate'/>
<Custom Action="CA_FinalizeUnInstall" After="InstallValidate">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
<Custom Action="CA_FinalizeInstall" After="InstallFiles" >NOT Installed or REINSTALL</Custom>-->
<!--First Install. [Installed] property not used here because we distinguish per feature basis.-->
<Custom Action="CA_PropertyOnServerInstall" After="InstallValidate"><![CDATA[(&ServerFeature=3) AND NOT(!ServerFeature=3)]]></Custom>
<Custom Action="CA_OnServerInstall" After="InstallFiles"><![CDATA[(&ServerFeature=3) AND NOT(!ServerFeature=3)]]></Custom>
<Custom Action="CA_PropertyOnEServerInstall" After="InstallValidate"><![CDATA[(&EnterpriseServerFeature=3) AND NOT(!EnterpriseServerFeature=3)]]></Custom>
<Custom Action="CA_OnEServerInstall" After="InstallODBC"><![CDATA[(&EnterpriseServerFeature=3) AND NOT(!EnterpriseServerFeature=3)]]></Custom>
<Custom Action="CA_PropertyOnPortalInstall" After="InstallValidate"><![CDATA[(&PortalFeature=3) AND NOT(!PortalFeature=3)]]></Custom>
<Custom Action="CA_OnPortalInstall" After="InstallFiles"><![CDATA[(&PortalFeature=3) AND NOT(!PortalFeature=3)]]></Custom>
<!--Complete Remove.-->
<Custom Action="CA_PropertyOnServerRemove" After="InstallInitialize"><![CDATA[(&ServerFeature=2) AND (!ServerFeature=3)]]></Custom>
<Custom Action="CA_OnServerRemove" After="CA_PropertyOnServerRemove"><![CDATA[(&ServerFeature=2) AND (!ServerFeature=3)]]></Custom>
<Custom Action="CA_PropertyOnEServerRemove" After="InstallInitialize"><![CDATA[(&EnterpriseServerFeature=2) AND (!EnterpriseServerFeature=3)]]></Custom>
<Custom Action="CA_OnEServerRemove" Before="StopServices"><![CDATA[(&EnterpriseServerFeature=2) AND (!EnterpriseServerFeature=3)]]></Custom>
<Custom Action="CA_PropertyOnPortalRemove" After="InstallInitialize"><![CDATA[(&PortalFeature=2) AND (!PortalFeature=3)]]></Custom>
<Custom Action="CA_OnPortalRemove" After="CA_PropertyOnPortalRemove"><![CDATA[(&PortalFeature=2) AND (!PortalFeature=3)]]></Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="CA_PrereqCheck" After ="CostInitialize" />
<Custom Action="CA_PrereqCheckUI" After ="CA_PrereqCheck" />
<Custom Action="CA_FillIpListUI" After="CostInitialize" />
<Custom Action="CA_SqlServerListUI" After="CostInitialize" />
</InstallUISequence>
<SetProperty Id="PI_ESERVER_URL" Value="http://[PI_ESERVER_IP]:[PI_ESERVER_PORT]/" Before="CostInitialize" />
</Product>
<Fragment>
<CustomAction Id="CheckConnection" BinaryKey="CheckConnection.CA" DllEntry="CheckConnection" />
<Binary Id="CheckConnection.CA" SourceFile="bin\WebsitePanel.WIXInstaller.CA.dll" />
<ComponentGroup Id="DatabaseInstallation">
<ComponentRef Id="InstallDatabaseSql"/>
<ComponentRef Id="InstallDatabaseWin"/>
<ComponentRef Id="UpdateDatabaseSql"/>
<ComponentRef Id="UpdateDatabaseWin"/>
</ComponentGroup>
<DirectoryRef Id="INSTALLENTERPRISESERVERFOLDER">
<Component Id="InstallDatabaseSql" Guid="{81FB6008-A445-464F-8A0E-2EE076027FF3}">
<CreateFolder />
<Condition>(NOT Installed OR NOT WIX_UPGRADE_DETECTED) AND NOT(DB_AUTH = "Windows Authentication")</Condition>
<util:User Id="SqlUser" Name="[DB_LOGIN]" Password="[DB_PASSWORD]" CreateUser="no" />
<sql:SqlDatabase Id="SqlDatabaseInstallSql" ConfirmOverwrite="yes" ContinueOnError="no" CreateOnInstall="yes" CreateOnReinstall="no" CreateOnUninstall="no"
DropOnInstall="no" DropOnReinstall="no" DropOnUninstall="no"
Server="[DB_SERVER]"
Database="[DB_DATABASE]"
User="SqlUser">
<sql:SqlScript Id="SqlInstallScriptSql" ExecuteOnInstall="yes" BinaryKey="InstallDB" Sequence="1"/>
</sql:SqlDatabase>
</Component>
<Component Id="UpdateDatabaseSql" Guid="{089C02F9-D598-435E-8DA9-FC8AED00495C}">
<Condition>NOT (Remove="ALL") AND NOT(DB_AUTH = "Windows Authentication")</Condition>
<CreateFolder />
<sql:SqlString Id="SqlVersionUpdateSql" SQL="IF NOT EXISTS (SELECT * FROM dbo.Versions WHERE DatabaseVersion = '$(var.sql_release_version)')
BEGIN
INSERT dbo.Versions (DatabaseVersion, BuildDate) VALUES ('$(var.sql_release_version)', '$(var.sql_build_date)')
END"
SqlDb="SqlDatabaseInstallWin" Sequence="2" User="SqlUser"
ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
<sql:SqlScript Id="SqlUpdateScriptSql" BinaryKey="UpdateDB" SqlDb="SqlDatabaseInstallSql" Sequence="3" User="SqlUser"
ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
</Component>
<Component Id="InstallDatabaseWin" Guid="{C50FC58C-3EF3-452D-BA9B-C9513B4D941A}">
<CreateFolder />
<Condition>(NOT Installed OR NOT WIX_UPGRADE_DETECTED) AND (DB_AUTH = "Windows Authentication")</Condition>
<sql:SqlDatabase Id="SqlDatabaseInstallWin" ConfirmOverwrite="yes" ContinueOnError="no" CreateOnInstall="yes" CreateOnReinstall="no" CreateOnUninstall="no"
DropOnInstall="no" DropOnReinstall="no" DropOnUninstall="no"
Server="[DB_SERVER]"
Database="[DB_DATABASE]">
<sql:SqlScript Id="SqlInstallScriptWin" ExecuteOnInstall="yes" BinaryKey="InstallDB" Sequence="10"/>
</sql:SqlDatabase>
</Component>
<Component Id="UpdateDatabaseWin" Guid="{A2770B5C-DA46-4125-950F-73A640EB312B}">
<Condition>NOT (Remove="ALL") AND (DB_AUTH = "Windows Authentication")</Condition>
<CreateFolder />
<sql:SqlString Id="SqlVersionUpdateWin" SQL="IF NOT EXISTS (SELECT * FROM dbo.Versions WHERE DatabaseVersion = '$(var.sql_release_version)')
BEGIN
INSERT dbo.Versions (DatabaseVersion, BuildDate) VALUES ('$(var.sql_release_version)', '$(var.sql_build_date)')
END"
SqlDb="SqlDatabaseInstallWin" Sequence="11" ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
<sql:SqlScript Id="SqlUpdateScriptWin" BinaryKey="UpdateDB" SqlDb="SqlDatabaseInstallWin" Sequence="12"
ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<!-- immediate CA -->
<CustomAction Id='PropertyFinalizeInstall' Property='FinalizeInstall' Value='ConnectionString=[CONNECTIONSTRING];PreviousConnectionString=[PREVIOUSCONNECTIONSTRING];ServiceFolder=[SERVICEFOLDER];PreviousCryptoKey=[PREVIOUSCRYPTOKEY]' Return="check"/>
<!-- deferred CA -->
<CustomAction Id='FinalizeInstall' BinaryKey ='CheckConnection.CA' DllEntry='FinalizeInstall' Impersonate='no' Execute='deferred' Return='check' HideTarget='yes'/>
<!--<CustomAction Id="FinalizeInstall" BinaryKey="CheckConnection.CA" DllEntry="FinalizeInstall" />-->
<ComponentGroup Id="WebsitePanelFiles">
<Component Id ="comp_WebsitePanel_config" Directory="WEBSITEPANELDIR" Guid="{28CD1ADB-562C-4E38-A3B6-325D3A2718B1}">
<File Id="file_WebsitePanel_config" KeyPath="yes" Source="WebsitePanel.config" />
</Component>
<Component Directory="WEBSITEPANELDIR">
<RegistryValue Root='HKCU' Key='SOFTWARE\[ProductName]'
Name='Root' Value='[WEBSITEPANELDIR]'
Type='string' />
</Component>
</ComponentGroup>
</Fragment>
<Fragment>
<CustomAction Id="PreInstallationAction" BinaryKey="CheckConnection.CA" DllEntry="PreInstallationAction" />
<CustomAction Id="FinalizeUnInstall" BinaryKey="CheckConnection.CA" DllEntry="FinalizeUnInstall" />
<CustomAction Id='AlreadyUpdated' Error='Product has already been updated to $(var.VERSION) or newer.' />
<CustomAction Id='NoDowngrade' Error='A later version of [ProductName] is already installed.' />
</Fragment>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="WEBSITEPANELDIR" Name="WebsitePanel">
<Directory Id="INSTALLSERVICEFOLDER" Name="SchedulerService" />
<Directory Id="INSTALLSERVERFOLDER" Name="Server" />
<Directory Id="INSTALLENTERPRISESERVERFOLDER" Name="Enterprise Server" />
<Directory Id="INSTALLPORTALFOLDER" Name="Portal" />
</Directory>
</Directory>
</Fragment>
</Wix>

View file

@ -3,7 +3,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.7</ProductVersion>
<ProductVersion>3.9</ProductVersion>
<ProjectGuid>{978f0a18-7c81-4561-8f6d-5a165484ad0a}</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>Websitepanel</OutputName>
@ -14,7 +14,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<OutputPath>bin\</OutputPath>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<DefineConstants>Debug;BUILD=debug</DefineConstants>
<DefineConstants>Debug;BUILD=debug;Version=$(Version);BuildDate=$(ReleaseDate)</DefineConstants>
<SuppressValidation>False</SuppressValidation>
<SuppressIces>
</SuppressIces>
@ -26,23 +26,38 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>bin\$(Configuration)\</OutputPath>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<DefineConstants>BUILD=release</DefineConstants>
<DefineConstants>BUILD=release;Version=$(Version);BuildDate=$(ReleaseDate)</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Include="EnterpriseServerFiles.wxs" />
<Compile Include="PortalFiles.wxs" />
<Compile Include="CustomVerifyReadyDlg.wxs" />
<Compile Include="Product.wxs" />
<Compile Include="SchedulerServiceFiles.wxs" />
<Compile Include="ServerFiles.wxs" />
<Compile Include="..\..\..\WebsitePanel\Build\$(Configuration)\WiXInstaller\ComponentsFiles\ServerFiles.wxs" />
<Compile Include="..\..\..\WebsitePanel\Build\$(Configuration)\WiXInstaller\ComponentsFiles\EnterpriseServerFiles.wxs" />
<Compile Include="..\..\..\WebsitePanel\Build\$(Configuration)\WiXInstaller\ComponentsFiles\PortalFiles.wxs" />
<Compile Include="..\..\..\WebsitePanel\Build\$(Configuration)\WiXInstaller\ComponentsFiles\WebDavPortalFiles.wxs" />
</ItemGroup>
<ItemGroup>
<Content Include="Config.wxi" />
<Content Include="WebsitePanel.config" />
</ItemGroup>
<ItemGroup>
<WixExtension Include="WixUIExtension">
<HintPath>..\..\..\tools\WIX\WixUIExtension.dll</HintPath>
<Name>WixUIExtension</Name>
</WixExtension>
<WixExtension Include="WixIIsExtension">
<HintPath>..\..\..\tools\WIX\WixIIsExtension.dll</HintPath>
<Name>WixIIsExtension</Name>
</WixExtension>
<WixExtension Include="WixSqlExtension">
<HintPath>..\..\..\tools\WIX\WixSqlExtension.dll</HintPath>
<Name>WixSqlExtension</Name>
</WixExtension>
<WixExtension Include="WixUtilExtension">
<HintPath>..\..\..\tools\WIX\WixUtilExtension.dll</HintPath>
<Name>WixUtilExtension</Name>
</WixExtension>
</ItemGroup>
<Import Project="$(WixTargetsPath)" />
<!--

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="installer" type="WebsitePanel.Installer.Configuration.InstallerSection, WebsitePanel.Installer.Core"/>
</configSections>
<installer>
<!-- Installed components -->
<components/>
<!-- Studio settings -->
<settings>
<add key="Log.FileName" value="WebsitePanel.Installer.log" />
<add key="Web.Service" value="" />
<add key="Web.AutoCheck" value="False" />
<add key="Web.Proxy.UseProxy" value="false" />
<add key="Web.Proxy.Address" value="" />
<add key="Web.Proxy.UserName" value="" />
<add key="Web.Proxy.Password" value="" />
</settings>
</installer>
</configuration>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18051
// Runtime Version:4.0.30319.34209
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.

View file

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.30723.0
VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{129305D5-A9E6-4DCE-BFF6-41809E13EEEE}"
ProjectSection(SolutionItems) = preProject
@ -33,6 +33,13 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup.SchedulerService", "S
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.SchedulerServiceInstaller", "WebsitePanel.SchedulerServiceInstaller\WebsitePanel.SchedulerServiceInstaller.csproj", "{24A4C231-73A9-4F03-ABAD-9A8FE5324495}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.WIXInstaller", "WebsitePanel.WIXInstaller\WebsitePanel.WIXInstaller.csproj", "{3343FFD8-7CCE-451B-95AE-3D97244313A2}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Setup.WIXInstaller", "Setup.WIXInstaller\Setup.WIXInstaller.wixproj", "{978F0A18-7C81-4561-8F6D-5A165484AD0A}"
ProjectSection(ProjectDependencies) = postProject
{3343FFD8-7CCE-451B-95AE-3D97244313A2} = {3343FFD8-7CCE-451B-95AE-3D97244313A2}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -125,6 +132,26 @@ Global
{24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|Mixed Platforms.Build.0 = Release|x86
{24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.ActiveCfg = Release|x86
{24A4C231-73A9-4F03-ABAD-9A8FE5324495}.Release|x86.Build.0 = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|Any CPU.ActiveCfg = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|Mixed Platforms.Build.0 = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|x86.ActiveCfg = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Debug|x86.Build.0 = Debug|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|Any CPU.ActiveCfg = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|Mixed Platforms.ActiveCfg = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|Mixed Platforms.Build.0 = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|x86.ActiveCfg = Release|x86
{3343FFD8-7CCE-451B-95AE-3D97244313A2}.Release|x86.Build.0 = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|Any CPU.ActiveCfg = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|Mixed Platforms.Build.0 = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|x86.ActiveCfg = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Debug|x86.Build.0 = Debug|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|Any CPU.ActiveCfg = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|Mixed Platforms.ActiveCfg = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|Mixed Platforms.Build.0 = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|x86.ActiveCfg = Release|x86
{978F0A18-7C81-4561-8F6D-5A165484AD0A}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -67,37 +67,21 @@ namespace WebsitePanel.Setup.Actions
{
OnInstallProgressChanged(LogStartInstallMessage, 0);
Log.WriteStart(LogStartInstallMessage);
var file = Path.Combine(vars.InstallationFolder, vars.ConfigurationFile);
vars.CryptoKey = Utils.GetRandomString(20);
// load file
string content = string.Empty;
using (StreamReader reader = new StreamReader(file))
{
content = reader.ReadToEnd();
}
// expand variables
content = Utils.ReplaceScriptVariable(content, "installer.cryptokey", vars.CryptoKey);
//
Log.WriteInfo(String.Format("The following cryptographic key has been generated: '{0}'", vars.CryptoKey));
// save file
using (StreamWriter writer = new StreamWriter(file))
{
writer.Write(content);
}
//update log
var Xml = new XmlDocument();
Xml.Load(file);
var CryptoNode = Xml.SelectSingleNode("configuration/appSettings/add[@key='WebsitePanel.CryptoKey']") as XmlElement;
if (CryptoNode != null)
CryptoNode.SetAttribute("value", vars.CryptoKey);
Xml.Save(file);
Log.WriteEnd(LogEndInstallMessage);
}
catch (Exception ex)
{
if (Utils.IsThreadAbortException(ex))
return;
//
Log.WriteError("Update web.config error", ex);
//
throw;
}
}
@ -116,6 +100,10 @@ namespace WebsitePanel.Setup.Actions
Begin(LogStartInstallMessage);
Log.WriteStart(LogStartInstallMessage);
var ServiceName = Global.Parameters.SchedulerServiceName;
var ServiceFile = Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName);
Log.WriteInfo(String.Format("Scheduler Service Name: \"{0}\"", Global.Parameters.SchedulerServiceName));
if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase)))
@ -125,8 +113,13 @@ namespace WebsitePanel.Setup.Actions
return;
}
ManagedInstallerClass.InstallHelper(new[] { "/i", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName) });
ManagedInstallerClass.InstallHelper(new[] { "/i /LogFile=\"\" ", ServiceFile });
Utils.StartService(Global.Parameters.SchedulerServiceName);
AppConfig.EnsureComponentConfig(vars.ComponentId);
AppConfig.SetComponentSettingStringValue(vars.ComponentId, "ServiceName", ServiceName);
AppConfig.SetComponentSettingStringValue(vars.ComponentId, "ServiceFile", ServiceFile);
AppConfig.SaveConfiguration();
}
catch (Exception ex)
{
@ -166,7 +159,7 @@ namespace WebsitePanel.Setup.Actions
{
if (ServiceController.GetServices().Any(s => s.ServiceName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase)))
{
ManagedInstallerClass.InstallHelper(new[] { "/u", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName) });
ManagedInstallerClass.InstallHelper(new[] { "/u /LogFile=\"\" ", Path.Combine(vars.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName) });
}
}
}
@ -397,25 +390,14 @@ namespace WebsitePanel.Setup.Actions
void IInstallAction.Run(SetupVariables vars)
{
Log.WriteStart("Updating web.config file (connection string)");
//
var file = Path.Combine(vars.InstallationFolder, vars.ConfigurationFile);
//
var content = String.Empty;
// load file
using (StreamReader reader = new StreamReader(file))
{
content = reader.ReadToEnd();
}
// Build connection string
vars.ConnectionString = String.Format(vars.ConnectionString, vars.DatabaseServer, vars.Database, vars.Database, vars.DatabaseUserPassword);
// Expand variables
content = Utils.ReplaceScriptVariable(content, "installer.connectionstring", vars.ConnectionString);
// Save file
using (StreamWriter writer = new StreamWriter(file))
{
writer.Write(content);
}
//
var Xml = new XmlDocument();
Xml.Load(file);
var ConnNode = Xml.SelectSingleNode("configuration/connectionStrings/add[@name='EnterpriseServer']") as XmlElement;
if(ConnNode != null)
ConnNode.SetAttribute("connectionString", vars.ConnectionString);
Xml.Save(file);
Log.WriteEnd(String.Format("Updated {0} file", vars.ConfigurationFile));
}
}
@ -509,10 +491,11 @@ namespace WebsitePanel.Setup.Actions
{
void IInstallAction.Run(SetupVariables vars)
{
Log.WriteStart("SaveEntServerConfigSettingsAction");
AppConfig.EnsureComponentConfig(vars.ComponentId);
//
AppConfig.SetComponentSettingStringValue(vars.ComponentId, "Database", vars.Database);
AppConfig.SetComponentSettingBooleanValue(vars.ComponentId, "NewDatabase", true);
AppConfig.SetComponentSettingBooleanValue(vars.ComponentId, "NewDatabase", vars.CreateDatabase);
//
AppConfig.SetComponentSettingStringValue(vars.ComponentId, "DatabaseUser", vars.Database);
AppConfig.SetComponentSettingBooleanValue(vars.ComponentId, "NewDatabaseUser", vars.NewDatabaseUser);
@ -523,6 +506,7 @@ namespace WebsitePanel.Setup.Actions
AppConfig.SetComponentSettingStringValue(vars.ComponentId, Global.Parameters.CryptoKey, vars.CryptoKey);
//
AppConfig.SaveConfiguration();
Log.WriteEnd("SaveEntServerConfigSettingsAction");
}
}

View file

@ -38,25 +38,27 @@ namespace WebsitePanel.Setup
public sealed class AppConfig
{
public const string AppConfigFileNameWithoutExtension = "WebsitePanel.Installer.exe";
static AppConfig()
{
ConfigurationPath = DefaultConfigurationPath;
}
private AppConfig()
{
}
}
private static Configuration appConfig = null;
private static XmlDocument xmlConfig = null;
public static void LoadConfiguration()
public static string ConfigurationPath { get; set; }
public static string DefaultConfigurationPath { get { return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppConfigFileNameWithoutExtension); } }
public static void LoadConfiguration(ExeConfigurationFileMap FnMap = null, ConfigurationUserLevel CuLevel = ConfigurationUserLevel.None)
{
//
var exePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppConfigFileNameWithoutExtension);
//
appConfig = ConfigurationManager.OpenExeConfiguration(exePath);
//
if (FnMap == null)
appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationPath);
else
appConfig = ConfigurationManager.OpenMappedExeConfiguration(FnMap, CuLevel);
ConfigurationSection section = appConfig.Sections["installer"];
if (section == null)
throw new ConfigurationErrorsException("instalelr section not found");
throw new ConfigurationErrorsException("installer section not found in " + appConfig.FilePath);
string strXml = section.SectionInformation.GetRawXml();
xmlConfig = new XmlDocument();
xmlConfig.LoadXml(strXml);

View file

@ -48,9 +48,9 @@ namespace WebsitePanel.Setup
/// <param name="bar">Progress bar.</param>
/// <param name="source">Source folder.</param>
/// <param name="destination">Destination folder.</param>
public CopyProcess(ProgressBar bar, string source, string destination)
public CopyProcess(object bar, string source, string destination)
{
this.progressBar = bar;
this.progressBar = bar as ProgressBar;
this.sourceFolder = new DirectoryInfo(source);
this.destFolder = new DirectoryInfo(destination);
}
@ -63,9 +63,13 @@ namespace WebsitePanel.Setup
// unzip
long totalSize = FileUtils.CalculateFolderSize(sourceFolder.FullName);
long copied = 0;
if (progressBar != null)
{
progressBar.Minimum = 0;
progressBar.Maximum = 100;
progressBar.Value = 0;
}
int i = 0;
List<DirectoryInfo> folders = new List<DirectoryInfo>();
@ -122,11 +126,14 @@ namespace WebsitePanel.Setup
copied += files[i].Length;
if (totalSize != 0)
{
if (progressBar != null)
{
progressBar.Value = Convert.ToInt32(copied * 100 / totalSize);
}
}
}
}
}
}
}

View file

@ -170,5 +170,7 @@ namespace WebsitePanel.Setup
}
catch { }
}
public static TraceListenerCollection Listeners { get { return Trace.Listeners; } }
}
}

View file

@ -286,7 +286,8 @@ namespace WebsitePanel.Setup
Windows7,
WindowsServer2008R2,
Windows8,
WindowsServer2012
WindowsServer2012,
WindowsServer2012R2
}
public static string GetName(WindowsVersion version)
@ -428,6 +429,9 @@ namespace WebsitePanel.Setup
else
ret = WindowsVersion.WindowsServer2012;
break;
case 3:
ret = WindowsVersion.WindowsServer2012R2;
break;
}
break;
}

View file

@ -339,7 +339,7 @@ namespace WebsitePanel.Setup
/// <returns></returns>
internal static string GetSid(string userAccount, string domain)
{
if(domain == null)
if(string.IsNullOrWhiteSpace(domain))
domain = Environment.MachineName;
// try to get user account

View file

@ -481,11 +481,11 @@ namespace WebsitePanel.Setup
public static void StopService(string serviceName)
{
ServiceController sc = new ServiceController(serviceName);
// Start the service if the current status is stopped.
// Stop the service if the current status is not stopped.
if (sc.Status != ServiceControllerStatus.Stopped &&
sc.Status != ServiceControllerStatus.StopPending)
{
// Start the service, and wait until its status is "Running".
// Stop the service, and wait until its status is "Running".
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped);
}

View file

@ -46,9 +46,9 @@ namespace WebsitePanel.Setup.Common
int totalFiles = 0;
int files = 0;
public ZipIndicator(ProgressBar progressBar, string sourcePath, string zipFile)
public ZipIndicator(object progressBar, string sourcePath, string zipFile)
{
this.progressBar = progressBar;
this.progressBar = progressBar as ProgressBar;
this.sourcePath = sourcePath;
this.zipFile = zipFile;
}
@ -71,9 +71,12 @@ namespace WebsitePanel.Setup.Common
{
string fileName = e.CurrentEntry.FileName;
files++;
if (this.progressBar != null)
{
this.progressBar.Value = Convert.ToInt32(files * 100 / totalFiles);
this.progressBar.Update();
}
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -143,6 +143,7 @@
<Compile Include="Common\ZipIndicator.cs" />
<Compile Include="EnterpriseServer10.cs" />
<Compile Include="EnterpriseServer20.cs" />
<Compile Include="Internal\Adapter.cs" />
<Compile Include="Portal10.cs" />
<Compile Include="Portal20.cs" />
<Compile Include="Server10.cs" />

View file

@ -127,13 +127,13 @@ namespace WebsitePanel.Setup
switch (check.CheckType)
{
case CheckTypes.OperationSystem:
status = CheckOS(out details);
status = CheckOS(check.SetupVariables, out details);
break;
case CheckTypes.IISVersion:
status = CheckIISVersion(out details);
status = CheckIISVersion(check.SetupVariables, out details);
break;
case CheckTypes.ASPNET:
status = CheckASPNET(out details);
status = CheckASPNET(check.SetupVariables, out details);
break;
case CheckTypes.WPServer:
status = CheckWPServer(check.SetupVariables, out details);
@ -221,7 +221,7 @@ namespace WebsitePanel.Setup
}
private CheckStatuses CheckOS(out string details)
internal static CheckStatuses CheckOS(SetupVariables setupVariables, out string details)
{
details = string.Empty;
try
@ -237,6 +237,7 @@ namespace WebsitePanel.Setup
version == OS.WindowsVersion.WindowsServer2008 ||
version == OS.WindowsVersion.WindowsServer2008R2 ||
version == OS.WindowsVersion.WindowsServer2012 ||
version == OS.WindowsVersion.WindowsServer2012R2 ||
version == OS.WindowsVersion.WindowsVista ||
version == OS.WindowsVersion.Windows7 ||
version == OS.WindowsVersion.Windows8 ))
@ -260,20 +261,20 @@ namespace WebsitePanel.Setup
return CheckStatuses.Error;
}
}
private CheckStatuses CheckIISVersion(out string details)
internal static CheckStatuses CheckIISVersion(SetupVariables setupVariables, out string details)
{
details = string.Empty;
try
{
details = string.Format("IIS {0}", SetupVariables.IISVersion.ToString(2));
if (SetupVariables.IISVersion.Major == 6 &&
details = string.Format("IIS {0}", setupVariables.IISVersion.ToString(2));
if (setupVariables.IISVersion.Major == 6 &&
Utils.IsWin64() && Utils.IIS32Enabled())
{
details += " (32-bit mode)";
}
Log.WriteInfo(string.Format("IIS check: {0}", details));
if (SetupVariables.IISVersion.Major < 6)
if (setupVariables.IISVersion.Major < 6)
{
details = "IIS 6.0 or greater required.";
Log.WriteError(string.Format("IIS check: {0}", details), null);
@ -291,26 +292,26 @@ namespace WebsitePanel.Setup
}
}
private CheckStatuses CheckASPNET(out string details)
internal static CheckStatuses CheckASPNET(SetupVariables setupVariables, out string details)
{
details = "ASP.NET 4.0 is installed.";
CheckStatuses ret = CheckStatuses.Success;
try
{
// IIS 6
if (SetupVariables.IISVersion.Major == 6)
if (setupVariables.IISVersion.Major == 6)
{
//
if (Utils.CheckAspNet40Registered(SetupVariables) == false)
if (Utils.CheckAspNet40Registered(setupVariables) == false)
{
// Register ASP.NET 4.0
Utils.RegisterAspNet40(SetupVariables);
Utils.RegisterAspNet40(setupVariables);
//
ret = CheckStatuses.Warning;
details = AspNet40HasBeenInstalledMessage;
}
// Enable ASP.NET 4.0 Web Server Extension if it is prohibited
if (Utils.GetAspNetWebExtensionStatus_Iis6(SetupVariables) == WebExtensionStatus.Prohibited)
if (Utils.GetAspNetWebExtensionStatus_Iis6(setupVariables) == WebExtensionStatus.Prohibited)
{
Utils.EnableAspNetWebExtension_Iis6();
}
@ -331,10 +332,10 @@ namespace WebsitePanel.Setup
return CheckStatuses.Error;
}
// Register ASP.NET 4.0
if (Utils.CheckAspNet40Registered(SetupVariables) == false)
if (Utils.CheckAspNet40Registered(setupVariables) == false)
{
// Register ASP.NET 4.0
Utils.RegisterAspNet40(SetupVariables);
Utils.RegisterAspNet40(setupVariables);
//
ret = CheckStatuses.Warning;
details = AspNet40HasBeenInstalledMessage;
@ -359,17 +360,17 @@ namespace WebsitePanel.Setup
}
}
private CheckStatuses CheckIIS32Mode(out string details)
internal static CheckStatuses CheckIIS32Mode(SetupVariables setupVariables, out string details)
{
details = string.Empty;
CheckStatuses ret = CheckIISVersion(out details);
CheckStatuses ret = CheckIISVersion(setupVariables, out details);
if (ret == CheckStatuses.Error)
return ret;
try
{
//IIS 6
if (SetupVariables.IISVersion.Major == 6)
if (setupVariables.IISVersion.Major == 6)
{
//x64
if (Utils.IsWin64())

View file

@ -0,0 +1,35 @@
using System;
using System.Diagnostics;
using System.Text;
namespace WebsitePanel.WIXInstaller.Common
{
class InMemoryStringLogListener : TraceListener
{
private const string Format = "[{0}] Message: {1}";
static private StringBuilder m_Ctx;
string m_id;
static InMemoryStringLogListener()
{
m_Ctx = new StringBuilder();
}
public InMemoryStringLogListener(string InstanceID)
: base(InstanceID)
{
m_id = InstanceID;
}
public override void Write(string Value)
{
WriteLog(Value);
}
public override void WriteLine(string Value)
{
WriteLog(Value + Environment.NewLine);
}
[Conditional("DEBUG")]
private void WriteLog(string Value)
{
m_Ctx.Append(string.Format(Format, m_id, Value));
}
}
}

View file

@ -0,0 +1,19 @@
using System;
namespace WebsitePanel.WIXInstaller.Common
{
internal struct Prop
{
public const int REQ_IIS_MINIMUM = 6;
public const string REQ_LOG = "PI_PREREQ_LOG";
public const string REQ_OS = "PI_PREREQ_OS";
public const string REQ_IIS = "PI_PREREQ_IIS";
public const string REQ_IIS_MAJOR = "PI_PREREQ_IIS_MAJOR";
public const string REQ_IIS_MINOR = "PI_PREREQ_IIS_MINOR";
public const string REQ_ASPNET = "PI_PREREQ_ASPNET";
public const string REQ_SERVER = "PI_PREREQ_WP_SERVER";
public const string REQ_ESERVER = "PI_PREREQ_WP_ESERVER";
public const string REQ_PORTAL = "PI_PREREQ_WP_PORTAL";
public const string REQ_WDPORTAL = "PI_PREREQ_WP_WDPORTAL";
}
}

View file

@ -0,0 +1,36 @@
using Microsoft.Deployment.WindowsInstaller;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebsitePanel.Setup;
namespace WebsitePanel.WIXInstaller.Common
{
internal static class Tool
{
public static SetupVariables GetSetupVars(Session Ctx)
{
return new SetupVariables
{
SetupAction = SetupActions.Install,
IISVersion = Global.IISVersion
};
}
public static void FillServerVariables(SetupVariables Vars)
{
}
public static void FillEServerVariables(SetupVariables Vars)
{
}
public static void FillPortalVariables(SetupVariables Vars)
{
}
}
}

View file

@ -0,0 +1,79 @@
using System;
using Microsoft.Deployment.WindowsInstaller;
namespace WebsitePanel.WIXInstaller.Common.Util
{
internal interface IListCtrl
{
ulong Count { get; }
string Id { get; }
void AddItem(Record Item);
}
internal abstract class ListCtrlBase : IListCtrl
{
private Session m_Ctx;
private string m_CtrlType;
private string m_CtrlId;
private View m_View;
private ulong m_Count;
public ListCtrlBase(Session session, string CtrlType, string CtrlId)
{
m_Ctx = session;
m_CtrlType = CtrlType;
m_CtrlId = CtrlId;
m_View = null;
m_Count = 0;
Initialize();
}
~ListCtrlBase()
{
if (m_View != null)
m_View.Close();
}
public virtual ulong Count { get { return m_Count; } }
public virtual string Id { get { return m_CtrlId; } }
public virtual void AddItem(Record Item)
{
m_View.Execute(Item);
++m_Count;
}
private void Initialize()
{
m_Ctx.Database.Execute(string.Format("DELETE FROM `{0}` WHERE `Property`='{1}'", m_CtrlType, m_CtrlId));
m_View = m_Ctx.Database.OpenView(m_Ctx.Database.Tables[m_CtrlType].SqlInsertString + " TEMPORARY");
}
}
class ListViewCtrl : ListCtrlBase
{
public ListViewCtrl(Session session, string WiXListID) : base(session, "ListView", WiXListID)
{
}
public void AddItem(bool Checked, string Value)
{
AddItem(new Record(new object[] { Id, Count, Value, Value, Checked ? "passmark" : "failmark" }));
}
}
class ComboBoxCtrl : ListCtrlBase
{
public ComboBoxCtrl(Session session, string WiXComboID): base(session, "ComboBox", WiXComboID)
{
}
public void AddItem(string Value)
{
AddItem(new Record(new object[] { Id, Count, Value, Value }));
}
}
}

View file

@ -0,0 +1,26 @@
using System;
using System.Diagnostics;
using Microsoft.Deployment.WindowsInstaller;
namespace WebsitePanel.WIXInstaller.Common
{
public class WiXLogListener : TraceListener
{
private Session m_Ctx;
public WiXLogListener(Session Ctx)
: base("WiXLogListener")
{
m_Ctx = Ctx;
}
public override void Write(string Value)
{
m_Ctx.Log(Value);
}
public override void WriteLine(string Value)
{
m_Ctx.Log(Value + Environment.NewLine);
}
}
}

View file

@ -0,0 +1,11 @@
using System;
namespace WebsitePanel.WIXInstaller.Common
{
internal struct YesNo
{
public static string Yes { get { return "1"; } }
public static string No { get { return "0"; } }
}
}

View file

@ -25,51 +25,244 @@
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Configuration.Install;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.ServiceProcess;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using System.Xml;
using Microsoft.Deployment.WindowsInstaller;
using WebsitePanel.Setup;
using WebsitePanel.Setup.Internal;
using WebsitePanel.WIXInstaller.Common;
using WebsitePanel.WIXInstaller.Common.Util;
namespace WebsitePanel.WIXInstaller
{
public class CustomActions
{
public static List<string> SysDb = new List<string> { "tempdb", "master", "model", "msdb" };
public const string CustomDataDelimiter = "-=del=-";
#region CustomActions
// Install.
[CustomAction]
public static ActionResult CheckConnection(Session session)
public static ActionResult OnServerInstall(Session session)
{
string testConnectionString = session["AUTHENTICATIONTYPE"].Equals("Windows Authentication") ? GetConnectionString(session["SERVERNAME"], "master") : GetConnectionString(session["SERVERNAME"], "master", session["LOGIN"], session["PASSWORD"]);
if (CheckConnection(testConnectionString))
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.InstallServer);
}
[CustomAction]
public static ActionResult OnEServerInstall(Session session)
{
session["CORRECTCONNECTION"] = "1";
session["CONNECTIONSTRING"] = session["AUTHENTICATIONTYPE"].Equals("Windows Authentication") ? GetConnectionString(session["SERVERNAME"], session["DATABASENAME"]) : GetConnectionString(session["SERVERNAME"], session["DATABASENAME"], session["LOGIN"], session["PASSWORD"]);
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.InstallEnterpriseServer);
}
[CustomAction]
public static ActionResult OnPortalInstall(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.InstallPortal);
}
// Remove.
[CustomAction]
public static ActionResult OnServerRemove(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.RemoveServer);
}
[CustomAction]
public static ActionResult OnEServerRemove(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.RemoveEnterpriseServer);
}
[CustomAction]
public static ActionResult OnPortalRemove(Session session)
{
PopUpDebugger();
return ProcessInstall(session, WiXInstallType.RemovePortal);
}
// Other.
[CustomAction]
public static ActionResult SetEServerUrlUI(Session session)
{
var Ctx = session;
Ctx["PI_ESERVER_URL"] = string.Format("http://{0}:{1}/", Ctx["PI_ESERVER_IP"], Ctx["PI_ESERVER_PORT"]);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult RecapListUI(Session session)
{
const string F_WSP = "WebsitePanel";
const string F_Server = "ServerFeature";
const string F_EServer = "EnterpriseServerFeature";
const string F_Portal = "PortalFeature";
const string F_Scheduler = "SchedulerServiceFeature";
const string F_WDPosrtal = "WDPortalFeature";
var S_Install = new List<string> { "Copy WebsitePanel Server files", "Add WebsitePanel Server website" };
var ES_Install = new List<string> { "Copy WebsitePanel Enterprise Server files", "Install WebsitePanel database and updates", "Add WebsitePanel Enterprise Server website" };
var P_Install = new List<string> { "Copy WebsitePanel Portal files", "Add WebsitePanel Enterprise Portal website" };
var SCH_Install = new List<string> { "Copy WebsitePanel Scheduler Service files", "Install Scheduler Service Windows Service" };
var WDP_Install = new List<string> { "Copy WebsitePanel WebDav Portal files" };
var S_Uninstall = new List<string> { "Delete WebsitePanel Server files", "Remove WebsitePanel Server website" };
var ES_Uninstall = new List<string> { "Delete WebsitePanel Enterprise Server files", "Keep WebsitePanel database and updates", "Remove WebsitePanel Enterprise Server website" };
var P_Uninstall = new List<string> { "Delete WebsitePanel Portal files", "Remove WebsitePanel Enterprise Portal website" };
var SCH_Uninstall = new List<string> { "Delete WebsitePanel Scheduler Service files", "Remove Scheduler Service Windows Service" };
var WDP_Uninstall = new List<string> { "Delete WebsitePanel WebDav Portal files" };
var RecapList = new List<string>();
var EmptyList = new List<string>();
var Ctx = session;
RecapListReset(Ctx);
foreach (var Feature in Ctx.Features)
{
switch (Feature.Name)
{
case F_WSP:
break;
case F_Server:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? S_Install : /*S_Uninstall*/ EmptyList);
break;
case F_EServer:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? ES_Install : /*ES_Uninstall*/ EmptyList);
break;
case F_Portal:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? P_Install : /*P_Uninstall*/ EmptyList);
break;
case F_Scheduler:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? SCH_Install : /*SCH_Uninstall*/ EmptyList);
break;
case F_WDPosrtal:
RecapList.AddRange(Feature.RequestState == InstallState.Local ? WDP_Install : /*WDP_Uninstall*/ EmptyList);
break;
default:
break;
}
}
RecapListAdd(Ctx, RecapList.ToArray());
return ActionResult.Success;
}
[CustomAction]
public static ActionResult DatabaseConnectionValidateUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidateDbNameUI(Ctx, out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult ServerAdminValidateUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidatePasswordUI(Ctx, "SERVERADMIN", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult ServerValidateADUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidateADUI(Ctx, "PI_SERVER", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult EServerValidateADUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidateADUI(Ctx, "PI_ESERVER", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult PortalValidateADUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidateADUI(Ctx, "PI_PORTAL", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult ServerAccessValidateUI(Session session)
{
var Ctx = session;
bool Valid = true;
string Msg;
ValidationReset(Ctx);
Valid = ValidatePasswordUI(Ctx, "SERVER_ACCESS", out Msg);
ValidationMsg(Ctx, Msg);
ValidationStatus(Ctx, Valid);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult SqlServerListUI(Session session)
{
var Ctx = session;
var SrvList = new ComboBoxCtrl(Ctx, "DB_SERVER");
foreach (var Srv in GetSqlInstances())
SrvList.AddItem(Srv);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult DbListUI(Session session)
{
string tmp;
var Ctrl = new ComboBoxCtrl(session, "DB_SELECT");
if (CheckConnection(session["DB_CONN"], out tmp))
foreach (var Db in GetDbList(ConnStr: session["DB_CONN"], ForbiddenNames: SysDb))
{
Ctrl.AddItem(Db);
session["DB_SELECT"] = Db; // Adds available DBs to installer log.
}
else
{
session["CORRECTCONNECTION"] = "0";
session["DB_SELECT"] = "";
return ActionResult.Success;
}
[CustomAction]
public static ActionResult CheckConnectionUI(Session session)
{
string ConnStr = session["DB_AUTH"].Equals("Windows Authentication") ? GetConnectionString(session["DB_SERVER"], "master") :
GetConnectionString(session["DB_SERVER"], "master", session["DB_LOGIN"], session["DB_PASSWORD"]);
string msg;
bool Result = CheckConnection(ConnStr, out msg);
session["DB_CONN_CORRECT"] = Result ? "1" : "0";
session["DB_CONN"] = Result ? ConnStr : "";
session["DB_CONN_MSG"] = msg;
return ActionResult.Success;
}
[CustomAction]
public static ActionResult FinalizeInstall(Session session)
{
var connectionString = GetCustomActionProperty(session, "ConnectionString").Replace(CustomDataDelimiter, ";");
/*var connectionString = GetCustomActionProperty(session, "ConnectionString").Replace(CustomDataDelimiter, ";");
var serviceFolder = GetCustomActionProperty(session, "ServiceFolder");
var previousConnectionString = GetCustomActionProperty(session, "PreviousConnectionString").Replace(CustomDataDelimiter, ";");
var previousCryptoKey = GetCustomActionProperty(session, "PreviousCryptoKey");
@ -85,7 +278,7 @@ namespace WebsitePanel.WIXInstaller
ChangeConfigString("/configuration/connectionStrings/add[@name='EnterpriseServer']", "connectionString", connectionString, serviceFolder);
ChangeConfigString("/configuration/appSettings/add[@key='WebsitePanel.CryptoKey']", "value", previousCryptoKey, serviceFolder);
InstallService(serviceFolder);
InstallService(serviceFolder);*/
return ActionResult.Success;
}
@ -93,7 +286,7 @@ namespace WebsitePanel.WIXInstaller
[CustomAction]
public static ActionResult FinalizeUnInstall(Session session)
{
UnInstallService();
// UnInstallService();
return ActionResult.Success;
}
@ -105,7 +298,7 @@ namespace WebsitePanel.WIXInstaller
session["SERVICEFOLDER"] = session["INSTALLFOLDER"];
var servicePath = SecurityUtils.GetServicePath("WebsitePanel Scheduler");
var servicePath = /*SecurityUtils.GetServicePath("WebsitePanel Scheduler")*/"";
if (!string.IsNullOrEmpty(servicePath))
{
@ -138,6 +331,52 @@ namespace WebsitePanel.WIXInstaller
return ActionResult.Success;
}
[CustomAction]
public static ActionResult PrereqCheck(Session session)
{
string Msg;
var Ctx = Tool.GetSetupVars(session);
var ros = Adapter.CheckOS(Ctx, out Msg);
AddLog(session, Msg);
var riis = Adapter.CheckIIS(Ctx, out Msg);
AddLog(session, Msg);
var raspnet = Adapter.CheckASPNET(Ctx, out Msg);
AddLog(session, Msg);
session[Prop.REQ_OS] = ros == CheckStatuses.Success ? YesNo.Yes : YesNo.No;
session[Prop.REQ_IIS] = riis == CheckStatuses.Success ? YesNo.Yes : YesNo.No; ;
session[Prop.REQ_ASPNET] = raspnet == CheckStatuses.Success ? YesNo.Yes : YesNo.No; ;
session[Prop.REQ_SERVER] = YesNo.Yes;
session[Prop.REQ_ESERVER] = YesNo.Yes;
session[Prop.REQ_PORTAL] = YesNo.Yes;
session[Prop.REQ_WDPORTAL] = YesNo.Yes;
return ActionResult.Success;
}
[CustomAction]
public static ActionResult PrereqCheckUI(Session session)
{
var ListView = new ListViewCtrl(session, "REQCHECKLIST");
AddCheck(ListView, session, Prop.REQ_OS);
AddCheck(ListView, session, Prop.REQ_IIS);
AddCheck(ListView, session, Prop.REQ_ASPNET);
AddCheck(ListView, session, Prop.REQ_SERVER);
AddCheck(ListView, session, Prop.REQ_ESERVER);
AddCheck(ListView, session, Prop.REQ_PORTAL);
AddCheck(ListView, session, Prop.REQ_WDPORTAL);
return ActionResult.Success;
}
[CustomAction]
public static ActionResult FillIpListUI(Session session)
{
var Ctrls = new[]{ new ComboBoxCtrl(session, "PI_SERVER_IP"),
new ComboBoxCtrl(session, "PI_ESERVER_IP"),
new ComboBoxCtrl(session, "PI_PORTAL_IP") };
foreach (var Ip in GetIpList())
foreach (var Ctrl in Ctrls)
Ctrl.AddItem(Ip);
return ActionResult.Success;
}
#endregion
private static void InstallService(string installFolder)
{
try
@ -204,7 +443,6 @@ namespace WebsitePanel.WIXInstaller
}
}
private static void StopService(string serviceName)
{
var sc = new ServiceController(serviceName);
@ -229,36 +467,30 @@ namespace WebsitePanel.WIXInstaller
private static string GetConnectionString(string serverName, string databaseName)
{
return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName).Replace(";", CustomDataDelimiter);
return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName)/*.Replace(";", CustomDataDelimiter)*/;
}
private static string GetConnectionString(string serverName, string databaseName, string login, string password)
{
return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password).Replace(";", CustomDataDelimiter);
return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password)/*.Replace(";", CustomDataDelimiter)*/;
}
private static bool CheckConnection(string connectionString)
static bool CheckConnection(string ConnStr, out string Info)
{
Info = string.Empty;
bool Result = false;
using (var Conn = new SqlConnection(ConnStr))
{
var connection = new SqlConnection(connectionString);
bool result = true;
try
{
connection.Open();
Conn.Open();
Result = true;
}
catch (Exception)
catch (Exception ex)
{
result = false;
}
finally
{
if (connection != null && connection.State == ConnectionState.Open)
{
connection.Close();
Info = ex.Message;
}
}
return result;
return Result;
}
private static string GetCustomActionProperty(Session session, string key)
@ -270,5 +502,235 @@ namespace WebsitePanel.WIXInstaller
return string.Empty;
}
private static void AddCheck(ListViewCtrl view, Session session, string PropertyID)
{
view.AddItem(session[PropertyID] == YesNo.Yes, session[PropertyID + "_TITLE"]);
}
static IList<string> GetSqlInstances()
{
var Result = new List<string>();
using (var Src = SqlDataSourceEnumerator.Instance.GetDataSources())
{
foreach (DataRow Row in Src.Rows)
{
var Instance = Row["InstanceName"].ToString();
Result.Add((string.IsNullOrWhiteSpace(Instance) ? "" : (Instance + "\\")) + Row["ServerName"].ToString());
}
}
return Result;
}
static IEnumerable<string> GetDbList(string ConnStr, IList<string> ForbiddenNames = null)
{
using (var Conn = new SqlConnection(ConnStr))
{
Conn.Open();
var Cmd = Conn.CreateCommand();
Cmd.CommandText = "SELECT name FROM master..sysdatabases";
if (ForbiddenNames != null && ForbiddenNames.Count > 0)
Cmd.CommandText += string.Format(" WHERE name NOT IN ({0})", string.Join(", ", ForbiddenNames.Select(x => string.Format("'{0}'", x))));
var Result = Cmd.ExecuteReader();
while (Result.Read())
yield return Result["name"].ToString();
}
}
static IEnumerable<string> GetIpList()
{
foreach (var Ni in NetworkInterface.GetAllNetworkInterfaces())
if (Ni.OperationalStatus == OperationalStatus.Up && (Ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||
Ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 ||
Ni.NetworkInterfaceType == NetworkInterfaceType.Loopback))
foreach (var IpInfo in Ni.GetIPProperties().UnicastAddresses)
if (IpInfo.Address.AddressFamily == AddressFamily.InterNetwork)
yield return IpInfo.Address.ToString();
}
internal static void AddLog(Session Ctx, string Msg)
{
AddTo(Ctx, "PI_PREREQ_LOG", Msg);
}
internal static void AddTo(Session Ctx, string TextProp, string Msg)
{
if (!string.IsNullOrWhiteSpace(Msg))
{
string tmp = Ctx[TextProp];
if (string.IsNullOrWhiteSpace(tmp))
Ctx[TextProp] = Msg;
else
Ctx[TextProp] = tmp + Environment.NewLine + Msg;
}
}
internal static void ValidationReset(Session Ctx)
{
Ctx["VALIDATE_OK"] = "0";
Ctx["VALIDATE_MSG"] = "Error occurred.";
}
internal static void ValidationStatus(Session Ctx, bool Value)
{
Ctx["VALIDATE_OK"] = Value ? YesNo.Yes : YesNo.No;
}
internal static void ValidationMsg(Session Ctx, string Msg)
{
AddTo(Ctx, "VALIDATE_MSG", Msg);
}
internal static bool PasswordValidate(string Password, string Confirm, out string Msg)
{
Msg = string.Empty;
bool Result = false;
if (string.IsNullOrWhiteSpace(Password))
Msg = "Empty password.";
else if (Password != Confirm)
Msg = "Password does not match the confirm password. Type both passwords again.";
else
Result = true;
return Result;
}
internal static bool ValidatePasswordUI(Session Ctx, string Ns, out string Msg)
{
string p1 = Ctx[Ns + "_PASSWORD"];
string p2 = Ctx[Ns + "_PASSWORD_CONFIRM"];
return PasswordValidate(p1, p2, out Msg);
}
internal static bool ValidateADDomainUI(Session Ctx, string Ns, out string Msg)
{
bool Result = default(bool);
bool check = Ctx[Ns + "_CREATE_AD"] == YesNo.Yes;
string name = Ctx[Ns + "_DOMAIN"];
if (check && string.IsNullOrWhiteSpace(name))
{
Result = false;
Msg = "The domain can't be empty.";
}
else
{
Result = true;
Msg = string.Empty;
}
return Result;
}
internal static bool ValidateADLoginUI(Session Ctx, string Ns, out string Msg)
{
bool Result = default(bool);
string name = Ctx[Ns + "_LOGIN"];
if (string.IsNullOrWhiteSpace(name))
{
Result = false;
Msg = "The login can't be empty.";
}
else
{
Result = true;
Msg = string.Empty;
}
return Result;
}
internal static bool ValidateADUI(Session Ctx, string Ns, out string Msg)
{
bool Result = true;
if (!ValidateADDomainUI(Ctx, Ns, out Msg))
Result = false;
else if (!ValidateADLoginUI(Ctx, Ns, out Msg))
Result = false;
else if (!ValidatePasswordUI(Ctx, Ns, out Msg))
Result = false;
return Result;
}
internal static bool ValidateDbNameUI(Session Ctx, out string Msg)
{
Msg = string.Empty;
var Result = true;
string DbName = Ctx["DB_DATABASE"];
if (string.IsNullOrWhiteSpace(DbName))
{
Result = false;
Msg = "The database name can't be empty.";
}
return Result;
}
internal static void RecapListReset(Session Ctx)
{
Ctx["CUSTOM_INSTALL_TEXT"] = string.Empty;
}
internal static void RecapListAdd(Session Ctx, params string[] Msgs)
{
foreach (var Msg in Msgs)
AddTo(Ctx, "CUSTOM_INSTALL_TEXT", Msg); ;
}
internal static string GetProperty(Session Ctx, string Property)
{
if (Ctx.CustomActionData.ContainsKey(Property))
return Ctx[Property];
else
return string.Empty;
}
private static ActionResult ProcessInstall(Session Ctx, WiXInstallType InstallType)
{
IWiXSetup Install = null;
try
{
Ctx.AttachToSetupLog();
switch (InstallType)
{
case WiXInstallType.InstallServer:
Install = ServerSetup.Create(Ctx.CustomActionData, SetupActions.Install);
break;
case WiXInstallType.RemoveServer:
Install = ServerSetup.Create(Ctx.CustomActionData, SetupActions.Uninstall);
break;
case WiXInstallType.InstallEnterpriseServer:
Install = EServerSetup.Create(Ctx.CustomActionData, SetupActions.Install);
break;
case WiXInstallType.RemoveEnterpriseServer:
Install = EServerSetup.Create(Ctx.CustomActionData, SetupActions.Uninstall);
break;
case WiXInstallType.InstallPortal:
Install = PortalSetup.Create(Ctx.CustomActionData, SetupActions.Install);
break;
case WiXInstallType.RemovePortal:
Install = PortalSetup.Create(Ctx.CustomActionData, SetupActions.Uninstall);
break;
default:
throw new NotImplementedException();
}
Install.Run();
}
catch (WiXSetupException we)
{
Ctx.Log("Expected exception: " + we.ToString());
return ActionResult.Failure;
}
catch (Exception ex)
{
Ctx.Log(ex.ToString());
return ActionResult.Failure;
}
return ActionResult.Success;
}
[Conditional("DEBUG")]
private static void PopUpDebugger()
{
Debugger.Launch();
}
}
public static class SessionExtension
{
public static void AttachToSetupLog(this Session Ctx)
{
WiXSetup.InstallLogListener(new WiXLogListener(Ctx));
WiXSetup.InstallLogListener(new InMemoryStringLogListener("WIX CA IN MEMORY"));
}
}
internal enum WiXInstallType: byte
{
InstallServer,
InstallEnterpriseServer,
InstallPortal,
RemoveServer,
RemoveEnterpriseServer,
RemovePortal,
RemoveUpdate,
RestoreUpdate
}
}

View file

@ -32,10 +32,25 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<AddPdb Include="$(OutputPath)*.pdb" />
</ItemGroup>
<PropertyGroup>
<IntermediateOutputPath Condition=" '$(PlatformName)' == 'AnyCPU' ">$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<IntermediateOutputPath Condition=" '$(PlatformName)' != 'AnyCPU' ">$(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<CustomActionContents>$(IntermediateOutputPath)$(AssemblyName).pdb;@(AddPdb)</CustomActionContents>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Web.Administration, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\Microsoft.Web.Administration.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.DirectoryServices" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
@ -44,6 +59,12 @@
<Reference Include="Microsoft.Deployment.WindowsInstaller" />
</ItemGroup>
<ItemGroup>
<Compile Include="Common\InMemoryStringLogListener.cs" />
<Compile Include="Common\Tool.cs" />
<Compile Include="Common\Prop.cs" />
<Compile Include="Common\Util\IListCtrl.cs" />
<Compile Include="Common\WiXLogListener.cs" />
<Compile Include="Common\YesNo.cs" />
<Compile Include="CustomAction.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="CustomAction.config" />
@ -53,6 +74,10 @@
<Project>{3951C0EC-BD98-450E-B228-CDBE5BD4AD49}</Project>
<Name>WebsitePanel.Setup</Name>
</ProjectReference>
<ProjectReference Include="..\WebsitePanel.Installer.Core\WebsitePanel.Installer.Core.csproj">
<Project>{0E4A3F5B-0BB1-4F63-863D-7B0182B378CF}</Project>
<Name>WebsitePanel.Installer.Core</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(WixCATargetsPath)" />

View file

@ -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
@ -10685,3 +10716,229 @@ SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSearchObject')
DROP PROCEDURE GetSearchObject
GO
CREATE PROCEDURE [dbo].[GetSearchObject]
(
@ActorID int,
@UserID int,
@FilterColumn nvarchar(50) = '',
@FilterValue nvarchar(50) = '',
@StatusID int,
@RoleID int,
@SortColumn nvarchar(50),
@StartRow int,
@MaximumRows int = 0,
@Recursive bit,
@ColType nvarchar(50) = ''
)
AS
IF dbo.CheckActorUserRights(@ActorID, @UserID) = 0
RAISERROR('You are not allowed to access this account', 16, 1)
DECLARE @columnUsername nvarchar(20)
SET @columnUsername = 'Username'
DECLARE @columnEmail nvarchar(20)
SET @columnEmail = 'Email'
DECLARE @columnCompanyName nvarchar(20)
SET @columnCompanyName = 'CompanyName'
DECLARE @columnFullName nvarchar(20)
SET @columnFullName = 'FullName'
DECLARE @curUsers cursor
DECLARE @curSpace cursor
DECLARE @sqlSpace nvarchar(2000)
DECLARE @sqlUsers nvarchar(2000)
DECLARE @sqlReturn nvarchar(2000)
IF @FilterColumn = '' AND @FilterValue <> ''
SET @FilterColumn = 'TextSearch'
SET @sqlUsers = '
DECLARE @HasUserRights bit
SET @HasUserRights = dbo.CheckActorUserRights(@ActorID, @UserID)
DECLARE @Users TABLE
(
ItemPosition int IDENTITY(0,1),
UserID int
)
INSERT INTO @Users (UserID)
SELECT
U.UserID
FROM UsersDetailed AS U
WHERE
U.UserID <> @UserID AND U.IsPeer = 0 AND
(
(@Recursive = 0 AND OwnerID = @UserID) OR
(@Recursive = 1 AND dbo.CheckUserParent(@UserID, U.UserID) = 1)
)
AND ((@StatusID = 0) OR (@StatusID > 0 AND U.StatusID = @StatusID))
AND ((@RoleID = 0) OR (@RoleID > 0 AND U.RoleID = @RoleID))
AND @HasUserRights = 1
SET @curValue = cursor local for
SELECT
U.ItemID,
U.TextSearch,
U.ColumnType,
''Users'' as FullType,
0 as PackageID
FROM @Users AS TU
INNER JOIN
(
SELECT ItemID, TextSearch, ColumnType
FROM(
SELECT U0.UserID as ItemID, U0.Username as TextSearch, @columnUsername as ColumnType
FROM dbo.Users AS U0
UNION
SELECT U1.UserID as ItemID, U1.Email as TextSearch, @columnEmail as ColumnType
FROM dbo.Users AS U1
UNION
SELECT U2.UserID as ItemID, U2.CompanyName as TextSearch, @columnCompanyName as ColumnType
FROM dbo.Users AS U2
UNION
SELECT U3.UserID as ItemID, U3.FirstName + '' '' + U3.LastName as TextSearch, @columnFullName as ColumnType
FROM dbo.Users AS U3) as U
WHERE TextSearch<>'' '' OR ISNULL(TextSearch, 0) > 0
)
AS U ON TU.UserID = U.ItemID'
SET @sqlUsers = @sqlUsers + ' open @curValue'
exec sp_executesql @sqlUsers, N'@UserID int, @FilterValue nvarchar(50), @ActorID int, @Recursive bit, @StatusID int, @RoleID int, @columnUsername nvarchar(20), @columnEmail nvarchar(20), @columnCompanyName nvarchar(20), @columnFullName nvarchar(20), @curValue cursor output',
@UserID, @FilterValue, @ActorID, @Recursive, @StatusID, @RoleID, @columnUsername, @columnEmail, @columnCompanyName, @columnFullName, @curValue=@curUsers output
SET @sqlSpace = '
DECLARE @ItemsService TABLE
(
ItemID int
)
INSERT INTO @ItemsService (ItemID)
SELECT
SI.ItemID
FROM ServiceItems AS SI
INNER JOIN Packages AS P ON P.PackageID = SI.PackageID
INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
WHERE
dbo.CheckUserParent(@UserID, P.UserID) = 1
DECLARE @ItemsDomain TABLE
(
ItemID int
)
INSERT INTO @ItemsDomain (ItemID)
SELECT
D.DomainID
FROM Domains AS D
INNER JOIN Packages AS P ON P.PackageID = D.PackageID
INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
WHERE
dbo.CheckUserParent(@UserID, P.UserID) = 1
SET @curValue = cursor local for
SELECT
SI.ItemID as ItemID,
SI.ItemName as TextSearch,
STYPE.DisplayName as ColumnType,
SI.ItemName as FullType,
SI.PackageID as PackageID
FROM @ItemsService AS I
INNER JOIN ServiceItems AS SI ON I.ItemID = SI.ItemID
INNER JOIN ServiceItemTypes AS STYPE ON SI.ItemTypeID = STYPE.ItemTypeID
WHERE STYPE.Searchable = 1
UNION
SELECT
D.DomainID AS ItemID,
D.DomainName as TextSearch,
''Domain'' as ColumnType,
''Domain'' as FullType,
D.PackageID as PackageID
FROM @ItemsDomain AS I
INNER JOIN Domains AS D ON I.ItemID = D.DomainID
WHERE D.IsDomainPointer=0'
SET @sqlSpace = @sqlSpace + ' open @curValue'
exec sp_executesql @sqlSpace, N'@UserID int, @FilterValue nvarchar(50), @ActorID int, @curValue cursor output',
@UserID, @FilterValue, @ActorID, @curValue=@curSpace output
SET @sqlReturn = '
DECLARE @ItemID int
DECLARE @TextSearch nvarchar(500)
DECLARE @ColumnType nvarchar(50)
DECLARE @FullType nvarchar(50)
DECLARE @PackageID int
DECLARE @EndRow int
SET @EndRow = @StartRow + @MaximumRows
DECLARE @ItemsAll TABLE
(
ItemPosition int IDENTITY(1,1),
ItemID int,
TextSearch nvarchar(500),
ColumnType nvarchar(50),
FullType nvarchar(50),
PackageID int
)
FETCH NEXT FROM @curSpaceValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @ItemsAll(ItemID, TextSearch, ColumnType, FullType, PackageID)
VALUES(@ItemID, @TextSearch, @ColumnType, @FullType, @PackageID)
FETCH NEXT FROM @curSpaceValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID
END
FETCH NEXT FROM @curUsersValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @ItemsAll(ItemID, TextSearch, ColumnType, FullType, PackageID)
VALUES(@ItemID, @TextSearch, @ColumnType, @FullType, @PackageID)
FETCH NEXT FROM @curUsersValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID
END
DECLARE @ItemsReturn TABLE
(
ItemPosition int IDENTITY(1,1),
ItemID int,
TextSearch nvarchar(500),
ColumnType nvarchar(50),
FullType nvarchar(50),
PackageID int
)
INSERT INTO @ItemsReturn(ItemID, TextSearch, ColumnType, FullType, PackageID)
SELECT ItemID, TextSearch, ColumnType, FullType, PackageID
FROM @ItemsAll AS IA'
IF @FilterValue <> ''
SET @sqlReturn = @sqlReturn + ' WHERE IA.' + @FilterColumn + ' LIKE @FilterValue '
IF @SortColumn <> '' AND @SortColumn IS NOT NULL
SET @sqlReturn = @sqlReturn + ' ORDER BY ' + @SortColumn + ' '
SET @sqlReturn = @sqlReturn + '
SELECT COUNT(ItemID) FROM @ItemsReturn;
SELECT DISTINCT(ColumnType) FROM @ItemsReturn;
SELECT ItemPosition, ItemID, TextSearch, ColumnType, FullType, PackageID
FROM @ItemsReturn AS IR WHERE (1 = 1)
'
IF @MaximumRows > 0
SET @sqlReturn = @sqlReturn + ' AND IR.ItemPosition BETWEEN @StartRow AND @EndRow';
IF @ColType <> ''
SET @sqlReturn = @sqlReturn + ' AND ColumnType in ( ' + @ColType + ' ) ';
exec sp_executesql @sqlReturn, N'@StartRow int, @MaximumRows int, @FilterValue nvarchar(50), @curSpaceValue cursor, @curUsersValue cursor',
@StartRow, @MaximumRows, @FilterValue, @curSpace, @curUsers
CLOSE @curSpace
DEALLOCATE @curSpace
CLOSE @curUsers
DEALLOCATE @curUsers
RETURN

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>

Binary file not shown.

View 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>

View file

@ -3,7 +3,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.7</ProductVersion>
<ProductVersion>3.9</ProductVersion>
<ProjectGuid>3f3f1c39-6719-4862-bb45-4c227f13b821</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>WebsitePanel.LocalizationToolkit</OutputName>

View file

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34014
// Runtime Version:4.0.30319.34209
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.

View file

@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.34014
' Runtime Version:4.0.30319.34209
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.

View file

@ -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

View file

@ -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) {

View file

@ -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);

View file

@ -907,6 +907,27 @@ namespace WebsitePanel.EnterpriseServer {
return ((System.Data.DataSet)(results[0]));
}
/// <remarks/>
/// //TODO START
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetSearchObject", 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 System.Data.DataSet GetSearchObject(int userId, string filterColumn, string filterValue, int statusId, int roleId, string sortColumn, int startRow, int maximumRows, string colType)
{
object[] results = this.Invoke("GetSearchObject", new object[] {
userId,
filterColumn,
filterValue,
statusId,
roleId,
sortColumn,
startRow,
maximumRows,
colType
});
return ((System.Data.DataSet)(results[0]));
}
//TODO END
/// <remarks/>
public void SearchServiceItemsPagedAsync(int userId, int itemTypeId, string filterValue, string sortColumn, int startRow, int maximumRows) {
this.SearchServiceItemsPagedAsync(userId, itemTypeId, filterValue, sortColumn, startRow, maximumRows, null);

View file

@ -139,6 +139,27 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@recursive", recursive));
}
//TODO START
public static DataSet GetSearchObject(int actorId, int userId, string filterColumn, string filterValue,
int statusId, int roleId, string sortColumn, int startRow, int maximumRows, string colType, bool recursive)
{
return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "GetSearchObject",
new SqlParameter("@actorId", actorId),
new SqlParameter("@UserID", userId),
new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
new SqlParameter("@statusId", statusId),
new SqlParameter("@roleId", roleId),
new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
new SqlParameter("@startRow", startRow),
new SqlParameter("@maximumRows", maximumRows),
new SqlParameter("@recursive", recursive),
new SqlParameter("@ColType", colType));
}
//TODO END
public static DataSet GetUsersSummary(int actorId, int userId)
{
return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,

View file

@ -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);

View file

@ -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"))
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,

View file

@ -317,6 +317,15 @@ namespace WebsitePanel.EnterpriseServer
sortColumn, startRow, maximumRows);
}
//TODO START
public static DataSet GetSearchObject(int userId, string filterColumn, string filterValue,
int statusId, int roleId, string sortColumn, int startRow, int maximumRows, string colType)
{
return DataProvider.GetSearchObject(SecurityContext.User.UserId, userId,
filterColumn, filterValue, statusId, roleId, sortColumn, startRow, maximumRows, colType, false);
}
//TODO END
public static DataSet GetPackageQuotas(int packageId)
{
return DataProvider.GetPackageQuotas(SecurityContext.User.UserId, packageId);

View file

@ -57,11 +57,6 @@ namespace WebsitePanel.EnterpriseServer
}
}
}
// send mail message
// MailHelper.SendMessage(mailFrom, mailTo, mailSubject, mailBody, false);
}
}
}

View file

@ -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">

View file

@ -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>

View file

@ -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]

View file

@ -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

View file

@ -134,6 +134,16 @@ namespace WebsitePanel.EnterpriseServer
sortColumn, startRow, maximumRows);
}
//TODO START
[WebMethod]
public DataSet GetSearchObject(int userId, string filterColumn, string filterValue,
int statusId, int roleId, string sortColumn, int startRow, int maximumRows, string colType)
{
return PackageController.GetSearchObject(userId, filterColumn, filterValue, statusId, roleId, sortColumn, startRow, maximumRows, colType);
}
//TODO END
[WebMethod]
public DataSet GetPackagesPaged(int userId, string filterColumn, string filterValue,
string sortColumn, int startRow, int maximumRows)

View file

@ -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);
}
}

View file

@ -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; }

View file

@ -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;
}

View file

@ -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]));
}
}
}
}

View file

@ -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);
}
}
}

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0"?>
<configuration>
<!-- Custom configuration sections -->
<configSections>
@ -7,34 +7,34 @@
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings,Microsoft.Practices.EnterpriseLibrary.Caching"/>
</configSections>
<appSettings>
<add key="WebsitePanel.HyperV.UseDiskPartClearReadOnlyFlag" value="false" />
<add key="WebsitePanel.Exchange.ClearQueryBaseDN" value="false" />
<add key="WebsitePanel.Exchange.enableSP2abp" value="false" />
<add key="SCVMMServerName" value="" />
<add key="SCVMMServerPort" value="" />
<add key="WebsitePanel.HyperV.UseDiskPartClearReadOnlyFlag" value="false"/>
<add key="WebsitePanel.Exchange.ClearQueryBaseDN" value="false"/>
<add key="WebsitePanel.Exchange.enableSP2abp" value="false"/>
<add key="SCVMMServerName" value=""/>
<add key="SCVMMServerPort" value=""/>
</appSettings>
<system.diagnostics>
<switches>
<add name="Log" value="2" />
<add name="Log" value="2"/>
<!-- 0 - Off, 1 - Error, 2 - Warning, 3 - Info, 4 - Verbose -->
</switches>
<trace autoflush="true">
<listeners>
<add name="DefaultListener" type="WebsitePanel.Server.Utils.EventLogTraceListener, WebsitePanel.Server.Utils" initializeData="WebsitePanel" />
<add name="DefaultListener" type="WebsitePanel.Server.Utils.EventLogTraceListener, WebsitePanel.Server.Utils" initializeData="WebsitePanel"/>
<!-- Writes log to the file
<add name="DefaultListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="WebsitePanel.Server.log" />
-->
<remove name="Default" />
<remove name="Default"/>
</listeners>
</trace>
</system.diagnostics>
<!-- Caching Configuration -->
<cachingConfiguration defaultCacheManager="Default Cache Manager">
<backingStores>
<add name="inMemory" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching" />
<add name="inMemory" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching"/>
</backingStores>
<cacheManagers>
<add name="Default Cache Manager" expirationPollFrequencyInSeconds="43200" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory" />
<add name="Default Cache Manager" expirationPollFrequencyInSeconds="43200" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory"/>
</cacheManagers>
</cachingConfiguration>
<!-- WebsitePanel Configuration -->
@ -42,127 +42,72 @@
<!-- Security settings -->
<security>
<!-- Perform security check -->
<enabled value="true" />
<enabled value="true"/>
<!-- Server password -->
<password value="+uxnDOdf55yuH6iZYXgYAxsfIBw=" />
<password value="+uxnDOdf55yuH6iZYXgYAxsfIBw="/>
</security>
</websitepanel.server>
<system.web>
<!-- Disable any authentication -->
<authentication mode="None" />
<authentication mode="None"/>
<!-- Correct HTTP runtime settings -->
<httpRuntime executionTimeout="3600" maxRequestLength="16384" />
<httpRuntime executionTimeout="3600" maxRequestLength="16384"/>
<!-- Set globalization settings -->
<globalization culture="en-US" uiCulture="en" requestEncoding="UTF-8" responseEncoding="UTF-8" fileEncoding="UTF-8" />
<globalization culture="en-US" uiCulture="en" requestEncoding="UTF-8" responseEncoding="UTF-8" fileEncoding="UTF-8"/>
<!-- Web Services settings -->
<webServices>
<protocols>
<remove name="HttpPost" />
<remove name="HttpPostLocalhost" />
<remove name="HttpGet" />
<remove name="HttpPost"/>
<remove name="HttpPostLocalhost"/>
<remove name="HttpGet"/>
</protocols>
<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3" />
<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3"/>
</webServices>
<compilation debug="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</controls>
</pages>
<httpHandlers>
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
<compilation debug="true" targetFramework="4.0"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
<!-- WSE 3.0 settings -->
<microsoft.web.services3>
<diagnostics>
<trace enabled="false" input="InputTrace.webinfo" output="OutputTrace.webinfo" />
<trace enabled="false" input="InputTrace.webinfo" output="OutputTrace.webinfo"/>
</diagnostics>
<messaging>
<maxMessageLength value="-1" />
<mtom serverMode="optional" clientMode="On" />
<maxMessageLength value="-1"/>
<mtom serverMode="optional" clientMode="On"/>
</messaging>
<security>
<securityTokenManager>
<add type="WebsitePanel.Server.ServerUsernameTokenManager, WebsitePanel.Server" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken" />
<add type="WebsitePanel.Server.ServerUsernameTokenManager, WebsitePanel.Server" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken"/>
</securityTokenManager>
<timeToleranceInSeconds value="86400" />
<timeToleranceInSeconds value="86400"/>
</security>
<policy fileName="WsePolicyCache.Config" />
<policy fileName="WsePolicyCache.Config"/>
</microsoft.web.services3>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IVirtualMachineManagementService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="10485760" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" />
<transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
<message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default"/>
</security>
</binding>
<binding name="WSHttpBinding_IMonitoringService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="10485760" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" />
<transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
<message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5" />
<providerOption name="WarnAsError" value="false" />
</compiler>
</compilers>
</system.codedom>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<remove name="ScriptModule" />
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated" />
<remove name="ScriptHandlerFactory" />
<remove name="ScriptHandlerFactoryAppServices" />
<remove name="ScriptResource" />
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</handlers>
</system.webServer>
<runtime>
<assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin/Crm2011;bin/Crm2013;bin/Exchange2013;bin/Sharepoint2013;bin/Lync2013;bin/Lync2013HP;bin/Dns2012;bin/IceWarp;bin/IIs80;bin/HyperV2012R2;bin/Crm2015" />
<probing privatePath="bin/Crm2011;bin/Crm2013;bin/Exchange2013;bin/Sharepoint2013;bin/Lync2013;bin/Lync2013HP;bin/Dns2012;bin/IceWarp;bin/IIs80;bin/HyperV2012R2;bin/Crm2015"/>
</assemblyBinding>
</runtime>
</configuration>

View file

@ -17,7 +17,7 @@
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile />
<UseIISExpress>false</UseIISExpress>
<IISExpressSSLPort />
@ -80,6 +80,7 @@
<Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Web" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.Extensions" />
@ -235,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" />
@ -259,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" />
@ -433,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>

View file

@ -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;
}
}

View file

@ -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";

View file

@ -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)

View file

@ -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(

View file

@ -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";
}

View file

@ -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);
}

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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">

View file

@ -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.

View file

@ -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\" />

View file

@ -0,0 +1 @@
<%@ WebHandler Language="C#" Class="WebsitePanel.WebPortal.WebsitePanelAjaxHandler,WebsitePanel.Portal.Modules" %>

View file

@ -29,6 +29,9 @@
<NestedSpacesPage>NestedSpaces</NestedSpacesPage>
<UsersSearchPage>SearchUsers</UsersSearchPage>
<SpacesSearchPage>SearchSpaces</SpacesSearchPage>
<!--TODO START-->
<SearchObjectPage>SearchObject</SearchObjectPage>
<!--TODO END-->
<LoggedUserAccountPage>LoggedUserDetails</LoggedUserAccountPage>
<!-- Skins and Containers -->
<PortalSkin>Browse2.ascx</PortalSkin>

View file

@ -25,6 +25,14 @@
</Controls>
</ModuleDefinition>
<!--TODO START-->
<ModuleDefinition id="SearchObject">
<Controls>
<Control key="" src="WebsitePanel/SearchObject.ascx" title="SearchObject" type="View" />
</Controls>
</ModuleDefinition>
<!--TODO END-->
<!-- User Account -->
<ModuleDefinition id="LoggedUserDetails">
<Controls>

View file

@ -32,6 +32,14 @@
</Content>
</Page>
<!--TODO START-->
<Page name="SearchObject" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True" skin="Browse1.ascx">
<Content id="ContentPane">
<Module moduleDefinitionID="SearchObject" title="SearchObject" icon="sphere_zoom_48.png" container="Edit.ascx" />
</Content>
</Page>
<!--TODO END-->
<Page name="Home" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" skin="Browse3.ascx" align="right">
<Content id="LeftPane">
<Module moduleDefinitionID="UserAccountMenu" title="UserMenu" container="Clear.ascx">

View file

@ -711,6 +711,9 @@
<data name="ModuleTitle.SearchSpaces" xml:space="preserve">
<value>Search Hosting Spaces</value>
</data>
<data name="ModuleTitle.SearchObject" xml:space="preserve">
<value>Search Objects</value>
</data>
<data name="ModuleTitle.SearchUsers" xml:space="preserve">
<value>Search User Accounts</value>
</data>

View file

@ -141,6 +141,12 @@
<data name="PageTitle.SearchSpaces" xml:space="preserve">
<value>{user} - Search Hosting Spaces</value>
</data>
<data name="PageName.SearchObject" xml:space="preserve">
<value>Search Objects</value>
</data>
<data name="PageTitle.SearchObject" xml:space="preserve">
<value>{user} - Search Objects</value>
</data>
<data name="PageName.Home" xml:space="preserve">
<value>Account Home</value>
</data>

View file

@ -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>

View file

@ -308,3 +308,75 @@ p.warningText {font-size:14px; color:Red; text-align:center;}
.LinkText {color:#428bca;}
.WrapText { white-space: normal;}
.chosen-container { margin-top: -30px; }
.ui-autocomplete {z-index: 200 !important; }
.ui-button {
padding: 5px 5px;
margin: 3px;
background: #20A0D0;
color: white;
border: 1px solid #2080A0;
float: left;
cursor: pointer;
display: block;
}
.ui-button:hover {
background: #20B0E0;
}
.ui-popupdialog {
display: none;
position: absolute;
background-color: #FFF;
border: 1px solid #C0C0C0;
border: 1px solid rgba(0, 0, 0, 0.15);
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
background-clip: padding-box;
}
.ui-popupdialog .title {
padding: 5px;
background: #F8F8F8;
}
.ui-popupdialog .content {
padding: 10px;
}
.ui-popupdialog .actions {
padding: 5px;
border-top: 1px solid #C0C0C0;
background: #F0F0F0;
}
.ui-menu {
background-color: #FFF;
border: 1px solid #C0C0C0;
border: 1px solid rgba(0, 0, 0, 0.15);
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
background-clip: padding-box;
}
.ui-menu-item {
}
.ui-widget-content {
background: #FFF;
}
.ui-corner-all {
border-radius: 0px;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
}
.ui-menu-item .ui-state-hover
{
background: #f0f0f0;
border-radius: 0px;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
border-color: #f0f0f0;
color: #000;
}
.ui-menu-item:hover {
background-color: #f0f0f0;
}

View file

@ -842,6 +842,13 @@ namespace WebsitePanel.Portal
return PortalConfiguration.SiteSettings["SpacesSearchPage"];
}
//TODO START
public static string GetObjectSearchPageId()
{
return PortalConfiguration.SiteSettings["SearchObjectPage"];
}
//TODO END
public static string GetNestedSpacesPageId()
{
return PortalConfiguration.SiteSettings["NestedSpacesPage"];

View file

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
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">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</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.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:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</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>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="gvType.Header" xml:space="preserve">
<value>Type</value>
</data>
<data name="gvText.Header" xml:space="preserve">
<value>Search text</value>
</data>
<data name="gvFullType.Header" xml:space="preserve">
<value>Full Type</value>
</data>
</root>

View file

@ -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>

View file

@ -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>

View file

@ -0,0 +1,68 @@
using System;
using System.Web;
using System.Web.Script.Serialization;
using System.Collections.Generic;
using System.Data;
using WebsitePanel.Portal;
namespace WebsitePanel.WebPortal
{
public class WebsitePanelAjaxHandler : IHttpHandler
{
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext context)
{
String filterValue = context.Request.Params["term"];
String fullType = context.Request.Params["fullType"];
String columnType = context.Request.Params["columnType"];
if (fullType == "Spaces")
{
String strItemType = context.Request.Params["itemType"];
int itemType = Int32.Parse(strItemType);
DataSet dsObjectItems = ES.Services.Packages.SearchServiceItemsPaged(PanelSecurity.EffectiveUserId, itemType,
String.Format("%{0}%", filterValue),
"",0, 100);
DataTable dt = dsObjectItems.Tables[1];
List<Dictionary<string, string>> dataList = new List<Dictionary<string, string>>();
for (int i = 0; i < dt.Rows.Count; ++i)
{
DataRow row = dt.Rows[i];
Dictionary<string, string> obj = new Dictionary<string, string>();
obj["ColumnType"] = "PackageName";
obj["TextSearch"] = row["PackageName"].ToString();
obj["FullType"] = "Space";
dataList.Add(obj);
}
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(dataList);
context.Response.ContentType = "text/plain";
context.Response.Write(json);
}
else
{
DataSet dsObjectItems = ES.Services.Packages.GetSearchObject(PanelSecurity.EffectiveUserId, null,
String.Format("%{0}%", filterValue),
0, 0, "", 0, 100, columnType);
DataTable dt = dsObjectItems.Tables[2];
List<Dictionary<string, string>> dataList = new List<Dictionary<string, string>>();
for (int i = 0; i < dt.Rows.Count; ++i)
{
DataRow row = dt.Rows[i];
Dictionary<string, string> obj = new Dictionary<string, string>();
obj["ColumnType"] = row["ColumnType"].ToString();
obj["TextSearch"] = row["TextSearch"].ToString();
obj["FullType"] = row["FullType"].ToString();
dataList.Add(obj);
}
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(dataList);
context.Response.ContentType = "text/plain";
context.Response.Write(json);
}
}
}
};

View file

@ -36,6 +36,7 @@ using System.Web.Caching;
using WebsitePanel.EnterpriseServer;
using System.Collections;
using System.Collections.Generic;
namespace WebsitePanel.Portal
{
@ -244,5 +245,33 @@ namespace WebsitePanel.Portal
return dsServiceItemsPaged.Tables[1];
}
#endregion
//TODO START
#region Service Items Paged Search
DataSet dsObjectItemsPaged;
public int SearchObjectItemsPagedCount(string filterColumn, string filterValue, string colType)
{
return (int)dsObjectItemsPaged.Tables[0].Rows[0][0];
}
public DataTable SearchObjectItemsPaged(int maximumRows, int startRowIndex, string sortColumn,
string filterColumn, string filterValue, string colType)
{
dsObjectItemsPaged = ES.Services.Packages.GetSearchObject(PanelSecurity.EffectiveUserId, filterColumn,
String.Format("%{0}%", filterValue),
0, 0, sortColumn, startRowIndex, maximumRows, colType);
return dsObjectItemsPaged.Tables[2];
}
public DataTable SearchObjectTypes(string filterColumn, string filterValue, string sortColumn)
{
dsObjectItemsPaged = ES.Services.Packages.GetSearchObject(PanelSecurity.EffectiveUserId, filterColumn,
String.Format("%{0}%", filterValue),
0, 0, sortColumn, 0, 0, "");
return dsObjectItemsPaged.Tables[1];
}
//TODO END
#endregion
}
}

View file

@ -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>

View file

@ -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>

View file

@ -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;

View file

@ -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);

View file

@ -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>

View file

@ -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;
}

View file

@ -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>

View file

@ -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: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>

View file

@ -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;
}
}
}

View file

@ -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>

View file

@ -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"));

View file

@ -0,0 +1,125 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SearchObject.ascx.cs" Inherits="WebsitePanel.Portal.SearchObject" %>
<%@ Import Namespace="WebsitePanel.Portal" %>
<script>
var estop = function (e) {
if (!e) e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return e;
}
var CPopupDialog = function (el, e) {
if (typeof el == 'string')
el = document.getElementById(el);
e = estop(e);
var oldclick = document.body.onclick;
el.onclick = estop;
function close() {
el.style.display = "none";
document.body.onclick = oldclick;
}
function show(x, y) {
el.style.left = x ? x : e.clientX + document.documentElement.scrollLeft + "px";
el.style.top = y ? y : e.clientY + document.documentElement.scrollTop + "px";
el.style.display = "block";
document.body.onclick = close;
}
show();
};
$(document).ready(function () {
var loadFilters = function()
{
var typesSelected = JSON.parse($("#tbFilters").val());
$("#mydialog input[rel]").each(function () {
var rel = $(this).attr('rel');
if (typesSelected.indexOf(rel) >= 0)
$(this).val("1");
})
}
$("#btnSelectFilter").click(function(e)
{
var typesSelected = [];
$("#mydialog input[rel]").each(function () {
var val = $(this).attr("checked");
if (val) typesSelected.push($(this).attr('rel'));
});
$("#tbFilters").val(JSON.stringify(typesSelected));
document.forms[0].submit();
})
loadFilters();
});
</script>
<asp:GridView id="gvObjects" runat="server" AutoGenerateColumns="False"
AllowPaging="True" AllowSorting="True"
CssSelectorClass="NormalGridView"
DataSourceID="odsObjectsPaged" EnableViewState="False"
EmptyDataText="gvObjects">
<Columns>
<asp:TemplateField HeaderText="gvType" SortExpression="ColumnType">
<HeaderTemplate>
<a href="javascript: void(0)" onclick="CPopupDialog('mydialog',event)">Type</a>
</HeaderTemplate>
<ItemTemplate>
<%# Eval("ColumnType") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="TextSearch" HeaderText="gvText" HeaderStyle-Wrap="false">
<ItemTemplate>
<asp:hyperlink id=lnkUser runat="server" NavigateUrl='<%# GetItemPageUrl((string)Eval("FullType"), (string)Eval("ColumnType"), (int)Eval("ItemID"), (int)Eval("PackageID")) %>'>
<%# Eval("TextSearch") %>
</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FullType" HtmlEncode="false" SortExpression="FullType" HeaderText="gvFullType">
<HeaderStyle Wrap="false" />
</asp:BoundField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="odsObjectsPaged" runat="server" EnablePaging="True" SelectCountMethod="SearchObjectItemsPagedCount"
SelectMethod="SearchObjectItemsPaged" SortParameterName="sortColumn" TypeName="WebsitePanel.Portal.PackagesHelper" OnSelected="odsObjectPaged_Selected" OnSelecting="odsObjectPaged_Selecting">
<SelectParameters>
<asp:QueryStringParameter Name="filterColumn" QueryStringField="Criteria" />
<asp:QueryStringParameter Name="filterValue" QueryStringField="Query" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="odsObjectTypes" runat="server" EnablePaging="false"
SelectMethod="SearchObjectTypes" SortParameterName="sortColumn" TypeName="WebsitePanel.Portal.PackagesHelper">
<SelectParameters>
<asp:QueryStringParameter Name="filterColumn" QueryStringField="Criteria" />
<asp:QueryStringParameter Name="filterValue" QueryStringField="Query" />
</SelectParameters>
</asp:ObjectDataSource>
<div id="mydialog" class="ui-popupdialog">
<div class="title">Select filter</div>
<div class="content">
<asp:GridView runat="server" DataSourceID="odsObjectTypes" SortParameterName="sortColumn" ShowHeader="false" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<input type="checkbox" runat="server" rel='<%# Eval("ColumnType") %>'></input>
<%# Eval("ColumnType") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<div class="actions">
<a id="btnSelectFilter" href="javascript: void(0)" class="ui-button">Apply</a>
<a onclick="document.body.onclick.apply(event)" href="javascript: void(0)" class="ui-button">Close</a>
<div style="clear:both"></div>
</div>
<asp:TextBox ClientIDMode="Static" ID="tbFilters" type="hidden" runat="server"></asp:TextBox>
</div>

Some files were not shown because too many files have changed in this diff Show more