Initial project's source code check-in.
This commit is contained in:
commit
b03b0b373f
4573 changed files with 981205 additions and 0 deletions
44306
WebsitePanel/Database/install_db.sql
Normal file
44306
WebsitePanel/Database/install_db.sql
Normal file
File diff suppressed because it is too large
Load diff
1347
WebsitePanel/Database/update_db.sql
Normal file
1347
WebsitePanel/Database/update_db.sql
Normal file
File diff suppressed because it is too large
Load diff
BIN
WebsitePanel/Lib/AjaxControlToolkit.dll
Normal file
BIN
WebsitePanel/Lib/AjaxControlToolkit.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/AntiXssLibrary.dll
Normal file
BIN
WebsitePanel/Lib/AntiXssLibrary.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/Ionic.Zip.Reduced.dll
Normal file
BIN
WebsitePanel/Lib/Ionic.Zip.Reduced.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
WebsitePanel/Lib/Microsoft.Practices.ObjectBuilder.dll
Normal file
BIN
WebsitePanel/Lib/Microsoft.Practices.ObjectBuilder.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/Microsoft.ReportViewer.Common.dll
Normal file
BIN
WebsitePanel/Lib/Microsoft.ReportViewer.Common.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
WebsitePanel/Lib/Microsoft.ReportViewer.WebForms.dll
Normal file
BIN
WebsitePanel/Lib/Microsoft.ReportViewer.WebForms.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/Microsoft.Web.Services3.dll
Normal file
BIN
WebsitePanel/Lib/Microsoft.Web.Services3.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/References/Directi/OrderBoxCoreLib.dll
Normal file
BIN
WebsitePanel/Lib/References/Directi/OrderBoxCoreLib.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/References/Directi/OrderBoxDomainsLib.dll
Normal file
BIN
WebsitePanel/Lib/References/Directi/OrderBoxDomainsLib.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
WebsitePanel/Lib/References/Microsoft/Microsoft.Crm.dll
Normal file
BIN
WebsitePanel/Lib/References/Microsoft/Microsoft.Crm.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
WebsitePanel/Lib/References/Microsoft/Microsoft.Exchange.Net.dll
Normal file
BIN
WebsitePanel/Lib/References/Microsoft/Microsoft.Exchange.Net.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/References/Microsoft/Microsoft.SharePoint.dll
Normal file
BIN
WebsitePanel/Lib/References/Microsoft/Microsoft.SharePoint.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/References/Microsoft/Microsoft.Storage.Vds.dll
Normal file
BIN
WebsitePanel/Lib/References/Microsoft/Microsoft.Storage.Vds.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
WebsitePanel/Lib/System.Management.Automation.dll
Normal file
BIN
WebsitePanel/Lib/System.Management.Automation.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/System.Web.Extensions.Design.dll
Normal file
BIN
WebsitePanel/Lib/System.Web.Extensions.Design.dll
Normal file
Binary file not shown.
BIN
WebsitePanel/Lib/System.Web.Extensions.dll
Normal file
BIN
WebsitePanel/Lib/System.Web.Extensions.dll
Normal file
Binary file not shown.
178
WebsitePanel/Readme.htm
Normal file
178
WebsitePanel/Readme.htm
Normal file
|
@ -0,0 +1,178 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head>
|
||||
<title>WebsitePanel - Readme</title>
|
||||
<style type="text/css">
|
||||
.style1 {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>
|
||||
WebsitePanel - Readme</h1>
|
||||
<p>
|
||||
WebsitePanel is a hosting control panel for Windows servers.</p>
|
||||
|
||||
<h2>
|
||||
License</h2>
|
||||
<p>
|
||||
WebsitePanel is released under BSD license. Please see LICENSE.txt file in the
|
||||
root folder of this project.</p>
|
||||
|
||||
<h2>
|
||||
Project Structure</h2>
|
||||
<p>
|
||||
The project has the following folders structure:</p>
|
||||
<ul>
|
||||
<li><strong>\Trunk</strong> - project version currently in development<ul>
|
||||
<li><strong>\Sources</strong> - project source codes.</li>
|
||||
<li><strong>\Lib</strong> - all referenced 3rd-party assemblies required to build
|
||||
the solution are placed in this folder.</li>
|
||||
<li><strong>\Database</strong> - the folder contains SQL scripts for creating
|
||||
initial database structure and its update to the current version.<ul>
|
||||
<li><strong>install_db.sql</strong> - SQL script to create full database structure
|
||||
for the <em>previous</em> release.</li>
|
||||
<li><strong>update_db.sql</strong> - SQL script to update database structure for the
|
||||
revious release to the current one.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>\Docs</strong> - project documentation<ul>
|
||||
<li><strong>\Developer</strong> - technical documentation (specs, diagrams, POCs,
|
||||
etc.) for developers working on the project</li>
|
||||
<li><strong>\User</strong> - user-related documentation (user guides, how-tows,
|
||||
etc.) for end-users using the product</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>\Build</strong> - folder containing solution assemblies that
|
||||
are referenced from other projects</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>\Releases</strong> - contains all project releases</li>
|
||||
<li><strong>\Branches</strong> - contains project branches for proof-of-concepts,
|
||||
new development, bug fixing, etc.</li>
|
||||
<li><strong>LICENSE.txt</strong> - project license</li>
|
||||
<li><strong>Readme.htm</strong> - the file you are reading right now</li>
|
||||
<li><strong>ReleaseNotes.htm</strong> - project release notes</li>
|
||||
</ul>
|
||||
<h2>
|
||||
Build How-To</h2>
|
||||
<h3>
|
||||
Downloading 3rd-Party Libraries</h3>
|
||||
<p class="style1">
|
||||
SimpleDNS API</p>
|
||||
<p>
|
||||
SDNSAPI.dll is required to build "WebsitePanel.Providers.DNS.SimpleDNS50"
|
||||
project.</p>
|
||||
<p>
|
||||
Download "Simple DNS Plus API for .NET and COM" library from "Downloads" section
|
||||
on <a href="http://www.simpledns.com">www.simpledns.com</a> web site web site (at the
|
||||
time of writing direct link to this library is
|
||||
<a href="http://www.simpledns.com/outbox/sdnsapi-setup.exe">
|
||||
http://www.simpledns.com/outbox/sdnsapi-setup.exe</a>). Install the library and
|
||||
then copy SDNSAPI.dll (located in "C:\Program Files (x86)\Simple DNS Plus API
|
||||
for .NET and COM" by default) from its installation folder to "Lib" folder of
|
||||
WebsitePanel project.</p>
|
||||
<p class="style1">
|
||||
MySQL .NET Connector</p>
|
||||
<p>
|
||||
MySQL .NET Connector is required to build
|
||||
"WebsitePanel.Providers.Database.MySql" project.</p>
|
||||
<p>
|
||||
Go to <a href="http://www.mysql.com">www.mysql.com</a> web site and download the
|
||||
latest release of "MySQL .NET Connector" library from there (at the time of
|
||||
writing it is located at <a href="http://dev.mysql.com/downloads/connector/net/">
|
||||
http://dev.mysql.com/downloads/connector/net/</a>). Install MySQL connector and
|
||||
then copy "MySQL.Data.dll" assembly from its installation folder to "Lib" folder
|
||||
of WebsitePanel project.</p>
|
||||
<p class="style1">
|
||||
OrderBox (Directi API)</p>
|
||||
<p>
|
||||
Certain libraries are required to compile "WebsitePanel.Plugins.Directi" project
|
||||
of Enterprise Server solution.</p>
|
||||
<p>
|
||||
Open <a href="http://40083.myorderbox.com/kb/servlet/KBServlet/faq589.html">
|
||||
http://40083.myorderbox.com/kb/servlet/KBServlet/faq589.html</a> page and
|
||||
download the following files:</p>
|
||||
<ul>
|
||||
<li>NET_CoreExamples_vX.zip</li>
|
||||
|
||||
<li>NET_DomainsExamples_vX.zip</li>
|
||||
</ul>
|
||||
<p>
|
||||
Unpack both archives to some temporary location and then copy the following
|
||||
files to "Lib" folder of WebsitePanel project:</p>
|
||||
<ul>
|
||||
<li>OrderBoxCoreLib.dll</li>
|
||||
<li>OrderBoxDomainsLib.dll</li>
|
||||
</ul>
|
||||
|
||||
<h3>Set the Reference Paths to 3rd-Party Libraries</h3>
|
||||
<p>After placing the required 3rd-Party Libraries into "Lib" folder
|
||||
of WebsitePanel project, open WebsitePanel.Server solution (WebsitePanel.Server.sln)
|
||||
and set ReferencePath of "WebsitePanel.Providers.Database.MySQL" and "WebsitePanel.Providers.DNS.SimpleDNS50" projects
|
||||
to the absolute path of the "Lib" folder. See "Reference Path Is Incorrect" paragraph of
|
||||
<a href="http://msdn.microsoft.com/en-us/library/ayds71se%28v=VS.100%29.aspx" target="_blank">Troubleshooting Broken References</a>
|
||||
article for help.<br />
|
||||
Do the same for "WebsitePanel.Plugins.Directi" project of WebsitePanel.EnterpriseServer solution (WebsitePanel.EnterpriseServer.sln).</p>
|
||||
|
||||
<h3>
|
||||
Building Solutions</h3>
|
||||
<p>
|
||||
Build WebsitePanel solutions in the following order:</p>
|
||||
<ul>
|
||||
<li>WebsitePanel.Server.sln</li>
|
||||
<li>WebsitePanel.EnterpriseServer.sln</li>
|
||||
<li>WebsitePanel.WebPortal.sln</li>
|
||||
</ul>
|
||||
<h3>
|
||||
Creating Database</h3>
|
||||
<p>
|
||||
In order to run WebsitePanel Enterprise Server it's required to create SQL
|
||||
Server database to hold its internal data.</p>
|
||||
<ol>
|
||||
<li>Using SQL Server Management Studio or any other database tool create a database
|
||||
called "WebsitePanel".</li>
|
||||
<li>Execute "install_db.sql" script containing DDL and initial data from "\Database"
|
||||
folder of WebsitePanel project against created database.</li>
|
||||
<li>Create "WebsitePanel" SQL user account and grant it "db_owner" rights on
|
||||
"WebsitePanel" database.</li>
|
||||
<li>Open "web.config" file in the root of Enterprise Server application and update
|
||||
CryptoKey (appSettings/add/WebsitePanel.CryptoKey element) value there. It might
|
||||
be arbitrary non-empty string.</li>
|
||||
<li>Run WebsitePanel.PasswordEncoder tool available in "Tools" folder and generate
|
||||
hash for "serveradmin" account password using CryptoKey and "Encrypt" button.</li>
|
||||
<li>Update "Password" column in "Users" database table with generated hash for the
|
||||
record with UserID = 1 ("serveradmin" account).</li>
|
||||
<li>In Enterprise Server's web.config update database connection string with proper
|
||||
settings in order to connect to WebsitePanel database.</li>
|
||||
</ol>
|
||||
<h3>
|
||||
Configuring Web Applications</h3>
|
||||
<p>
|
||||
It's assumed below that root of WebsitePanel project is pointing to "C:\Projects\WebsitePanel"
|
||||
folder.</p>
|
||||
<ul>
|
||||
<li>Create "WebsitePanel Server" web site (with 127.0.0.1:9003 binding) using IIS Management Tool with the root
|
||||
folder pointing to "C:\Projects\WebsitePanel\Trunk\Sources\WebsitePanel.Server".</li>
|
||||
<li>Create new user account called "WebsitePanelServer" and update process identity
|
||||
with it for "WebsitePanel Server" application pool. This user account must have
|
||||
required privileges to manage computer resources (by default be a member of
|
||||
local "Administrators" group) and also must be a member of "IIS_IUSRS" (IIS 7).</li>
|
||||
<li>Create "WebsitePanel Enterprise Server" web site (with 127.0.0.1:9002
|
||||
binding) using IIS Management Tool with
|
||||
the root folder pointing to "C:\Projects\WebsitePanel\Trunk\Sources\WebsitePanel.EnterpriseServer".</li>
|
||||
<li>Create "WebsitePanel Web Portal" web site (with <all unassigned>:9001
|
||||
binding) using IIS Management Tool with the
|
||||
root folder pointing to "C:\Projects\WebsitePanel\Trunk\Sources\WebsitePanel.WebPortal".</li>
|
||||
<li>Open "App_Data\SiteSettings.config" file in "WebsitePanel.WebPortal" folder and
|
||||
update URL to Enterprise Server (http://127.0.0.1:9002 by default).</li>
|
||||
<li>Open web.config in the root of WebsitePanel.Server application and update
|
||||
"server access password" ("websitepanel.server/security/password" element). You
|
||||
should be able to generate password SHA1 hash using WebsitePanel.PasswordEncoder
|
||||
tool.</li>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
149
WebsitePanel/ReleaseNotes.htm
Normal file
149
WebsitePanel/ReleaseNotes.htm
Normal file
|
@ -0,0 +1,149 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>WebsitePanel - Release Notes</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>
|
||||
WebsitePanel - Release Notes</h1>
|
||||
<p>
|
||||
<strong>March 15, 2010 - v1.2.0 (Beta)</strong></p>
|
||||
<ul>
|
||||
<li>Added: Support for managing private Hyper-V cloud solution implemented with System Center Virtual Machine Manager 2008 R2, System Center Operations Manager 2007 and Dynamic Data Center Toolkit v3 (Beta) (contributed by Austen Knowledge Group)</li>
|
||||
<li>Added: Support of Helicon Ape module for securing files & folders on web-site level (contributed by <a href="http://www.helicontech.com/" target="_blank">HeliconTech</a>)</li>
|
||||
<li>Added: Support for Razor files extensions (*.cshtml, *.vbhtml) in File Manager</li>
|
||||
<li>Added: "Notify Overused Databases" scheduled task (contributed by <a href="http://social.msdn.microsoft.com/profile/yoda-ict" target="_blank">yoda-ict</a>)</li>
|
||||
<li>Added: Display size for MySQL databases on Edit Database page (contributed by <a href="http://social.msdn.microsoft.com/profile/yoda-ict" target="_blank">yoda-ict</a>)</li>
|
||||
<li>Updated: Project code base migrated to .NET Framework 4</li>
|
||||
<li>Fixed: Minor corrections in default landing page supplied by WebsitePanel for newly created web sites (contributed by <a href="http://social.msdn.microsoft.com/profile/jegor" target="_blank">jegor</a>)</li>
|
||||
<li>Fixed: Customer's first and last names with localized characters are not properly rendered on some pages</li>
|
||||
<li>Fixed: Issue with unlimited mailbox quotas in SmarterMail 7 service provider</li>
|
||||
<li>Fixed: Dynamics CRM 4 rollup updates are not applied for new organizations being created through WebsitePanel</li>
|
||||
<li>Fixed: Original deployment error messages with sensitive information are shown to a user instead of a generic error message in MS Web App Gallery module</li>
|
||||
<li>Fixed: Dedicated IP Addresses are incorrectly distributed via Virtual Servers</li>
|
||||
<li>Fixed: SQL User is unable to login with "Browse Database" feature if its password has '=' character (contributed by <a href="http://social.msdn.microsoft.com/profile/webio" target="_blank">webio</a>)</li>
|
||||
<li>Fixed: Wrong default button on "Create New Exchange 2010 Organization" page</li>
|
||||
<li>Fixed: Missing required validation for Forwarding field on Edit Mailbox Account properties page (contributed by <a href="http://social.msdn.microsoft.com/profile/webio"
|
||||
target="_blank">webio</a>)</li>
|
||||
<li>Fixed: Adjust "maxRequestLength" attribute in "httpRuntime" element in WSP Enterprise Server & Server web.config files to support large files uploading</li>
|
||||
</ul>
|
||||
<p>
|
||||
<strong>December 9, 2010 - v1.1.1 (Beta)</strong></p>
|
||||
<ul>
|
||||
<li>Added: SSL Management (contributed by <a href="http://social.msdn.microsoft.com/profile/onionman/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/threads"
|
||||
target="_blank">OnionMan</a>)</li>
|
||||
<li>Added: Domain aliases changed to allow using existing DNS
|
||||
domains to setup aliases and pointers (contributed by <a href="http://social.msdn.microsoft.com/profile/yoda-ict/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/thread/0053f21c-f7ee-4e97-8fd5-0e84cb046cc2"
|
||||
target="_blank">yoda-ict</a>)</li>
|
||||
<li>Added: "Announcements" posting mode for Mail Lists in hMail Server Service Provider</li>
|
||||
<li>Added: Personal Information and Signature sections added in hMail Mail Account settings</li>
|
||||
<li>Added: SMTP authentication for Mail Lists in hMail Server Provider</li>
|
||||
<li>Fixed: Missing information whether Administrator password is set or not in hMail
|
||||
Provider Settings</li>
|
||||
<li>Fixed: Issue with setting up a correct type handler for WebsitePanel.IisModules.SecureFolders
|
||||
HTTP authentication module in IIS 7 (contributed by <a href="http://social.msdn.microsoft.com/profile/yoda-ict/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/thread/0053f21c-f7ee-4e97-8fd5-0e84cb046cc2"
|
||||
target="_blank">yoda-ict</a>)</li>
|
||||
<li>Fixed: Issue with Mail List members removed after clicking “Save List” button in
|
||||
hMail Server Service Provider</li>
|
||||
<li>Fixed: Issue when a domain alias could not be enabled for hMail Server Service Provider</li>
|
||||
<li>Fixed: Issue when forwarding address is incorrectly set for a mail account in hMail
|
||||
Server Service Provider</li>
|
||||
<li>Fixed: Issue when integrity check is not performed if to add a contact in Hosted
|
||||
Exchange Service Provider</li>
|
||||
<li>Fixed: Issue when a user is unable to remove subscribers from the list or group
|
||||
In Merak Mail Service Provider</li>
|
||||
</ul>
|
||||
<p>
|
||||
<strong>November 17, 2010 - v1.1.0</strong></p>
|
||||
<ul>
|
||||
<li>Added Exchange 2010 SP1 Hosting Mode module</li>
|
||||
<li>Added SharePoint 2010 module (contributed by <a href="http://social.msdn.microsoft.com/profile/webio/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/threads"
|
||||
target="_blank">Webio</a>)</li>
|
||||
<li>Added SmarterMail 7 module (contributed by <a href="http://social.msdn.microsoft.com/profile/yoda-ict/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/thread/0053f21c-f7ee-4e97-8fd5-0e84cb046cc2"
|
||||
target="_blank">yoda-ict</a>)</li>
|
||||
<li>Added SmarterStats 6 module (contributed by <a href="http://social.msdn.microsoft.com/profile/yoda-ict/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/thread/0053f21c-f7ee-4e97-8fd5-0e84cb046cc2"
|
||||
target="_blank">yoda-ict</a>)</li>
|
||||
<li>Added: Addition to get the correct domain name inside the TaskManager (contributed
|
||||
by <a href="http://social.msdn.microsoft.com/profile/yoda-ict/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/thread/0053f21c-f7ee-4e97-8fd5-0e84cb046cc2"
|
||||
target="_blank">yoda-ict</a>)</li>
|
||||
<li>Added: Workaround for Global Address list to show up after Exchange 2010 SP1 installation
|
||||
without /hosting switch. This workaround is not switched on by default; to switch
|
||||
it on, please follow the instructions provided in this <a href="http://social.msdn.microsoft.com/Forums/en-US/wspsupport/thread/342db243-a74b-4374-a848-d9edfbc7f072"
|
||||
target="_blank">post</a>.</li>
|
||||
<li>Added: WebsitePanel.IISModules (<a href="http://iismodules.codeplex.com/" target="_blank">http://iismodules.codeplex.com</a>)</li>
|
||||
<li>Added: meta:resourcekey to BillingCyclesEditCycle.ascx and BillingCyclesAddCycle.ascx</li>
|
||||
<li>Updated WSP Portal web.config in 1.1 upgrade script to enable custom error</li>
|
||||
<li>Fixed: MDaemon alias import fails: Directory hardcoded in the module (contributed
|
||||
by <a href="https://sourceforge.net/tracker/?func=detail&atid=1330292&aid=3032904&group_id=316247"
|
||||
target="_blank">mcrook</a>)</li>
|
||||
<li>Fixed: When updating Exchange account general settings an empty account password
|
||||
is stored into WSP database (contributed by <a href="http://social.msdn.microsoft.com/profile/webio/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/threads"
|
||||
target="_blank">Webio</a>)</li>
|
||||
<li>Fixed: Bug with mail aliases (MDaemon) (contributed by <a href="https://sourceforge.net/tracker/?func=detail&atid=1330292&aid=3032904&group_id=316247"
|
||||
target="_blank">mcrook</a>)</li>
|
||||
<li>Fixed: SmarterMail 7: Max mailbox size -1 (contributed by <a href="http://social.msdn.microsoft.com/profile/yoda-ict/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/thread/0053f21c-f7ee-4e97-8fd5-0e84cb046cc2"
|
||||
target="_blank">yoda-ict</a>)</li>
|
||||
<li>Fixed: Not showing emails (MDaemon ODBC database) (contributed by <a href="https://sourceforge.net/tracker/?func=detail&atid=1330292&aid=3032904&group_id=316247"
|
||||
target="_blank">mcrook</a>)</li>
|
||||
<li>Fixed: Show apps for all languages in Microsoft Web App Gallery module</li>
|
||||
<li>Fixed: Microsoft Web Application Gallery 1.0.1 module - images missing when apps
|
||||
catalog or an individual app page is displayed</li>
|
||||
<li>Fixed: Exchange 2010 SP1 Beta module unable to create organization when plan quotas
|
||||
are set to unlimited</li>
|
||||
<li>Fixed: Customer login account gets error while clicking on "Export report" button
|
||||
under Disk Space Report</li>
|
||||
<li>Fixed: Microsoft SQL 2008 user creation with some characters fails</li>
|
||||
<li>Fixed: Unable to restore Microsoft SQL Server 2008 R2 databases</li>
|
||||
<li>Fixed: Zip Files Error in File Manager and related modules: cannot zip 65535 files
|
||||
or greater</li>
|
||||
<li>Fixed: Localization Toolkit Import is not working</li>
|
||||
<li>Fixed: Problems calculating disk space for Exchange-enabled spaces</li>
|
||||
<li>Fixed: Negative value is allowed in "Max Mailbox Size, MB" field when
|
||||
create or edit a mail box</li>
|
||||
<li>Fixed: Service provider properties are not updated/Missing UpdateServiceProperties
|
||||
stored procedure in the database when do a fresh install</li>
|
||||
<li>Fixed: Exchange 2010 SP1 Hosted Edition provider renamed to Exchange 2010 SP1 Hosting
|
||||
Mode</li>
|
||||
</ul>
|
||||
<p>
|
||||
<strong>September 3, 2010 - v1.0.2</strong></p>
|
||||
<ul>
|
||||
<li>Added Exchange 2010 SP1 Module Beta</li>
|
||||
<li>Added SharePoint 2010 Module Beta (contributed by <a href="http://social.msdn.microsoft.com/profile/webio/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/threads">
|
||||
Webio</a>)</li>
|
||||
<li>Added SmarterMail 7 Module Beta (contributed by <a href="http://social.msdn.microsoft.com/profile/yoda-ict/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/wspdiscuss/thread/0053f21c-f7ee-4e97-8fd5-0e84cb046cc2">
|
||||
yoda-ict</a>)</li>
|
||||
<li>Added Exchange Import Tool for WSP 1.0 - WSP 1.0.2</li>
|
||||
<li>Added “Disable Mailbox Size Edit” quota for “Mail” group</li>
|
||||
<li>Fixed: Zip Files Error: cannot zip 65535 files or greater</li>
|
||||
<li>Fixed: Microsoft Web Application Gallery 1.0.1 images missing bug</li>
|
||||
<li>Fixed: Bug in Mail Aliases for Mdaemon (patch provided by <a href="https://sourceforge.net/tracker/?func=detail&atid=1330292&aid=3032904&group_id=316247">
|
||||
mcrook</a>)</li>
|
||||
</ul>
|
||||
<p>
|
||||
<strong>July 8, 2010 - v1.0.1</strong></p>
|
||||
<ul>
|
||||
<li>Added Windows 7 and Windows Vista support.</li>
|
||||
<li>Added "All unassigned" support for web site bindings.</li>
|
||||
<li>"Instant Alias" is allowed in DNS-less hosting spaces.</li>
|
||||
<li>Improved "Web App Gallery" module:<ul>
|
||||
<li>all application packs are shown, but only those ones with satisfying requirements
|
||||
could be installed</li>
|
||||
<li>application packs are filtered by language and sorted alphabetically</li>
|
||||
<li>added caching for applications graphics</li>
|
||||
<li>re-designed application installation page</li>
|
||||
<li>improved handling of databases and database users</li>
|
||||
<li>improved errors reporting</li>
|
||||
<li>temporary web site URL is displayed on completion screen</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Added for "IIS 7" provider an ability to specify paths to ASP.NET and
|
||||
ASP ISAPIs.</li>
|
||||
</ul>
|
||||
<p>
|
||||
<strong>April 16, 2010 - v1.0</strong></p>
|
||||
<ul>
|
||||
<li>Initial release of WebsitePanel under BSD license.</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
163
WebsitePanel/Resources/build-serveradmin-add.sql
Normal file
163
WebsitePanel/Resources/build-serveradmin-add.sql
Normal file
|
@ -0,0 +1,163 @@
|
|||
-- Start add serveradmin
|
||||
SET IDENTITY_INSERT [dbo].[Users] ON
|
||||
GO
|
||||
INSERT INTO [dbo].[Users]
|
||||
(UserID
|
||||
,[OwnerID]
|
||||
,[RoleID]
|
||||
,[StatusID]
|
||||
,[IsDemo]
|
||||
,[IsPeer]
|
||||
,[Username]
|
||||
,[Password]
|
||||
,[FirstName]
|
||||
,[LastName]
|
||||
,[Email]
|
||||
,[Created]
|
||||
,[Changed]
|
||||
,[Comments]
|
||||
,[SecondaryEmail]
|
||||
,[Address]
|
||||
,[City]
|
||||
,[State]
|
||||
,[Country]
|
||||
,[Zip]
|
||||
,[PrimaryPhone]
|
||||
,[SecondaryPhone]
|
||||
,[Fax]
|
||||
,[InstantMessenger]
|
||||
,[HtmlMail]
|
||||
,[EcommerceEnabled])
|
||||
VALUES
|
||||
(1,
|
||||
NULL,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0
|
||||
,'serveradmin'
|
||||
,''
|
||||
,'Enterprise'
|
||||
,'Administrator'
|
||||
,'serveradmin@myhosting.com'
|
||||
,GETDATE()
|
||||
,GETDATE()
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,''
|
||||
,1
|
||||
,1)
|
||||
GO
|
||||
SET IDENTITY_INSERT [dbo].[Users] OFF
|
||||
GO
|
||||
|
||||
-- system package
|
||||
INSERT INTO [dbo].[Packages]
|
||||
([ParentPackageID]
|
||||
,[UserID]
|
||||
,[PackageName]
|
||||
,[PackageComments]
|
||||
,[ServerID]
|
||||
,[StatusID]
|
||||
,[PlanID]
|
||||
,[PurchaseDate]
|
||||
,[OverrideQuotas])
|
||||
VALUES
|
||||
(null
|
||||
,1
|
||||
,'System'
|
||||
,''
|
||||
,null
|
||||
,1
|
||||
,null
|
||||
,GETDATE()
|
||||
,0)
|
||||
GO
|
||||
|
||||
INSERT INTO [dbo].[PackagesTreeCache] (ParentPackageID, PackageID)
|
||||
VALUES (1,1)
|
||||
GO
|
||||
|
||||
-- scheduled tasks
|
||||
INSERT INTO [dbo].[Schedule]
|
||||
([TaskID]
|
||||
,[PackageID]
|
||||
,[ScheduleName]
|
||||
,[ScheduleTypeID]
|
||||
,[Interval]
|
||||
,[FromTime]
|
||||
,[ToTime]
|
||||
,[StartTime]
|
||||
,[LastRun]
|
||||
,[NextRun]
|
||||
,[Enabled]
|
||||
,[PriorityID]
|
||||
,[HistoriesNumber]
|
||||
,[MaxExecutionTime]
|
||||
,[WeekMonthDay])
|
||||
VALUES
|
||||
('SCHEDULE_TASK_CALCULATE_PACKAGES_DISKSPACE'
|
||||
,1
|
||||
,'Calculate Disk Space'
|
||||
,'Daily'
|
||||
,0
|
||||
,CONVERT(datetime, '1/1/2000 12:00:00 PM')
|
||||
,CONVERT(datetime, '1/1/2000 12:00:00 PM')
|
||||
,CONVERT(datetime, '1/1/2000 12:30:00 PM')
|
||||
,NULL
|
||||
,DATEADD(Hour, 2, GETDATE())
|
||||
,1
|
||||
,'Normal'
|
||||
,7
|
||||
,3600
|
||||
,1)
|
||||
GO
|
||||
INSERT INTO [dbo].[ScheduleParameters] (ScheduleID, ParameterID, ParameterValue)
|
||||
VALUES(1, 'SUSPEND_OVERUSED', 'false')
|
||||
GO
|
||||
|
||||
INSERT INTO [dbo].[Schedule]
|
||||
([TaskID]
|
||||
,[PackageID]
|
||||
,[ScheduleName]
|
||||
,[ScheduleTypeID]
|
||||
,[Interval]
|
||||
,[FromTime]
|
||||
,[ToTime]
|
||||
,[StartTime]
|
||||
,[LastRun]
|
||||
,[NextRun]
|
||||
,[Enabled]
|
||||
,[PriorityID]
|
||||
,[HistoriesNumber]
|
||||
,[MaxExecutionTime]
|
||||
,[WeekMonthDay])
|
||||
VALUES
|
||||
('SCHEDULE_TASK_CALCULATE_PACKAGES_BANDWIDTH'
|
||||
,1
|
||||
,'Calculate Bandwidth'
|
||||
,'Daily'
|
||||
,0
|
||||
,CONVERT(datetime, '1/1/2000 12:00:00 PM')
|
||||
,CONVERT(datetime, '1/1/2000 12:00:00 PM')
|
||||
,CONVERT(datetime, '1/1/2000 12:00:00 PM')
|
||||
,NULL
|
||||
,DATEADD(Hour, 2, GETDATE())
|
||||
,1
|
||||
,'Normal'
|
||||
,7
|
||||
,3600
|
||||
,1)
|
||||
GO
|
||||
INSERT INTO [dbo].[ScheduleParameters] (ScheduleID, ParameterID, ParameterValue)
|
||||
VALUES(2, 'SUSPEND_OVERUSED', 'false')
|
||||
GO
|
||||
-- End add serveradmin
|
1164
WebsitePanel/Resources/build-serveradmin-settings.xml
Normal file
1164
WebsitePanel/Resources/build-serveradmin-settings.xml
Normal file
File diff suppressed because it is too large
Load diff
545
WebsitePanel/Resources/build-store-default-settings.xml
Normal file
545
WebsitePanel/Resources/build-store-default-settings.xml
Normal file
|
@ -0,0 +1,545 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><NewDataSet><xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="Table"><xs:complexType><xs:sequence><xs:element name="SettingsName" type="xs:string" minOccurs="0" /><xs:element name="PropertyName" type="xs:string" minOccurs="0" /><xs:element name="PropertyValue" type="xs:string" minOccurs="0" /></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><Table><SettingsName>ActivateServicesTemplate</SettingsName><PropertyName>CC</PropertyName><PropertyValue>info@acmehosting.com</PropertyValue></Table><Table><SettingsName>ActivateServicesTemplate</SettingsName><PropertyName>From</PropertyName><PropertyValue>support@acmehosting.com</PropertyValue></Table><Table><SettingsName>ActivateServicesTemplate</SettingsName><PropertyName>HtmlBody</PropertyName><PropertyValue>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Activated Service Summary Information</title>
|
||||
<style type="text/css">
|
||||
.Summary { background-color: ##ffffff; padding: 5px; }
|
||||
.Summary .Header { padding: 10px 0px 10px 10px; font-size: 16pt; background-color: ##E5F2FF; color: ##1F4978; border-bottom: solid 2px ##86B9F7; }
|
||||
.Summary A { color: ##0153A4; }
|
||||
.Summary { font-family: Tahoma; font-size: 9pt; }
|
||||
.Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; }
|
||||
.Summary H2 { font-size: 1.2em; }
|
||||
.Summary TABLE { border: solid 1px ##e5e5e5; }
|
||||
.Summary TH,
|
||||
.Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; }
|
||||
.Summary TD { padding: 8px; font-size: 9pt; }
|
||||
.Summary UL LI { font-size: 1.1em; font-weight: bold; }
|
||||
.Summary UL UL LI { font-size: 0.9em; font-weight: normal; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="Summary">
|
||||
|
||||
<a name="top"></a>
|
||||
|
||||
<div class="Header">
|
||||
Activated Service Information
|
||||
</div>
|
||||
|
||||
<p>Hello #customer["FirstName"]#,</p>
|
||||
|
||||
<p>"#service.ServiceName#" service has been activated under your user account
|
||||
and below is the summary information.</p>
|
||||
<a name="overview"></a>
|
||||
<h1>Service Overview</h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td class="Label">Service Name:</td>
|
||||
<td>#service.ServiceName#</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">Created:</td>
|
||||
<td>#service.Created#</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">Setup fee:</td>
|
||||
<td>#service.Currency#&nbsp;#format(service.SetupFee, "0.00")#</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">Recurring fee:</td>
|
||||
<td>#service.Currency#&nbsp;#format(service.RecurringFee, "0.00")#</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
If you have any questions regarding your hosting account, feel free to contact our sales department at any time.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Best regards,<br />
|
||||
ACME Hosting Inc.<br />
|
||||
Web Site: <a href="http://www.acmehosting.com">www.acmehosting.com</a><br />
|
||||
E-Mail: <a href="mailto:support@acmehosting.com">support@acmehosting.com</a></p>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html></PropertyValue></Table><Table><SettingsName>ActivateServicesTemplate</SettingsName><PropertyName>Subject</PropertyName><PropertyValue>Activate Service Notification</PropertyValue></Table><Table><SettingsName>ActivateServicesTemplate</SettingsName><PropertyName>TextBody</PropertyName><PropertyValue>
|
||||
================================
|
||||
Activated Service Information
|
||||
================================
|
||||
|
||||
Hello #Customer["FirstName"]#,
|
||||
|
||||
"#service.ServiceName#" service has been activated under your user account
|
||||
and below is the summary information.
|
||||
|
||||
Service Overview
|
||||
=============
|
||||
Service Name: #service.ServiceName#
|
||||
Created: #service.Created#
|
||||
Setup fee: #service.Currency# #format(service.SetupFee, "0.00")#
|
||||
Recurring fee: #service.Currency# #format(service.RecurringFee, "0.00")#
|
||||
|
||||
If you have any questions regarding your hosting account, feel free to contact our support department at any time.
|
||||
|
||||
Best regards,
|
||||
ACME Hosting Inc.
|
||||
Web Site: http://www.acmehosting.com
|
||||
E-Mail: support@acmehosting.com</PropertyValue></Table><Table><SettingsName>CancelServicesTemplate</SettingsName><PropertyName>CC</PropertyName><PropertyValue>sales@acmehosting.com</PropertyValue></Table><Table><SettingsName>CancelServicesTemplate</SettingsName><PropertyName>From</PropertyName><PropertyValue>support@acmehosting.com</PropertyValue></Table><Table><SettingsName>CancelServicesTemplate</SettingsName><PropertyName>HtmlBody</PropertyName><PropertyValue>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Cancel Service Summary Information</title>
|
||||
<style type="text/css">
|
||||
.Summary { background-color: ##ffffff; padding: 5px; }
|
||||
.Summary .Header { padding: 10px 0px 10px 10px; font-size: 16pt; background-color: ##E5F2FF; color: ##1F4978; border-bottom: solid 2px ##86B9F7; }
|
||||
.Summary A { color: ##0153A4; }
|
||||
.Summary { font-family: Tahoma; font-size: 9pt; }
|
||||
.Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; }
|
||||
.Summary H2 { font-size: 1.2em; }
|
||||
.Summary TABLE { border: solid 1px ##e5e5e5; }
|
||||
.Summary TH,
|
||||
.Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; }
|
||||
.Summary TD { padding: 8px; font-size: 9pt; }
|
||||
.Summary UL LI { font-size: 1.1em; font-weight: bold; }
|
||||
.Summary UL UL LI { font-size: 0.9em; font-weight: normal; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="Summary">
|
||||
|
||||
<a name="top"></a>
|
||||
|
||||
<div class="Header">
|
||||
Cancelled Service Information
|
||||
</div>
|
||||
|
||||
<p>Hello #customer["FirstName"]#,</p>
|
||||
|
||||
<p>"#service.ServiceName#" service has been cancelled under your user account
|
||||
and below is the summary information.</p>
|
||||
<h1>Service Overview</h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td class="Label">Service Name:</td>
|
||||
<td>#service.ServiceName#</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">Created:</td>
|
||||
<td>#service.Created#</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
If you have any questions regarding your hosting account, feel free to contact our sales department at any time.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Best regards,<br />
|
||||
ACME Hosting Inc.<br />
|
||||
Web Site: <a href="http://www.acmehosting.com">www.acmehosting.com</a><br />
|
||||
E-Mail: <a href="mailto:support@acmehosting.com">support@acmehosting.com</a></p>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html></PropertyValue></Table><Table><SettingsName>CancelServicesTemplate</SettingsName><PropertyName>Subject</PropertyName><PropertyValue>Cancel Service Notificaton</PropertyValue></Table><Table><SettingsName>CancelServicesTemplate</SettingsName><PropertyName>TextBody</PropertyName><PropertyValue>
|
||||
================================
|
||||
Cancelled Service Information
|
||||
================================
|
||||
|
||||
Hello #Customer["FirstName"]#,
|
||||
|
||||
"#service.ServiceName#" service has been cancelled under your user account
|
||||
and below is the summary information.
|
||||
|
||||
Service Overview
|
||||
=============
|
||||
Service Name: #service.ServiceName#
|
||||
Created: #service.Created#
|
||||
|
||||
If you have any questions regarding your hosting account, feel free to contact our support department at any time.
|
||||
|
||||
Best regards,
|
||||
ACME Hosting Inc.
|
||||
Web Site: http://www.acmehosting.com
|
||||
E-Mail: support@acmehosting.com</PropertyValue></Table><Table><SettingsName>EmitInvoiceTemplate</SettingsName><PropertyName>CC</PropertyName><PropertyValue>info@acmehosting.com</PropertyValue></Table><Table><SettingsName>EmitInvoiceTemplate</SettingsName><PropertyName>From</PropertyName><PropertyValue>sales@acmehosting.com</PropertyValue></Table><Table><SettingsName>EmitInvoiceTemplate</SettingsName><PropertyName>HtmlBody</PropertyName><PropertyValue><style type="text/css">
|
||||
.Summary { background-color: ##ffffff; padding: 5px; }
|
||||
.Summary .Header { padding: 10px 0px 10px 10px; font-size: 16pt; background-color: ##E5F2FF; color: ##1F4978; border-bottom: solid 2px ##86B9F7; }
|
||||
.Summary A { color: ##0153A4; }
|
||||
.Summary { font-family: Tahoma; font-size: 9pt; }
|
||||
.Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; }
|
||||
.Summary H2 { font-size: 1.2em; }
|
||||
.Summary TABLE { border: solid 1px ##e5e5e5; }
|
||||
.Summary TH,
|
||||
.Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; }
|
||||
.Summary TD { padding: 8px; font-size: 9pt; }
|
||||
.Summary UL LI { font-size: 1.1em; font-weight: bold; }
|
||||
.Summary UL UL LI { font-size: 0.9em; font-weight: normal; }
|
||||
.Centered { text-align: center; }
|
||||
.AlignRight { text-align: right; }
|
||||
.Width12Percent { width: 12%; }
|
||||
</style>
|
||||
<div class="Summary">
|
||||
|
||||
<a name="top"></a>
|
||||
|
||||
<div class="Header">
|
||||
Invoice Summary Information
|
||||
</div>
|
||||
|
||||
<p>Hello #Customer["FirstName"]#,</p>
|
||||
|
||||
<p>We've created this invoice for services you ordered. You can find this invoice details under your user account
|
||||
and below is the summary information.</p>
|
||||
|
||||
<ad:if test="#isdefined("IsEmail") and isdefined("ExtraArgs")#">
|
||||
<ad:if test="#not(isnull(ExtraArgs["InvoiceDirectURL"]))#">
|
||||
<p>You may use the following link to pay for invoice later <a href="#ExtraArgs["InvoiceDirectURL"]#">#ExtraArgs["InvoiceDirectURL"]#</a>.</p>
|
||||
</ad:if>
|
||||
</ad:if>
|
||||
|
||||
<h1>Invoice Overview</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="Label">Invoice ##:</td>
|
||||
<ad:if test="#isnull(Invoice.InvoiceNumber)#">
|
||||
<td>#Invoice.InvoiceId#</td>
|
||||
<ad:else>
|
||||
<td>#Invoice.InvoiceNumber#</td>
|
||||
</ad:if>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">Terms:</td>
|
||||
<td>Due Upon Receipt</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">Invoice Date:</td>
|
||||
<td>#Invoice.Created.ToShortDateString()#</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>Invoice Items</h1>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td class="Label">Description</td>
|
||||
<td class="Label Centered">Type</td>
|
||||
<td class="Label Centered">Qty</td>
|
||||
<td class="Label Centered">Unit Price</td>
|
||||
<td class="Label Centered">Total</td>
|
||||
</tr>
|
||||
<ad:foreach collection="#InvoiceLines#" var="Line" index="i">
|
||||
<tr>
|
||||
<td>#Line.ItemName#<ad:ShowBillingPeriod Item="#Line#" /></td>
|
||||
<td class="Centered Width12Percent">#Line.TypeName#</td>
|
||||
<td class="Centered Width12Percent">#Line.Quantity#</td>
|
||||
<td class="Centered Width12Percent">#Invoice.Currency#&nbsp;#Line.UnitPrice.ToString("C")#</td>
|
||||
<td class="Centered Width12Percent">#Invoice.Currency#&nbsp;#Line.Total.ToString("C")#</td>
|
||||
</tr>
|
||||
</ad:foreach>
|
||||
<tr>
|
||||
<td colspan="4" class="AlignRight">Sub Total&nbsp;</td>
|
||||
<td class="Centered">#Invoice.Currency#&nbsp;#Invoice.SubTotal.ToString("C")#</td>
|
||||
</tr>
|
||||
<ad:if test="#isnull(Tax)#">
|
||||
<tr>
|
||||
<td colspan="4" class="AlignRight">Taxes&nbsp;#format(0.00, "#.##")#%</td>
|
||||
<td class="Centered" nowrap="nowrap">#Invoice.Currency#&nbsp;#format(0.00, "C")#</td>
|
||||
</tr>
|
||||
<ad:elseif test="#equals(Tax.TypeId, 1)#">
|
||||
<tr>
|
||||
<td colspan="4" class="AlignRight">#Tax.Description#</td>
|
||||
<td class="Centered" nowrap="nowrap">#Invoice.Currency#&nbsp;#Tax.Amount.ToString("C")#</td>
|
||||
</tr>
|
||||
<ad:elseif test="#equals(Tax.TypeId, 2)#">
|
||||
<tr>
|
||||
<td colspan="4" class="AlignRight">#Tax.Description#&nbsp;#Tax.Amount.ToString("#.##")#%</td>
|
||||
<td class="Centered" nowrap="nowrap">#Invoice.Currency#&nbsp;#Invoice.TaxAmount.ToString("C")#</td>
|
||||
</tr>
|
||||
<ad:elseif test="#equals(Tax.TypeId, 3)#">
|
||||
<tr>
|
||||
<td colspan="4" class="AlignRight">#Tax.Description#&nbsp;#Tax.Amount.ToString("#.##")#%</td>
|
||||
<td class="Centered" nowrap="nowrap">#Invoice.Currency#&nbsp;#Invoice.TaxAmount.ToString("C")#</td>
|
||||
</tr>
|
||||
</ad:if>
|
||||
<tr>
|
||||
<td colspan="4" class="AlignRight">Total&nbsp;</td>
|
||||
<td class="Centered">#Invoice.Currency#&nbsp;#Invoice.Total.ToString("C")#</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
If you have any questions regarding your hosting account or this invoice, feel free to contact our sales department at any time.
|
||||
</p>
|
||||
|
||||
<p>Some notes regarding invoice or how to apply your enquiries...</p>
|
||||
|
||||
<p>
|
||||
Best regards,<br />
|
||||
ACME Hosting Inc.<br />
|
||||
Web Site: <a href="http://www.acmehosting.com">www.acmehosting.com</a><br />
|
||||
E-Mail: <a href="mailto:support@acmehosting.com">support@acmehosting.com</a></p>
|
||||
|
||||
</div>
|
||||
|
||||
<ad:template name="ShowBillingPeriod">
|
||||
<ad:if test="#InvoiceServices.ContainsKey(Item.ServiceId)#">
|
||||
<ad:set name="Service" value="#InvoiceServices[Item.ServiceId]#" />
|
||||
<ad:if test="#isnotempty(Service.BillingPeriod)#">&nbsp;(<b>#Service.PeriodLength#&nbsp;#Service.BillingPeriod#</b>)</ad:if>
|
||||
</ad:if>
|
||||
</ad:template></PropertyValue></Table><Table><SettingsName>EmitInvoiceTemplate</SettingsName><PropertyName>Subject</PropertyName><PropertyValue>Invoice Summary Information</PropertyValue></Table><Table><SettingsName>EmitInvoiceTemplate</SettingsName><PropertyName>TextBody</PropertyName><PropertyValue>================================
|
||||
Invoice Summary Information
|
||||
================================
|
||||
|
||||
Hello #Customer["FirstName"]#,
|
||||
|
||||
We've created this invoice for services you ordered. You can find this invoice details under your user account
|
||||
and below is the summary information.
|
||||
|
||||
<ad:if test="#isdefined("IsEmail") and isdefined("ExtraArgs")#">
|
||||
<ad:if test="#not(isnull(ExtraArgs["InvoiceDirectURL"]))#">
|
||||
You may copy and paste the following link to the browser in order to pay for invoice later #ExtraArgs["InvoiceDirectURL"]#.
|
||||
</ad:if>
|
||||
</ad:if>
|
||||
|
||||
Invoice Overview
|
||||
=============
|
||||
Invoice ##: <ad:if test="#isnull(Invoice.InvoiceNumber)#">#Invoice.InvoiceId#<ad:else>#Invoice.InvoiceNumber#</ad:if>
|
||||
Terms: Due Upon Receipt
|
||||
Invoice Date: #Invoice.Created.ToShortDateString()#
|
||||
Invoice SubTotal: #Invoice.Currency# #Invoice.SubTotal.ToString("C")#
|
||||
<ad:if test="#isnull(Tax)#">
|
||||
Taxes&nbsp;#format(0.00, "#.##")#%: #Invoice.Currency#&nbsp;#format(0.00, "C")#
|
||||
<ad:elseif test="#equals(Tax.TypeId, 1)#">
|
||||
#Tax.Description#: #Invoice.Currency#&nbsp;#Tax.Amount.ToString("C")#
|
||||
<ad:elseif test="#equals(Tax.TypeId, 2)#">
|
||||
#Tax.Description#&nbsp;#Tax.Amount.ToString("#.##")#%: #Invoice.Currency#&nbsp;#Invoice.TaxAmount.ToString("C")#
|
||||
<ad:elseif test="#equals(Tax.TypeId, 3)#">
|
||||
#Tax.Description#&nbsp;#Tax.Amount.ToString("#.##")#%: #Invoice.Currency#&nbsp;#Invoice.TaxAmount.ToString("C")#
|
||||
</ad:if>
|
||||
Invoice Total: #Invoice.Currency# #Invoice.Total.ToString("C")#
|
||||
|
||||
|
||||
Invoice Items
|
||||
=============
|
||||
<ad:foreach collection="#InvoiceLines#" var="Line" index="i">
|
||||
#Line.ItemName#<ad:ShowBillingPeriod Item="#Line#" />
|
||||
Type: #Line.TypeName#
|
||||
Quantity: #Line.Quantity#
|
||||
Unit Price: #Invoice.Currency#&nbsp;#Line.UnitPrice.ToString("C")#
|
||||
Total: #Invoice.Currency#&nbsp;#Line.Total.ToString("C")#
|
||||
</ad:foreach>
|
||||
|
||||
|
||||
If you have any questions regarding your hosting account, feel free to contact our sales department at any time.
|
||||
|
||||
Some notes regarding invoice or how to apply your enquiries...
|
||||
|
||||
|
||||
Best regards,
|
||||
ACME Hosting Inc.
|
||||
Web Site: http://www.acmehosting.com
|
||||
E-Mail: support@acmehosting.com
|
||||
|
||||
<ad:template name="ShowBillingPeriod">
|
||||
<ad:if test="#InvoiceServices.ContainsKey(Item.ServiceId)#">
|
||||
<ad:set name="Service" value="#InvoiceServices[Item.ServiceId]#" />
|
||||
<ad:if test="#isnotempty(Service.BillingPeriod)#"> (#Service.PeriodLength# #Service.BillingPeriod#)</ad:if>
|
||||
</ad:if>
|
||||
</ad:template></PropertyValue></Table><Table><SettingsName>PaymentReceivedTemplate</SettingsName><PropertyName>CC</PropertyName><PropertyValue>info@acmehosting.com</PropertyValue></Table><Table><SettingsName>PaymentReceivedTemplate</SettingsName><PropertyName>From</PropertyName><PropertyValue>sales@acmehosting.com</PropertyValue></Table><Table><SettingsName>PaymentReceivedTemplate</SettingsName><PropertyName>HtmlBody</PropertyName><PropertyValue><html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Received Payment Summary Information</title>
|
||||
<style type="text/css">
|
||||
.Summary { background-color: ##ffffff; padding: 5px; }
|
||||
.Summary .Header { padding: 10px 0px 10px 10px; font-size: 16pt; background-color: ##E5F2FF; color: ##1F4978; border-bottom: solid 2px ##86B9F7; }
|
||||
.Summary A { color: ##0153A4; }
|
||||
.Summary { font-family: Tahoma; font-size: 9pt; }
|
||||
.Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; }
|
||||
.Summary H2 { font-size: 1.2em; }
|
||||
.Summary TABLE { border: solid 1px ##e5e5e5; }
|
||||
.Summary TH,
|
||||
.Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; }
|
||||
.Summary TD { padding: 8px; font-size: 9pt; }
|
||||
.Summary UL LI { font-size: 1.1em; font-weight: bold; }
|
||||
.Summary UL UL LI { font-size: 0.9em; font-weight: normal; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="Summary">
|
||||
<a name="top"></a>
|
||||
<div class="Header">
|
||||
Received Payment Information
|
||||
</div>
|
||||
<p>
|
||||
Hello #Customer["FirstName"]#,</p>
|
||||
<p>
|
||||
We've received your payment successfully. You can find this payment details under
|
||||
your user account and below is the summary information.</p>
|
||||
<h1>
|
||||
Payment Overview</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="Label">
|
||||
Payment ##:
|
||||
</td>
|
||||
<td>
|
||||
#payment.paymentid#
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">
|
||||
Invoice ##:
|
||||
</td>
|
||||
<td>
|
||||
#payment.invoiceid#
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">
|
||||
Transaction ID ##:
|
||||
</td>
|
||||
<td>
|
||||
#payment.transactionid#
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">
|
||||
Created:
|
||||
</td>
|
||||
<td>
|
||||
#payment.created#
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">
|
||||
Payment Method:
|
||||
</td>
|
||||
<td>
|
||||
#payment.methodname#
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">
|
||||
Payment Status:
|
||||
</td>
|
||||
<td>
|
||||
#payment.status.ToString()#
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">
|
||||
Payment Total:
|
||||
</td>
|
||||
<td>
|
||||
#payment.currency# #format(payment.total, "C")#
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
If you have any questions regarding your hosting account, feel free to contact our
|
||||
sales department at any time.
|
||||
</p>
|
||||
<p>
|
||||
Best regards,<br />
|
||||
ACME Hosting Inc.<br />
|
||||
Web Site: <a href="http://www.acmehosting.com">www.acmehosting.com</a><br />
|
||||
E-Mail: <a href="mailto:support@acmehosting.com">support@acmehosting.com</a></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</PropertyValue></Table><Table><SettingsName>PaymentReceivedTemplate</SettingsName><PropertyName>Subject</PropertyName><PropertyValue>Payment Received Notification</PropertyValue></Table><Table><SettingsName>PaymentReceivedTemplate</SettingsName><PropertyName>TextBody</PropertyName><PropertyValue>================================ Received Payment Information ================================
|
||||
Hello #Customer["FirstName"]#,
|
||||
|
||||
We've received your payment successfully. You can find this payment details under your user account and below is the summary information.
|
||||
|
||||
Payment Overview
|
||||
=============
|
||||
Payment ##: #payment.paymentid#
|
||||
Invoice ##: #payment.invoiceid#
|
||||
Transaction ID ##: #payment.transactionid#
|
||||
Created: #payment.created#
|
||||
Payment Method: #payment.methodname#
|
||||
Payment Status: #payment.status.ToString()#
|
||||
Payment Total: #payment.currency# #format(payment.total, "C")#
|
||||
|
||||
If you have any questions regarding your hosting account, feel free to contact our sales department at any time.
|
||||
|
||||
Best regards,
|
||||
ACME Hosting Inc.
|
||||
Web Site: http://www.acmehosting.com
|
||||
E-Mail: support@acmehosting.com</PropertyValue></Table><Table><SettingsName>SignupSettings</SettingsName><PropertyName>NewbieStatus</PropertyName><PropertyValue>4</PropertyValue></Table><Table><SettingsName>SignupSettings</SettingsName><PropertyName>RegDomainMode</PropertyName><PropertyValue>OPT_DOM_AVAIL</PropertyValue></Table><Table><SettingsName>SignupSettings</SettingsName><PropertyName>SendRegistrationEmail</PropertyName><PropertyValue>true</PropertyValue></Table><Table><SettingsName>SuspendServicesTemplate</SettingsName><PropertyName>CC</PropertyName><PropertyValue>sales@acmehosting.com</PropertyValue></Table><Table><SettingsName>SuspendServicesTemplate</SettingsName><PropertyName>From</PropertyName><PropertyValue>support@acmehosting.com</PropertyValue></Table><Table><SettingsName>SuspendServicesTemplate</SettingsName><PropertyName>HtmlBody</PropertyName><PropertyValue>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Suspend Service Summary Information</title>
|
||||
<style type="text/css">
|
||||
.Summary { background-color: ##ffffff; padding: 5px; }
|
||||
.Summary .Header { padding: 10px 0px 10px 10px; font-size: 16pt; background-color: ##E5F2FF; color: ##1F4978; border-bottom: solid 2px ##86B9F7; }
|
||||
.Summary A { color: ##0153A4; }
|
||||
.Summary { font-family: Tahoma; font-size: 9pt; }
|
||||
.Summary H1 { font-size: 1.7em; color: ##1F4978; border-bottom: dotted 3px ##efefef; }
|
||||
.Summary H2 { font-size: 1.2em; }
|
||||
.Summary TABLE { border: solid 1px ##e5e5e5; }
|
||||
.Summary TH,
|
||||
.Summary TD.Label { padding: 5px; font-size: 8pt; font-weight: bold; background-color: ##f5f5f5; }
|
||||
.Summary TD { padding: 8px; font-size: 9pt; }
|
||||
.Summary UL LI { font-size: 1.1em; font-weight: bold; }
|
||||
.Summary UL UL LI { font-size: 0.9em; font-weight: normal; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="Summary">
|
||||
|
||||
<a name="top"></a>
|
||||
|
||||
<div class="Header">
|
||||
Suspended Service Information
|
||||
</div>
|
||||
|
||||
<p>Hello #Customer["FirstName"]#,</p>
|
||||
|
||||
<p>"#service.ServiceName#" service has been suspended under your user account
|
||||
and below is the summary information.</p>
|
||||
<h1>Service Overview</h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td class="Label">Service Name:</td>
|
||||
<td>#service.ServiceName#</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="Label">Created:</td>
|
||||
<td>#service.Created#</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p>
|
||||
If you have any questions regarding your hosting account, feel free to contact our sales department at any time.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Best regards,<br />
|
||||
ACME Hosting Inc.<br />
|
||||
Web Site: <a href="http://www.acmehosting.com">www.acmehosting.com</a><br />
|
||||
E-Mail: <a href="mailto:support@acmehosting.com">support@acmehosting.com</a></p>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html></PropertyValue></Table><Table><SettingsName>SuspendServicesTemplate</SettingsName><PropertyName>Subject</PropertyName><PropertyValue>Suspend Service Notification</PropertyValue></Table><Table><SettingsName>SuspendServicesTemplate</SettingsName><PropertyName>TextBody</PropertyName><PropertyValue>
|
||||
================================
|
||||
Suspended Service Information
|
||||
================================
|
||||
|
||||
Hello #Customer["FirstName"]#,
|
||||
|
||||
"#service.ServiceName#" service has been suspended under your user account
|
||||
and below is the summary information.
|
||||
|
||||
Service Overview
|
||||
=============
|
||||
Service Name: #service.ServiceName#
|
||||
Created: #service.Created#
|
||||
|
||||
If you have any questions regarding your hosting account, feel free to contact our support department at any time.
|
||||
|
||||
Best regards,
|
||||
ACME Hosting Inc.
|
||||
Web Site: http://www.acmehosting.com
|
||||
E-Mail: support@acmehosting.com</PropertyValue></Table><Table><SettingsName>SystemSettings</SettingsName><PropertyName>BaseCurrency</PropertyName><PropertyValue>USD</PropertyValue></Table><Table><SettingsName>SystemSettings</SettingsName><PropertyName>InvoiceGracePeriod</PropertyName><PropertyValue>2</PropertyValue></Table><Table><SettingsName>SystemSettings</SettingsName><PropertyName>ServiceSuspendThreshold</PropertyName><PropertyValue>3</PropertyValue></Table><Table><SettingsName>SystemSettings</SettingsName><PropertyName>SvcCancelThreshold</PropertyName><PropertyValue>3</PropertyValue></Table><Table><SettingsName>SystemSettings</SettingsName><PropertyName>SvcInvoiceThreshold</PropertyName><PropertyValue>7</PropertyValue></Table></NewDataSet>
|
3
WebsitePanel/Resources/database_header.sql
Normal file
3
WebsitePanel/Resources/database_header.sql
Normal file
|
@ -0,0 +1,3 @@
|
|||
USE [${install.database}]
|
||||
GO
|
||||
|
109
WebsitePanel/Resources/script-websitepanel-database.build
Normal file
109
WebsitePanel/Resources/script-websitepanel-database.build
Normal file
|
@ -0,0 +1,109 @@
|
|||
<?xml version="1.0" ?>
|
||||
<project name="script" default="script">
|
||||
|
||||
<target name="script">
|
||||
|
||||
<!-- Generate SQL Scripts -->
|
||||
<scriptdatabase output="build-websitepanel-database.sql"
|
||||
server="TFS01"
|
||||
database="${database}">
|
||||
|
||||
<!-- Script defaults -->
|
||||
<!--objects type="Roles" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_Drops</option>
|
||||
<option>SQLDMOScript_PrimaryObject</option>
|
||||
</options>
|
||||
</objects-->
|
||||
|
||||
<!-- Script data types -->
|
||||
<objects type="DataTypes" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_PrimaryObject</option>
|
||||
<option>SQLDMOScript_OwnerQualify</option>
|
||||
</options>
|
||||
</objects>
|
||||
|
||||
<!-- Script tables -->
|
||||
<objects type="Tables" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_Drops</option>
|
||||
<option>SQLDMOScript_PrimaryObject</option>
|
||||
<option>SQLDMOScript_DRI_Checks</option>
|
||||
<option>SQLDMOScript_DRI_Defaults</option>
|
||||
<option>SQLDMOScript_DRI_PrimaryKey</option>
|
||||
<option>SQLDMOScript_DRI_UniqueKeys</option>
|
||||
<option>SQLDMOScript_Permissions</option>
|
||||
<option>SQLDMOScript_Indexes</option>
|
||||
<option>SQLDMOScript_Triggers</option>
|
||||
<option>SQLDMOScript_OwnerQualify</option>
|
||||
<option>SQLDMOScript2_Default</option>
|
||||
<option>SQLDMOScript2_NoCollation</option>
|
||||
<option>SQLDMOScript2_NoFG</option>
|
||||
</options>
|
||||
</objects>
|
||||
|
||||
<!-- Script functions -->
|
||||
<objects type="Functions" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_Drops</option>
|
||||
<option>SQLDMOScript_PrimaryObject</option>
|
||||
<option>SQLDMOScript_OwnerQualify</option>
|
||||
</options>
|
||||
</objects>
|
||||
|
||||
<!-- Script views -->
|
||||
<objects type="Views" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_Drops</option>
|
||||
<option>SQLDMOScript_PrimaryObject</option>
|
||||
<option>SQLDMOScript_Indexes</option>
|
||||
<option>SQLDMOScript_Permissions</option>
|
||||
<option>SQLDMOScript_OwnerQualify</option>
|
||||
</options>
|
||||
</objects>
|
||||
|
||||
<!-- Script stored procedures -->
|
||||
<objects type="StoredProcedures" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_Drops</option>
|
||||
<option>SQLDMOScript_PrimaryObject</option>
|
||||
<option>SQLDMOScript_Permissions</option>
|
||||
<option>SQLDMOScript_OwnerQualify</option>
|
||||
</options>
|
||||
</objects>
|
||||
|
||||
<!-- Script rules -->
|
||||
<objects type="Rules" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_Drops</option>
|
||||
<option>SQLDMOScript_PrimaryObject</option>
|
||||
<option>SQLDMOScript_OwnerQualify</option>
|
||||
</options>
|
||||
</objects>
|
||||
|
||||
<!-- Script defaults -->
|
||||
<objects type="Defaults" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_Drops</option>
|
||||
<option>SQLDMOScript_PrimaryObject</option>
|
||||
<option>SQLDMOScript_OwnerQualify</option>
|
||||
</options>
|
||||
</objects>
|
||||
|
||||
<!-- Script data -->
|
||||
<data all="false" names="AuditLogSources,AuditLogTasks,Providers,Quotas,ResourceGroupDnsRecords,ResourceGroups,ScheduleTaskParameters,ScheduleTasks,ServiceDefaultProperties,ServiceItemTypes,SystemSettings,ecProductType,ecSupportedPlugins,ScheduleTaskViewConfiguration" />
|
||||
|
||||
<!-- Script foreign keys -->
|
||||
<objects type="Tables" all="true">
|
||||
<options>
|
||||
<option>SQLDMOScript_DRI_ForeignKeys</option>
|
||||
<option>SQLDMOScript_OwnerQualify</option>
|
||||
<option>SQLDMOScript2_NoCollation</option>
|
||||
</options>
|
||||
</objects>
|
||||
|
||||
</scriptdatabase>
|
||||
</target>
|
||||
|
||||
</project>
|
17
WebsitePanel/Resources/script-websitepanel-versions.build
Normal file
17
WebsitePanel/Resources/script-websitepanel-versions.build
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" ?>
|
||||
<project name="script" default="script">
|
||||
|
||||
<target name="script">
|
||||
|
||||
<!-- Generate SQL Scripts -->
|
||||
<scriptdatabase output="build-websitepanel-versions.sql"
|
||||
server="TFS01"
|
||||
database="${database}">
|
||||
|
||||
<!-- Script data -->
|
||||
<data all="false" names="Versions" />
|
||||
|
||||
</scriptdatabase>
|
||||
</target>
|
||||
|
||||
</project>
|
11
WebsitePanel/Resources/update_db_template.sql
Normal file
11
WebsitePanel/Resources/update_db_template.sql
Normal file
|
@ -0,0 +1,11 @@
|
|||
USE [${install.database}]
|
||||
GO
|
||||
|
||||
-- update database version
|
||||
declare @build_version nvarchar(10), @build_date datetime
|
||||
set @build_version = '1.0.0.0'
|
||||
set @build_date = '01/01/2010'
|
||||
IF NOT EXISTS (SELECT * FROM dbo.Versions WHERE DatabaseVersion = @build_version)
|
||||
INSERT INTO [Versions] ([DatabaseVersion], [BuildDate]) VALUES (@build_version, @build_date)
|
||||
GO
|
||||
|
19
WebsitePanel/Sources/Tools/WebsitePanel.AWStats.Viewer.sln
Normal file
19
WebsitePanel/Sources/Tools/WebsitePanel.AWStats.Viewer.sln
Normal file
|
@ -0,0 +1,19 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.AWStats.Viewer", "WebsitePanel.AWStats.Viewer\WebsitePanel.AWStats.Viewer.csproj", "{5F8C0079-C339-4590-BF10-DBA470329293}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{5F8C0079-C339-4590-BF10-DBA470329293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5F8C0079-C339-4590-BF10-DBA470329293}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5F8C0079-C339-4590-BF10-DBA470329293}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5F8C0079-C339-4590-BF10-DBA470329293}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,20 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("WebsitePanel.AWStats.Viewer")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyProduct("WebsitePanel.AWStats.Viewer")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("dc9fe3a4-572c-42d0-9c5e-6dc59e2563ae")]
|
|
@ -0,0 +1,78 @@
|
|||
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebsitePanel.AWStats.Viewer.Default" %>
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head runat="server">
|
||||
<title>Advanced Statistics</title>
|
||||
<style type="text/css">
|
||||
<!--
|
||||
body { margin: 0; }
|
||||
.aws_border { border: 2px solid #CCCCDD; margin-top: 100px; }
|
||||
.aws_title { font: 13px verdana, arial, helvetica, sans-serif; font-weight: bold; background-color: #CCCCDD; text-align: center; padding: 3px; color: #000000; }
|
||||
.aws_data { background-color: #FFFFFF; }
|
||||
.aws_button {
|
||||
font-family: arial,verdana,helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
border: 1px solid #ccd7e0;
|
||||
background-image : url(icon/other/button.gif);
|
||||
}
|
||||
.aws_pad { padding: 3px; }
|
||||
td { border-color: #ECECEC; border-left-width: 0px; border-right-width: 1px; border-top-width: 0px; border-bottom-width: 1px; font: 11px verdana, arial, helvetica, sans-serif; color: #000000; }
|
||||
p { font: 11px verdana, arial, helvetica, sans-serif; color: #000000; text-align: center; }
|
||||
b { font-weight: bold; }
|
||||
a { font: 11px verdana, arial, helvetica, sans-serif; }
|
||||
a:link { color: #0011BB; text-decoration: none; }
|
||||
a:visited { color: #0011BB; text-decoration: none; }
|
||||
a:hover { color: #605040; text-decoration: underline; }
|
||||
.currentday { font-weight: bold; }
|
||||
//-->
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
<table class="aws_border" align="center" cellPadding="10" cellspacing="0" width="300px">
|
||||
<tr>
|
||||
<td class="aws_title">Login to Advanced Statistics</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table class="aws_data">
|
||||
<tr>
|
||||
<td colspan="2" align="center">
|
||||
<asp:Label ID="lblMessage" Runat="server" ForeColor="Red"></asp:Label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="aws"><b>Domain:</b></td>
|
||||
<td>
|
||||
<asp:TextBox id="txtDomain" runat="server" Width="150px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator id="valRequireDomain" runat="server" ErrorMessage="*" ControlToValidate="txtDomain"></asp:RequiredFieldValidator></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="aws">Username:</td>
|
||||
<td>
|
||||
<asp:TextBox id="txtUsername" runat="server" Width="150px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator id="valRequireUsername" runat="server" ErrorMessage="*" ControlToValidate="txtUsername"></asp:RequiredFieldValidator></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="aws">Password:</td>
|
||||
<td>
|
||||
<asp:TextBox id="txtPassword" runat="server" TextMode="Password" Width="150px"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator id="valRequirePassword" runat="server" ErrorMessage="*" ControlToValidate="txtPassword"></asp:RequiredFieldValidator></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="aws_pad" colspan="2" align="center">
|
||||
<asp:Button id="btnView" runat="server" Text="Display Statistics" CssClass="aws_button" OnClick="btnView_Click"></asp:Button></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
* You should specify username and password that you use to login to
|
||||
<a href="http://demo.websitepanel.net" target="_blank">http://demo.websitepanel.net</a>.
|
||||
</p>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,225 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Data;
|
||||
using System.Configuration;
|
||||
using System.Collections;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using System.Web.UI.WebControls.WebParts;
|
||||
using System.Web.UI.HtmlControls;
|
||||
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace WebsitePanel.AWStats.Viewer
|
||||
{
|
||||
public partial class Default : System.Web.UI.Page
|
||||
{
|
||||
private void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (Request.IsAuthenticated)
|
||||
{
|
||||
string identity = Context.User.Identity.Name;
|
||||
string domain = identity.Split('=')[0];
|
||||
|
||||
if (String.Compare(Request["config"], domain, true) != 0)
|
||||
{
|
||||
FormsAuthentication.SignOut();
|
||||
Response.Redirect(Request.Url.AbsolutePath);
|
||||
}
|
||||
|
||||
Response.Clear();
|
||||
|
||||
string queryParams = Request.Url.Query;
|
||||
|
||||
string awStatsUrl = AWStatsUrl;
|
||||
if (awStatsUrl.IndexOf(":") == -1)
|
||||
{
|
||||
string appUrl = Request.Url.ToString();
|
||||
appUrl = appUrl.Substring(0, appUrl.LastIndexOf("/"));
|
||||
awStatsUrl = appUrl + awStatsUrl;
|
||||
}
|
||||
|
||||
string awStatsPage = GetWebDocument(awStatsUrl + queryParams);
|
||||
|
||||
// replace links
|
||||
awStatsPage = awStatsPage.Replace(AWStatsScript, Request.Url.AbsolutePath);
|
||||
|
||||
Response.Write(awStatsPage);
|
||||
|
||||
Response.End();
|
||||
}
|
||||
else
|
||||
{
|
||||
lblMessage.Visible = false;
|
||||
|
||||
if (!IsPostBack)
|
||||
{
|
||||
string domain = Request["domain"];
|
||||
string username = Request["username"];
|
||||
string password = Request["password"];
|
||||
|
||||
if (String.IsNullOrEmpty(domain))
|
||||
domain = Request["config"];
|
||||
|
||||
txtDomain.Text = domain;
|
||||
|
||||
if (!String.IsNullOrEmpty(username))
|
||||
txtUsername.Text = username;
|
||||
|
||||
// check for autologin
|
||||
if (!String.IsNullOrEmpty(domain)
|
||||
&& !String.IsNullOrEmpty(username)
|
||||
&& !String.IsNullOrEmpty(password))
|
||||
{
|
||||
// perform login
|
||||
Login(domain, username, password);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void btnView_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!Page.IsValid)
|
||||
return;
|
||||
|
||||
// perform login
|
||||
Login(txtDomain.Text.Trim(), txtUsername.Text.Trim(), txtPassword.Text);
|
||||
}
|
||||
|
||||
private void Login(string domain, string username, string password)
|
||||
{
|
||||
// check user
|
||||
AuthenticationResult result =
|
||||
AuthenticationProvider.Instance.AuthenticateUser(domain, username, password);
|
||||
|
||||
if (result == AuthenticationResult.OK)
|
||||
{
|
||||
FormsAuthentication.SetAuthCookie(domain + "=" + username, false);
|
||||
Response.Redirect(Request.Url.AbsolutePath + "?config=" + domain);
|
||||
}
|
||||
|
||||
// show error message
|
||||
lblMessage.Text = ConfigurationManager.AppSettings["AWStats.Message.DomainNotFound"];
|
||||
if (result == AuthenticationResult.WrongUsername)
|
||||
lblMessage.Text = ConfigurationManager.AppSettings["AWStats.Message.WrongUsername"];
|
||||
else if (result == AuthenticationResult.WrongPassword)
|
||||
lblMessage.Text = ConfigurationManager.AppSettings["AWStats.Message.WrongPassword"];
|
||||
|
||||
lblMessage.Visible = true;
|
||||
}
|
||||
|
||||
#region Private Helpers
|
||||
private string GetWebDocument(string url)
|
||||
{
|
||||
HttpWebResponse result = null;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
try
|
||||
{
|
||||
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
|
||||
|
||||
string lang = Request.Headers["Accept-Language"];
|
||||
req.Headers["Accept-Language"] = lang;
|
||||
|
||||
string username = ConfigurationManager.AppSettings["AWStats.Username"];
|
||||
if (username != null && username != "")
|
||||
{
|
||||
string password = ConfigurationManager.AppSettings["AWStats.Password"];
|
||||
string domain = null;
|
||||
int sepIdx = username.IndexOf("\\");
|
||||
if (sepIdx != -1)
|
||||
{
|
||||
domain = username.Substring(0, sepIdx);
|
||||
username = username.Substring(sepIdx + 1);
|
||||
}
|
||||
|
||||
req.Credentials = new NetworkCredential(username, password, domain);
|
||||
}
|
||||
else
|
||||
{
|
||||
req.Credentials = CredentialCache.DefaultNetworkCredentials;
|
||||
}
|
||||
|
||||
result = (HttpWebResponse)req.GetResponse();
|
||||
Stream ReceiveStream = result.GetResponseStream();
|
||||
string respEnc = !String.IsNullOrEmpty(result.ContentEncoding) ? result.ContentEncoding : "utf-8";
|
||||
Encoding encode = System.Text.Encoding.GetEncoding(respEnc);
|
||||
|
||||
StreamReader sr = new StreamReader(ReceiveStream, encode);
|
||||
|
||||
Char[] read = new Char[256];
|
||||
int count = sr.Read(read, 0, 256);
|
||||
|
||||
while (count > 0)
|
||||
{
|
||||
String str = new String(read, 0, count);
|
||||
sb.Append(str);
|
||||
count = sr.Read(read, 0, 256);
|
||||
}
|
||||
}
|
||||
catch (WebException ex)
|
||||
{
|
||||
Response.Write("Error while opening '" + url + "': " + ex.Message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Response.Write(ex.ToString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (result != null)
|
||||
{
|
||||
result.Close();
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private string AWStatsUrl
|
||||
{
|
||||
get { return ConfigurationManager.AppSettings["AWStats.URL"]; }
|
||||
}
|
||||
|
||||
private string AWStatsScript
|
||||
{
|
||||
get
|
||||
{
|
||||
int idx = AWStatsUrl.LastIndexOf("/");
|
||||
return (idx == -1) ? AWStatsUrl : AWStatsUrl.Substring(idx + 1);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
97
WebsitePanel/Sources/Tools/WebsitePanel.AWStats.Viewer/Default.aspx.designer.cs
generated
Normal file
97
WebsitePanel/Sources/Tools/WebsitePanel.AWStats.Viewer/Default.aspx.designer.cs
generated
Normal file
|
@ -0,0 +1,97 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:2.0.50727.1873
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace WebsitePanel.AWStats.Viewer {
|
||||
|
||||
|
||||
public partial class Default {
|
||||
|
||||
/// <summary>
|
||||
/// form1 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.HtmlForm form1;
|
||||
|
||||
/// <summary>
|
||||
/// lblMessage 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 lblMessage;
|
||||
|
||||
/// <summary>
|
||||
/// txtDomain 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 txtDomain;
|
||||
|
||||
/// <summary>
|
||||
/// valRequireDomain 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 valRequireDomain;
|
||||
|
||||
/// <summary>
|
||||
/// txtUsername 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 txtUsername;
|
||||
|
||||
/// <summary>
|
||||
/// valRequireUsername 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 valRequireUsername;
|
||||
|
||||
/// <summary>
|
||||
/// txtPassword 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 txtPassword;
|
||||
|
||||
/// <summary>
|
||||
/// valRequirePassword 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 valRequirePassword;
|
||||
|
||||
/// <summary>
|
||||
/// btnView 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.Button btnView;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Configuration;
|
||||
|
||||
namespace WebsitePanel.AWStats.Viewer
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for AuthenticationProvider.
|
||||
/// </summary>
|
||||
public abstract class AuthenticationProvider
|
||||
{
|
||||
private static AuthenticationProvider objProvider;
|
||||
|
||||
public static AuthenticationProvider Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (objProvider == null)
|
||||
{
|
||||
string providerType = ConfigurationManager.AppSettings["AWStats.AuthenticationProvider"];
|
||||
if (providerType == null || providerType == "")
|
||||
throw new Exception("AuthenticationProvider implementation type is not specified");
|
||||
|
||||
try
|
||||
{
|
||||
// instantiate provider
|
||||
objProvider = (AuthenticationProvider)Activator.CreateInstance(Type.GetType(providerType));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception(String.Format("Can not instantiate '{0}' authentication provider",
|
||||
providerType), ex);
|
||||
}
|
||||
}
|
||||
return objProvider;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract AuthenticationResult AuthenticateUser(string domain, string username, string password);
|
||||
}
|
||||
|
||||
public enum AuthenticationResult
|
||||
{
|
||||
OK,
|
||||
WrongUsername,
|
||||
WrongPassword,
|
||||
DomainNotFound
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Configuration;
|
||||
using System.IO;
|
||||
using System.Web;
|
||||
|
||||
namespace WebsitePanel.AWStats.Viewer
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for ConfigFileAuthenticationProvider.
|
||||
/// </summary>
|
||||
public class ConfigFileAuthenticationProvider : AuthenticationProvider
|
||||
{
|
||||
public override AuthenticationResult AuthenticateUser(string domain, string username, string password)
|
||||
{
|
||||
string dataFolder = ConfigurationManager.AppSettings["AWStats.ConfigFileAuthenticationProvider.DataFolder"];
|
||||
if(dataFolder.StartsWith("~"))
|
||||
dataFolder = HttpContext.Current.Server.MapPath(dataFolder);
|
||||
|
||||
string awStatsScript = ConfigurationManager.AppSettings["AWStats.URL"];
|
||||
int idx = awStatsScript.LastIndexOf("/");
|
||||
awStatsScript = (idx == -1) ? awStatsScript : awStatsScript.Substring(idx + 1);
|
||||
|
||||
string prefix = awStatsScript;
|
||||
int dotIdx = prefix.LastIndexOf(".");
|
||||
if(dotIdx != -1)
|
||||
prefix = prefix.Substring(0, dotIdx);
|
||||
|
||||
string dataFile = Path.Combine(dataFolder, prefix + "." + domain + ".conf");
|
||||
if(!File.Exists(dataFile))
|
||||
return AuthenticationResult.DomainNotFound;
|
||||
|
||||
string[] pairs = new string[0];
|
||||
|
||||
// read file contents
|
||||
StreamReader reader = null;
|
||||
try
|
||||
{
|
||||
reader = new StreamReader(dataFile);
|
||||
string line;
|
||||
while((line = reader.ReadLine()) != null)
|
||||
{
|
||||
idx = line.IndexOf("=");
|
||||
if(idx == -1)
|
||||
continue;
|
||||
|
||||
string key = line.Substring(0, idx).Trim();
|
||||
if(key.ToLower() == "siteusers")
|
||||
{
|
||||
pairs = line.Substring(idx + 1).Trim().Split(';');
|
||||
foreach(string pair in pairs)
|
||||
{
|
||||
string[] credentials = pair.Split('=');
|
||||
if(String.Compare(credentials[0], username, true) == 0)
|
||||
{
|
||||
// check password
|
||||
return (password == credentials[1]) ? AuthenticationResult.OK : AuthenticationResult.WrongPassword;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
HttpContext.Current.Response.Write(ex.ToString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(reader != null)
|
||||
reader.Close();
|
||||
}
|
||||
return AuthenticationResult.WrongUsername;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Configuration;
|
||||
|
||||
using WebsitePanel.EnterpriseServer;
|
||||
using WebsitePanel.Providers.Statistics;
|
||||
|
||||
namespace WebsitePanel.AWStats.Viewer
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for WebsitePanelAuthenticationProvider.
|
||||
/// </summary>
|
||||
public class WebsitePanelAuthenticationProvider : AuthenticationProvider
|
||||
{
|
||||
public override AuthenticationResult AuthenticateUser(string domain, string username, string password)
|
||||
{
|
||||
try
|
||||
{
|
||||
// authentication
|
||||
esAuthentication auth = new esAuthentication();
|
||||
SetupProxy(auth);
|
||||
|
||||
int result = auth.AuthenticateUser(username, password, "");
|
||||
|
||||
if (result == -109)
|
||||
return AuthenticationResult.WrongUsername;
|
||||
else if (result == -110)
|
||||
return AuthenticationResult.WrongPassword;
|
||||
|
||||
// load user account
|
||||
UserInfo user = auth.GetUserByUsernamePassword(username, password, "");
|
||||
if (user == null)
|
||||
return AuthenticationResult.WrongUsername;
|
||||
|
||||
// get all packages
|
||||
esPackages packagesProxy = new esPackages();
|
||||
SetupProxy(packagesProxy, username, password);
|
||||
esStatisticsServers statsServers = new esStatisticsServers();
|
||||
SetupProxy(statsServers, username, password);
|
||||
PackageInfo[] packages = packagesProxy.GetMyPackages(user.UserId);
|
||||
|
||||
// load all statistics sites from all packages
|
||||
foreach (PackageInfo package in packages)
|
||||
{
|
||||
StatsSite[] sites = statsServers.GetStatisticsSites(package.PackageId, false);
|
||||
|
||||
foreach (StatsSite site in sites)
|
||||
{
|
||||
if (String.Compare(site.Name, domain, true) == 0)
|
||||
return AuthenticationResult.OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Web.HttpContext.Current.Response.Write(ex.ToString());
|
||||
}
|
||||
|
||||
return AuthenticationResult.DomainNotFound;
|
||||
}
|
||||
|
||||
private void SetupProxy(Microsoft.Web.Services3.WebServicesClientProtocol proxy)
|
||||
{
|
||||
SetupProxy(proxy, null, null);
|
||||
}
|
||||
|
||||
private void SetupProxy(Microsoft.Web.Services3.WebServicesClientProtocol proxy,
|
||||
string username, string password)
|
||||
{
|
||||
// create ES configurator
|
||||
string serverUrl = ConfigurationManager.AppSettings["AWStats.WebsitePanelAuthenticationProvider.EnterpriseServer"];
|
||||
if (String.IsNullOrEmpty(serverUrl))
|
||||
throw new Exception("Enterprise Server URL could not be empty");
|
||||
|
||||
EnterpriseServerProxyConfigurator cnfg = new EnterpriseServerProxyConfigurator();
|
||||
cnfg.EnterpriseServerUrl = serverUrl;
|
||||
cnfg.Username = username;
|
||||
cnfg.Password = password;
|
||||
cnfg.Configure(proxy);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head>
|
||||
<title>WebsitePanel AWStats Viewer - Readme</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>
|
||||
WebsitePanel AWStats Viewer - Readme</h1>
|
||||
<p>
|
||||
WebsitePanel AWStats Viewer is a web application providing authentication for
|
||||
AWStats against WebsitePanel users database.</p>
|
||||
|
||||
<h2>
|
||||
License</h2>
|
||||
<p>
|
||||
WebsitePanel AWStats Viewer is released under BSD license. Please see LICENSE.txt file in the
|
||||
root folder of this project.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<!-- AWStats Viewer Settings -->
|
||||
<add key="AWStats.URL" value="/cgi-bin/awstats.pl"/>
|
||||
<add key="AWStats.Username" value=""/>
|
||||
<add key="AWStats.Password" value=""/>
|
||||
|
||||
<!-- Messages -->
|
||||
<add key="AWStats.Message.DomainNotFound" value="Advanced statistics is not enabled for the specified domain. Login to control panel, open 'My Resources -> Advanced Statistics' page and add a new statistics site."/>
|
||||
<add key="AWStats.Message.WrongUsername" value="Account with the specified username does not exist! Make sure you type correct Control Panel username/password."/>
|
||||
<add key="AWStats.Message.WrongPassword" value="Incorrect password has been specified!"/>
|
||||
|
||||
<!-- Authentication provider -->
|
||||
<add key="AWStats.AuthenticationProvider" value="WebsitePanel.AWStats.Viewer.WebsitePanelAuthenticationProvider, WebsitePanel.AWStats.Viewer"/>
|
||||
|
||||
<!-- ConfigFileAuthenticationProvider settings -->
|
||||
<add key="AWStats.ConfigFileAuthenticationProvider.DataFolder" value="~/cgi-bin"/>
|
||||
|
||||
<!-- WebsitePanelAuthenticationProvider settings -->
|
||||
<add key="AWStats.WebsitePanelAuthenticationProvider.EnterpriseServer" value="http://localhost/EnterpriseServer"/>
|
||||
|
||||
</appSettings>
|
||||
<system.web>
|
||||
<compilation defaultLanguage="c#" debug="true"/>
|
||||
<customErrors mode="RemoteOnly"/>
|
||||
<!-- AUTHENTICATION -->
|
||||
<authentication mode="Forms">
|
||||
<forms name=".AWSTATSVIEWER" loginUrl="default.aspx" protection="All" timeout="30" path="/">
|
||||
</forms>
|
||||
</authentication>
|
||||
<!-- AUTHORIZATION -->
|
||||
<authorization>
|
||||
<allow users="*"/>
|
||||
<!-- Allow all users -->
|
||||
</authorization>
|
||||
</system.web>
|
||||
</configuration>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<!-- AWStats Viewer Settings -->
|
||||
<add key="AWStats.URL" value="/cgi-bin/awstats.pl"/>
|
||||
<add key="AWStats.Username" value=""/>
|
||||
<add key="AWStats.Password" value=""/>
|
||||
<!-- Messages -->
|
||||
<add key="AWStats.Message.DomainNotFound" value="Advanced statistics is not enabled for the specified domain. Login to control panel, open 'My Resources -> Advanced Statistics' page and add a new statistics site."/>
|
||||
<add key="AWStats.Message.WrongUsername" value="Account with the specified username does not exist! Make sure you type correct Control Panel username/password."/>
|
||||
<add key="AWStats.Message.WrongPassword" value="Incorrect password has been specified!"/>
|
||||
<!-- Authentication provider -->
|
||||
<add key="AWStats.AuthenticationProvider" value="WebsitePanel.AWStats.Viewer.WebsitePanelAuthenticationProvider, WebsitePanel.AWStats.Viewer"/>
|
||||
<!-- ConfigFileAuthenticationProvider settings -->
|
||||
<add key="AWStats.ConfigFileAuthenticationProvider.DataFolder" value="~/cgi-bin"/>
|
||||
<!-- WebsitePanelAuthenticationProvider settings -->
|
||||
<add key="AWStats.WebsitePanelAuthenticationProvider.EnterpriseServer" value="http://localhost/EnterpriseServer"/>
|
||||
</appSettings>
|
||||
<system.web>
|
||||
<compilation defaultLanguage="c#" debug="true" targetFramework="4.0"/>
|
||||
<customErrors mode="RemoteOnly"/>
|
||||
<!-- AUTHENTICATION -->
|
||||
<authentication mode="Forms">
|
||||
<forms name=".AWSTATSVIEWER" loginUrl="default.aspx" protection="All" timeout="30" path="/">
|
||||
</forms>
|
||||
</authentication>
|
||||
<!-- AUTHORIZATION -->
|
||||
<authorization>
|
||||
<allow users="*"/>
|
||||
<!-- Allow all users -->
|
||||
</authorization>
|
||||
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web>
|
||||
</configuration>
|
|
@ -0,0 +1,179 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{5F8C0079-C339-4590-BF10-DBA470329293}</ProjectGuid>
|
||||
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
<AssemblyKeyContainerName>
|
||||
</AssemblyKeyContainerName>
|
||||
<AssemblyName>WebsitePanel.AWStats.Viewer</AssemblyName>
|
||||
<AssemblyOriginatorKeyFile>
|
||||
</AssemblyOriginatorKeyFile>
|
||||
<DefaultClientScript>JScript</DefaultClientScript>
|
||||
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
|
||||
<DefaultTargetSchema>IE50</DefaultTargetSchema>
|
||||
<DelaySign>false</DelaySign>
|
||||
<OutputType>Library</OutputType>
|
||||
<RootNamespace>WebsitePanel.AWStats.Viewer</RootNamespace>
|
||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||
<StartupObject>
|
||||
</StartupObject>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>false</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>full</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>true</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>none</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Web.Services3">
|
||||
<HintPath>..\..\..\Lib\Microsoft.Web.Services3.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System">
|
||||
<Name>System</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Data">
|
||||
<Name>System.Data</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Drawing">
|
||||
<Name>System.Drawing</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Web">
|
||||
<Name>System.Web</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.ApplicationServices" />
|
||||
<Reference Include="System.Web.DynamicData" />
|
||||
<Reference Include="System.Web.Entity" />
|
||||
<Reference Include="System.Web.Extensions" />
|
||||
<Reference Include="System.Web.Services">
|
||||
<Name>System.Web.Services</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml">
|
||||
<Name>System.XML</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="WebsitePanel.EnterpriseServer.Base, Version=1.0.0.0, Culture=neutral, PublicKeyToken=da8782a6fc4d0081, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WebsitePanel.EnterpriseServer.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=da8782a6fc4d0081, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\Bin\WebsitePanel.EnterpriseServer.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WebsitePanel.Providers.Base, Version=1.0.0.0, Culture=neutral, PublicKeyToken=da8782a6fc4d0081, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\Bin\WebsitePanel.Providers.Base.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Default.aspx" />
|
||||
<Compile Include="..\..\VersionInfo.cs">
|
||||
<Link>VersionInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="AssemblyInfo.cs" />
|
||||
<Compile Include="Default.aspx.cs">
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
<DependentUpon>Default.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Default.aspx.designer.cs">
|
||||
<DependentUpon>Default.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Providers\AuthenticationProvider.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Providers\ConfigFile\ConfigFileAuthenticationProvider.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Providers\WebsitePanel\WebsitePanelAuthenticationProvider.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Content Include="Readme.htm" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Web-v2.0.config" />
|
||||
<None Include="Web.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
|
||||
<WebProjectProperties>
|
||||
<UseIIS>False</UseIIS>
|
||||
<AutoAssignPort>True</AutoAssignPort>
|
||||
<DevelopmentServerPort>1444</DevelopmentServerPort>
|
||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
||||
<IISUrl>
|
||||
</IISUrl>
|
||||
<NTLMAuthentication>False</NTLMAuthentication>
|
||||
<UseCustomServer>False</UseCustomServer>
|
||||
<CustomServerUrl>
|
||||
</CustomServerUrl>
|
||||
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
|
||||
</WebProjectProperties>
|
||||
</FlavorProperties>
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
|
||||
</Project>
|
20
WebsitePanel/Sources/Tools/WebsitePanel.FilesComparer.sln
Normal file
20
WebsitePanel/Sources/Tools/WebsitePanel.FilesComparer.sln
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.FilesComparer", "WebsitePanel.FilesComparer\WebsitePanel.FilesComparer.csproj", "{85315088-B2F0-439B-9360-4D5BECE630DB}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{85315088-B2F0-439B-9360-4D5BECE630DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{85315088-B2F0-439B-9360-4D5BECE630DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{85315088-B2F0-439B-9360-4D5BECE630DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{85315088-B2F0-439B-9360-4D5BECE630DB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,75 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WebsitePanel.FilesComparer
|
||||
{
|
||||
public class CRC32
|
||||
{
|
||||
private UInt32[] crc32Table;
|
||||
private const int BUFFER_SIZE = 1024;
|
||||
|
||||
/// <summary>
|
||||
/// Returns the CRC32 for the specified stream.
|
||||
/// </summary>
|
||||
/// <param name="stream">The stream to calculate the CRC32 for</param>
|
||||
/// <returns>An unsigned integer containing the CRC32 calculation</returns>
|
||||
public UInt32 GetCrc32(System.IO.Stream stream)
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
UInt32 crc32Result;
|
||||
crc32Result = 0xFFFFFFFF;
|
||||
byte[] buffer = new byte[BUFFER_SIZE];
|
||||
int readSize = BUFFER_SIZE;
|
||||
|
||||
int count = stream.Read(buffer, 0, readSize);
|
||||
while (count > 0)
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
crc32Result = ((crc32Result) >> 8) ^ crc32Table[(buffer[i]) ^ ((crc32Result) & 0x000000FF)];
|
||||
}
|
||||
count = stream.Read(buffer, 0, readSize);
|
||||
}
|
||||
|
||||
return ~crc32Result;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Construct an instance of the CRC32 class, pre-initialising the table
|
||||
/// for speed of lookup.
|
||||
/// </summary>
|
||||
public CRC32()
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
// This is the official polynomial used by CRC32 in PKZip.
|
||||
// Often the polynomial is shown reversed as 0x04C11DB7.
|
||||
UInt32 dwPolynomial = 0xEDB88320;
|
||||
UInt32 i, j;
|
||||
|
||||
crc32Table = new UInt32[256];
|
||||
|
||||
UInt32 dwCrc;
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
dwCrc = i;
|
||||
for (j = 8; j > 0; j--)
|
||||
{
|
||||
if ((dwCrc & 1) == 1)
|
||||
{
|
||||
dwCrc = (dwCrc >> 1) ^ dwPolynomial;
|
||||
}
|
||||
else
|
||||
{
|
||||
dwCrc >>= 1;
|
||||
}
|
||||
}
|
||||
crc32Table[i] = dwCrc;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
241
WebsitePanel/Sources/Tools/WebsitePanel.FilesComparer/Program.cs
Normal file
241
WebsitePanel/Sources/Tools/WebsitePanel.FilesComparer/Program.cs
Normal file
|
@ -0,0 +1,241 @@
|
|||
using System;
|
||||
using System.Xml;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WebsitePanel.FilesComparer
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static string FilesToExclude;
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
if (args.Length < 3 && args.Length > 4)
|
||||
{
|
||||
Console.WriteLine("Usage: Diff.exe [sourceDir] [targetDir] [resultDir] [/ex:fileToExclude.ext,fileToExclude.ext]");
|
||||
Console.WriteLine("Example: Diff.exe c:\\WSP1 c:\\WSP2 c:\\result /ex:Default.aspx,Error.htm");
|
||||
Console.WriteLine("NOTE: Please make sure all parameters containg spaces are enclosed in quotes.");
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
//
|
||||
if (args.Length == 4)
|
||||
FilesToExclude = args[3];
|
||||
//
|
||||
CreateComparison(args[0], args[1], args[2]);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateComparison(string sourcePath, string targetPath, string pathToSave)
|
||||
{
|
||||
|
||||
DeleteDir(pathToSave, false);
|
||||
|
||||
string[] sourceFiles = GetFiles(sourcePath);
|
||||
string[] targetFiles = GetFiles(targetPath);
|
||||
|
||||
if (sourcePath.EndsWith(@"\"))
|
||||
sourcePath = sourcePath.Substring(0, sourcePath.Length - 1);
|
||||
|
||||
if (targetPath.EndsWith(@"\"))
|
||||
targetPath = targetPath.Substring(0, targetPath.Length - 1);
|
||||
|
||||
int sIndexOf = sourcePath.Length;
|
||||
int tIndexOf = targetPath.Length;
|
||||
|
||||
List<string> filesA = new List<string>();
|
||||
List<string> filesAlower = new List<string>();
|
||||
List<string> filesB = new List<string>();
|
||||
List<string> filesBlower = new List<string>();
|
||||
List<string> excludes = new List<string>();
|
||||
|
||||
excludes.Add("bin");
|
||||
excludes.Add("setup");
|
||||
|
||||
string file;
|
||||
|
||||
foreach (string sourceFile in sourceFiles)
|
||||
{
|
||||
file = sourceFile.Substring(sIndexOf);
|
||||
if (file.StartsWith("\\"))
|
||||
file = file.TrimStart('\\');
|
||||
filesA.Add(file);
|
||||
filesAlower.Add(file.ToLower());
|
||||
}
|
||||
|
||||
foreach (string targetFile in targetFiles)
|
||||
{
|
||||
file = targetFile.Substring(tIndexOf);
|
||||
if (file.StartsWith("\\"))
|
||||
file = file.TrimStart('\\');
|
||||
filesB.Add(file);
|
||||
filesBlower.Add(file.ToLower());
|
||||
}
|
||||
|
||||
//files to delete
|
||||
foreach (string fileA in filesA)
|
||||
{
|
||||
file = fileA.ToLower();
|
||||
if (file.StartsWith("bin\\") || file.StartsWith("setup\\") || file.EndsWith("sitesettings.config"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (filesBlower.IndexOf(file) == -1)
|
||||
excludes.Add(fileA);
|
||||
}
|
||||
|
||||
//files to copy
|
||||
foreach (string fileB in filesB)
|
||||
{
|
||||
file = fileB.ToLower();
|
||||
if (file.EndsWith("sitesettings.config"))
|
||||
continue;
|
||||
|
||||
if (file.StartsWith("bin\\") || file.StartsWith("setup\\"))
|
||||
{
|
||||
//copy all new files from bin and setup folders
|
||||
CopyFile(targetPath, fileB, pathToSave);
|
||||
continue;
|
||||
}
|
||||
|
||||
//try to find a new file in the list of old files
|
||||
int index = filesAlower.IndexOf(file);
|
||||
if (index == -1)
|
||||
{
|
||||
//old files do not contain new file - we need to copy a new file
|
||||
CopyFile(targetPath, fileB, pathToSave);
|
||||
}
|
||||
else
|
||||
{
|
||||
//old files contain the same file - we need to compare files
|
||||
string oldFile = Path.Combine(sourcePath, filesA[index]);
|
||||
string newFile = Path.Combine(targetPath, fileB);
|
||||
if (Diff(oldFile, newFile))
|
||||
{
|
||||
//files are not equal - we need to delete old file and copy a new file
|
||||
excludes.Add(filesA[index]);
|
||||
CopyFile(targetPath, fileB, pathToSave);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string deleteFile = Path.Combine(pathToSave, "setup\\delete.txt");
|
||||
WriteFilesToDelete(deleteFile, excludes);
|
||||
|
||||
}
|
||||
|
||||
private static void DeleteDir(string path, bool delRoot)
|
||||
{
|
||||
if (Directory.Exists(path))
|
||||
{
|
||||
string[] files = Directory.GetFiles(path);
|
||||
foreach (string file in files)
|
||||
{
|
||||
File.Delete(file);
|
||||
}
|
||||
string[] dirs = Directory.GetDirectories(path);
|
||||
foreach (string dir in dirs)
|
||||
{
|
||||
DeleteDir(dir, true);
|
||||
}
|
||||
|
||||
if (delRoot)
|
||||
{
|
||||
Directory.Delete(path);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static bool Diff(string oldFile, string newFile)
|
||||
{
|
||||
FileInfo fi1 = new FileInfo(oldFile);
|
||||
FileInfo fi2 = new FileInfo(newFile);
|
||||
if (fi1.Length != fi2.Length)
|
||||
return true;
|
||||
|
||||
UInt32 hash1 = GetCRC32(oldFile);
|
||||
UInt32 hash2 = GetCRC32(newFile);
|
||||
|
||||
return (hash1 != hash2);
|
||||
|
||||
}
|
||||
|
||||
private static UInt32 GetCRC32(string oldFile)
|
||||
{
|
||||
CRC32 c = new CRC32();
|
||||
UInt32 crc = 0;
|
||||
|
||||
using (FileStream f = new FileStream(oldFile, FileMode.Open, FileAccess.Read, FileShare.Read, 8192))
|
||||
{
|
||||
crc = c.GetCrc32(f);
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
|
||||
private static void CopyFile(string sourceDir, string fileName, string targetDir)
|
||||
{
|
||||
string destFile = Path.Combine(targetDir, fileName);
|
||||
string dir = Path.GetDirectoryName(destFile);
|
||||
if (!Directory.Exists(dir))
|
||||
{
|
||||
Directory.CreateDirectory(dir);
|
||||
}
|
||||
string sourceFile = Path.Combine(sourceDir, fileName);
|
||||
File.Copy(sourceFile, destFile);
|
||||
}
|
||||
|
||||
private static void WriteFilesToDelete(string fileName, List<string> list)
|
||||
{
|
||||
string dir = Path.GetDirectoryName(fileName);
|
||||
if (!Directory.Exists(dir))
|
||||
{
|
||||
Directory.CreateDirectory(dir);
|
||||
}
|
||||
|
||||
using (StreamWriter sw = new StreamWriter(fileName))
|
||||
{
|
||||
// Write all files received
|
||||
foreach (string file in list)
|
||||
{
|
||||
sw.WriteLine(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static string[] GetFiles(string path)
|
||||
{
|
||||
var filesListRaw = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
|
||||
|
||||
// See if the switch is specified
|
||||
bool useAllFiles = String.IsNullOrEmpty(FilesToExclude);
|
||||
// Switch is not empty so do the check
|
||||
if (!useAllFiles)
|
||||
{
|
||||
var resultList = new List<string>();
|
||||
//
|
||||
foreach (string file in filesListRaw)
|
||||
{
|
||||
// Verify to include the file
|
||||
if (FilesToExclude.IndexOf(Path.GetFileName(file), StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
continue;
|
||||
//
|
||||
resultList.Add(file);
|
||||
}
|
||||
//
|
||||
return resultList.ToArray();
|
||||
}
|
||||
//
|
||||
return filesListRaw;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("WebsitePanel.FilesComparer")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyProduct("WebsitePanel.FilesComparer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("235a18ac-7560-49ac-96fc-a01d5f9a862d")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
|
@ -0,0 +1,99 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.50727</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{85315088-B2F0-439B-9360-4D5BECE630DB}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>WebsitePanel.FilesComparer</RootNamespace>
|
||||
<AssemblyName>diff</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<OldToolsVersion>2.0</OldToolsVersion>
|
||||
<UpgradeBackupLocation />
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\..\Tools\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\..\Tools\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject>WebsitePanel.FilesComparer.Program</StartupObject>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\VersionInfo.cs">
|
||||
<Link>VersionInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="CRC32.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Windows Installer 3.1</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<!-- 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">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
26
WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk.sln
Normal file
26
WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk.sln
Normal file
|
@ -0,0 +1,26 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4DED129E-BCF6-49B8-B242-027733EA481E}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\..\..\LICENSE.txt = ..\..\..\LICENSE.txt
|
||||
..\..\..\Readme.htm = ..\..\..\Readme.htm
|
||||
..\..\..\ReleaseNotes.htm = ..\..\..\ReleaseNotes.htm
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Import.CsvBulk", "WebsitePanel.Import.CsvBulk\WebsitePanel.Import.CsvBulk.csproj", "{CAD845DC-B209-4A07-94DA-B12FD14121F3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{CAD845DC-B209-4A07-94DA-B12FD14121F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CAD845DC-B209-4A07-94DA-B12FD14121F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CAD845DC-B209-4A07-94DA-B12FD14121F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CAD845DC-B209-4A07-94DA-B12FD14121F3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="InputFile" value="test.csv"/>
|
||||
<add key="TargetOrganization" value="Import"/>
|
||||
<add key="ES.WebService" value="http://127.0.0.1:9002"/>
|
||||
<add key="ES.Username" value="serveradmin"/>
|
||||
<add key="ES.Password" value="serveradmin"/>
|
||||
<add key="ConnectionString" value="server=db_server;database=WebsitePanel;uid=WebsitePanel;pwd=password;"/>
|
||||
<add key="LogFile" value="WebsitePanel.Import.CsvBulk.log"/>
|
||||
</appSettings>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
211
WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk/ES.cs
Normal file
211
WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk/ES.cs
Normal file
|
@ -0,0 +1,211 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Text;
|
||||
|
||||
using Microsoft.Web.Services3;
|
||||
using WebsitePanel.EnterpriseServer;
|
||||
using WebsitePanel.EnterpriseServer.HostedSolution;
|
||||
|
||||
|
||||
namespace WebsitePanel.Import.CsvBulk
|
||||
{
|
||||
/// <summary>
|
||||
/// ES Proxy class
|
||||
/// </summary>
|
||||
public class ES
|
||||
{
|
||||
private static ServerContext serverContext = null;
|
||||
|
||||
public static void InitializeServices(ServerContext context)
|
||||
{
|
||||
serverContext = context;
|
||||
}
|
||||
|
||||
public static ES Services
|
||||
{
|
||||
get
|
||||
{
|
||||
return new ES();
|
||||
}
|
||||
}
|
||||
|
||||
public esSystem System
|
||||
{
|
||||
get { return GetCachedProxy<esSystem>(); }
|
||||
}
|
||||
|
||||
public esApplicationsInstaller ApplicationsInstaller
|
||||
{
|
||||
get { return GetCachedProxy<esApplicationsInstaller>(); }
|
||||
}
|
||||
|
||||
public esAuditLog AuditLog
|
||||
{
|
||||
get { return GetCachedProxy<esAuditLog>(); }
|
||||
}
|
||||
|
||||
public esAuthentication Authentication
|
||||
{
|
||||
get { return GetCachedProxy<esAuthentication>(false); }
|
||||
}
|
||||
|
||||
public esComments Comments
|
||||
{
|
||||
get { return GetCachedProxy<esComments>(); }
|
||||
}
|
||||
|
||||
public esDatabaseServers DatabaseServers
|
||||
{
|
||||
get { return GetCachedProxy<esDatabaseServers>(); }
|
||||
}
|
||||
|
||||
public esFiles Files
|
||||
{
|
||||
get { return GetCachedProxy<esFiles>(); }
|
||||
}
|
||||
|
||||
public esFtpServers FtpServers
|
||||
{
|
||||
get { return GetCachedProxy<esFtpServers>(); }
|
||||
}
|
||||
|
||||
public esMailServers MailServers
|
||||
{
|
||||
get { return GetCachedProxy<esMailServers>(); }
|
||||
}
|
||||
|
||||
public esOperatingSystems OperatingSystems
|
||||
{
|
||||
get { return GetCachedProxy<esOperatingSystems>(); }
|
||||
}
|
||||
|
||||
public esPackages Packages
|
||||
{
|
||||
get { return GetCachedProxy<esPackages>(); }
|
||||
}
|
||||
|
||||
public esScheduler Scheduler
|
||||
{
|
||||
get { return GetCachedProxy<esScheduler>(); }
|
||||
}
|
||||
|
||||
public esTasks Tasks
|
||||
{
|
||||
get { return GetCachedProxy<esTasks>(); }
|
||||
}
|
||||
|
||||
public esServers Servers
|
||||
{
|
||||
get { return GetCachedProxy<esServers>(); }
|
||||
}
|
||||
|
||||
public esStatisticsServers StatisticsServers
|
||||
{
|
||||
get { return GetCachedProxy<esStatisticsServers>(); }
|
||||
}
|
||||
|
||||
public esUsers Users
|
||||
{
|
||||
get { return GetCachedProxy<esUsers>(); }
|
||||
}
|
||||
|
||||
public esWebServers WebServers
|
||||
{
|
||||
get { return GetCachedProxy<esWebServers>(); }
|
||||
}
|
||||
|
||||
public esSharePointServers SharePointServers
|
||||
{
|
||||
get { return GetCachedProxy<esSharePointServers>(); }
|
||||
}
|
||||
|
||||
public esImport Import
|
||||
{
|
||||
get { return GetCachedProxy<esImport>(); }
|
||||
}
|
||||
|
||||
public esBackup Backup
|
||||
{
|
||||
get { return GetCachedProxy<esBackup>(); }
|
||||
}
|
||||
|
||||
|
||||
public esExchangeServer ExchangeServer
|
||||
{
|
||||
get { return GetCachedProxy<esExchangeServer>(); }
|
||||
}
|
||||
|
||||
public esOrganizations Organizations
|
||||
{
|
||||
get
|
||||
{
|
||||
return GetCachedProxy<esOrganizations>();
|
||||
}
|
||||
}
|
||||
|
||||
protected ES()
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual T GetCachedProxy<T>()
|
||||
{
|
||||
return GetCachedProxy<T>(true);
|
||||
}
|
||||
|
||||
protected virtual T GetCachedProxy<T>(bool secureCalls)
|
||||
{
|
||||
if (serverContext == null)
|
||||
{
|
||||
throw new Exception("Server context is not specified");
|
||||
}
|
||||
|
||||
Type t = typeof(T);
|
||||
string key = t.FullName + ".ServiceProxy";
|
||||
T proxy = (T)Activator.CreateInstance(t);
|
||||
|
||||
object p = proxy;
|
||||
|
||||
// configure proxy
|
||||
EnterpriseServerProxyConfigurator cnfg = new EnterpriseServerProxyConfigurator();
|
||||
cnfg.EnterpriseServerUrl = serverContext.Server;
|
||||
if (secureCalls)
|
||||
{
|
||||
cnfg.Username = serverContext.Username;
|
||||
cnfg.Password = serverContext.Password;
|
||||
}
|
||||
|
||||
cnfg.Configure((WebServicesClientProtocol)p);
|
||||
|
||||
return proxy;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,770 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.IO;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Configuration;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
using WebsitePanel.Providers.HostedSolution;
|
||||
using WebsitePanel.EnterpriseServer;
|
||||
|
||||
|
||||
namespace WebsitePanel.Import.CsvBulk
|
||||
{
|
||||
public enum AccountTypes
|
||||
{
|
||||
Mailbox,
|
||||
Contact,
|
||||
User
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imports mailboxes from csv file
|
||||
/// </summary>
|
||||
public class ExchangeImport
|
||||
{
|
||||
public const int ERROR_USER_WRONG_PASSWORD = -110;
|
||||
public const int ERROR_USER_WRONG_USERNAME = -109;
|
||||
public const int ERROR_USER_ACCOUNT_CANCELLED = -105;
|
||||
public const int ERROR_USER_ACCOUNT_DEMO = -106;
|
||||
public const int ERROR_USER_ACCOUNT_PENDING = -103;
|
||||
public const int ERROR_USER_ACCOUNT_SHOULD_BE_ADMINISTRATOR = -107;
|
||||
public const int ERROR_USER_ACCOUNT_SHOULD_BE_RESELLER = -108;
|
||||
public const int ERROR_USER_ACCOUNT_SUSPENDED = -104;
|
||||
|
||||
private ServerContext serverContext;
|
||||
private int totalMailboxes = 0;
|
||||
private int totalContacts = 0;
|
||||
private int totalUsers = 0;
|
||||
private int index = 0;
|
||||
|
||||
private int DisplayNameIndex = -1;
|
||||
private int EmailAddressIndex = -1;
|
||||
private int PasswordIndex = -1;
|
||||
private int FirstNameIndex = -1;
|
||||
private int MiddleNameIndex = -1;
|
||||
private int LastNameIndex = -1;
|
||||
private int TypeIndex = -1;
|
||||
private int AddressIndex = -1;
|
||||
private int CityIndex = -1;
|
||||
private int StateIndex = -1;
|
||||
private int ZipIndex = -1;
|
||||
private int CountryIndex = -1;
|
||||
private int JobTitleIndex = -1;
|
||||
private int CompanyIndex = -1;
|
||||
private int DepartmentIndex = -1;
|
||||
private int OfficeIndex = -1;
|
||||
private int BusinessPhoneIndex = -1;
|
||||
private int FaxIndex = -1;
|
||||
private int HomePhoneIndex = -1;
|
||||
private int MobilePhoneIndex = -1;
|
||||
private int PagerIndex = -1;
|
||||
private int WebPageIndex = -1;
|
||||
private int NotesIndex = -1;
|
||||
|
||||
|
||||
public ExchangeImport()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts import process
|
||||
/// </summary>
|
||||
public void Start()
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
//Authenticates user
|
||||
if (!Connect(
|
||||
ConfigurationManager.AppSettings["ES.WebService"],
|
||||
ConfigurationManager.AppSettings["ES.Username"],
|
||||
ConfigurationManager.AppSettings["ES.Password"]))
|
||||
return;
|
||||
|
||||
// query organization Id from DB
|
||||
int itemId = GetOrganizationId();
|
||||
|
||||
//Parse csv file
|
||||
if (itemId != 0)
|
||||
{
|
||||
ProcessFile(ConfigurationManager.AppSettings["InputFile"], itemId);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError("Unexpected error occured", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns Organization Id from database
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private int GetOrganizationId()
|
||||
{
|
||||
SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
|
||||
SqlCommand cmd = new SqlCommand();
|
||||
|
||||
int id = 0;
|
||||
string orgId = ConfigurationManager.AppSettings["TargetOrganization"];
|
||||
|
||||
cmd.CommandText = string.Format("SELECT ItemID FROM ExchangeOrganizations WHERE OrganizationID = '{0}'", orgId);
|
||||
cmd.CommandType = CommandType.Text;
|
||||
cmd.Connection = sqlConnection;
|
||||
try
|
||||
{
|
||||
sqlConnection.Open();
|
||||
object obj = cmd.ExecuteScalar();
|
||||
if (obj == null)
|
||||
{
|
||||
Log.WriteError(string.Format("Organization '{0}' not found", orgId));
|
||||
}
|
||||
else
|
||||
{
|
||||
id = (int)obj;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError("SQL error occured", ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (sqlConnection != null)
|
||||
sqlConnection.Close();
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
private void ProcessFile(string inputFile, int orgId)
|
||||
{
|
||||
// regexp to parse csv string
|
||||
Regex regex = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
|
||||
|
||||
try
|
||||
{
|
||||
if (!File.Exists(inputFile))
|
||||
{
|
||||
Log.WriteError(string.Format("File '{0}' not found", inputFile));
|
||||
return;
|
||||
}
|
||||
index = 0;
|
||||
|
||||
using (StreamReader sr = new StreamReader(inputFile))
|
||||
{
|
||||
string line;
|
||||
|
||||
// Read lines from the file until the end of
|
||||
// the file is reached.
|
||||
while ((line = sr.ReadLine()) != null)
|
||||
{
|
||||
//process line
|
||||
if (!ProcessLine(index, orgId, line, regex))
|
||||
{
|
||||
ShowSummary();
|
||||
return;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
ShowSummary();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Let the user know what went wrong.
|
||||
Log.WriteError("Unexpected error occured", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowSummary()
|
||||
{
|
||||
Log.WriteLine(string.Format("{0} line(s) processed", index));
|
||||
Log.WriteLine(string.Format("{0} mailbox(s) imported", totalMailboxes));
|
||||
Log.WriteLine(string.Format("{0} contact(s) imported", totalContacts));
|
||||
Log.WriteLine(string.Format("{0} user(s) imported", totalUsers));
|
||||
}
|
||||
|
||||
private bool ProcessLine(int index, int orgId, string line, Regex regex)
|
||||
{
|
||||
//ignore null string
|
||||
if (string.IsNullOrEmpty(line))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
string[] cells = regex.Split(line);
|
||||
|
||||
for (int i = 0; i < cells.Length; i++)
|
||||
{
|
||||
cells[i] = cells[i].Trim(new char[] { '"' });
|
||||
}
|
||||
|
||||
// process first row - document heading
|
||||
// calculate indexes of required columns
|
||||
if (index == 0)
|
||||
{
|
||||
for (int i = 0; i < cells.Length; i++)
|
||||
{
|
||||
if (StringEquals(cells[i], "Display Name"))
|
||||
DisplayNameIndex = i;
|
||||
else if (StringEquals(cells[i], "E-mail Address"))
|
||||
EmailAddressIndex = i;
|
||||
else if (StringEquals(cells[i], "Password"))
|
||||
PasswordIndex = i;
|
||||
else if (StringEquals(cells[i], "First Name"))
|
||||
FirstNameIndex = i;
|
||||
else if (StringEquals(cells[i], "Middle Name"))
|
||||
MiddleNameIndex = i;
|
||||
else if (StringEquals(cells[i], "Last Name"))
|
||||
LastNameIndex = i;
|
||||
else if (StringEquals(cells[i], "Type"))
|
||||
TypeIndex = i;
|
||||
|
||||
else if (StringEquals(cells[i], "Address"))
|
||||
AddressIndex = i;
|
||||
else if (StringEquals(cells[i], "City"))
|
||||
CityIndex = i;
|
||||
else if (StringEquals(cells[i], "State"))
|
||||
StateIndex = i;
|
||||
else if (StringEquals(cells[i], "Zip"))
|
||||
ZipIndex = i;
|
||||
else if (StringEquals(cells[i], "Country"))
|
||||
CountryIndex = i;
|
||||
else if (StringEquals(cells[i], "Job Title"))
|
||||
JobTitleIndex = i;
|
||||
else if (StringEquals(cells[i], "Company"))
|
||||
CompanyIndex = i;
|
||||
else if (StringEquals(cells[i], "Department"))
|
||||
DepartmentIndex = i;
|
||||
else if (StringEquals(cells[i], "Office"))
|
||||
OfficeIndex = i;
|
||||
else if (StringEquals(cells[i], "Business Phone"))
|
||||
BusinessPhoneIndex = i;
|
||||
else if (StringEquals(cells[i], "Fax"))
|
||||
FaxIndex = i;
|
||||
else if (StringEquals(cells[i], "Home Phone"))
|
||||
HomePhoneIndex = i;
|
||||
else if (StringEquals(cells[i], "Mobile Phone"))
|
||||
MobilePhoneIndex = i;
|
||||
else if (StringEquals(cells[i], "Pager"))
|
||||
PagerIndex = i;
|
||||
else if (StringEquals(cells[i], "Web Page"))
|
||||
WebPageIndex = i;
|
||||
else if (StringEquals(cells[i], "Notes"))
|
||||
NotesIndex = i;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//check csv structure
|
||||
if (TypeIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Type' not found");
|
||||
return false;
|
||||
}
|
||||
if (DisplayNameIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Display Name' not found");
|
||||
return false;
|
||||
}
|
||||
if (EmailAddressIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'E-mail Address' not found");
|
||||
return false;
|
||||
}
|
||||
if (PasswordIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Password' not found");
|
||||
return false;
|
||||
}
|
||||
if (FirstNameIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'First Name' not found");
|
||||
return false;
|
||||
}
|
||||
if (MiddleNameIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Middle Name' not found");
|
||||
return false;
|
||||
}
|
||||
if (LastNameIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Last Name' not found");
|
||||
return false;
|
||||
}
|
||||
if (AddressIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Address' not found");
|
||||
return false;
|
||||
}
|
||||
if (CityIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'City' not found");
|
||||
return false;
|
||||
}
|
||||
if (StateIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'State' not found");
|
||||
return false;
|
||||
}
|
||||
if (ZipIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Zip' not found");
|
||||
return false;
|
||||
}
|
||||
if (CountryIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Country' not found");
|
||||
return false;
|
||||
}
|
||||
if (JobTitleIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Job Title' not found");
|
||||
return false;
|
||||
}
|
||||
if (CompanyIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Company' not found");
|
||||
return false;
|
||||
}
|
||||
if (DepartmentIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Department' not found");
|
||||
return false;
|
||||
}
|
||||
if (OfficeIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Office' not found");
|
||||
return false;
|
||||
}
|
||||
if (BusinessPhoneIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Last Name' not found");
|
||||
return false;
|
||||
}
|
||||
if (FaxIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Fax' not found");
|
||||
return false;
|
||||
}
|
||||
if (HomePhoneIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Home Phone' not found");
|
||||
return false;
|
||||
}
|
||||
if (MobilePhoneIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Mobile Phone' not found");
|
||||
return false;
|
||||
}
|
||||
if (PagerIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Pager' not found");
|
||||
return false;
|
||||
}
|
||||
if (WebPageIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'WebPage' not found");
|
||||
return false;
|
||||
}
|
||||
if (NotesIndex == -1)
|
||||
{
|
||||
Log.WriteError("Column 'Notes' not found");
|
||||
return false;
|
||||
}
|
||||
|
||||
string typeName = cells[TypeIndex];
|
||||
string displayName = cells[DisplayNameIndex];
|
||||
string emailAddress = cells[EmailAddressIndex];
|
||||
string password = cells[PasswordIndex];
|
||||
string firstName = cells[FirstNameIndex];
|
||||
string middleName = cells[MiddleNameIndex];
|
||||
string lastName = cells[LastNameIndex];
|
||||
string address = cells[AddressIndex];
|
||||
string city = cells[CityIndex];
|
||||
string state = cells[StateIndex];
|
||||
string zip = cells[ZipIndex];
|
||||
string country = cells[CountryIndex];
|
||||
string jobTitle = cells[JobTitleIndex];
|
||||
string company = cells[CompanyIndex];
|
||||
string department = cells[DepartmentIndex];
|
||||
string office = cells[OfficeIndex];
|
||||
string businessPhone = cells[BusinessPhoneIndex];
|
||||
string fax = cells[FaxIndex];
|
||||
string homePhone = cells[HomePhoneIndex];
|
||||
string mobilePhone = cells[MobilePhoneIndex];
|
||||
string pager = cells[PagerIndex];
|
||||
string webPage = cells[WebPageIndex];
|
||||
string notes = cells[NotesIndex];
|
||||
|
||||
|
||||
|
||||
|
||||
if (string.IsNullOrEmpty(typeName))
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: field 'Type' is empty", index + 1));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!StringEquals(typeName, "Mailbox") &&
|
||||
!StringEquals(typeName, "Contact") &&
|
||||
!StringEquals(typeName, "User"))
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: field 'Type' is invalid. Should be 'Mailbox' or 'Contact' or 'User'", index + 1));
|
||||
return false;
|
||||
}
|
||||
|
||||
AccountTypes type = (AccountTypes)Enum.Parse(typeof(AccountTypes), typeName, true);
|
||||
|
||||
if (string.IsNullOrEmpty(displayName))
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: field 'Display Name' is empty", index + 1));
|
||||
return false;
|
||||
}
|
||||
if (string.IsNullOrEmpty(emailAddress))
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: field 'E-mail Address' is empty", index + 1));
|
||||
return false;
|
||||
}
|
||||
if (emailAddress.IndexOf("@") == -1)
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: field 'E-mail Address' is invalid", index + 1));
|
||||
return false;
|
||||
}
|
||||
if (type == AccountTypes.Mailbox && string.IsNullOrEmpty(password))
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: field 'Password' is empty", index + 1));
|
||||
return false;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(middleName) && middleName.Length > 6)
|
||||
{
|
||||
middleName = middleName.Substring(0, 6);
|
||||
Log.WriteInfo(string.Format("Warning at line {0}: field 'Middle Name' was truncated to 6 symbols", index + 1));
|
||||
}
|
||||
|
||||
if (type == AccountTypes.Mailbox)
|
||||
{
|
||||
//create mailbox using web service
|
||||
if (!CreateMailbox(index, orgId, displayName, emailAddress, password, firstName, middleName, lastName,
|
||||
address, city, state, zip, country, jobTitle, company, department, office,
|
||||
businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
totalMailboxes++;
|
||||
}
|
||||
else if (type == AccountTypes.Contact)
|
||||
{
|
||||
//create contact using web service
|
||||
if (!CreateContact(index, orgId, displayName, emailAddress, firstName, middleName, lastName,
|
||||
address, city, state, zip, country, jobTitle, company, department, office,
|
||||
businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
totalContacts++;
|
||||
}
|
||||
else if (type == AccountTypes.User)
|
||||
{
|
||||
//create user using web service
|
||||
if (!CreateUser(index, orgId, displayName, emailAddress, password, firstName, middleName, lastName,
|
||||
address, city, state, zip, country, jobTitle, company, department, office,
|
||||
businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
totalUsers++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates mailbox
|
||||
/// </summary>
|
||||
private bool CreateMailbox(int index, int orgId, string displayName, string emailAddress, string password, string firstName, string middleName, string lastName,
|
||||
string address, string city, string state, string zip, string country, string jobTitle, string company, string department, string office,
|
||||
string businessPhone, string fax, string homePhone, string mobilePhone, string pager, string webPage, string notes)
|
||||
{
|
||||
bool ret = false;
|
||||
try
|
||||
{
|
||||
string name = emailAddress.Substring(0, emailAddress.IndexOf("@"));
|
||||
string domain = emailAddress.Substring(emailAddress.IndexOf("@") + 1);
|
||||
|
||||
//create mailbox
|
||||
//ES.Services.ExchangeServer.
|
||||
string accountName = string.Empty;
|
||||
int accountId = ES.Services.ExchangeServer.CreateMailbox(orgId, 0, ExchangeAccountType.Mailbox, accountName, displayName, name, domain, password, false, string.Empty);
|
||||
if (accountId < 0)
|
||||
{
|
||||
string errorMessage = GetErrorMessage(accountId);
|
||||
Log.WriteError(string.Format("Error at line {0}: {1}", index + 1, errorMessage));
|
||||
return false;
|
||||
}
|
||||
ExchangeMailbox mailbox = ES.Services.ExchangeServer.GetMailboxGeneralSettings(orgId, accountId);
|
||||
|
||||
mailbox.FirstName = firstName;
|
||||
mailbox.Initials = middleName;
|
||||
mailbox.LastName = lastName;
|
||||
mailbox.Address = address;
|
||||
mailbox.City = city;
|
||||
mailbox.State = state;
|
||||
mailbox.Zip = zip;
|
||||
mailbox.Country = country;
|
||||
mailbox.JobTitle = jobTitle;
|
||||
mailbox.Company = company;
|
||||
mailbox.Department = department;
|
||||
mailbox.Office = office;
|
||||
mailbox.BusinessPhone = businessPhone;
|
||||
mailbox.Fax = fax;
|
||||
mailbox.HomePhone = homePhone;
|
||||
mailbox.MobilePhone = mobilePhone;
|
||||
mailbox.Pager = pager;
|
||||
mailbox.WebPage = webPage;
|
||||
mailbox.Notes = notes;
|
||||
|
||||
|
||||
//update mailbox
|
||||
ES.Services.ExchangeServer.SetMailboxGeneralSettings(orgId, accountId, mailbox.DisplayName,
|
||||
null, mailbox.HideFromAddressBook, mailbox.Disabled, mailbox.FirstName, mailbox.Initials,
|
||||
mailbox.LastName, mailbox.Address, mailbox.City, mailbox.State, mailbox.Zip, mailbox.Country,
|
||||
mailbox.JobTitle, mailbox.Company, mailbox.Department, mailbox.Office, null, mailbox.BusinessPhone,
|
||||
mailbox.Fax, mailbox.HomePhone, mailbox.MobilePhone, mailbox.Pager, mailbox.WebPage, mailbox.Notes);
|
||||
|
||||
ret = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: Unable to create mailbox", index + 1), ex);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private string GetErrorMessage(int errorCode)
|
||||
{
|
||||
string errorMessage = "Unspecified error";
|
||||
switch (errorCode)
|
||||
{
|
||||
case BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS:
|
||||
errorMessage = "Email already exists";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_EXCHANGE_DELETE_SOME_PROBLEMS:
|
||||
errorMessage = "Unspecified delete error";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT:
|
||||
errorMessage = "Mailbox quota reached";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_EXCHANGE_CONTACTS_QUOTA_LIMIT:
|
||||
errorMessage = "Contact quota reached";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_EXCHANGE_DLISTS_QUOTA_LIMIT:
|
||||
errorMessage = "Distribution list quota reached";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_EXCHANGE_PFOLDERS_QUOTA_LIMIT:
|
||||
errorMessage = "Public folder quota reached";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_EXCHANGE_DOMAINS_QUOTA_LIMIT:
|
||||
errorMessage = "Domain quota reached";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES:
|
||||
errorMessage = "Storage quota reached";
|
||||
break;
|
||||
}
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
private bool CreateContact(int index, int orgId, string displayName, string emailAddress, string firstName, string middleName, string lastName,
|
||||
string address, string city, string state, string zip, string country, string jobTitle, string company, string department, string office,
|
||||
string businessPhone, string fax, string homePhone, string mobilePhone, string pager, string webPage, string notes)
|
||||
{
|
||||
bool ret = false;
|
||||
try
|
||||
{
|
||||
string name = emailAddress.Substring(0, emailAddress.IndexOf("@"));
|
||||
string domain = emailAddress.Substring(emailAddress.IndexOf("@") + 1);
|
||||
|
||||
//create contact
|
||||
int accountId = ES.Services.ExchangeServer.CreateContact(orgId, displayName, emailAddress);
|
||||
if (accountId < 0)
|
||||
{
|
||||
string errorMessage = GetErrorMessage(accountId);
|
||||
Log.WriteError(string.Format("Error at line {0}: {1}", index + 1, errorMessage));
|
||||
return false;
|
||||
}
|
||||
ExchangeContact contact = ES.Services.ExchangeServer.GetContactGeneralSettings(orgId, accountId);
|
||||
|
||||
contact.FirstName = firstName;
|
||||
contact.Initials = middleName;
|
||||
contact.LastName = lastName;
|
||||
contact.Address = address;
|
||||
contact.City = city;
|
||||
contact.State = state;
|
||||
contact.Zip = zip;
|
||||
contact.Country = country;
|
||||
contact.JobTitle = jobTitle;
|
||||
contact.Company = company;
|
||||
contact.Department = department;
|
||||
contact.Office = office;
|
||||
contact.BusinessPhone = businessPhone;
|
||||
contact.Fax = fax;
|
||||
contact.HomePhone = homePhone;
|
||||
contact.MobilePhone = mobilePhone;
|
||||
contact.Pager = pager;
|
||||
contact.WebPage = webPage;
|
||||
contact.Notes = notes;
|
||||
|
||||
//update mailbox
|
||||
ES.Services.ExchangeServer.SetContactGeneralSettings(orgId, accountId, contact.DisplayName, contact.EmailAddress,
|
||||
contact.HideFromAddressBook, contact.FirstName, contact.Initials,
|
||||
contact.LastName, contact.Address, contact.City, contact.State, contact.Zip, contact.Country,
|
||||
contact.JobTitle, contact.Company, contact.Department, contact.Office, null, contact.BusinessPhone,
|
||||
contact.Fax, contact.HomePhone, contact.MobilePhone, contact.Pager, contact.WebPage, contact.Notes, contact.UseMapiRichTextFormat);
|
||||
|
||||
ret = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: Unable to create contact", index + 1), ex);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private bool CreateUser(int index, int orgId, string displayName, string emailAddress, string password, string firstName, string middleName, string lastName,
|
||||
string address, string city, string state, string zip, string country, string jobTitle, string company, string department, string office,
|
||||
string businessPhone, string fax, string homePhone, string mobilePhone, string pager, string webPage, string notes)
|
||||
{
|
||||
bool ret = false;
|
||||
try
|
||||
{
|
||||
string name = emailAddress.Substring(0, emailAddress.IndexOf("@"));
|
||||
string domain = emailAddress.Substring(emailAddress.IndexOf("@") + 1);
|
||||
string accountName = string.Empty;
|
||||
int accountId = ES.Services.Organizations.CreateUser(orgId, displayName, name, domain, password, false, string.Empty);
|
||||
|
||||
if (accountId < 0)
|
||||
{
|
||||
string errorMessage = GetErrorMessage(accountId);
|
||||
Log.WriteError(string.Format("Error at line {0}: {1}", index + 1, errorMessage));
|
||||
return false;
|
||||
}
|
||||
OrganizationUser user = ES.Services.Organizations.GetUserGeneralSettings(orgId, accountId);
|
||||
|
||||
user.FirstName = firstName;
|
||||
user.Initials = middleName;
|
||||
user.LastName = lastName;
|
||||
user.Address = address;
|
||||
user.City = city;
|
||||
user.State = state;
|
||||
user.Zip = zip;
|
||||
user.Country = country;
|
||||
user.JobTitle = jobTitle;
|
||||
user.Company = company;
|
||||
user.Department = department;
|
||||
user.Office = office;
|
||||
user.BusinessPhone = businessPhone;
|
||||
user.Fax = fax;
|
||||
user.HomePhone = homePhone;
|
||||
user.MobilePhone = mobilePhone;
|
||||
user.Pager = pager;
|
||||
user.WebPage = webPage;
|
||||
user.Notes = notes;
|
||||
|
||||
//update
|
||||
ES.Services.Organizations.SetUserGeneralSettings(orgId, accountId, user.DisplayName,
|
||||
null, false, user.Disabled, user.Locked, user.FirstName, user.Initials,
|
||||
user.LastName, user.Address, user.City, user.State, user.Zip, user.Country,
|
||||
user.JobTitle, user.Company, user.Department, user.Office, null, user.BusinessPhone,
|
||||
user.Fax, user.HomePhone, user.MobilePhone, user.Pager, user.WebPage, user.Notes, user.ExternalEmail);
|
||||
|
||||
ret = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError(string.Format("Error at line {0}: Unable to create user", index + 1), ex);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
private bool Connect(string server, string username, string password)
|
||||
{
|
||||
bool ret = true;
|
||||
serverContext = new ServerContext();
|
||||
serverContext.Server = server;
|
||||
serverContext.Username = username;
|
||||
serverContext.Password = password;
|
||||
|
||||
ES.InitializeServices(serverContext);
|
||||
int status = -1;
|
||||
try
|
||||
{
|
||||
status = ES.Services.Authentication.AuthenticateUser(serverContext.Username, serverContext.Password, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError("Authentication error", ex);
|
||||
return false;
|
||||
}
|
||||
|
||||
string errorMessage = "Check your internet connection or server URL.";
|
||||
if (status != 0)
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case ERROR_USER_WRONG_USERNAME:
|
||||
errorMessage = "Wrong username.";
|
||||
break;
|
||||
case ERROR_USER_WRONG_PASSWORD:
|
||||
errorMessage = "Wrong password.";
|
||||
break;
|
||||
case ERROR_USER_ACCOUNT_CANCELLED:
|
||||
errorMessage = "Account cancelled.";
|
||||
break;
|
||||
case ERROR_USER_ACCOUNT_PENDING:
|
||||
errorMessage = "Account pending.";
|
||||
break;
|
||||
}
|
||||
Log.WriteError(
|
||||
string.Format("Cannot connect to the remote server. {0}", errorMessage));
|
||||
ret = false;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private bool StringEquals(string str1, string str2)
|
||||
{
|
||||
return string.Equals(str1, str2, StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
}
|
||||
}
|
204
WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk/Log.cs
Normal file
204
WebsitePanel/Sources/Tools/WebsitePanel.Import.CsvBulk/Log.cs
Normal file
|
@ -0,0 +1,204 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
namespace WebsitePanel.Import.CsvBulk
|
||||
{
|
||||
/// <summary>
|
||||
/// Simple log
|
||||
/// </summary>
|
||||
public sealed class Log
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the class.
|
||||
/// </summary>
|
||||
private Log()
|
||||
{
|
||||
}
|
||||
|
||||
private static string logFile = "WebsitePanel.Import.CsvBulk.log";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes trace listeners.
|
||||
/// </summary>
|
||||
public static void Initialize(string fileName)
|
||||
{
|
||||
logFile = fileName;
|
||||
FileStream fileLog = new FileStream(logFile, FileMode.Append);
|
||||
TextWriterTraceListener fileListener = new TextWriterTraceListener(fileLog);
|
||||
fileListener.TraceOutputOptions = TraceOptions.DateTime;
|
||||
Trace.UseGlobalLock = true;
|
||||
Trace.Listeners.Clear();
|
||||
Trace.Listeners.Add(fileListener);
|
||||
TextWriterTraceListener consoleListener = new TextWriterTraceListener(System.Console.Out);
|
||||
Trace.Listeners.Add(consoleListener);
|
||||
Trace.AutoFlush = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write error to the log.
|
||||
/// </summary>
|
||||
/// <param name="message">Error message.</param>
|
||||
/// <param name="ex">Exception.</param>
|
||||
internal static void WriteError(string message, Exception ex)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] ERROR: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
Trace.WriteLine(ex);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write error to the log.
|
||||
/// </summary>
|
||||
/// <param name="message">Error message.</param>
|
||||
internal static void WriteError(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] ERROR: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void Write(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] {1}", DateTime.Now, message);
|
||||
Trace.Write(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Write line to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void WriteLine(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write info message to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void WriteInfo(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] INFO: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write start message to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void WriteStart(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] START: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write end message to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void WriteEnd(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] END: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
internal static void WriteApplicationStart()
|
||||
{
|
||||
try
|
||||
{
|
||||
string name = typeof(Log).Assembly.GetName().Name;
|
||||
string version = typeof(Log).Assembly.GetName().Version.ToString(3);
|
||||
string line = string.Format("[{0:G}] ***** {1} {2} Started *****", DateTime.Now, name, version);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
internal static void WriteApplicationEnd()
|
||||
{
|
||||
try
|
||||
{
|
||||
string name = typeof(Log).Assembly.GetName().Name;
|
||||
string line = string.Format("[{0:G}] ***** {1} Ended *****", DateTime.Now, name);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opens notepad to view log file.
|
||||
/// </summary>
|
||||
public static void ShowLogFile()
|
||||
{
|
||||
try
|
||||
{
|
||||
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, logFile);
|
||||
Process.Start("notepad.exe", path);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Configuration;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WebsitePanel.Import.CsvBulk
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Log.Initialize(ConfigurationManager.AppSettings["LogFile"]);
|
||||
Log.WriteApplicationStart();
|
||||
ExchangeImport import = new ExchangeImport();
|
||||
import.Start();
|
||||
Log.WriteApplicationEnd();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("WebsitePanel.Import.CsvBulk")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyProduct("WebsitePanel.Import.CsvBulk")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("506d71c8-2a26-4b3b-b716-dea4758969b7")]
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Text;
|
||||
|
||||
namespace WebsitePanel.Import.CsvBulk
|
||||
{
|
||||
public class ServerContext
|
||||
{
|
||||
private string serverName;
|
||||
|
||||
public string Server
|
||||
{
|
||||
get { return serverName; }
|
||||
set { serverName = value; }
|
||||
}
|
||||
|
||||
private string userName;
|
||||
|
||||
public string Username
|
||||
{
|
||||
get { return userName; }
|
||||
set { userName = value; }
|
||||
}
|
||||
|
||||
private string password;
|
||||
|
||||
public string Password
|
||||
{
|
||||
get { return password; }
|
||||
set { password = value; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{CAD845DC-B209-4A07-94DA-B12FD14121F3}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>WebsitePanel.Import.CsvBulk</RootNamespace>
|
||||
<AssemblyName>WebsitePanel.Import.CsvBulk</AssemblyName>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Web.Services3">
|
||||
<HintPath>..\..\..\Lib\Microsoft.Web.Services3.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Web.Services" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="WebsitePanel.EnterpriseServer.Base, Version=1.0.0.0, Culture=neutral, PublicKeyToken=da8782a6fc4d0081, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WebsitePanel.EnterpriseServer.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=da8782a6fc4d0081, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\Bin\WebsitePanel.EnterpriseServer.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WebsitePanel.Providers.Base, Version=1.0.0.0, Culture=neutral, PublicKeyToken=da8782a6fc4d0081, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\Bin\WebsitePanel.Providers.Base.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\VersionInfo.cs">
|
||||
<Link>VersionInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="ES.cs" />
|
||||
<Compile Include="Log.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ServerContext.cs" />
|
||||
<Compile Include="ExchangeImport.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Windows Installer 3.1</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<!-- 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">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,26 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F919DE53-A948-4C78-969D-922DBA281B37}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\..\..\LICENSE.txt = ..\..\..\LICENSE.txt
|
||||
..\..\..\Readme.htm = ..\..\..\Readme.htm
|
||||
..\..\..\ReleaseNotes.htm = ..\..\..\ReleaseNotes.htm
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Import.Enterprise", "WebsitePanel.Import.Enterprise\WebsitePanel.Import.Enterprise.csproj", "{3CC79CB9-C8B9-4658-A3C6-AE023445D091}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{3CC79CB9-C8B9-4658-A3C6-AE023445D091}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3CC79CB9-C8B9-4658-A3C6-AE023445D091}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3CC79CB9-C8B9-4658-A3C6-AE023445D091}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3CC79CB9-C8B9-4658-A3C6-AE023445D091}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,166 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Globalization;
|
||||
using System.Configuration;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.DirectoryServices;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
public class ADUtils
|
||||
{
|
||||
public static string ADUsername
|
||||
{
|
||||
get
|
||||
{
|
||||
return ConfigurationManager.AppSettings["AD.Username"];
|
||||
}
|
||||
}
|
||||
|
||||
public static string ADPassword
|
||||
{
|
||||
get
|
||||
{
|
||||
return ConfigurationManager.AppSettings["AD.Password"];
|
||||
}
|
||||
}
|
||||
|
||||
public static string ADRootDomain
|
||||
{
|
||||
get { return Global.ADRootDomain; }
|
||||
}
|
||||
|
||||
public static string PrimaryDomainController
|
||||
{
|
||||
get { return Global.PrimaryDomainController; }
|
||||
}
|
||||
|
||||
public static string RootOU
|
||||
{
|
||||
get { return Global.RootOU; }
|
||||
}
|
||||
|
||||
public static DirectoryEntry GetRootOU()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
// append provider
|
||||
AppendProtocol(sb);
|
||||
AppendDomainController(sb);
|
||||
AppendOUPath(sb, RootOU);
|
||||
AppendDomainPath(sb, ADRootDomain);
|
||||
|
||||
DirectoryEntry de = GetADObject(sb.ToString());
|
||||
//ExchangeLog.LogEnd("GetRootOU");
|
||||
return de;
|
||||
}
|
||||
|
||||
private static void AppendProtocol(StringBuilder sb)
|
||||
{
|
||||
sb.Append("LDAP://");
|
||||
}
|
||||
|
||||
private static void AppendDomainController(StringBuilder sb)
|
||||
{
|
||||
string dc = PrimaryDomainController;
|
||||
if (dc.IndexOf(".") != -1)
|
||||
dc = dc.Substring(0, dc.IndexOf("."));
|
||||
sb.Append(dc + "/");
|
||||
}
|
||||
|
||||
private static void AppendOUPath(StringBuilder sb, string ou)
|
||||
{
|
||||
if (string.IsNullOrEmpty(ou))
|
||||
return;
|
||||
|
||||
string path = ou.Replace("/", "\\");
|
||||
string[] parts = path.Split('\\');
|
||||
for (int i = parts.Length - 1; i != -1; i--)
|
||||
sb.Append("OU=").Append(parts[i]).Append(",");
|
||||
}
|
||||
|
||||
private static void AppendDomainPath(StringBuilder sb, string domain)
|
||||
{
|
||||
if (string.IsNullOrEmpty(domain))
|
||||
return;
|
||||
|
||||
string[] parts = domain.Split('.');
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
sb.Append("DC=").Append(parts[i]);
|
||||
|
||||
if (i < (parts.Length - 1))
|
||||
sb.Append(",");
|
||||
}
|
||||
}
|
||||
|
||||
private static DirectoryEntry GetADObject(string path)
|
||||
{
|
||||
DirectoryEntry de = null;
|
||||
de = new DirectoryEntry(path, ADUsername, ADPassword);
|
||||
de.RefreshCache();
|
||||
return de;
|
||||
}
|
||||
|
||||
public static string RemoveADPrefix(string path)
|
||||
{
|
||||
string dn = path;
|
||||
if (dn.ToUpper().StartsWith("LDAP://"))
|
||||
{
|
||||
dn = dn.Substring(7);
|
||||
}
|
||||
int index = dn.IndexOf("/");
|
||||
|
||||
if (index != -1)
|
||||
{
|
||||
dn = dn.Substring(index + 1);
|
||||
}
|
||||
return dn;
|
||||
}
|
||||
|
||||
public static string GetAddressListsContainer()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
AppendProtocol(sb);
|
||||
AppendDomainController(sb);
|
||||
sb.Append("CN=Microsoft Exchange,CN=Services,CN=Configuration,");
|
||||
AppendDomainPath(sb, ADRootDomain);
|
||||
DirectoryEntry exchEntry = GetADObject(sb.ToString());
|
||||
DirectoryEntry orgEntry = null;
|
||||
foreach (DirectoryEntry child in exchEntry.Children)
|
||||
{
|
||||
orgEntry = child;
|
||||
break;
|
||||
}
|
||||
string ret = "CN=Address Lists Container," + RemoveADPrefix(orgEntry.Path);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,327 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Windows.Forms;
|
||||
using System.Threading;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
/// <summary>
|
||||
/// Animated Icon.
|
||||
/// </summary>
|
||||
[ToolboxItem(true)]
|
||||
public class AnimatedIcon : System.Windows.Forms.UserControl
|
||||
{
|
||||
private Thread thread = null;
|
||||
//private ImageList imageList = null;
|
||||
private List<Image> images;
|
||||
private int currentFrame = 0;
|
||||
private int delayInterval = 50;
|
||||
private int pause = 0;
|
||||
private int loopCount = 0;
|
||||
private int currentLoop = 0;
|
||||
private int firstFrame = 0;
|
||||
private int lastFrame = 0;
|
||||
|
||||
private System.ComponentModel.Container components = null;
|
||||
|
||||
|
||||
/// <summary>Gets the <see cref="List"/> that contains
|
||||
/// the <see cref="Image"/> objects used to display animation.</summary>
|
||||
/// <value>The <see cref="List"/> that contains the <see cref="Image"/>
|
||||
/// objects used to display animated frames.</value>
|
||||
[Browsable(false)]
|
||||
public List<Image> Images
|
||||
{
|
||||
get
|
||||
{
|
||||
return images;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets delay in milliseconds between the frames.</summary>
|
||||
/// <value>The default value is 50 milliseconds.</value>
|
||||
[Category("Animated Icon")]
|
||||
[DefaultValue(50), Description("Delay in milliseconds between the frames.")]
|
||||
|
||||
public int Delay
|
||||
{
|
||||
get { return delayInterval; }
|
||||
set
|
||||
{
|
||||
if( value != delayInterval )
|
||||
{
|
||||
delayInterval = Math.Abs( value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets pause in milliseconds after every loop.</summary>
|
||||
/// <value>The default value is 0 milliseconds.</value>
|
||||
[Category("Animated Icon")]
|
||||
[DefaultValue(0), Description("Pause in milliseconds after the loop ends.")]
|
||||
|
||||
public int Pause
|
||||
{
|
||||
get { return pause; }
|
||||
set
|
||||
{
|
||||
if( value != pause )
|
||||
{
|
||||
pause = Math.Abs( value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets loop counter.</summary>
|
||||
/// <value>The default value is 0, i.e. infinitive loop.</value>
|
||||
[Category("Animated Icon")]
|
||||
[DefaultValue(0), Description("Loop counter. 0 means infinitive loop.")]
|
||||
|
||||
public int LoopCount
|
||||
{
|
||||
get { return loopCount; }
|
||||
set
|
||||
{
|
||||
if( value != loopCount )
|
||||
{
|
||||
loopCount = Math.Abs( value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets the first frame of the animation.</summary>
|
||||
/// <value>The default value is 0.</value>
|
||||
[Category("Animated Icon")]
|
||||
[DefaultValue(0), Description("First frame of the animation.")]
|
||||
|
||||
public int FirstFrame
|
||||
{
|
||||
get { return firstFrame; }
|
||||
set
|
||||
{
|
||||
if( value != firstFrame )
|
||||
{
|
||||
firstFrame = Math.Abs( value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets the last frame of the animation.</summary>
|
||||
/// <value>The default value is 0.</value>
|
||||
[Category("Animated Icon")]
|
||||
[DefaultValue(0), Description("Last frame of the animation.")]
|
||||
|
||||
public int LastFrame
|
||||
{
|
||||
get { return lastFrame; }
|
||||
set
|
||||
{
|
||||
if( value != lastFrame )
|
||||
{
|
||||
lastFrame = Math.Abs( value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>Initializes a new instance of the <b>AnimatedIcon</b> class.
|
||||
/// </summary>
|
||||
public AnimatedIcon()
|
||||
{
|
||||
CheckForIllegalCrossThreadCalls = false;
|
||||
InitializeComponent();
|
||||
images = new List<Image>();
|
||||
|
||||
this.SetStyle(ControlStyles.UserPaint, true);
|
||||
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
||||
this.SetStyle(ControlStyles.DoubleBuffer, true);
|
||||
this.SetStyle(ControlStyles.ResizeRedraw, true);
|
||||
}
|
||||
|
||||
#region Dispose
|
||||
/// <summary>Clean up any resources being used.</summary>
|
||||
/// <param name="disposing"><see langword="true"/> to release both managed
|
||||
/// and unmanaged resources; <see langword="false"/> to release
|
||||
/// only unmanaged resources.</param>
|
||||
protected override void Dispose( bool disposing )
|
||||
{
|
||||
if( disposing )
|
||||
{
|
||||
if( components != null )
|
||||
components.Dispose();
|
||||
|
||||
if( thread != null )
|
||||
thread.Abort();
|
||||
}
|
||||
base.Dispose( disposing );
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Component Designer generated code
|
||||
/// <summary>Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
//
|
||||
// AnimatedIcon
|
||||
//
|
||||
this.Name = "AnimatedIcon";
|
||||
this.Size = new System.Drawing.Size(16, 16);
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>Starts animation from the beginning.
|
||||
/// </summary>
|
||||
public void StartAnimation()
|
||||
{
|
||||
StopAnimation();
|
||||
CheckRange(); // Check the first and the last frames
|
||||
|
||||
thread = new Thread( new ThreadStart( threadFunc ) );
|
||||
thread.IsBackground = true;
|
||||
thread.Start();
|
||||
}
|
||||
|
||||
/// <summary>Stops animation not changing current frame number.
|
||||
/// </summary>
|
||||
public void StopAnimation()
|
||||
{
|
||||
if( thread != null )
|
||||
{
|
||||
thread.Abort();
|
||||
thread = null;
|
||||
}
|
||||
currentLoop = 0;
|
||||
}
|
||||
|
||||
/// <summary>Displays the specified frame.</summary>
|
||||
/// <param name="frame">An index of the image stored in the <see cref="ImageList"/>.</param>
|
||||
public void ShowFrame(int frame)
|
||||
{
|
||||
StopAnimation();
|
||||
|
||||
if( frame >= 0 && frame < images.Count )
|
||||
currentFrame = frame;
|
||||
else
|
||||
currentFrame = 0;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
/// <summary>Occurs when the control is redrawn.</summary>
|
||||
/// <param name="e">A <see cref="PaintEventArgs"/> that contains
|
||||
/// the event data.</param>
|
||||
/// <remarks>The <b>OnPaint</b> method draws current image from
|
||||
/// the <see cref="ImageList"/> if exists.</remarks>
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
// Draw a crossed rectangle if there is no frame to display
|
||||
|
||||
if( images == null ||
|
||||
currentFrame < 0 ||
|
||||
currentFrame >= images.Count )
|
||||
{
|
||||
if( this.Size.Width == 0 || this.Size.Height == 0 )
|
||||
return;
|
||||
|
||||
Pen pen = new Pen( SystemColors.ControlText );
|
||||
e.Graphics.DrawRectangle( pen, 0, 0, this.Size.Width-1, this.Size.Height-1 );
|
||||
e.Graphics.DrawLine( pen, 0, 0, this.Size.Width, this.Size.Height );
|
||||
e.Graphics.DrawLine( pen, 0, this.Size.Height-1, this.Size.Width-1, 0 );
|
||||
pen.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw the current frame
|
||||
|
||||
e.Graphics.DrawImage( images[currentFrame], 0, 0, this.Size.Width, this.Size.Height );
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>The method to be invoked when the thread begins executing.
|
||||
/// </summary>
|
||||
private void threadFunc()
|
||||
{
|
||||
bool wasPause = false;
|
||||
currentFrame = firstFrame;
|
||||
|
||||
while( thread != null && thread.IsAlive )
|
||||
{
|
||||
Refresh(); // Redraw the current frame
|
||||
wasPause = false;
|
||||
|
||||
if( images != null )
|
||||
{
|
||||
currentFrame++;
|
||||
if( currentFrame > lastFrame ||
|
||||
currentFrame >= images.Count )
|
||||
{
|
||||
if( pause > 0 ) // Sleep after every loop
|
||||
{
|
||||
Thread.Sleep( pause );
|
||||
wasPause = true;
|
||||
}
|
||||
|
||||
currentFrame = firstFrame;
|
||||
if( loopCount != 0 ) // 0 is infinitive loop
|
||||
{
|
||||
currentLoop++;
|
||||
}
|
||||
}
|
||||
|
||||
if( loopCount != 0 && currentLoop >= loopCount )
|
||||
{
|
||||
StopAnimation(); // The loop is completed
|
||||
}
|
||||
}
|
||||
if( !wasPause ) // That prevents summation (pause + delayInterval)
|
||||
Thread.Sleep( delayInterval );
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Check if the last frame is no less than the first one.
|
||||
/// Otherwise, swap them.</summary>
|
||||
private void CheckRange()
|
||||
{
|
||||
if( lastFrame < firstFrame )
|
||||
{
|
||||
int tmp = firstFrame;
|
||||
firstFrame = lastFrame;
|
||||
lastFrame = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<!-- Connection strings -->
|
||||
<connectionStrings>
|
||||
<add name="EnterpriseServer" connectionString="Server=(local)\sqlexpress;Database=WebsitePanel;uid=WebsitePanel;pwd=password" providerName="System.Data.SqlClient"/>
|
||||
</connectionStrings>
|
||||
<appSettings>
|
||||
<add key="AD.Username" value="DOMAIN\Administrator"/>
|
||||
<add key="AD.Password" value="password"/>
|
||||
<!-- Encryption util settings -->
|
||||
<add key="WebsitePanel.CryptoKey" value="q26125qpakxmxmk477wb"/>
|
||||
<!-- Encryption -->
|
||||
<add key="WebsitePanel.EncryptionEnabled" value="true"/>
|
||||
<!-- Web Applications -->
|
||||
<add key="WebsitePanel.EnterpriseServer.WebApplicationsPath" value="~/WebApplications"/>
|
||||
<!-- Communication settings -->
|
||||
<!-- Maximum waiting time when sending request to the remote server
|
||||
The value is in seconds. "-1" - infinite. -->
|
||||
<add key="WebsitePanel.EnterpriseServer.ServerRequestTimeout" value="3600"/>
|
||||
<add key="ClientSettingsProvider.ServiceUri" value=""/>
|
||||
</appSettings>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
351
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/ApplicationForm.Designer.cs
generated
Normal file
351
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/ApplicationForm.Designer.cs
generated
Normal file
|
@ -0,0 +1,351 @@
|
|||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
partial class ApplicationForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ApplicationForm));
|
||||
this.lblSpace = new System.Windows.Forms.Label();
|
||||
this.txtSpace = new System.Windows.Forms.TextBox();
|
||||
this.btnBrowseSpace = new System.Windows.Forms.Button();
|
||||
this.btnBrowseOU = new System.Windows.Forms.Button();
|
||||
this.txtOU = new System.Windows.Forms.TextBox();
|
||||
this.lblOU = new System.Windows.Forms.Label();
|
||||
this.grpOrganization = new System.Windows.Forms.GroupBox();
|
||||
this.btnSelectAll = new System.Windows.Forms.Button();
|
||||
this.btnDeselectAll = new System.Windows.Forms.Button();
|
||||
this.rbCreateAndImport = new System.Windows.Forms.RadioButton();
|
||||
this.rbImport = new System.Windows.Forms.RadioButton();
|
||||
this.lvUsers = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
|
||||
this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
|
||||
this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
|
||||
this.images = new System.Windows.Forms.ImageList(this.components);
|
||||
this.txtOrgName = new System.Windows.Forms.TextBox();
|
||||
this.lblOrgName = new System.Windows.Forms.Label();
|
||||
this.txtOrgId = new System.Windows.Forms.TextBox();
|
||||
this.lblOrgId = new System.Windows.Forms.Label();
|
||||
this.btnStart = new System.Windows.Forms.Button();
|
||||
this.progressBar = new System.Windows.Forms.ProgressBar();
|
||||
this.lblMessage = new System.Windows.Forms.Label();
|
||||
this.grpOrganization.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// lblSpace
|
||||
//
|
||||
this.lblSpace.Location = new System.Drawing.Point(15, 15);
|
||||
this.lblSpace.Name = "lblSpace";
|
||||
this.lblSpace.Size = new System.Drawing.Size(125, 23);
|
||||
this.lblSpace.TabIndex = 0;
|
||||
this.lblSpace.Text = "Target Hosting Space:";
|
||||
//
|
||||
// txtSpace
|
||||
//
|
||||
this.txtSpace.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtSpace.Location = new System.Drawing.Point(146, 12);
|
||||
this.txtSpace.Name = "txtSpace";
|
||||
this.txtSpace.ReadOnly = true;
|
||||
this.txtSpace.Size = new System.Drawing.Size(429, 20);
|
||||
this.txtSpace.TabIndex = 1;
|
||||
this.txtSpace.TextChanged += new System.EventHandler(this.OnDataChanged);
|
||||
//
|
||||
// btnBrowseSpace
|
||||
//
|
||||
this.btnBrowseSpace.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnBrowseSpace.Location = new System.Drawing.Point(581, 10);
|
||||
this.btnBrowseSpace.Name = "btnBrowseSpace";
|
||||
this.btnBrowseSpace.Size = new System.Drawing.Size(24, 22);
|
||||
this.btnBrowseSpace.TabIndex = 2;
|
||||
this.btnBrowseSpace.Text = "...";
|
||||
this.btnBrowseSpace.UseVisualStyleBackColor = true;
|
||||
this.btnBrowseSpace.Click += new System.EventHandler(this.OnBrowseSpace);
|
||||
//
|
||||
// btnBrowseOU
|
||||
//
|
||||
this.btnBrowseOU.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnBrowseOU.Location = new System.Drawing.Point(581, 36);
|
||||
this.btnBrowseOU.Name = "btnBrowseOU";
|
||||
this.btnBrowseOU.Size = new System.Drawing.Size(24, 22);
|
||||
this.btnBrowseOU.TabIndex = 5;
|
||||
this.btnBrowseOU.Text = "...";
|
||||
this.btnBrowseOU.UseVisualStyleBackColor = true;
|
||||
this.btnBrowseOU.Click += new System.EventHandler(this.OnBrowseOU);
|
||||
//
|
||||
// txtOU
|
||||
//
|
||||
this.txtOU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtOU.Location = new System.Drawing.Point(146, 38);
|
||||
this.txtOU.Name = "txtOU";
|
||||
this.txtOU.ReadOnly = true;
|
||||
this.txtOU.Size = new System.Drawing.Size(429, 20);
|
||||
this.txtOU.TabIndex = 4;
|
||||
this.txtOU.TextChanged += new System.EventHandler(this.OnDataChanged);
|
||||
//
|
||||
// lblOU
|
||||
//
|
||||
this.lblOU.Location = new System.Drawing.Point(15, 41);
|
||||
this.lblOU.Name = "lblOU";
|
||||
this.lblOU.Size = new System.Drawing.Size(125, 23);
|
||||
this.lblOU.TabIndex = 3;
|
||||
this.lblOU.Text = "Organizational Unit:";
|
||||
//
|
||||
// grpOrganization
|
||||
//
|
||||
this.grpOrganization.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.grpOrganization.Controls.Add(this.btnSelectAll);
|
||||
this.grpOrganization.Controls.Add(this.btnDeselectAll);
|
||||
this.grpOrganization.Controls.Add(this.rbCreateAndImport);
|
||||
this.grpOrganization.Controls.Add(this.rbImport);
|
||||
this.grpOrganization.Controls.Add(this.lvUsers);
|
||||
this.grpOrganization.Controls.Add(this.txtOrgName);
|
||||
this.grpOrganization.Controls.Add(this.lblOrgName);
|
||||
this.grpOrganization.Controls.Add(this.txtOrgId);
|
||||
this.grpOrganization.Controls.Add(this.lblOrgId);
|
||||
this.grpOrganization.Location = new System.Drawing.Point(15, 67);
|
||||
this.grpOrganization.Name = "grpOrganization";
|
||||
this.grpOrganization.Size = new System.Drawing.Size(590, 328);
|
||||
this.grpOrganization.TabIndex = 6;
|
||||
this.grpOrganization.TabStop = false;
|
||||
//
|
||||
// btnSelectAll
|
||||
//
|
||||
this.btnSelectAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnSelectAll.Location = new System.Drawing.Point(417, 282);
|
||||
this.btnSelectAll.Name = "btnSelectAll";
|
||||
this.btnSelectAll.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnSelectAll.TabIndex = 7;
|
||||
this.btnSelectAll.Text = "Select All";
|
||||
this.btnSelectAll.UseVisualStyleBackColor = true;
|
||||
this.btnSelectAll.Click += new System.EventHandler(this.OnSelectAllClick);
|
||||
//
|
||||
// btnDeselectAll
|
||||
//
|
||||
this.btnDeselectAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnDeselectAll.Location = new System.Drawing.Point(498, 282);
|
||||
this.btnDeselectAll.Name = "btnDeselectAll";
|
||||
this.btnDeselectAll.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnDeselectAll.TabIndex = 8;
|
||||
this.btnDeselectAll.Text = "Unselect All";
|
||||
this.btnDeselectAll.UseVisualStyleBackColor = true;
|
||||
this.btnDeselectAll.Click += new System.EventHandler(this.OnDeselectAllClick);
|
||||
//
|
||||
// rbCreateAndImport
|
||||
//
|
||||
this.rbCreateAndImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.rbCreateAndImport.AutoSize = true;
|
||||
this.rbCreateAndImport.Checked = true;
|
||||
this.rbCreateAndImport.Enabled = false;
|
||||
this.rbCreateAndImport.Location = new System.Drawing.Point(19, 282);
|
||||
this.rbCreateAndImport.Name = "rbCreateAndImport";
|
||||
this.rbCreateAndImport.Size = new System.Drawing.Size(261, 17);
|
||||
this.rbCreateAndImport.TabIndex = 5;
|
||||
this.rbCreateAndImport.TabStop = true;
|
||||
this.rbCreateAndImport.Text = "Create new organization and import selected items";
|
||||
this.rbCreateAndImport.UseVisualStyleBackColor = true;
|
||||
this.rbCreateAndImport.CheckedChanged += new System.EventHandler(this.OnCheckedChanged);
|
||||
//
|
||||
// rbImport
|
||||
//
|
||||
this.rbImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.rbImport.AutoSize = true;
|
||||
this.rbImport.Enabled = false;
|
||||
this.rbImport.Location = new System.Drawing.Point(19, 305);
|
||||
this.rbImport.Name = "rbImport";
|
||||
this.rbImport.Size = new System.Drawing.Size(237, 17);
|
||||
this.rbImport.TabIndex = 6;
|
||||
this.rbImport.Text = "Import selected items for existing organization";
|
||||
this.rbImport.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lvUsers
|
||||
//
|
||||
this.lvUsers.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lvUsers.CheckBoxes = true;
|
||||
this.lvUsers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader2,
|
||||
this.columnHeader3});
|
||||
this.lvUsers.FullRowSelect = true;
|
||||
this.lvUsers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||
this.lvUsers.Location = new System.Drawing.Point(19, 74);
|
||||
this.lvUsers.MultiSelect = false;
|
||||
this.lvUsers.Name = "lvUsers";
|
||||
this.lvUsers.Size = new System.Drawing.Size(554, 202);
|
||||
this.lvUsers.SmallImageList = this.images;
|
||||
this.lvUsers.TabIndex = 4;
|
||||
this.lvUsers.UseCompatibleStateImageBehavior = false;
|
||||
this.lvUsers.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
this.columnHeader1.Text = "Name";
|
||||
this.columnHeader1.Width = 229;
|
||||
//
|
||||
// columnHeader2
|
||||
//
|
||||
this.columnHeader2.Text = "Email";
|
||||
this.columnHeader2.Width = 163;
|
||||
//
|
||||
// columnHeader3
|
||||
//
|
||||
this.columnHeader3.Text = "Type";
|
||||
this.columnHeader3.Width = 152;
|
||||
//
|
||||
// images
|
||||
//
|
||||
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
|
||||
this.images.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.images.Images.SetKeyName(0, "UserSmallIcon.ico");
|
||||
this.images.Images.SetKeyName(1, "contact.ico");
|
||||
this.images.Images.SetKeyName(2, "DL.ico");
|
||||
//
|
||||
// txtOrgName
|
||||
//
|
||||
this.txtOrgName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtOrgName.Location = new System.Drawing.Point(155, 45);
|
||||
this.txtOrgName.Name = "txtOrgName";
|
||||
this.txtOrgName.Size = new System.Drawing.Size(418, 20);
|
||||
this.txtOrgName.TabIndex = 3;
|
||||
//
|
||||
// lblOrgName
|
||||
//
|
||||
this.lblOrgName.Location = new System.Drawing.Point(19, 48);
|
||||
this.lblOrgName.Name = "lblOrgName";
|
||||
this.lblOrgName.Size = new System.Drawing.Size(130, 23);
|
||||
this.lblOrgName.TabIndex = 2;
|
||||
this.lblOrgName.Text = "Organization Name:";
|
||||
//
|
||||
// txtOrgId
|
||||
//
|
||||
this.txtOrgId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtOrgId.Location = new System.Drawing.Point(155, 19);
|
||||
this.txtOrgId.Name = "txtOrgId";
|
||||
this.txtOrgId.ReadOnly = true;
|
||||
this.txtOrgId.Size = new System.Drawing.Size(418, 20);
|
||||
this.txtOrgId.TabIndex = 1;
|
||||
//
|
||||
// lblOrgId
|
||||
//
|
||||
this.lblOrgId.Location = new System.Drawing.Point(19, 22);
|
||||
this.lblOrgId.Name = "lblOrgId";
|
||||
this.lblOrgId.Size = new System.Drawing.Size(130, 23);
|
||||
this.lblOrgId.TabIndex = 0;
|
||||
this.lblOrgId.Text = "Organization Id:";
|
||||
//
|
||||
// btnStart
|
||||
//
|
||||
this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnStart.Location = new System.Drawing.Point(527, 461);
|
||||
this.btnStart.Name = "btnStart";
|
||||
this.btnStart.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnStart.TabIndex = 9;
|
||||
this.btnStart.Text = "Start";
|
||||
this.btnStart.UseVisualStyleBackColor = true;
|
||||
this.btnStart.Click += new System.EventHandler(this.OnImportClick);
|
||||
//
|
||||
// progressBar
|
||||
//
|
||||
this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.progressBar.Location = new System.Drawing.Point(15, 427);
|
||||
this.progressBar.Name = "progressBar";
|
||||
this.progressBar.Size = new System.Drawing.Size(587, 23);
|
||||
this.progressBar.TabIndex = 8;
|
||||
//
|
||||
// lblMessage
|
||||
//
|
||||
this.lblMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.lblMessage.Location = new System.Drawing.Point(12, 401);
|
||||
this.lblMessage.Name = "lblMessage";
|
||||
this.lblMessage.Size = new System.Drawing.Size(593, 23);
|
||||
this.lblMessage.TabIndex = 7;
|
||||
//
|
||||
// ApplicationForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(617, 496);
|
||||
this.Controls.Add(this.lblMessage);
|
||||
this.Controls.Add(this.progressBar);
|
||||
this.Controls.Add(this.btnStart);
|
||||
this.Controls.Add(this.grpOrganization);
|
||||
this.Controls.Add(this.btnBrowseOU);
|
||||
this.Controls.Add(this.txtOU);
|
||||
this.Controls.Add(this.lblOU);
|
||||
this.Controls.Add(this.btnBrowseSpace);
|
||||
this.Controls.Add(this.txtSpace);
|
||||
this.Controls.Add(this.lblSpace);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MinimumSize = new System.Drawing.Size(630, 500);
|
||||
this.Name = "ApplicationForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "WebsitePanel Enterprise Import Tool";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OnFormClosing);
|
||||
this.grpOrganization.ResumeLayout(false);
|
||||
this.grpOrganization.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label lblSpace;
|
||||
private System.Windows.Forms.TextBox txtSpace;
|
||||
private System.Windows.Forms.Button btnBrowseSpace;
|
||||
private System.Windows.Forms.Button btnBrowseOU;
|
||||
private System.Windows.Forms.TextBox txtOU;
|
||||
private System.Windows.Forms.Label lblOU;
|
||||
private System.Windows.Forms.GroupBox grpOrganization;
|
||||
private System.Windows.Forms.TextBox txtOrgId;
|
||||
private System.Windows.Forms.Label lblOrgId;
|
||||
private System.Windows.Forms.TextBox txtOrgName;
|
||||
private System.Windows.Forms.Label lblOrgName;
|
||||
private System.Windows.Forms.ListView lvUsers;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ImageList images;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
internal System.Windows.Forms.Button btnStart;
|
||||
internal System.Windows.Forms.ProgressBar progressBar;
|
||||
internal System.Windows.Forms.Label lblMessage;
|
||||
private System.Windows.Forms.RadioButton rbCreateAndImport;
|
||||
private System.Windows.Forms.RadioButton rbImport;
|
||||
internal System.Windows.Forms.Button btnSelectAll;
|
||||
internal System.Windows.Forms.Button btnDeselectAll;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,333 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Specialized;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Reflection;
|
||||
|
||||
using System.DirectoryServices;
|
||||
|
||||
using WebsitePanel.EnterpriseServer;
|
||||
using WebsitePanel.Providers.HostedSolution;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
public partial class ApplicationForm : BaseForm
|
||||
{
|
||||
private string username;
|
||||
private string password;
|
||||
private OrganizationImporter importer;
|
||||
internal bool ImportStarted = false;
|
||||
|
||||
|
||||
public ApplicationForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
CheckForIllegalCrossThreadCalls = false;
|
||||
}
|
||||
|
||||
public void InitializeForm(string username, string password)
|
||||
{
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
UserInfo info = UserController.GetUser(username);
|
||||
SecurityContext.SetThreadPrincipal(info);
|
||||
|
||||
importer = new OrganizationImporter();
|
||||
|
||||
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||
this.Text += " v" + assembly.GetName().Version.ToString(3);
|
||||
UpdateForm();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void OnBrowseSpace(object sender, EventArgs e)
|
||||
{
|
||||
SelectSpace();
|
||||
}
|
||||
|
||||
private void SelectSpace()
|
||||
{
|
||||
SpaceForm form = new SpaceForm();
|
||||
form.InitializeForm(username, password);
|
||||
if (form.ShowDialog(this) == DialogResult.OK)
|
||||
{
|
||||
Global.Space = form.SelectedSpace;
|
||||
txtSpace.Text = Global.Space.PackageName;
|
||||
LoadSpaceData(Global.Space);
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadSpaceData(PackageInfo packageInfo)
|
||||
{
|
||||
int serviceId = PackageController.GetPackageServiceId(packageInfo.PackageId, ResourceGroups.HostedOrganizations);
|
||||
ServiceInfo serviceInfo = ServerController.GetServiceInfo(serviceId);
|
||||
StringDictionary serviceSettings = ServerController.GetServiceSettingsAdmin(serviceId);
|
||||
Global.RootOU = serviceSettings["RootOU"];
|
||||
Global.PrimaryDomainController = serviceSettings["PrimaryDomainController"];
|
||||
Global.TempDomain = serviceSettings["TempDomain"];
|
||||
ServerInfo serverInfo = ServerController.GetServerById(serviceInfo.ServerId);
|
||||
Global.ADRootDomain = serverInfo.ADRootDomain;
|
||||
}
|
||||
|
||||
private void OnBrowseOU(object sender, EventArgs e)
|
||||
{
|
||||
SelectOU();
|
||||
}
|
||||
|
||||
private void SelectOU()
|
||||
{
|
||||
if (string.IsNullOrEmpty(txtSpace.Text))
|
||||
{
|
||||
ShowWarning("Please select hosting space first.");
|
||||
return;
|
||||
}
|
||||
OUForm form = new OUForm();
|
||||
form.InitializeForm();
|
||||
if (form.ShowDialog(this) == DialogResult.OK)
|
||||
{
|
||||
Global.OrgDirectoryEntry = form.DirectoryEntry;
|
||||
string orgId = (string)Global.OrgDirectoryEntry.Properties["name"].Value;
|
||||
txtOU.Text = form.DirectoryEntry.Path;
|
||||
Global.OrganizationId = orgId;
|
||||
|
||||
|
||||
LoadOrganizationData(Global.OrgDirectoryEntry);
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadOrganizationData(DirectoryEntry parent)
|
||||
{
|
||||
string orgId = (string)parent.Properties["name"].Value;
|
||||
txtOrgId.Text = orgId;
|
||||
|
||||
Organization org = OrganizationController.GetOrganizationById(orgId);
|
||||
if (org != null)
|
||||
{
|
||||
rbCreateAndImport.Checked = false;
|
||||
rbImport.Checked = true;
|
||||
txtOrgName.Text = org.Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
rbCreateAndImport.Checked = true;
|
||||
rbImport.Checked = false;
|
||||
txtOrgName.Text = orgId;
|
||||
}
|
||||
LoadOrganizationAccounts(parent);
|
||||
}
|
||||
|
||||
private void LoadOrganizationAccounts(DirectoryEntry ou)
|
||||
{
|
||||
lvUsers.Items.Clear();
|
||||
ListViewItem item = null;
|
||||
string email;
|
||||
string type;
|
||||
string name;
|
||||
PropertyValueCollection typeProp;
|
||||
string ouName = (string)ou.Properties["name"].Value;
|
||||
foreach (DirectoryEntry child in ou.Children)
|
||||
{
|
||||
type = null;
|
||||
email = null;
|
||||
name = (string)child.Properties["name"].Value;
|
||||
//account type
|
||||
typeProp = child.Properties["msExchRecipientDisplayType"];
|
||||
|
||||
switch (child.SchemaClassName)
|
||||
{
|
||||
case "user":
|
||||
email = (string)child.Properties["userPrincipalName"].Value;
|
||||
if (typeProp == null || typeProp.Value == null)
|
||||
{
|
||||
type = "User";
|
||||
}
|
||||
else
|
||||
{
|
||||
int mailboxType = (int)typeProp.Value;
|
||||
|
||||
switch (mailboxType)
|
||||
{
|
||||
case 1073741824:
|
||||
type = "User Mailbox";
|
||||
break;
|
||||
case 7:
|
||||
type = "Room Mailbox";
|
||||
break;
|
||||
case 8:
|
||||
type = "Equipment Mailbox";
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(type))
|
||||
{
|
||||
|
||||
item = new ListViewItem(name);
|
||||
item.ImageIndex = 0;
|
||||
item.Checked = true;
|
||||
item.Tag = child;
|
||||
item.SubItems.Add(email);
|
||||
item.SubItems.Add(type);
|
||||
lvUsers.Items.Add(item);
|
||||
}
|
||||
break;
|
||||
case "contact":
|
||||
if (typeProp != null && typeProp.Value != null && 6 == (int)typeProp.Value)
|
||||
{
|
||||
type = "Mail Contact";
|
||||
if (child.Properties["targetAddress"] != null)
|
||||
{
|
||||
email = (string)child.Properties["targetAddress"].Value;
|
||||
if (email != null && email.ToLower().StartsWith("smtp:"))
|
||||
email = email.Substring(5);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(type))
|
||||
{
|
||||
|
||||
item = new ListViewItem(name);
|
||||
item.ImageIndex = 1;
|
||||
item.Checked = true;
|
||||
item.Tag = child;
|
||||
item.SubItems.Add(email);
|
||||
item.SubItems.Add(type);
|
||||
lvUsers.Items.Add(item);
|
||||
}
|
||||
break;
|
||||
case "group":
|
||||
if (child.Properties["mail"] != null)
|
||||
email = (string)child.Properties["mail"].Value;
|
||||
if ((typeProp != null) && (typeProp.Value != null) && (1073741833 == (int)typeProp.Value))
|
||||
{
|
||||
//Universal Security Group
|
||||
type = "Mail-Enabled Universal Security Group";
|
||||
//email
|
||||
PropertyValueCollection proxyAddresses = child.Properties["proxyAddresses"];
|
||||
if (proxyAddresses != null)
|
||||
{
|
||||
foreach (string address in proxyAddresses)
|
||||
{
|
||||
if (address != null && address.StartsWith("SMTP:"))
|
||||
{
|
||||
email = address.Substring(5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(type) && name != ouName)
|
||||
{
|
||||
|
||||
item = new ListViewItem(name);
|
||||
item.ImageIndex = 2;
|
||||
item.Checked = true;
|
||||
item.Tag = child;
|
||||
item.SubItems.Add(email);
|
||||
item.SubItems.Add(type);
|
||||
lvUsers.Items.Add(item);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void OnDataChanged(object sender, EventArgs e)
|
||||
{
|
||||
UpdateForm();
|
||||
}
|
||||
|
||||
private void UpdateForm()
|
||||
{
|
||||
if (string.IsNullOrEmpty(txtSpace.Text) ||
|
||||
string.IsNullOrEmpty(txtOU.Text))
|
||||
{
|
||||
btnStart.Enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
btnStart.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnImportClick(object sender, EventArgs e)
|
||||
{
|
||||
List<DirectoryEntry> accounts = new List<DirectoryEntry>();
|
||||
foreach (ListViewItem item in lvUsers.Items)
|
||||
{
|
||||
if (item.Checked)
|
||||
{
|
||||
accounts.Add((DirectoryEntry)item.Tag);
|
||||
}
|
||||
}
|
||||
Global.SelectedAccounts = accounts;
|
||||
Global.OrganizationName = txtOrgName.Text;
|
||||
Global.ImportAccountsOnly = rbImport.Checked;
|
||||
Global.HasErrors = false;
|
||||
importer.Initialize(this.username, this);
|
||||
importer.Start();
|
||||
|
||||
}
|
||||
|
||||
private void OnFormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
e.Cancel = ImportStarted;
|
||||
}
|
||||
|
||||
private void OnCheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
txtOrgName.ReadOnly = !rbCreateAndImport.Checked;
|
||||
}
|
||||
|
||||
private void OnSelectAllClick(object sender, EventArgs e)
|
||||
{
|
||||
foreach (ListViewItem item in lvUsers.Items)
|
||||
{
|
||||
item.Checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDeselectAllClick(object sender, EventArgs e)
|
||||
{
|
||||
foreach (ListViewItem item in lvUsers.Items)
|
||||
{
|
||||
item.Checked = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,48 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Windows.Forms;
|
||||
using System.Text;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
public class BaseForm : Form
|
||||
{
|
||||
public DialogResult ShowError(string text, Exception ex)
|
||||
{
|
||||
Log.WriteError(text, ex);
|
||||
return MessageBox.Show(this, text, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
|
||||
}
|
||||
|
||||
public DialogResult ShowWarning(string text)
|
||||
{
|
||||
return MessageBox.Show(this, text, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
|
||||
}
|
||||
}
|
||||
}
|
170
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/ConnectForm.Designer.cs
generated
Normal file
170
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/ConnectForm.Designer.cs
generated
Normal file
|
@ -0,0 +1,170 @@
|
|||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
partial class ConnectForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
WebsitePanel.Import.Enterprise.LineBox lineBox;
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConnectForm));
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.btnConnect = new System.Windows.Forms.Button();
|
||||
this.pictureBox = new System.Windows.Forms.PictureBox();
|
||||
this.txtUserName = new System.Windows.Forms.TextBox();
|
||||
this.lblUserName = new System.Windows.Forms.Label();
|
||||
this.lblPassword = new System.Windows.Forms.Label();
|
||||
this.txtPassword = new System.Windows.Forms.TextBox();
|
||||
this.animatedIcon = new WebsitePanel.Import.Enterprise.AnimatedIcon();
|
||||
lineBox = new WebsitePanel.Import.Enterprise.LineBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// lineBox
|
||||
//
|
||||
lineBox.Location = new System.Drawing.Point(12, 147);
|
||||
lineBox.Name = "lineBox";
|
||||
lineBox.Size = new System.Drawing.Size(387, 2);
|
||||
lineBox.TabIndex = 8;
|
||||
lineBox.TabStop = false;
|
||||
lineBox.Text = "lineBox1";
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.btnCancel.Location = new System.Drawing.Point(323, 162);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnCancel.TabIndex = 10;
|
||||
this.btnCancel.Text = "Cancel";
|
||||
this.btnCancel.UseVisualStyleBackColor = true;
|
||||
this.btnCancel.Click += new System.EventHandler(this.OnCancelClick);
|
||||
//
|
||||
// btnConnect
|
||||
//
|
||||
this.btnConnect.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.btnConnect.Location = new System.Drawing.Point(242, 162);
|
||||
this.btnConnect.Name = "btnConnect";
|
||||
this.btnConnect.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnConnect.TabIndex = 9;
|
||||
this.btnConnect.Text = "&Connect";
|
||||
this.btnConnect.UseVisualStyleBackColor = true;
|
||||
this.btnConnect.Click += new System.EventHandler(this.OnConnectClick);
|
||||
//
|
||||
// pictureBox
|
||||
//
|
||||
this.pictureBox.Image = global::WebsitePanel.Import.Enterprise.Properties.Resources.ConnectLogo;
|
||||
this.pictureBox.Location = new System.Drawing.Point(0, 0);
|
||||
this.pictureBox.Name = "pictureBox";
|
||||
this.pictureBox.Size = new System.Drawing.Size(410, 67);
|
||||
this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
this.pictureBox.TabIndex = 3;
|
||||
this.pictureBox.TabStop = false;
|
||||
//
|
||||
// txtUserName
|
||||
//
|
||||
this.txtUserName.Location = new System.Drawing.Point(146, 84);
|
||||
this.txtUserName.Name = "txtUserName";
|
||||
this.txtUserName.Size = new System.Drawing.Size(253, 20);
|
||||
this.txtUserName.TabIndex = 4;
|
||||
this.txtUserName.Text = "serveradmin";
|
||||
this.txtUserName.TextChanged += new System.EventHandler(this.OnUserNameTextChanged);
|
||||
//
|
||||
// lblUserName
|
||||
//
|
||||
this.lblUserName.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.lblUserName.Location = new System.Drawing.Point(11, 84);
|
||||
this.lblUserName.Name = "lblUserName";
|
||||
this.lblUserName.Size = new System.Drawing.Size(100, 21);
|
||||
this.lblUserName.TabIndex = 3;
|
||||
this.lblUserName.Text = "&User name:";
|
||||
//
|
||||
// lblPassword
|
||||
//
|
||||
this.lblPassword.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||
this.lblPassword.Location = new System.Drawing.Point(11, 112);
|
||||
this.lblPassword.Name = "lblPassword";
|
||||
this.lblPassword.Size = new System.Drawing.Size(100, 21);
|
||||
this.lblPassword.TabIndex = 5;
|
||||
this.lblPassword.Text = "&Password:";
|
||||
//
|
||||
// txtPassword
|
||||
//
|
||||
this.txtPassword.Location = new System.Drawing.Point(146, 112);
|
||||
this.txtPassword.Name = "txtPassword";
|
||||
this.txtPassword.PasswordChar = '*';
|
||||
this.txtPassword.Size = new System.Drawing.Size(253, 20);
|
||||
this.txtPassword.TabIndex = 6;
|
||||
this.txtPassword.Text = "serveradmin";
|
||||
//
|
||||
// animatedIcon
|
||||
//
|
||||
this.animatedIcon.Delay = 100;
|
||||
this.animatedIcon.Location = new System.Drawing.Point(0, 67);
|
||||
this.animatedIcon.Name = "animatedIcon";
|
||||
this.animatedIcon.Size = new System.Drawing.Size(410, 3);
|
||||
this.animatedIcon.TabIndex = 0;
|
||||
this.animatedIcon.TabStop = false;
|
||||
//
|
||||
// ConnectForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(410, 195);
|
||||
this.Controls.Add(this.animatedIcon);
|
||||
this.Controls.Add(this.txtPassword);
|
||||
this.Controls.Add(this.lblPassword);
|
||||
this.Controls.Add(this.txtUserName);
|
||||
this.Controls.Add(this.lblUserName);
|
||||
this.Controls.Add(this.pictureBox);
|
||||
this.Controls.Add(lineBox);
|
||||
this.Controls.Add(this.btnConnect);
|
||||
this.Controls.Add(this.btnCancel);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "ConnectForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Connect to Server";
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
private System.Windows.Forms.Button btnConnect;
|
||||
private System.Windows.Forms.PictureBox pictureBox;
|
||||
private System.Windows.Forms.TextBox txtUserName;
|
||||
private System.Windows.Forms.Label lblUserName;
|
||||
private System.Windows.Forms.Label lblPassword;
|
||||
private System.Windows.Forms.TextBox txtPassword;
|
||||
private AnimatedIcon animatedIcon;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,188 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Configuration;
|
||||
using System.Threading;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using WebsitePanel.EnterpriseServer;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
public partial class ConnectForm : Form
|
||||
{
|
||||
private Thread connectThread;
|
||||
|
||||
public ConnectForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
if (DesignMode)
|
||||
{
|
||||
return;
|
||||
}
|
||||
InitializeForm();
|
||||
UpdateFormState();
|
||||
}
|
||||
|
||||
private void InitializeForm()
|
||||
{
|
||||
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage1);
|
||||
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage2);
|
||||
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage3);
|
||||
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage4);
|
||||
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage5);
|
||||
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage6);
|
||||
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage7);
|
||||
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage8);
|
||||
animatedIcon.LastFrame = 8;
|
||||
}
|
||||
|
||||
private void OnConnectClick(object sender, EventArgs e)
|
||||
{
|
||||
DisableForm();
|
||||
animatedIcon.StartAnimation();
|
||||
ThreadStart threadDelegate = new ThreadStart(Connect);
|
||||
connectThread = new Thread(threadDelegate);
|
||||
connectThread.Start();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public string Username
|
||||
{
|
||||
get { return txtUserName.Text; }
|
||||
}
|
||||
|
||||
public string Password
|
||||
{
|
||||
get { return txtPassword.Text; }
|
||||
}
|
||||
|
||||
private void Connect()
|
||||
{
|
||||
int status = -1;
|
||||
try
|
||||
{
|
||||
status = UserController.AuthenticateUser(txtUserName.Text, txtPassword.Text, string.Empty);
|
||||
if (status == 0)
|
||||
{
|
||||
UserInfo userInfo = UserController.GetUser(txtUserName.Text);
|
||||
SecurityContext.SetThreadPrincipal(userInfo);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError("Authentication error", ex);
|
||||
status = -1;
|
||||
}
|
||||
finally
|
||||
{
|
||||
animatedIcon.StopAnimation();
|
||||
}
|
||||
|
||||
string errorMessage = "Check configuration settings.";
|
||||
if (status != 0)
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case BusinessErrorCodes.ERROR_USER_WRONG_USERNAME:
|
||||
case BusinessErrorCodes.ERROR_USER_WRONG_PASSWORD:
|
||||
errorMessage = "Wrong username or password.";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_USER_ACCOUNT_CANCELLED:
|
||||
errorMessage = "Account cancelled.";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_USER_ACCOUNT_PENDING:
|
||||
errorMessage = "Account pending.";
|
||||
break;
|
||||
case -1:
|
||||
errorMessage = "Authentication error.";
|
||||
break;
|
||||
}
|
||||
MessageBox.Show(this,
|
||||
string.Format("Cannot connect to the Enterprise Server.\n{0}", errorMessage),
|
||||
Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
EnableForm();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
this.Close();
|
||||
}
|
||||
}
|
||||
|
||||
private void DisableForm()
|
||||
{
|
||||
foreach(Control ctrl in Controls)
|
||||
{
|
||||
ctrl.Enabled = false;
|
||||
}
|
||||
btnCancel.Enabled = true;
|
||||
}
|
||||
|
||||
private void EnableForm()
|
||||
{
|
||||
foreach (Control ctrl in Controls)
|
||||
{
|
||||
ctrl.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateFormState()
|
||||
{
|
||||
btnConnect.Enabled = (txtUserName.Text.Length > 0 );
|
||||
}
|
||||
|
||||
private void OnCancelClick(object sender, EventArgs e)
|
||||
{
|
||||
if (connectThread != null)
|
||||
{
|
||||
connectThread.Abort();
|
||||
}
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void OnServerNameTextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UpdateFormState();
|
||||
}
|
||||
|
||||
private void OnUserNameTextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UpdateFormState();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,152 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="lineBox.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAUjgpAGM8IQBjQSkAY0UxAHNVQgB7WUIAc1lKAHthSgBzYVIAe3VrAMY0AADeUQgA51UIAPdV
|
||||
AAD3YRAA/20YAP9xIQD/dSEA93UpAP99MQCMZVIAhGlSAIxpUgCEaVoAjHFjAJR5awCceWsAAJYpAEq2
|
||||
awD/gjEA/4Y5AJSCawCchnMApYJjALWKawClhnMApYpzAPeCQgD/ikIA/5JKAP+WSgD/llIA95paAN6W
|
||||
cwDWmnsA95pjAP+eYwDnmnsA/6JjAP+iawD3pnMA/6p7AKWShACtloQArZqMALWWhAC1lowArZqUALWe
|
||||
lAC1opQAtaKcAL2mnAC1pqUAva6tAL2ypQC9sq0Avba1AMamlADWrpwA56aMAP+qhAD/roQA96aMAP+y
|
||||
jAD/rpQA77acAPeylAD/spQA/7acAMaupQDGsq0AzratAMa6rQDOuq0A1rqtAMa2tQDOurUAzr61AOe6
|
||||
rQD/vqUAzse9AN7DtQDWw70A/8OlAP/HpQD/x60A98e1APfLvQD3z70A/8u9AMDAwADGx8YAzsfGAM7P
|
||||
zgDWy8YA1s/OANbTxgDe084A1tPWANbX1gDe294A58/GAO/TxgD308YA/9PGAPfbzgDv39YA99/WAPfj
|
||||
3gD/494A3t/nAM77/wDn5+cA/+fnAP/r5wDn8+cA//PvAOf/9wDn//8A//v3AP/7/wD///8ASjAYAID2
|
||||
gnywDYN8/////6cNg3wPD4N8AQAAABwUjACkFIwAAAAFAAAAAAAA3P1/KAIAAEUAAADRwwEAcBOMAIAA
|
||||
EMBIFowAgPaCfOD5gnz/////AAAAAJv4gny8FIwAJcTmdwAAAAABAAAAAgAAADgWjAAYAAAAAAAAAKQU
|
||||
jABCAAAAAAAAAIgUjAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAABAYN8ANz9fxwAAAAAAAAAAgAAACQA
|
||||
GgJQnAgAAgAAAAAAAABQnAgABQAAAOAUjAAGG+R3AAEAAAAAAMAAAAAAAAAAAAIAAAAAAAAAAAAAACAW
|
||||
jACv1EoAoCnqAAAAAMAAAAAAFBaMAAIAAACAAAAAAAAAAHRVjADs9aYAAgAAAEM6XGNvbm5lY3QuaWNv
|
||||
AACYFYwASBWMAEp+SgAEBwkAmBWMAMjEOXeYxDl3BQAAAAQHCQACAAAAJAAAAAAAAAAAAAAAeLTpAHAA
|
||||
AABUIYJ8bfTmdwABAAAAAAAAAAAAAAAAAACcFYwAeLTpABYAAAAAAAAAjfTmdxYAAAA4FowAAQAAACAA
|
||||
AAAWAAAAAAAAABYAAACIFYwABAcJAEgWjACYt+Z3kPTmd/////+N9OZ3RtVKAAABAAB4tOkAFgAAAOwV
|
||||
jAAAAAAAAAAAABwcHBwcHBwcHBwAAAAAAAAcAAAAAAAAAAAcAAAAAAAAHAAAAAAAAAAAHAAAfTklGxcI
|
||||
BQSFQQAAABwAAFd+a2ZcRDgiIwIAHBwcHBxYgIF6hHFVREUDAAAcHBwAfV1XUDw3NSQVQQAAABwAAGdz
|
||||
XlpPS0YtTAYAQRgJAQpoTScpFBANCywWADp/dx0HbVovMiofEQwwGQA9g392Fm5gNEoxKB4PSRoAP4OD
|
||||
fBlvYkpfSC8oEk4hAEBsU1EgeWQuMysmEw5HNQBWhH1yNnuCeHZ0cmNhczsAQ3VwWT59b25qaWdnW1R9
|
||||
AGxCQD1SAAAAAAAAAAAAAAAAAAAAAPADAAD3+wAA9/sAAAA7AAAAIAAAADEAAAA7AAAAIAAAACAAAAAg
|
||||
AAAAIAAAACAAAAAgAAAAIAAAACAAAP//AAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,63 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Windows.Forms;
|
||||
using System.Text;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
public class DataNode : TreeNode
|
||||
{
|
||||
private bool populated;
|
||||
public bool Populated
|
||||
{
|
||||
get
|
||||
{
|
||||
return populated;
|
||||
}
|
||||
set
|
||||
{
|
||||
populated = value;
|
||||
}
|
||||
}
|
||||
|
||||
private string nodeType;
|
||||
public string NodeType
|
||||
{
|
||||
get
|
||||
{
|
||||
return nodeType;
|
||||
}
|
||||
set
|
||||
{
|
||||
nodeType = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Text;
|
||||
using WebsitePanel.EnterpriseServer;
|
||||
using System.DirectoryServices;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
class Global
|
||||
{
|
||||
private static string rootOU;
|
||||
public static string RootOU
|
||||
{
|
||||
get { return rootOU; }
|
||||
set { rootOU = value; }
|
||||
}
|
||||
|
||||
private static string primaryDomainController;
|
||||
public static string PrimaryDomainController
|
||||
{
|
||||
get { return primaryDomainController; }
|
||||
set { primaryDomainController = value; }
|
||||
}
|
||||
|
||||
private static string aDRootDomain;
|
||||
|
||||
public static string ADRootDomain
|
||||
{
|
||||
get { return aDRootDomain; }
|
||||
set { aDRootDomain = value; }
|
||||
}
|
||||
|
||||
public static PackageInfo Space;
|
||||
public static string TempDomain;
|
||||
|
||||
public static string MailboxCluster;
|
||||
public static string StorageGroup;
|
||||
public static string MailboxDatabase;
|
||||
public static string KeepDeletedMailboxesDays;
|
||||
public static string KeepDeletedItemsDays;
|
||||
public static DirectoryEntry OrgDirectoryEntry;
|
||||
public static List<DirectoryEntry> SelectedAccounts;
|
||||
public static string OrganizationId;
|
||||
public static string OrganizationName;
|
||||
public static int ItemId;
|
||||
public static string ErrorMessage;
|
||||
public static bool ImportAccountsOnly;
|
||||
public static bool HasErrors;
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Text;
|
||||
using System.DirectoryServices;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
public enum ActionTypes
|
||||
{
|
||||
None,
|
||||
ImportOrganization,
|
||||
ImportOrganizationDomain,
|
||||
ImportMailbox,
|
||||
ImportContact,
|
||||
ImportGroup
|
||||
}
|
||||
|
||||
public class ImportAction
|
||||
{
|
||||
public ImportAction(ActionTypes type)
|
||||
{
|
||||
this.ActionType = type;
|
||||
}
|
||||
|
||||
private ActionTypes actionType;
|
||||
|
||||
public ActionTypes ActionType
|
||||
{
|
||||
get { return actionType; }
|
||||
set { actionType = value; }
|
||||
}
|
||||
|
||||
private string name;
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return name; }
|
||||
set { name = value; }
|
||||
}
|
||||
|
||||
private string description;
|
||||
|
||||
public string Description
|
||||
{
|
||||
get { return description; }
|
||||
set { description = value; }
|
||||
}
|
||||
|
||||
private DirectoryEntry entry;
|
||||
|
||||
public DirectoryEntry DirectoryEntry
|
||||
{
|
||||
get { return entry; }
|
||||
set { entry = value; }
|
||||
}
|
||||
|
||||
private string path;
|
||||
|
||||
public string Path
|
||||
{
|
||||
get { return path; }
|
||||
set { path = value; }
|
||||
}
|
||||
|
||||
private string userName;
|
||||
|
||||
public string UserName
|
||||
{
|
||||
get { return userName; }
|
||||
set { userName = value; }
|
||||
}
|
||||
}
|
||||
}
|
36
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/LineBox.Designer.cs
generated
Normal file
36
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/LineBox.Designer.cs
generated
Normal file
|
@ -0,0 +1,36 @@
|
|||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
partial class LineBox
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -0,0 +1,96 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
/// <summary>
|
||||
/// 3D line box.
|
||||
/// </summary>
|
||||
[ToolboxItem(true)]
|
||||
public partial class LineBox : Control
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the LineBox class.
|
||||
/// </summary>
|
||||
public LineBox() : base()
|
||||
{
|
||||
SetStyle(ControlStyles.UserPaint, true);
|
||||
SetStyle(ControlStyles.FixedHeight, true);
|
||||
SetStyle(ControlStyles.DoubleBuffer, true);
|
||||
SetStyle(ControlStyles.ResizeRedraw, true);
|
||||
SetStyle(ControlStyles.StandardClick, false);
|
||||
SetStyle(ControlStyles.Selectable, false);
|
||||
this.TabStop = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raises the Paint event.
|
||||
/// </summary>
|
||||
/// <param name="e">A PaintEventArgs that contains the event data.</param>
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
Graphics graphics = e.Graphics;
|
||||
Rectangle rectangle = this.ClientRectangle;
|
||||
Pen lightPen = new Pen(ControlPaint.Light(this.BackColor, 1));
|
||||
Pen darkPen = new Pen(ControlPaint.Dark(this.BackColor, 0));
|
||||
graphics.DrawLine(darkPen, rectangle.X, rectangle.Y, rectangle.X+rectangle.Width, rectangle.Y);
|
||||
graphics.DrawLine(lightPen, rectangle.X, rectangle.Y+1, rectangle.X+rectangle.Width, rectangle.Y+1);
|
||||
base.OnPaint(e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default size of the control.
|
||||
/// </summary>
|
||||
protected override Size DefaultSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return new Size(10, 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Performs the work of setting the specified bounds of this control.
|
||||
/// </summary>
|
||||
/// <param name="x">The new Left property value of the control.</param>
|
||||
/// <param name="y">The new Right property value of the control.</param>
|
||||
/// <param name="width">The new Width property value of the control.</param>
|
||||
/// <param name="height">The new Height property value of the control.</param>
|
||||
/// <param name="specified">A bitwise combination of the BoundsSpecified values.</param>
|
||||
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||||
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
|
||||
{
|
||||
base.SetBoundsCore(x, y, width, 2, specified);
|
||||
}
|
||||
}
|
||||
}
|
205
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/Log.cs
Normal file
205
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/Log.cs
Normal file
|
@ -0,0 +1,205 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
/// <summary>
|
||||
/// Installer Log.
|
||||
/// </summary>
|
||||
public sealed class Log
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the class.
|
||||
/// </summary>
|
||||
private Log()
|
||||
{
|
||||
}
|
||||
|
||||
private static string logFile = "WebsitePanel.Import.Enterprise.log";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes trace listeners.
|
||||
/// </summary>
|
||||
static Log()
|
||||
{
|
||||
//FileStream fileLog = new FileStream(logFile, FileMode.Append);
|
||||
FileStream fileLog = new FileStream(logFile, FileMode.Create);
|
||||
TextWriterTraceListener fileListener = new TextWriterTraceListener(fileLog);
|
||||
fileListener.TraceOutputOptions = TraceOptions.DateTime;
|
||||
Trace.UseGlobalLock = true;
|
||||
Trace.Listeners.Clear();
|
||||
Trace.Listeners.Add(fileListener);
|
||||
Trace.AutoFlush = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write error to the log.
|
||||
/// </summary>
|
||||
/// <param name="message">Error message.</param>
|
||||
/// <param name="ex">Exception.</param>
|
||||
internal static void WriteError(string message, Exception ex)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] ERROR: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
Trace.WriteLine(ex);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write error to the log.
|
||||
/// </summary>
|
||||
/// <param name="message">Error message.</param>
|
||||
internal static void WriteError(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] ERROR: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void Write(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] {1}", DateTime.Now, message);
|
||||
Trace.Write(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Write line to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void WriteLine(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write info message to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void WriteInfo(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] INFO: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write start message to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void WriteStart(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] START: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write end message to log
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
internal static void WriteEnd(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
string line = string.Format("[{0:G}] END: {1}", DateTime.Now, message);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
internal static void WriteApplicationStart()
|
||||
{
|
||||
try
|
||||
{
|
||||
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||
string name = assembly.GetName().Name;
|
||||
string version = assembly.GetName().Version.ToString();
|
||||
string line = string.Format("[{0:G}] {1} {2} Started", DateTime.Now, name, version);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
internal static void WriteApplicationEnd()
|
||||
{
|
||||
try
|
||||
{
|
||||
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||
string name = assembly.GetName().Name;
|
||||
string line = string.Format("[{0:G}] {1} Ended", DateTime.Now, name);
|
||||
Trace.WriteLine(line);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Opens notepad to view log file.
|
||||
/// </summary>
|
||||
public static void ShowLogFile()
|
||||
{
|
||||
try
|
||||
{
|
||||
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, logFile);
|
||||
Process.Start("notepad.exe", path);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
}
|
164
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OUForm.Designer.cs
generated
Normal file
164
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/OUForm.Designer.cs
generated
Normal file
|
@ -0,0 +1,164 @@
|
|||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
partial class OUForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Node3", 3, 3);
|
||||
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Node2", 2, 2, new System.Windows.Forms.TreeNode[] {
|
||||
treeNode1});
|
||||
System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Node1", 1, 1, new System.Windows.Forms.TreeNode[] {
|
||||
treeNode2});
|
||||
System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("Node0", new System.Windows.Forms.TreeNode[] {
|
||||
treeNode3});
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OUForm));
|
||||
this.ouTree = new System.Windows.Forms.TreeView();
|
||||
this.images = new System.Windows.Forms.ImageList(this.components);
|
||||
this.images2 = new System.Windows.Forms.ImageList(this.components);
|
||||
this.pnlButtons = new System.Windows.Forms.Panel();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.btnSelect = new System.Windows.Forms.Button();
|
||||
this.pnlButtons.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// ouTree
|
||||
//
|
||||
this.ouTree.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ouTree.ImageIndex = 2;
|
||||
this.ouTree.ImageList = this.images;
|
||||
this.ouTree.Location = new System.Drawing.Point(10, 10);
|
||||
this.ouTree.Name = "ouTree";
|
||||
treeNode1.ImageIndex = 3;
|
||||
treeNode1.Name = "Node3";
|
||||
treeNode1.SelectedImageIndex = 3;
|
||||
treeNode1.Text = "Node3";
|
||||
treeNode2.ImageIndex = 2;
|
||||
treeNode2.Name = "Node2";
|
||||
treeNode2.SelectedImageIndex = 2;
|
||||
treeNode2.Text = "Node2";
|
||||
treeNode3.ImageIndex = 1;
|
||||
treeNode3.Name = "Node1";
|
||||
treeNode3.SelectedImageIndex = 1;
|
||||
treeNode3.Text = "Node1";
|
||||
treeNode4.Name = "Node0";
|
||||
treeNode4.Text = "Node0";
|
||||
this.ouTree.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
|
||||
treeNode4});
|
||||
this.ouTree.SelectedImageIndex = 2;
|
||||
this.ouTree.ShowLines = false;
|
||||
this.ouTree.Size = new System.Drawing.Size(399, 319);
|
||||
this.ouTree.TabIndex = 0;
|
||||
this.ouTree.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.OnBeforeExpand);
|
||||
//
|
||||
// images
|
||||
//
|
||||
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
|
||||
this.images.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.images.Images.SetKeyName(0, "");
|
||||
this.images.Images.SetKeyName(1, "OU.ico");
|
||||
this.images.Images.SetKeyName(2, "Folder.ico");
|
||||
this.images.Images.SetKeyName(3, "");
|
||||
this.images.Images.SetKeyName(4, "UserSmallIcon.ico");
|
||||
this.images.Images.SetKeyName(5, "UsersSmallIcon.ico");
|
||||
this.images.Images.SetKeyName(6, "");
|
||||
this.images.Images.SetKeyName(7, "");
|
||||
this.images.Images.SetKeyName(8, "contact1.ico");
|
||||
//
|
||||
// images2
|
||||
//
|
||||
this.images2.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images2.ImageStream")));
|
||||
this.images2.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.images2.Images.SetKeyName(0, "UserSmallIcon.ico");
|
||||
this.images2.Images.SetKeyName(1, "UsersSmallIcon.ico");
|
||||
this.images2.Images.SetKeyName(2, "FolderSmallIcon.ico");
|
||||
this.images2.Images.SetKeyName(3, "SpaceSmallIcon.ico");
|
||||
//
|
||||
// pnlButtons
|
||||
//
|
||||
this.pnlButtons.Controls.Add(this.btnCancel);
|
||||
this.pnlButtons.Controls.Add(this.btnSelect);
|
||||
this.pnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.pnlButtons.Location = new System.Drawing.Point(10, 329);
|
||||
this.pnlButtons.Name = "pnlButtons";
|
||||
this.pnlButtons.Size = new System.Drawing.Size(399, 32);
|
||||
this.pnlButtons.TabIndex = 1;
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnCancel.Location = new System.Drawing.Point(324, 9);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnCancel.TabIndex = 1;
|
||||
this.btnCancel.Text = "Cancel";
|
||||
this.btnCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnSelect
|
||||
//
|
||||
this.btnSelect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnSelect.Location = new System.Drawing.Point(243, 9);
|
||||
this.btnSelect.Name = "btnSelect";
|
||||
this.btnSelect.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnSelect.TabIndex = 0;
|
||||
this.btnSelect.Text = "Select";
|
||||
this.btnSelect.UseVisualStyleBackColor = true;
|
||||
this.btnSelect.Click += new System.EventHandler(this.OnSelectClick);
|
||||
//
|
||||
// OUForm
|
||||
//
|
||||
this.AcceptButton = this.btnSelect;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnCancel;
|
||||
this.ClientSize = new System.Drawing.Size(419, 371);
|
||||
this.Controls.Add(this.ouTree);
|
||||
this.Controls.Add(this.pnlButtons);
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "OUForm";
|
||||
this.Padding = new System.Windows.Forms.Padding(10);
|
||||
this.ShowIcon = false;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Select Organizational Unit";
|
||||
this.pnlButtons.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TreeView ouTree;
|
||||
private System.Windows.Forms.Panel pnlButtons;
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
private System.Windows.Forms.Button btnSelect;
|
||||
private System.Windows.Forms.ImageList images2;
|
||||
private System.Windows.Forms.ImageList images;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,196 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using System.DirectoryServices;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
public partial class OUForm : BaseForm
|
||||
{
|
||||
public const string OU = "organizationalUnit";
|
||||
public const string CONTAINER = "container";
|
||||
public const string COMPUTER = "computer";
|
||||
public const string USER = "user";
|
||||
public const string CONTACT = "contact";
|
||||
public const string GROUP = "group";
|
||||
public const string TMP = "Tmp";
|
||||
|
||||
public OUForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
}
|
||||
|
||||
public void InitializeForm()
|
||||
{
|
||||
PopulateRootNode();
|
||||
}
|
||||
|
||||
private void PopulateRootNode()
|
||||
{
|
||||
ouTree.Nodes.Clear();
|
||||
DirectoryEntry root = null;
|
||||
try
|
||||
{
|
||||
root = ADUtils.GetRootOU();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ShowError("Unable to load root OU.", ex);
|
||||
}
|
||||
if (root != null)
|
||||
{
|
||||
DataNode rootNode = AddTreeNode(null, root);
|
||||
rootNode.Expand();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnBeforeExpand(object sender, TreeViewCancelEventArgs e)
|
||||
{
|
||||
DataNode node = e.Node as DataNode;
|
||||
ExpandNode(node);
|
||||
}
|
||||
|
||||
private void ExpandNode(DataNode node)
|
||||
{
|
||||
if (node == null || node.Populated)
|
||||
return;
|
||||
|
||||
node.Nodes.Clear();
|
||||
ouTree.Update();
|
||||
try
|
||||
{
|
||||
DirectoryEntry parent = node.Tag as DirectoryEntry;
|
||||
|
||||
foreach (DirectoryEntry child in parent.Children)
|
||||
{
|
||||
AddTreeNode(node, child);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ShowError("Unable to load Active Directory data.", ex);
|
||||
}
|
||||
|
||||
node.Populated = true;
|
||||
node.Expand();
|
||||
}
|
||||
|
||||
private DataNode AddTreeNode(DataNode parentNode, DirectoryEntry entry)
|
||||
{
|
||||
bool hasChildren = true;
|
||||
DataNode node = new DataNode();
|
||||
node.Text = (string)entry.Properties["name"].Value;
|
||||
|
||||
node.NodeType = entry.SchemaClassName;
|
||||
int imageIndex = 2;
|
||||
switch (entry.SchemaClassName)
|
||||
{
|
||||
case OU:
|
||||
imageIndex = 1;
|
||||
break;
|
||||
case CONTAINER:
|
||||
imageIndex = 2;
|
||||
break;
|
||||
case COMPUTER:
|
||||
imageIndex = 3;
|
||||
break;
|
||||
case USER:
|
||||
imageIndex = 4;
|
||||
hasChildren = false;
|
||||
break;
|
||||
case CONTACT:
|
||||
imageIndex = 8;
|
||||
hasChildren = false;
|
||||
break;
|
||||
case GROUP:
|
||||
imageIndex = 5;
|
||||
hasChildren = false;
|
||||
break;
|
||||
default:
|
||||
imageIndex = 6;
|
||||
break;
|
||||
}
|
||||
|
||||
node.SelectedImageIndex = imageIndex;
|
||||
node.ImageIndex = imageIndex;
|
||||
node.Tag = entry;
|
||||
if (hasChildren)
|
||||
{
|
||||
node.Populated = false;
|
||||
DataNode tmpNode = new DataNode();
|
||||
tmpNode.Text = "Expanding...";
|
||||
tmpNode.SelectedImageIndex = 2;
|
||||
tmpNode.ImageIndex = 2;
|
||||
tmpNode.NodeType = TMP;
|
||||
node.Nodes.Add(tmpNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
node.Populated = true;
|
||||
}
|
||||
if (parentNode != null)
|
||||
parentNode.Nodes.Add(node);
|
||||
else
|
||||
ouTree.Nodes.Add(node);
|
||||
return node;
|
||||
}
|
||||
|
||||
private void OnSelectClick(object sender, EventArgs e)
|
||||
{
|
||||
DataNode node = ouTree.SelectedNode as DataNode;
|
||||
if (node == null || node.NodeType != OU)
|
||||
{
|
||||
ShowWarning("Please select Organizational Unit.");
|
||||
return;
|
||||
}
|
||||
|
||||
this.directoryEntry = (DirectoryEntry)node.Tag;
|
||||
this.DialogResult = DialogResult.OK;
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private DirectoryEntry directoryEntry;
|
||||
|
||||
public DirectoryEntry DirectoryEntry
|
||||
{
|
||||
get { return directoryEntry; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,390 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="images.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>107, 17</value>
|
||||
</metadata>
|
||||
<data name="images.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADQ
|
||||
KQAAAk1TRnQBSQFMAgEBCQEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
AwABMAMAAQEBAAEgBgABMP8A/wAUAAG9AcMBtQH/AUkBSAFJAf8BSQFIAUkB/wFJAUgBSQH/AUkBSAFJ
|
||||
Af8BSQFIAUkB/wFJAUgBSQH/AUkBSAFJAf8BSQFIAUkB/wFJAUgBSQH/AUkBSAFJAf8BSQFIAUkB/wFJ
|
||||
AUgBSQH/AUkBSAFJAf8BSQFIAUkB/wFJAUgBSQH/wAABvQHDAbUL/wH3A/8B9wP/AfcD/wH3A/8B9wP/
|
||||
AfcD/wH3A/8B9wP/AfcD/wH3A/8B9wL/AfcB7wH/AZwBngGUAf/AAAG9AcMBtQX/AfcB7wHnAf8B9wHv
|
||||
AecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHvAecB/wH3Ae8B5wH/
|
||||
AfcB7wHnAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8BnAGeAZQB/8AAAb0BwwG1Bf8B7wHfAdYB/wHW
|
||||
Ab4BrQH/AcYBsgGlAf8BxgGyAaUB/wHOAboBpQH/AecB3wHWAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHn
|
||||
Af8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHvAecB/wGcAZ4BlAH/wAABvQHDAbUF/wHGAa4BnBH/
|
||||
AdYBvgGtAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHv
|
||||
AecB/wGcAZ4BlAH/wAABvQHDAbUC/wL3Af8BxgGuAZwR/wHeAcMBvQH/AfcB7wHnAf8BxgGyAaUB/wHG
|
||||
AbIBpQH/AcYBsgGlAf8BxgGyAaUB/wHGAbIBpQH/AfcB7wHnAf8BnAGeAZQB/8AAAb0BwwG1Av8C9wH/
|
||||
Ac4BugGlEf8B3gHDAb0B/wH3Ae8B5wH/AdYBwwG1Af8B1gHHAb0B/wHWAccBvQH/AdYBxwG9Af8B1gHD
|
||||
AbUB/wH3Ae8B5wH/AZwBngGUAf/AAAG9AcMBtQP/AfcB/wHOAcMBtRH/AdYBxwG9Af8B9wHvAecB/wHW
|
||||
AcMBtQH/AdYBwwG1Af8B1gHDAbUB/wHWAccBvQH/AdYBwwG1Av8B9wHvAf8BnAGeAZQB/8AAAb0BwwG1
|
||||
Bf8B7wHfAdYB/wHGAbIBpQH/AcYBsgGlAf8BxgGyAaUB/wHGAa4BnAH/Ae8B3wHWAf8B9wHvAecB/wHG
|
||||
AbIBpQH/AcYBsgGlAf8BxgGyAaUB/wHGAbIBpQH/AcYBsgGlAv8B9wHvAf8BnAGWAZQB/8AAAb0BwwG1
|
||||
Bf8B9wHvAecC/wHvAecB/wH3Ae8B5wL/AfcB7wH/AfcB7wHnAf8B9wHvAecH/wH3Av8C9wH/A/cB/wH3
|
||||
AfMB7wH/AfcB7wHnA/8B9wH/AZwBngGUAf/AAAG9AcMBtR3/AZwBngGUAf8BvQG+AbUB/wG9Ab4BtQH/
|
||||
Ab0BwwG1Af8BvQG+AbUB/wG9Ab4BtQH/Ab0BvgG1Af8BvQG+AbUB/8AAAb0BwwG1Af8BvQHDAbUB/wG9
|
||||
AcMBtQH/Ab0BwwG1Af8BvQHDAbUB/wG9AcMBtQH/Ab0BwwG1Af8BvQHDAbUB/wG9AcMBtQH//wD/AP8A
|
||||
fwABgwFyAWcB/wGDAXIBZwH/AYMBcgFnAf9gAAMYASEDTQGRAVwBWwFYAcEBeAFvAWgB5gGSAX4BcgH8
|
||||
AXgBbwFoAeYBXAFbAVgBwQNMAZADKAE9LAADGAEhA00BkQFcAVsBWAHBAXgBbwFnAeYBlQF+AW8B/AF4
|
||||
AW8BZwHmAVwBWwFYAcEDTAGQAygBPRwAAYMBcgFnAf8BwwGbAW0B/wGrAYUBWwH/AYMBcgFnAf8cAANo
|
||||
Af8DaAH/OAADAwEEAWABXQFcAc0BqgGTAW8B/QHmAcsBtAH/Ad4BtwGQAf8B4wG7AZQB/wHgAboBlAH/
|
||||
Ac4BqwGIAf8BuAGZAXcB/wFfAV0BXAHFGAADCAELAxQBGwMWAR4DFAEcAw4BEwFgAV0BXAHNAa8BlAFs
|
||||
Af0B9AHVAboB/wHqAb4BkQH/AfABwgGVAf8B7QHBAZUB/wHYAbABiAH/Ab8BmwF1Af8BXwFdAVwBxRgA
|
||||
AYMBcgFnAf8BsQGZAYEB/wHcAbcBkgH/AZ4BhQFlAf8DZQH/GAABcwFZAeoB/wEjAQAB3wH/ATkBIgGm
|
||||
Af8DXwH/HAABXAFKAbIB/wEoAQEB2AH/EAADBAEFAV0BXAFaAb4BxgGlAYUB/wHmAdABvQH/AeIBvQGc
|
||||
Af8B5gG/AZcB/wHoAcMBnwH/AdsBugGYAf8BwAGfAXoB/wFkAV8BXgHMEAADFwEgA0gBhAFTAWEBWQHX
|
||||
AVEBawFhAeYBTwFsAV8B6AFYAWsBYQHmAVABXwFXAd8BrAGRAWwB/wHPAakBhAH/AfQB2gHEAf8B7wHE
|
||||
AZ8B/wH0AccBmQH/AfYBywGiAf8B5wHBAZoB/wHIAaIBeAH/AWQBXwFcAcwQAAGHAXcBbQH/AZMBeAFj
|
||||
Af8BogGMAXAB/wHGAakBiQH/AeoBxAGfAf8BvgGeAXYB/wFhAVQBRgH/A0wB/wNqAf8QAAFzAVkB6gH/
|
||||
ASMBAAHfAf8BKgEEAdsB/wFNAUgBZAH/A18B/xQAAUABIwHDAf8BIwEAAd8B/wFUAUABtgH/EwABAQFV
|
||||
AVQBUwGqAdkBsQGQAf8B5gHUAcEB/wHzAdIBswH/AeoBwQGYAf8B7QHMAaoB/wHgAcIBpAH/AcMBowGC
|
||||
Af8BbAFoAWIB3RAAAyoBQAFnAcMBmQH/AV8BwAGRAf8BVwG4AYkB/wFPAbIBhAH/AaABwQGoAf8BVQGn
|
||||
AXgB/wGvAaABbAH/AeUBtwGRAf8B9AHfAckC/wHdAbkB/wH4AckBmgH/AfwB1gGvAf8B7QHKAagB/wHL
|
||||
AacBgQH/AW8BZwFhAd0IAAGrAZABbgH/AasBkAFuAf8BwQGkAYoB/wHPAa8BkgH/Ad4BvwGdAf8B8wHO
|
||||
AaoC/wHnAcAB/wHkAcMBoAH/AcQBpgGFAf8BsQGQAWgB/wFpAVgBRwH/A1YB/xAAAXMBWQHqAf8BIwEA
|
||||
Ad8B/wE3ARYB0gH/A1kB/xAAATQBEgHNAf8BKAEBAdgB/wFUAUABtgH/FAADAQECAwEBAgGTAYcBeQHl
|
||||
AdABwwGyAf8ByAHDAbsB/wHXAbcBlwH/AesBxAGdAf8B4QG+AZsB/wHOAaYBegH/A00BkRAAAxcBIAFu
|
||||
AcoBoAH/AWUBwgGWAf8BYAG/AZMB/wFnAcABkQH/AdEB4wHGAf8BYAG1AZAB/wGNAasBcgL/AdIBpQH/
|
||||
AdoBywG4Af8B0QHLAcIB/wHiAb4BmQH/AfkBzAGgAf8B7gHGAZ0B/wHYAaoBeAH/A00BkQQAAasBkAFu
|
||||
Af8BuQGiAYkB/wHcAcMBqQH/AfwB3AG9Av8B7wHOAf8B4wG2AZMB/wGdATQBCwH/AcgBbwFBAv8B3QG4
|
||||
Av8B3gG6Af8B5AHFAaUB/wHDAaQBhgH/AYUBZwFOAf8DVwH/EAABdAFaAesB/wEjAQAB3wH/AUwBMgHD
|
||||
Af8DXgH/CAABNAESAc0B/wEoAQEB2AH/AVQBQAG2Af8fAAEBAx8BLQFeAl8ByQEWAUYBdwH/AUoBZAGD
|
||||
Af8BxgGmAYcB/wGZAYQBbwHuA04BmAMHAQoQAAMMARABdQG2AZcB+AFuAcoBoAH/AWQBxAGVAf8BggHD
|
||||
AagB/wGyAcoBvwH/AVsBqgGFAf8BSAGoAXIB/wJpAV8B2QFsAW4BdwH1AQUBPAF1Af8BQQFfAYIB/wHP
|
||||
AaoBhgH/AZwBhwFuAe4DTgGYAwcBCgQAAbgBpQGQAf8B4wHNAbcC/wHqAc0C/wHoAcsC/wH0AdcB/wHT
|
||||
AakBiAH/AUMCAAH/AWoBGQEAAv8B4QG8Av8B6AHHAv8B4wG/Af8B7QHNAa8B/wHCAaUBhwH/AWgBWgFM
|
||||
Af8DXwH/EAABdAFaAesB/wEjAQAB3wH/AUsBMQHDAf8BTQFKAVgB/wEtAQwBxwH/ASYBAAHXAf8BVAFA
|
||||
AbYB/x8AAQEDAAEBAxABFgNQAZoBKwFQAXcB/wEiAUwBdwH/A1UBtQM/AWwEAAMCAQMUAANKAYkBbwG9
|
||||
AZIB/AFiAbwBkQH/AVsBkQGyAf8BUgGAAaUB/wFAAXMBUwH9AVgBXwFcAckDTwGbATsBWQFzAfUBHQFI
|
||||
AXUB/wETAUMBdQH/AlQBVQG1Az8BbAQAAwIBAwG4AaUBkAH/AdkBxwG1Av8B7AHUAv8B6wHRAv8B5gHN
|
||||
Av8B6QHPAv8B7wHWAf8B3AG2AZkB/wHxAdEBtgL/Ae8B0gL/AeMBxQL/AeMBxQL/AeUBxgH/AeUBygGt
|
||||
Af8BtQGZAXYB/wM+Af8UAAFzAVkB6gH/ASMBAAHfAf8BJgEAAdcB/wElAQAB1gH/AWQBXAGMAf8gAAMD
|
||||
AQQDAgEDAyEBMAFYAWYBdQHjAUcBbgGbAf8BQgFnAZMB/wEwAVYBgQH/AyQBNiAAAzEBTgFgAZ0BigH5
|
||||
AUoBdwGoAf8BUgF2AY4B9ANTAagDKAE9AVgBZQF1AeMBPgFqAZ0B/wE4AWIBlAH/ASMBTwGAAf8DJAE2
|
||||
DAABygG4AakB/wH2AeIB0QL/AfEB3QL/AesB1gL/AeoB1QL/AesB1AL/AfsB5gH/AcsBiQFaAf8B6AG/
|
||||
AZ8D/wHpAv8B5wHNAv8B5AHKAv8B6AHLAf8B+wHhAcQB/wHWAbsBoAH/AVcBVQFSAf8YAAEpAQIB2QH/
|
||||
ASMBAAHfAf8BQQElAcQB/wFkAVwBjAH/IAADBAEGBAADRwGCAWIBgQGcAfYBZQGQAbYB/wFWAYEBpwH/
|
||||
ATwBZAGQAf8DUgGhAwUBBxwAAUQCRQF8AToBZQF/AfkBcAGhAcwB/wFzAZsBxQH7AU8BaQGBAfADTAGP
|
||||
AWIBgwGhAfYBYAGRAbwB/wFPAYABqwH/ATEBXwGRAf8DUgGhAwUBBwgAAc8BxQG5Af8B+wHsAd0C/wHz
|
||||
AeMC/wHuAd4C/wHuAdwC/wHxAd8D/wH4Af8BzgGgAYIB/wGlAUABEwL/AesBzwL/AfgB5AL/AekB0wL/
|
||||
AeoB0AL/AegBzgH/Ad4BxgGwAf8BhAF3AW8B/xQAATQBEgHNAf8BKAEBAdgB/wFUAUABtgH/ATABCQHg
|
||||
Af8BUwE3AdYB/wFkAVwBjAH/HAADBAEGAwABAQM/AWwBfgGbAbgB+AGCAagBzgH/AWUBkQG4Af8BRwFp
|
||||
AZIB/wEsATwBTAH/AyQBNRgAAwoBDgFVAW8BdwHnAVMBjAGvAf8BoQHLAfkB/wGWAcMB8QH/AWcBiAG0
|
||||
AfwDQgFzAX4BnQG+AfgBgQGsAdgB/wFgAZIBvwH/AT4BZQGTAf8BHwExAUMB/wMkATUIAAHSAckBvwH/
|
||||
AfwB8QHmAv8B9wHrAv8B8gHlAv8B9AHnAv8B9gHnAv8B8gHeAv8B/gHvAf8BiAEuAQkB/wGnATUBCQH/
|
||||
Ae0B0gG4Av8B+AHnAv8B7QHZAv8B8AHaAf8B3QHHAbIB/wGAAXUBcAH/EAABNAESAc0B/wEjAQAB3wH/
|
||||
AVQBQAG2Af8IAAE9ARkB4gH/AUQBIgHdAf8BZAFcAYwB/xgAAwEBAgMAAQEBwwHQAdoB/wGQAbABzgH5
|
||||
AZsBvwHlAf8BbgGdAccB/wFGAVoBbwH/AS4BKgEnAf8DMgFQGAADDgETAVgBdgF+AekBjgG5Ad8B/wHM
|
||||
AfQC/wGqAdYB/gH/AWgBdgGBAeEEAAGSAbYB1wH5AZ0BxwHyAf8BagGgAdAB/wE8AVMBbAH/ASEBHAEZ
|
||||
Af8DMgFQCAAB0gHJAb8B/wH0Ae8B6QP/AfYC/wH3Ae0F/wHFAZkBeQH/AY0BFwEAAf8B6wHTAb4B/wGr
|
||||
AXQBWAH/AV4CAAH/Ab0BiAFkA/8B+AL/AfkB6QH/AfoB8AHhAf8B1gHAAasB/wGEAXcBbwH/DAABMwER
|
||||
AcwB/wEjAQAB3wH/AVQBQAG2Af8QAAFZAToB5wH/AS8BCAHfAf8BZAFcAYwB/xcAAQEIAAF/AYkBlwH1
|
||||
AXoBkgGmAf8BZAF3AY4B/wFKAU0BUQH/ATQBMwEyAf8DJAE1GAADAQECAV0BYwFnAcoBZwGnAcIB/wG8
|
||||
AeMB9AH/AaoB0gH5Af8BZQFwAYEB4wQAAX8BiQGbAfUBeAGTAaoB/wFfAXUBjgH/AUEBRQFJAf8BKAEn
|
||||
ASYB/wMkATUMAAHjAeIB4AL/Af4B/AP/AfsF/wG9AZgBhQH/AVYCAAH/AeIBxQGyAf8BhQE4ARsB/wFR
|
||||
AgAB/wHSAbMBnQf/Af0B/wHwAeUB2gH/AbUBpwGZAf8MAAEzAREBzAH/ASMBAAHfAf8BVAFAAbYB/xgA
|
||||
AVkBOgHnAf8BIwEAAd8B/xsAAQEEAANMAZICbAFqAekBZwFlAWIB/ANZAfIDUQGcAwQBBRwAA0IBdQFy
|
||||
Ab4B0QH/AVYBoAG1Af8BUwGTAbAB/wFAAXQBigH+BAADTAGSAWwCagHpAWIBYAFdAfwCVwFWAfIDUQGc
|
||||
AwQBBQwAAdIByQG/Af8C6wHsDf8BxQGaAYQB/wG5AWsBRwH/AZABSAEwAf8BwgGnAZcJ/wH1AfEB7QH/
|
||||
AdQBxgG4Af8MAAE7ARcB4AH/ASMBAAHfAf8BQAEjAcMB/zgAAwoBDQQAAwoBDQQAAxUBHQMoATwDHgEr
|
||||
JAADCgEOA1cBqwGCAaMBqwHvAXABoAGqAfMBYQF4AX4B4QNHAYIEAAMVAR0DKAE8Ax4BKxgAAdIByQG/
|
||||
Af8B7wHtAewB/wH6AfwB/hn/AfUB8AHsAf8B3QHTAckB/xAAATABCgHhAf8BRwEmAeEB/8QAAdIByQG/
|
||||
Af8B7wHsAegB/wL1AfYB/wH2AfkB+gH/AfgC+QH/AfQB7wHqAf8B7QHoAeIB/wHSAckBvwH/WAABhAKA
|
||||
Af8BhAKAAf8BhAKAAf8BhAKAAf8UAAGEAoAB/wGEAoAB/wGEAoAB/wGEAoAB/4wAA4UB/wNzAf8DSQH/
|
||||
Az0B/wM9Af8DVgH/A4UB/yAAAYQCgAH/AbYCpQH/AbYCpQH/AXECXAH/A2oB/wGEAoAB/wwAAYQCgAH/
|
||||
AbYCpQH/AbYCpQH/AXECXAH/A2oB/wGEAoAB/4QAAa4CowH/AaMClAH/AcECrQH/AcsCsgH/AcECrQH/
|
||||
AbICkwH/AYcCZgH/AU4CSAH/A2gB/xgAAYQCgAH/AdIBtwG2Af8BwQGjAaEB/wHBAaMBoQH/AboBmQGY
|
||||
Af8BggJoAf8BhAKAAf8IAAGEAoAB/wHSAbcBtgH/AcEBowGhAf8BwQGjAaEB/wG6AZkBmAH/AYICaAH/
|
||||
AYQCgAH/BAABYAGiAb0B/wFgAaIBvQH/AWABogG9Af8BYAGiAb0B/wFgAaIBvQH/AWABogG9Af8BYAGe
|
||||
AbUB/wFXAZoBtQH/AU8BkgGtAf8BTwGOAaUB/wFHAYoBpQH/AUcBggGcAf8BPwF6AZQB/wE/AXoBlAH/
|
||||
CAABYAGiAb0B/wFgAaIBvQH/AWABogG9Af8BYAGiAb0B/wFgAaIBvQH/AWABogG9Af8BYAGeAbUB/wFX
|
||||
AZoBtQH/AU8BkgGtAf8BTwGOAaUB/wFHAYoBpQH/AUcBggGcAf8BPwF6AZQB/wE/AXoBlAH/BAAB2gLS
|
||||
Af8B3gLcAf8D4gH/Ad4C3AH/AdoC0gH/AcsCsgH/Aa0CngH/AbYCjwH/Ab8CjAH/AVkCTwH/GAABhAKA
|
||||
Af8D7AH/AesC4QH/AdACvQH/AcQCmAH/AakChwH/DAABhAKAAf8D7AH/AesC4QH/AdACvQH/AcQCmAH/
|
||||
AakChwH/CAABeAGyAc4B/wGMAeMC/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3
|
||||
Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BVwGaAbUB/wgA
|
||||
AXgBsgHOAf8BjAHjAv8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3
|
||||
Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AVcBmgG1Af8EAAHLArIB/wPs
|
||||
Af8D8QH/A+wB/wHeAtwB/wHWAr8B/wGlAo0B/wGoAocB/wHOAqQB/wGHAmYB/wNuAf8BgQJyAf8DVgH/
|
||||
A24B/wwAAYQCgAH/AdMBqwGpAf8BzQKUAf8BuAFzAW4B/wFTAk0B/xAAAdIBowGZAf8B0wGrAakB/wHN
|
||||
ApQB/wG4AXMBbgH/AVcCVgH/CAABeAGyAc4B/wGUAecC/wGEAdMB9wH/AQABWgGEAf8BAAFaAYQB/wEA
|
||||
AVoBhAH/AQABWgGEAf8BAAFaAYQB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3
|
||||
Af8BYAGeAb0B/wgAAXgBsgHOAf8BlAHnAv8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGE
|
||||
AdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AWABngG9
|
||||
Af8IAAHLArIB/wHwAuIB/wPsAf8B1QLFAf8B1AKyAf8BsgJ1Af8BvAKFAf8BzgKkAf8BkAJtAf8BqQKN
|
||||
Af8BvgKqAf8BnAKQAf8BXAJSAf8DUAH/A24B/wHSAbcBtgH/Ad0BmwFuAf8B7gGhAT8B/wHnAbABZwH/
|
||||
Ad0BmwFuAf8BlgFhAWAB/wFXAlYB/wFXAlYB/wFXAlYB/wFXAlYB/wHdAZsBbgH/Ae4BoQE/Af8B5wGw
|
||||
AWcB/wHdAZsBbgH/AYMCUwH/A3YB/wQAAXgBsgHOAf8BnAHrAv8BhAHTAfcB/wE/AYoBpQH/AVcBogGt
|
||||
Af8BNgGWAa0B/wEuAZIBpQH/AQABWgGEAf8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGE
|
||||
AdMB9wH/AWABngG9Af8IAAF4AbIBzgH/AZwB6wL/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3
|
||||
Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wFg
|
||||
AZ4BvQH/DAAB1gKrAf8B3AK5Af8BzgKkAf8BygKMAf8BwgJnAf8ByQJ3Af8B1AKyAf8B3ALEAf8B3AK5
|
||||
Af8BvQKdAf8BrQKeAf8BrgKjAf8BiwGDAXgB/wM9Af8BzgKkAf8B2QG9AZIC/wG+AUYC/wHIAVcC/wHI
|
||||
AVcB/wHTAYEBYQH/AyAB/wEoAW8BtAH/ASgBbwG0Af8DIAH/AdkBvQGSAv8BvgFGAv8ByAFXAv8ByAFX
|
||||
Af8B0wGBAWEB/wNqAf8EAAF4AboB1gH/AZwB6wL/AYwB2wL/AYQBzwHnAf8BnAHnAfcB/wGEAdsB7wH/
|
||||
AXgB1wHvAf8BLgGiAcYB/wGMAdsC/wGEAdcC/wGEAdcC/wGEAdcC/wGEAdMB9wH/AWABngG9Af8IAAF4
|
||||
AboB1gH/AZwB6wL/AYwB2wL/AYwB2wL/AYwB2wL/AYwB2wL/AYwB2wL/AYwB2wL/AYwB2wL/AYQB1wL/
|
||||
AYQB1wL/AYQB1wL/AYQB0wH3Af8BYAGeAb0B/wwAAfABowE8Af8B/QG6AU0B/wHwAcABjgH/AckBkwGd
|
||||
Af8ByQJnAf8BxQJuAf8B3ALEAf8B1gKrAf8BzwKdAf8BvAKTAf8BngJqAf8BpQKBAf8BngGwAZYB/wM9
|
||||
Af8BzgKkAf8B2AG9AaQC/wHbAYIC/wHiAZMC/wHdAYgB/wHdAZsBbgH/A48B/wE/AbEB6AH/AT8BsQHo
|
||||
Af8BhAKAAf8B2AG9AaQC/wHbAYIC/wHiAZMC/wHdAYgB/wHdAZsBbgH/A2oB/wQAAYQBvgHWAf8BpQHv
|
||||
Av8BjAHfAv8BhAHPAecB/wFwAccB3gH/AcYD/wFwAccB3gH/AS4BogHGAf8BjAHfAv8BjAHfAv8BjAHf
|
||||
Av8BjAHfAv8BhAHbAfcB/wFgAZ4BvQH/CAABhAG+AdYB/wGlAe8C/wGMAd8C/wGMAd8C/wGMAd8C/wGM
|
||||
Ad8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGEAdsB9wH/AWABngG9Af8IAAHc
|
||||
AsQB/wHzAaoBOgL/AdYBcwL/AdYBcwL/AdYBcwH/AfEBvAFxAf8B1wGXAYcB/wHKAowB/wHWAqsB/wHc
|
||||
ArkB/wG9Ap0B/wGvAnYB/wGnAnEB/wGeAmgB/wM9Af8BzgKkAf8B2AG9AaQB/wHzAd8BoAL/Ae8BqwL/
|
||||
AewBpAH/AecBsAFnAf8EAAHNAsIB/wMgAf8BzgKkAf8B2AG9AaQB/wHzAd8BoAL/Ae8BqwL/AewBpAH/
|
||||
AecBsAFnAf8DlAH/BAABhAHDAd4B/wGtAfMC/wGMAeMC/wGEAc8B5wH/AYwBzwHnAf8BVwG+AdYB/wFP
|
||||
AbYB1gH/AS4BogHGAf8BjAHfAv8BjAHfAv8BjAHfAv8BjAHfAv8BjAHbAfcB/wFgAZ4BvQH/CAABhAHD
|
||||
Ad4B/wGtAfMC/wGMAeMC/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGM
|
||||
Ad8C/wGMAd8C/wGMAdsB9wH/AWABngG9Af8IAAHUArIC/wG6ATwC/wHWAXMC/wHWAXMC/wHWAXMC/wHA
|
||||
AUkC/wG9AUIB/wHzAbIBUgH/AdUBjAF3Af8B3AK5Af8BxgKTAf8BxgKTAf8BzwKdAf8BswKCAf8DPQH/
|
||||
Ac4CpAH/Ac4CpAH/Ac4CpAH/Ac4CpAH/Ac4CpAH/AdYBogGDAf8EAAHJAbwBuAH/AyAB/wHOAqQB/wHO
|
||||
AqQB/wHOAqQB/wHOAqQB/wHOAqQB/wHWAaIBgwH/CAABhAHDAd4B/wGtAfMC/wGMAeMC/wE/AYoBpQH/
|
||||
AT8BigGlAf8BPwGKAaUB/wE/AYoBpQH/AT8BigGlAf8BjAHjAv8BjAHjAv8BjAHjAv8BjAHjAv8BjAHb
|
||||
AfcB/wFgAZ4BvQH/CAABhAHDAd4B/wGtAfMC/wGMAeMC/wGMAeMC/wGMAeMC/wGMAeMC/wGMAeMC/wGM
|
||||
AeMC/wGMAeMC/wGMAeMC/wGMAeMC/wGMAeMC/wGMAdsB9wH/AWABngG9Af8IAAHgAb4BqQH/Ad8BrAFZ
|
||||
Av8B1gFzAv8B1gFzAv8B1gFzAf8B7wG/AWMC/wHJAVkC/wHCAU0B/wHXAZQBeAH/AdwCuQH/AcYCkwH/
|
||||
Aa8CdgH/Aa8CdgH/AbICdQH/Az0B/xgAA2oB/wG8AbsBuAH/AyAB/wFJAkYB/wNqAf8DagH/FAABhAHD
|
||||
Ad4B/wG1AfMC/wGUAecC/wGUAecC/wGUAecC/wGUAesC/wGUAesC/wGtAfMC/wGtAfMC/wGtAfMC/wGt
|
||||
AfMC/wGtAfMC/wGtAfMC/wFgAZ4BvQH/CAABhAHDAd4B/wG1AfMC/wGUAecC/wGUAecC/wGUAecC/wGU
|
||||
AesC/wGUAesC/wGtAfMC/wGtAfMC/wGtAfMC/wGtAfMC/wGtAfMC/wGtAfMC/wFgAZ4BvQH/BAAB3ALE
|
||||
Af8B5gHFAaUC/wHPAWYC/wHWAXMC/wHaAYEC/wHWAXMC/wHWAXMC/wHTAW8C/wHNAWEB/wHPApcB/wHc
|
||||
ArkB/wG8AoUB/wG/AowB/wGvAnYB/wGyAnUB/wM9Af8UAAHSAbcBtgH/Ad0BmwFuAf8B7gGhAT8B/wHn
|
||||
AbABZwH/Ad0BmwFuAf8BgwJTAf8DdgH/FAABhAHPAecB/wG1AfMC/wGUAecC/wGUAecC/wGUAesC/wGU
|
||||
AesC/wG1AfMC/wFPAZIBrQH/AWABngG9Af8BaAGqAcYB/wFoAaoBxgH/AWgBqgHGAf8BaAGqAcYB/wF4
|
||||
AboB1gH/CAABhAHPAecB/wG1AfMC/wGUAecC/wGUAecC/wGUAesC/wGUAesC/wG1AfMC/wFPAZIBrQH/
|
||||
AWABngG9Af8BaAGqAcYB/wFoAaoBxgH/AWgBqgHGAf8BaAGqAcYB/wF4AboB1gH/BAAB3ALEAf8B6gHK
|
||||
AZoC/wHYAXgC/wHgAY4C/wHWAXMC/wHWAXMC/wHWAXMC/wHeAYkB/wH7Ac8BcwH/Ac8CnQH/AdwCuQH/
|
||||
AcYChAH/AbICdQH/AbwChQH/AbgCcQH/Az0B/xQAAc4CpAH/AdkBvQGSAv8BvgFGAv8ByAFXAv8ByAFX
|
||||
Af8B0wGBAWEB/wNqAf8UAAF4AcMB3gH/AYwB2wH3Af8BtQHzAv8BtQHzAv8BtQHzAv8BtQHzAv8BYAGe
|
||||
Ab0B/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wF4AboB1gH/
|
||||
CAABeAHDAd4B/wGMAdsB9wH/AbUB8wL/AbUB8wL/AbUB8wL/AbUB8wL/AWABngG9Af8BhAHTAfcB/wGE
|
||||
AdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BeAG6AdYB/wQAAdwCxAH/AfcB1wGS
|
||||
Av8B4AGOAv8B6gGhAv8B1gFzAv8B1gFzAv8B1gFzAv8B1gFzAf8B7gHEAYQB/wHcArkB/wHuAt0B/wHh
|
||||
AsQB/wHZApwB/wHJAmcB/wHCAmcB/wNWAf8UAAHOAqQB/wHYAb0BpAL/AdsBggL/AeIBkwL/Ad0BiAH/
|
||||
Ad0BmwFuAf8DagH/GAABaAGqAcYB/wFoAaoBxgH/AWgBqgHGAf8BaAGqAcYB/wFoAaoBxgH/AXABvgHe
|
||||
Af8BnAHbAfcK/wGuAXgB/wHOAaIBPwH/AZwB2wH3Af8BeAG6AdYB/wwAAWgBqgHGAf8BaAGqAcYB/wFo
|
||||
AaoBxgH/AWgBqgHGAf8BaAGqAcYB/wFwAb4B3gH/AZwB2wH3Cv8BrgF4Af8BzgGiAT8B/wGcAdsB9wH/
|
||||
AXgBugHWAf8EAAHcAsQB/wG8AawBlgH/AdYBwAGVAf8B6AHXAaUC/wHWAXMC/wHWAXMC/wHWAXMC/wHW
|
||||
AXMB/wHpAcIBigH/AeECxAH/Ae4C3QH/Ae4C3QH/Ae4C3QH/AeoC1wH/AdACmgH/GAABzgKkAf8B2AG9
|
||||
AaQB/wHzAd8BoAL/Ae8BqwL/AewBpAH/AecBsAFnAf8DlAH/MAABaAG2Ad4B/wFoAbYB3gH/AWgBtgHe
|
||||
Af8BaAG2Ad4B/wFoAbYB3gH/AWABtgHeAf8oAAFoAbYB3gH/AWgBtgHeAf8BaAG2Ad4B/wFoAbYB3gH/
|
||||
AWgBtgHeAf8BYAG2Ad4B/wgAAdwCxAH/AdwCxAH/AdwCxAH/AdYCyQH/AcwCuAH/Ac4BuQGvAf8B1gHA
|
||||
AasB/wHcAb8BmQH/AdABpQGHAf8BxAKlAf8B1AKyAf8B1AKyAf8B1AKyAf8B1AKyAf8cAAHOAqQB/wHO
|
||||
AqQB/wHOAqQB/wHOAqQB/wHOAqQB/wHWAaIBgwH/oAAB3ALEAf8B3ALEAf8B3ALEAf8B3ALEAf8B3ALE
|
||||
Af8BwAKZAf8cAAFCAU0BPgcAAT4DAAEoAwABQAMAATADAAEBAQABAQUAAYABARYAA/8BAAL/BgAC/18A
|
||||
AX8GAAL/BgAC/wYABf8BHwL/AeABDwH+AQAB/gEfAc8B/wHAAQ8BwAEAAfwBHwGHAfMBwAEPAgAB8AEH
|
||||
AYMB4wHAAQ8CAAHAAQMBwwHHAcABDwIAAYABAQHhAY8B4AEPAgABgAEAAfABHwHAAS8BgAECAgAB+AE/
|
||||
AcABPwHAAQcCAAH8AT8B0AEfAcABAwIAAfgBHwHAAR8BgAEDAgAB8QGPAcABHwGBAQMCAAHjAccB2AEf
|
||||
AYEBAwGAAQEBxwHnAegBHwHBAQMBgAEDAY8B/wHUAX8BwAGPAcABBwGfBf8B8AEPAv8BwwHhBP8BwAF/
|
||||
AYEBwAT/AYABPwEBAoABAQGAAQEBAAE/AQMBgQGAAQEBgAEBAQABAwGDAcEBgAEBAYABAQGAAwABgAEB
|
||||
AYABAQHAAwABgAEBAYABAQHAAwABgAEBAYABAQGAAQABAgEAAYABAQGAAQEBgAEAAQIBAQGAAQEBgAEB
|
||||
AYABAAH8AQ8BgAEBAYABAQIAAfgBDwGAAQEBgAEBAgAB+AEPAYABAQGAAQECAAH4AQ8BwAEBAcABAQEA
|
||||
AQEB+AEPAf8BAwH/AQMBAAEDAfgBHwT/AeABfws=
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="images2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="images2.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACK
|
||||
EAAAAk1TRnQBSQFMAgEBBAEAAQwBAAEEAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
AwABIAMAAQEBAAEYBgABGP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/ALoAA/sD7wHeAdsB2AHVAc8ByQHX
|
||||
AdMBzgHlAeMB4gP2GAAB+QL4AcwBxgHBAbYBrAGhAaoBmQGKAaEBiwF6AaoBmQGKAbYBrAGhAckBxAG/
|
||||
Ae8B7gHtIQAB+QL4AcwBxAG/AbcBqgGeAawBmAGGAaQBiwF3AawBmAGGAbcBqgGeAckBwwG9Ae8B7gHt
|
||||
OQAB8gLxAb8BpQGMAdIBkgFKAeoBpAFSAe8BrQFaAe8BrgFYAekBqQFUAckBnQFnAdEByAG9A/0PAAP+
|
||||
Aa8BoQGVAbEBlQF6AeYBywG0Ad4BtwGQAeMBuwGUAeABugGUAc4BqwGIAbgBmQF8AcABsgGkEgAD/QP4
|
||||
A/cD+AP7Aa8BnwGRAbYBlgF3AfQB1QG6AeoBvgGRAfABwgGVAe0BwQGVAdgBsAGIAb8BmwF6AcEBsgGi
|
||||
AwABdQGEAY8BbAF6AYUBYAFtAXcBUQFdAWYBQgFMAVQBMQE6AUEBIwEqATABFgEcASEBDgETARgBDgET
|
||||
ARgBDgETARgBDgETARgBDgETARgBDgETARgBDgETARgGAAHzAe4B6gHiAZcBTQHnAZgBRAHiAZsBSQHh
|
||||
AZ8BTgHjAaQBUwHkAacBUgHmAakBTwHvAbcBXQH2Ab0BZQHkAb0BkQP9DAAD/gHGAbkBqQHGAaUBhQHm
|
||||
AdABvQHiAb0BnAHmAb8BlwHoAcMBnwHbAboBmAHAAZ8BfwG7AasBnQwAA/YBtAG/AboBZgGWAX8BWgGV
|
||||
AXcBVAGSAXQBagGVAX8BWQGFAWwBrAGRAXEBzwGpAYQB9AHaAcQB7wHEAZ8B9AHHAZkB9gHLAaIB5wHB
|
||||
AZoByAGiAX0BvQGqAZoDAAF3AYcBkgGiAd8B8AFwAc0B6gFJAbgB4gE3Aa4B2wEtAakB2QEmAaEB0gEh
|
||||
AZgBxwEgAY4BvAEeAYMBrgEZAX8BqwEVAXwBqQEbAXcBnwEfAXIBlgEWARwBIQMAAfcB8wHvAdsBiAE6
|
||||
AdUBfAEmAdUBfgEjAdcBggEjAdkBiAEmAdwBkAEuAeABmgE8AeMBoQFFAeMBoQE+AecBrQFRAeoBsgFX
|
||||
AekBwAGRDAAD/wHPAcoBtwHZAbEBkAHmAdQBwQHzAdIBswHqAcEBmAHtAcwBqgHgAcIBpAHDAaMBggGu
|
||||
AZwBjAwAA+cBbAHDAZkBZAHAAZEBXAG4AYkBVAGyAYQBoAHBAagBWgGnAX0BrwGgAXEB5QG3AZEB9AHf
|
||||
AckB/wHdAbkB+AHJAZoB/AHWAa8B7QHKAagBywGnAYEBrwGbAYkDAAF6AYoBlQGqAegB9gGVAeUB/AGE
|
||||
Ad8B+wF1AdYB+gFqAdAB9wFdAcYB9AFQAb4B8AFBAbQB7AE1AaoB6AErAaQB5gEgAZoB3wEWAZAB1wEb
|
||||
AXcBnwEgAScBLQP/Ad4BrAF8AdABcgEeAdMBeAEgAdQBewEgAdYBfwEgAdcBgwEfAdkBhQEeAdoBiQEe
|
||||
Ad0BkQEoAeABmgE0AeEBnAEzAecBrAFQAeQBpAFAAe4B4QHSCQAG/wHwAdABsAHQAcMBsgHIAcMBuwHX
|
||||
AbcBlwHrAcQBnQHhAb4BmwHOAaYBfwHSAcoBwgwAA/YBcwHKAaABagHCAZYBZQG/AZMBbAHAAZEB0QHj
|
||||
AcYBZQG1AZABjQGrAXcB/wHSAaUB2gHLAbgB0QHLAcIB4gG+AZkB+QHMAaAB7gHGAZ0B2AGqAX0B0gHJ
|
||||
AcADAAF9AY4BmAGwAeoB9gGfAekB+wGSAeQB/AGBAd0B+wF1AdYB+gFoAc4B9wFdAcYB9AFNAbwB8AFB
|
||||
AbQB7AE1AaoB6AEqAaMB5gEdAZYB3AEVAXwBqQEtATQBOwH0Ae8B6QHiAacBcwHTAXkBKwHSAXQBHgHU
|
||||
AXoBIQHVAX4BIQHXAYEBIQHYAYUBIQHaAYgBIAHbAYoBHwHcAY8BIgHeAZQBKAHgAZoBMgHlAagBSgHi
|
||||
Aa8BbwP+CQAD/wL1AfQBpAGnAawBGwFLAXwBTwFpAYMBxgGmAYcB1AGxAY4B0QHIAb8D/QwAA/sBgQHP
|
||||
AagBcwHKAaABaQHEAZUBggHDAagBsgHKAb8BYAGqAYUBTQGoAXcBsgGuAY4BfAGCAYwBCgFBAXoBRgFk
|
||||
AYIBzwGqAYYB3AG0AY0B0gHHAb0D/QMAAYABkQGcAbYB7QH4AaoB7AH7AZsB6AH7AY8B4wH8AYEB3QH7
|
||||
AXEB1QH5AWgBzgH3AVsBxQH0AU0BvAHwAT0BsgHsATIBqQHoASQBngHiARABggG0ATsBQwFLAesB1wHB
|
||||
AeoBvgGdAeEBpAFwAdEBcwEfAdIBdwEeAdQBfAEhAdYBfwEhAdcBggEhAdkBhQEgAdoBiAEgAdsBigEg
|
||||
AdwBjQEhAdwBjgEhAeIBnwFAAd4BmAE3AfYB8wHvBgAG/wP6Aa0BugHHATABVQF8AScBUQF8AZUBmQGb
|
||||
AeYB4QHcAwAD/g8AAdMB6AHeAXcBzAGhAWcBvAGRAWABkQGyAVcBgAGlAUEBfgFcAYABsQGWAaABrgGz
|
||||
ATwBYQGKASIBTQF6ARgBSAF6AY8BlAGWAegB4QHbAwAD/gMAAYMBlQGfAb4B8AH5AasB8AH3AaUB7AH7
|
||||
AZgB5wH7AYkB4QH8AX8B3QH7AXEB1QH5AWUBzQH3AVgBxAHzAUsBuwHwAT0BsgHsASwBpAHjAQwBigG/
|
||||
AUkBUwFcAegBywGuAewBxQGpAekBvwGcAeABoQFqAdIBdgEhAdIBdgEcAdUBfAEgAdYBfwEhAdcBggEg
|
||||
AdgBhQEgAdkBhwEgAdoBiQEgAdoBiQEdAd8BlgE1Ad8BlwE3AfEB6AHeBgAG/gH0AvUBcwGRAa8BTAFz
|
||||
AZsBRwFsAZMBNQFbAYEC8AHxGAAB6AHxAe0BZwGyAZUBTwF8AagBYAGJAa0BrAHAAb0B8ALyAW0BjgGx
|
||||
AUMBbwGdAT0BZwGUASgBVAGAAvAB8QwAAYYBmQGjAb4B8AH5AbYB7QH4AbAB7gH6AaQB6wH6AZUB5gH7
|
||||
AYkB4QH8AX0B3AH8AXEB1QH5AWUBzQH3AVgBxAHzAUkBuQHvATUBqQHnAQwBjwHHAVcBYwFrAegBzgGv
|
||||
Ae4BzQG2AesBwwGjAekBvwGbAeMBqwF4AdgBiAE8AdMBeAEfAdQBeQEbAdUBfgEeAdcBgQEfAdgBgwEg
|
||||
AdkBhQEgAdkBhgEeAdwBkQEyAd4BlAE3AfEB6AHcBgAD/gMAAcwB0wHZAXUBmQG8AWoBkAG2AVsBgQGn
|
||||
AUEBaQGQAbsBwgHJA/4VAAHFAdAB1wE5AWwBiQF1AaEBzAGDAasB2QFfAYQBpgHCAcsB1AFxAZoBwwFl
|
||||
AZEBvAFUAYABqwE2AWQBkQG6AcEByQP+CQABiQGcAaYBvgHwAfkBtgHtAfgBtgHtAfgBqwHwAfcBogHs
|
||||
AfoBlQHmAfsBiQHhAfwBfQHcAfwBbwHTAfoBYwHMAfcBVQHDAfMBSQG5Ae8BGQGZAc8BYwFwAXoB6wHY
|
||||
AcEB8AHUAcEB7QHLAbEB6wHDAaIB6QG+AZoB5wG4AYwB4QGkAWsB3AGRAUgB2AGGATEB1wGBAScB1wGB
|
||||
ASIB1wGCASEB1wGCAR4B2wGOATMB3AGRATcB9QHwAesGAAP+A/8B2wHhAeUBjwGxAdQBggGoAc4BagGR
|
||||
AbgBTAFuAZIBMQFBAVED8xIAAfwC/QFlAZgBqgFYAYwBrwGhAcsB+QGWAcMB8QFvAZcBvwHWAd4B4wGP
|
||||
AbYB3wGBAawB2AFlAZIBvwFDAWoBkwEkATYBSAPzCQABiwGgAagBvgHwAfkBvgHwAfkBvgHwAfkBvgHw
|
||||
AfkBtAHyAfgBqgHsAfsBoAHpAfsBlQHlAfwBigHfAfwBfwHYAfsBdAHSAfgBaAHKAfQBXQHAAfEBYwFw
|
||||
AXoB8QHqAeAB8QHUAb4B8QHWAcMB7gHMAbMB6wHDAaMB6QG8AZYB5wG3AYwB5gGxAYEB4wGpAXEB4AGh
|
||||
AWEB3gGZAVIB3AGUAUYB2wGOATsB3QGWAUkB4QGpAWgB/AL7BgAG/wHDAdAB2gGkAccB6wGbAb8B5QFz
|
||||
AZ0BxwFLAV8BdAEzAS8BLAPrEgAB+wL8AWwBoQG0AY4BuQHfAcwB9AH/AaoB1gH+AZYBtQHWAwABpwHQ
|
||||
AfkBnQHHAfIBbwGgAdABQQFYAXEBJgEhAR4D6wkAAY0BoQGqAY0BoQGqAY0BoQGqAY0BoQGqAY0BoQGq
|
||||
AYsBnwGoAYkBnAGmAYkBmwGmAYcBmgGkAYYBmQGjAYQBlgGgAYQBlgGgAYMBlQGgAYMBlQGgAXUBhAGP
|
||||
Af0C/AHrAc0BqgH1AeEB1gHyAdgBxAHvAc4BtQHrAcUBpQHpAbwBlgHmAbUBiQHkAa4BfAHiAacBcAHg
|
||||
AaEBYwHeAZoBVgHdAZYBUAHfAZwBVwHsAdoBwwkAA/8GAAGSAaQBtgF/AZIBpgFpAXwBjgFPAVIBVgE5
|
||||
ATgBNwPyEgAD/wGbAcQBzwFsAacBwgG8AeMB9AGqAdIB+QGMAasBzgMAAZIBpwG8AX0BkwGqAWQBegGO
|
||||
AUYBSgFOAS0BLAErA/IJAAGPAaQBrAGyAeQB7AG2Ae0B+AG2Ae0B+AGpAewB9gGSAeEB8wGNAaEBqgHw
|
||||
AfEB8hgAAfIB6wHhAfMB2QHAAfYB5QHbAfMB2wHJAfAB0gG7Ae0ByQGsAeoBwQGeAegBugGSAeYBtAGH
|
||||
AeUBrwF+AeQBrQF5AeIBqAF0AeUBuAGCA/wMAAP/AwAB1gHUAdMBkQGPAY0BbwFtAWoBZgFlAWQDxAP+
|
||||
FQAB5AHtAe8BdwG+AdEBWwGgAbUBWAGTAbABQgF2AZMDAAHWAdUB1AGQAY0BjAFqAWgBZQFfAV4BXQPD
|
||||
A/4JAAHsAe0B7gGPAaQBrAGPAaQBrAGPAaQBrAGPAaQBrAGPAaQBrAHwAfEB8h4AAe8B4wHRAfMB2wHE
|
||||
AfcB6AHhAfQB4AHSAfIB2AHDAfAB0QG4Ae4BywGvAewByAGpAewBxgGoAeoBvwGcAecBuwGHAfgB9gHz
|
||||
DAAD/QMAA/0DAAP5A/AD9RsAA/0B4AHyAfYBqQHhAe4BiAHLAdkBgwG/Ac0B0wHhAeUDAAP5Au8B8AP1
|
||||
RQAB8wHuAeYB7gHUAbAB9AHdAcgB9QHhAdQB8wHdAc4B8gHXAcUB7wHQAbcB6wHFAZoB6wHVAbQC+gH5
|
||||
pQAD/gH0AfEB6gHvAeEBzAHtAdoBvQHtAdoBvwHwAeYB1wH5AfcB9Q8AAUIBTQE+BwABPgMAASgDAAFA
|
||||
AwABIAMAAQEBAAEBBgABARYAA/+BAAb/AfABHwHgAQ8B/gEAAv8B4AEHAcABDwHAAQABgAEAAcABAwHA
|
||||
AQ8CAAGAAQABgAEDAcABDwIAAYACAAEBAcABDwIAAYADAAHgAQ8CAAGAAwABwAEvAYABAgGAAwABwAE/
|
||||
AcABBwGAAwAB0AEfAcABAwGAAwABwAEfAYABAwGAAwABwAEfAYEBAwGAAgABAQHYAR8BgQEDAYABfwGA
|
||||
AQEB6AEfAcEBAwGAAf8BwAEDAdQBfwHAAY8C/wHgAQcG/wHwAR8L
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,966 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Collections;
|
||||
using System.Collections.Specialized;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using WebsitePanel.EnterpriseServer;
|
||||
using WebsitePanel.Providers.HostedSolution;
|
||||
using WebsitePanel.Providers;
|
||||
using System.Threading;
|
||||
using System.DirectoryServices;
|
||||
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
public class OrganizationImporter
|
||||
{
|
||||
public const int EXCHANGE_CONTAINER_ERROR = -2790;
|
||||
|
||||
private Label lblProcess;
|
||||
private ProgressBar progressBar;
|
||||
private ApplicationForm appForm;
|
||||
private Button btnImport;
|
||||
|
||||
private Thread thread;
|
||||
|
||||
|
||||
public OrganizationImporter()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Initialize(string username, ApplicationForm appForm)
|
||||
{
|
||||
this.appForm = appForm;
|
||||
this.lblProcess = appForm.lblMessage;
|
||||
this.progressBar = appForm.progressBar;
|
||||
this.btnImport = appForm.btnStart;
|
||||
try
|
||||
{
|
||||
UserInfo info = UserController.GetUser(username);
|
||||
SecurityContext.SetThreadPrincipal(info);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ShowError("Unable to authenticate user", ex);
|
||||
Cancel();
|
||||
}
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
Log.WriteInfo("Import started");
|
||||
btnImport.Enabled = false;
|
||||
appForm.ImportStarted = true;
|
||||
thread = new Thread(new ThreadStart(this.StartThread));
|
||||
thread.Start();
|
||||
}
|
||||
|
||||
public void Cancel()
|
||||
{
|
||||
Log.WriteInfo("Import canceled");
|
||||
appForm.ImportStarted = false;
|
||||
btnImport.Enabled = true;
|
||||
this.lblProcess.Text = string.Empty;
|
||||
this.progressBar.Value = 0;
|
||||
}
|
||||
|
||||
public void Abort()
|
||||
{
|
||||
Cancel();
|
||||
AbortThread();
|
||||
|
||||
}
|
||||
|
||||
private void AbortThread()
|
||||
{
|
||||
if (this.thread != null)
|
||||
{
|
||||
if (this.thread.IsAlive)
|
||||
{
|
||||
this.thread.Abort();
|
||||
}
|
||||
this.thread.Join();
|
||||
}
|
||||
}
|
||||
|
||||
public DialogResult ShowError(string text, Exception ex)
|
||||
{
|
||||
Log.WriteError(text, ex);
|
||||
return MessageBox.Show(appForm, text, appForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Displays process progress.
|
||||
/// </summary>
|
||||
public void StartThread()
|
||||
{
|
||||
this.progressBar.Value = 0;
|
||||
|
||||
try
|
||||
{
|
||||
this.lblProcess.Text = "Creating import script...";
|
||||
appForm.Update();
|
||||
|
||||
//default actions
|
||||
List<ImportAction> actions = GetImportActions();
|
||||
|
||||
//process actions
|
||||
for (int i = 0; i < actions.Count; i++)
|
||||
{
|
||||
ImportAction action = actions[i];
|
||||
this.lblProcess.Text = action.Description;
|
||||
this.progressBar.Value = i * 100 / actions.Count;
|
||||
appForm.Update();
|
||||
|
||||
switch (action.ActionType)
|
||||
{
|
||||
case ActionTypes.ImportOrganization:
|
||||
ImportOrganization();
|
||||
break;
|
||||
|
||||
case ActionTypes.ImportOrganizationDomain:
|
||||
ImportDomain(action.Name);
|
||||
break;
|
||||
|
||||
case ActionTypes.ImportMailbox:
|
||||
ImportMailbox(action.DirectoryEntry);
|
||||
break;
|
||||
|
||||
case ActionTypes.ImportContact:
|
||||
ImportContact(action.DirectoryEntry);
|
||||
break;
|
||||
|
||||
case ActionTypes.ImportGroup:
|
||||
ImportGroup(action.DirectoryEntry);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
this.progressBar.Value = 100;
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (Utils.IsThreadAbortException(ex))
|
||||
return;
|
||||
|
||||
string message = Global.ErrorMessage;
|
||||
if ( string.IsNullOrEmpty(message))
|
||||
message = "An unexpected error has occurred during import.";
|
||||
ShowError(message, ex);
|
||||
Cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
this.lblProcess.Text = string.Empty;
|
||||
DialogResult dialogResult = DialogResult.No;
|
||||
if (Global.HasErrors)
|
||||
{
|
||||
dialogResult = MessageBox.Show(appForm, "Import completed with errors. Would you like to see import log?", appForm.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
||||
}
|
||||
else
|
||||
{
|
||||
dialogResult = MessageBox.Show(appForm, "Import completed successfully. Would you like to see import log?", appForm.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Information);
|
||||
}
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Log.ShowLogFile();
|
||||
}
|
||||
|
||||
btnImport.Enabled = true;
|
||||
appForm.ImportStarted = false;
|
||||
this.progressBar.Value = 0;
|
||||
}
|
||||
|
||||
public static bool IsThreadAbortException(Exception ex)
|
||||
{
|
||||
Exception innerException = ex;
|
||||
while (innerException != null)
|
||||
{
|
||||
if (innerException is System.Threading.ThreadAbortException)
|
||||
return true;
|
||||
innerException = innerException.InnerException;
|
||||
}
|
||||
|
||||
string str = ex.ToString();
|
||||
return str.Contains("System.Threading.ThreadAbortException");
|
||||
}
|
||||
|
||||
private List<ImportAction> GetImportActions()
|
||||
{
|
||||
List<ImportAction> list = new List<ImportAction>();
|
||||
ImportAction action = null;
|
||||
|
||||
if (Global.ImportAccountsOnly)
|
||||
{
|
||||
ServiceProviderItem item = PackageController.GetPackageItemByName(Global.Space.PackageId, ResourceGroups.HostedOrganizations, Global.OrganizationName, typeof(Organization));
|
||||
if (item == null)
|
||||
{
|
||||
Global.ErrorMessage = string.Format("Organization {0} not found.", Global.OrganizationName);
|
||||
throw new Exception(Global.ErrorMessage);
|
||||
}
|
||||
Global.ItemId = item.Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
action = new ImportAction(ActionTypes.ImportOrganization);
|
||||
action.Description = "Importing organization...";
|
||||
list.Add(action);
|
||||
|
||||
DirectoryEntry org = Global.OrgDirectoryEntry;
|
||||
PropertyValueCollection props = org.Properties["uPNSuffixes"];
|
||||
if (props != null)
|
||||
{
|
||||
foreach (string domainName in props)
|
||||
{
|
||||
action = new ImportAction(ActionTypes.ImportOrganizationDomain);
|
||||
action.Description = "Importing organization domains...";
|
||||
action.Name = domainName;
|
||||
list.Add(action);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Global.SelectedAccounts != null)
|
||||
{
|
||||
foreach (DirectoryEntry entry in Global.SelectedAccounts)
|
||||
{
|
||||
switch (entry.SchemaClassName)
|
||||
{
|
||||
case "user":
|
||||
action = new ImportAction(ActionTypes.ImportMailbox);
|
||||
action.Description = "Importing mailbox...";
|
||||
action.DirectoryEntry = entry;
|
||||
list.Add(action);
|
||||
break;
|
||||
case "contact":
|
||||
action = new ImportAction(ActionTypes.ImportContact);
|
||||
action.Description = "Importing contact...";
|
||||
action.DirectoryEntry = entry;
|
||||
list.Add(action);
|
||||
break;
|
||||
case "group":
|
||||
action = new ImportAction(ActionTypes.ImportGroup);
|
||||
action.Description = "Importing group...";
|
||||
action.DirectoryEntry = entry;
|
||||
list.Add(action);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
private void ImportOrganization()
|
||||
{
|
||||
|
||||
PackageInfo packageInfo = Global.Space;
|
||||
int serviceId = PackageController.GetPackageServiceId(packageInfo.PackageId, ResourceGroups.HostedOrganizations);
|
||||
ServiceInfo serviceInfo = ServerController.GetServiceInfo(serviceId);
|
||||
StringDictionary serviceSettings = ServerController.GetServiceSettingsAdmin(serviceId);
|
||||
|
||||
string tempDomain = serviceSettings["TempDomain"];
|
||||
ServerInfo serverInfo = ServerController.GetServerById(serviceInfo.ServerId);
|
||||
|
||||
serviceId = PackageController.GetPackageServiceId(packageInfo.PackageId, ResourceGroups.Exchange);
|
||||
serviceSettings = ServerController.GetServiceSettingsAdmin(serviceId);
|
||||
Global.MailboxCluster = serviceSettings["MailboxCluster"];
|
||||
Global.StorageGroup = serviceSettings["StorageGroup"];
|
||||
Global.MailboxDatabase = serviceSettings["MailboxDatabase"];
|
||||
Global.KeepDeletedMailboxesDays = serviceSettings["KeepDeletedMailboxesDays"];
|
||||
Global.KeepDeletedItemsDays = serviceSettings["KeepDeletedItemsDays"];
|
||||
|
||||
int ret = CreateOrganization(Global.Space.PackageId, Global.OrganizationId, Global.OrganizationName);
|
||||
if (ret > 0)
|
||||
{
|
||||
Global.ItemId = ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (ret)
|
||||
{
|
||||
case BusinessErrorCodes.ERROR_USER_ACCOUNT_DEMO:
|
||||
Global.ErrorMessage = "You cannot import organization in demo account";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_USER_ACCOUNT_PENDING:
|
||||
case BusinessErrorCodes.ERROR_USER_ACCOUNT_SUSPENDED:
|
||||
case BusinessErrorCodes.ERROR_USER_ACCOUNT_CANCELLED:
|
||||
case BusinessErrorCodes.ERROR_USER_ACCOUNT_SHOULD_BE_ADMINISTRATOR:
|
||||
Global.ErrorMessage = "User account is disabled or does not have enough permissions";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_PACKAGE_NOT_FOUND:
|
||||
Global.ErrorMessage = "Space not found";
|
||||
break;
|
||||
|
||||
|
||||
case BusinessErrorCodes.ERROR_PACKAGE_CANCELLED:
|
||||
case BusinessErrorCodes.ERROR_PACKAGE_SUSPENDED:
|
||||
Global.ErrorMessage = "Space is cancelled or suspended";
|
||||
break;
|
||||
|
||||
case BusinessErrorCodes.ERROR_ORGS_RESOURCE_QUOTA_LIMIT:
|
||||
Global.ErrorMessage = "Organizations quota limit";
|
||||
break;
|
||||
|
||||
case BusinessErrorCodes.ERROR_DOMAIN_QUOTA_LIMIT:
|
||||
case BusinessErrorCodes.ERROR_SUBDOMAIN_QUOTA_LIMIT:
|
||||
Global.ErrorMessage = "Domains quota limit";
|
||||
break;
|
||||
|
||||
case BusinessErrorCodes.ERROR_ORG_ID_EXISTS:
|
||||
Global.ErrorMessage = "Organization with specified Id already exists";
|
||||
break;
|
||||
|
||||
case BusinessErrorCodes.ERROR_ORGANIZATION_TEMP_DOMAIN_IS_NOT_SPECIFIED:
|
||||
Global.ErrorMessage = "Organization temp domain name is not specified";
|
||||
break;
|
||||
case BusinessErrorCodes.ERROR_DOMAIN_ALREADY_EXISTS:
|
||||
case BusinessErrorCodes.ERROR_ORGANIZATION_DOMAIN_IS_IN_USE:
|
||||
Global.ErrorMessage = "Domain already exists or is in use";
|
||||
break;
|
||||
}
|
||||
throw new Exception(string.Format("Unable to create organization. Error code: {0}", ret));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static int CreateOrganization(int packageId, string organizationId, string organizationName)
|
||||
{
|
||||
int itemId;
|
||||
int errorCode;
|
||||
|
||||
// place log record
|
||||
Log.WriteStart(string.Format("Importing organization {0}...", organizationName));
|
||||
if (!CheckQuotas(packageId, out errorCode))
|
||||
return errorCode;
|
||||
|
||||
string addressListsContainer = null;
|
||||
try
|
||||
{
|
||||
addressListsContainer = ADUtils.GetAddressListsContainer();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError("Cannot load Exchange 2007 Address Lists Container", ex);
|
||||
return EXCHANGE_CONTAINER_ERROR;
|
||||
}
|
||||
|
||||
Organization org = PopulateOrganization(packageId, organizationId, addressListsContainer);
|
||||
|
||||
// Check if organization exitsts.
|
||||
if (OrganizationIdentifierExists(organizationId))
|
||||
return BusinessErrorCodes.ERROR_ORG_ID_EXISTS;
|
||||
|
||||
|
||||
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedOrganizations);
|
||||
|
||||
//create temprory domain name;
|
||||
|
||||
string domainName = CreateTemporyDomainName(serviceId, organizationId);
|
||||
|
||||
Log.WriteInfo(string.Format("Importing temp domain {0}", domainName));
|
||||
if (string.IsNullOrEmpty(domainName))
|
||||
return BusinessErrorCodes.ERROR_ORGANIZATION_TEMP_DOMAIN_IS_NOT_SPECIFIED;
|
||||
|
||||
bool domainCreated;
|
||||
int domainId = CreateDomain(domainName, packageId, out domainCreated);
|
||||
//create domain
|
||||
if (domainId < 0)
|
||||
return domainId;
|
||||
|
||||
|
||||
//add organization to package items
|
||||
itemId = AddOrganizationToPackageItems(org, serviceId, packageId, organizationName, organizationId, domainName);
|
||||
|
||||
// register org ID
|
||||
|
||||
DataProvider.AddExchangeOrganization(itemId, organizationId);
|
||||
|
||||
// register domain
|
||||
DataProvider.AddExchangeOrganizationDomain(itemId, domainId, true);
|
||||
|
||||
// register organization domain service item
|
||||
OrganizationDomain orgDomain = new OrganizationDomain();
|
||||
orgDomain.Name = domainName;
|
||||
orgDomain.PackageId = packageId;
|
||||
orgDomain.ServiceId = serviceId;
|
||||
|
||||
PackageController.AddPackageItem(orgDomain);
|
||||
Log.WriteEnd("Organization imported");
|
||||
return itemId;
|
||||
}
|
||||
|
||||
private static Organization PopulateOrganization(int packageId, string organizationId, string addressListsContainer)
|
||||
{
|
||||
Organization org = new Organization();
|
||||
org.OrganizationId = organizationId;
|
||||
org.AddressList = string.Format("CN={0} Address List,CN=All Address Lists,{1}", organizationId, addressListsContainer);
|
||||
org.GlobalAddressList = string.Format("CN={0} Global Address List,CN=All Global Address Lists,{1}", organizationId, addressListsContainer);
|
||||
org.OfflineAddressBook = string.Format("CN={0} Offline Address Book,CN=Offline Address Lists,{1}", organizationId, addressListsContainer);
|
||||
org.Database = GetDatabaseName();
|
||||
org.DistinguishedName = ADUtils.RemoveADPrefix(Global.OrgDirectoryEntry.Path);
|
||||
org.SecurityGroup = string.Format("CN={0},{1}", organizationId, org.DistinguishedName);
|
||||
|
||||
|
||||
PackageContext cntx = PackageController.GetPackageContext(packageId);
|
||||
// organization limits
|
||||
org.IssueWarningKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
|
||||
if (org.IssueWarningKB > 0) org.IssueWarningKB *= 1024;
|
||||
org.ProhibitSendKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
|
||||
if (org.ProhibitSendKB > 0) org.ProhibitSendKB *= 1024;
|
||||
org.ProhibitSendReceiveKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
|
||||
if (org.ProhibitSendReceiveKB > 0) org.ProhibitSendReceiveKB *= 1024;
|
||||
|
||||
PackageSettings settings = PackageController.GetPackageSettings(packageId, PackageSettings.EXCHANGE_SERVER);
|
||||
org.KeepDeletedItemsDays = Utils.ParseInt(settings["KeepDeletedItemsDays"], 14);
|
||||
return org;
|
||||
}
|
||||
|
||||
private static string GetDatabaseName()
|
||||
{
|
||||
string ret;
|
||||
if (String.IsNullOrEmpty(Global.MailboxCluster))
|
||||
{
|
||||
ret = string.Format("{0}\\{1}", Global.StorageGroup, Global.MailboxDatabase);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = string.Format("{0}\\{1}\\{2}", Global.MailboxCluster, Global.StorageGroup, Global.MailboxDatabase);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static bool CheckQuotas(int packageId, out int errorCode)
|
||||
{
|
||||
|
||||
// check account
|
||||
errorCode = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
|
||||
if (errorCode < 0) return false;
|
||||
|
||||
// check package
|
||||
errorCode = SecurityContext.CheckPackage(packageId, DemandPackage.IsActive);
|
||||
if (errorCode < 0) return false;
|
||||
|
||||
// check organizations quota
|
||||
QuotaValueInfo quota = PackageController.GetPackageQuota(packageId, Quotas.ORGANIZATIONS);
|
||||
if (quota.QuotaExhausted)
|
||||
{
|
||||
errorCode = BusinessErrorCodes.ERROR_ORGS_RESOURCE_QUOTA_LIMIT;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// check sub-domains quota (for temporary domain)
|
||||
quota = PackageController.GetPackageQuota(packageId, Quotas.OS_SUBDOMAINS);
|
||||
if (quota.QuotaExhausted)
|
||||
{
|
||||
errorCode = BusinessErrorCodes.ERROR_SUBDOMAIN_QUOTA_LIMIT;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool OrganizationIdentifierExists(string organizationId)
|
||||
{
|
||||
return DataProvider.ExchangeOrganizationExists(organizationId);
|
||||
}
|
||||
|
||||
private static string CreateTemporyDomainName(int serviceId, string organizationId)
|
||||
{
|
||||
// load service settings
|
||||
StringDictionary serviceSettings = ServerController.GetServiceSettingsAdmin(serviceId);
|
||||
|
||||
string tempDomain = serviceSettings["TempDomain"];
|
||||
return String.IsNullOrEmpty(tempDomain) ? null : organizationId + "." + tempDomain;
|
||||
}
|
||||
|
||||
private static int CreateDomain(string domainName, int packageId, out bool domainCreated)
|
||||
{
|
||||
// trying to locate (register) temp domain
|
||||
DomainInfo domain = null;
|
||||
int domainId = 0;
|
||||
domainCreated = false;
|
||||
|
||||
// check if the domain already exists
|
||||
int checkResult = ServerController.CheckDomain(domainName);
|
||||
if (checkResult == BusinessErrorCodes.ERROR_DOMAIN_ALREADY_EXISTS)
|
||||
{
|
||||
// domain exists
|
||||
// check if it belongs to the same space
|
||||
domain = ServerController.GetDomain(domainName);
|
||||
if (domain == null)
|
||||
return checkResult;
|
||||
|
||||
if (domain.PackageId != packageId)
|
||||
return checkResult;
|
||||
|
||||
if (DataProvider.ExchangeOrganizationDomainExists(domain.DomainId))
|
||||
return BusinessErrorCodes.ERROR_ORGANIZATION_DOMAIN_IS_IN_USE;
|
||||
|
||||
domainId = domain.DomainId;
|
||||
}
|
||||
else if (checkResult < 0)
|
||||
{
|
||||
return checkResult;
|
||||
}
|
||||
|
||||
// create domain if required
|
||||
if (domain == null)
|
||||
{
|
||||
domain = CreateNewDomain(packageId, domainName);
|
||||
// add domain
|
||||
domainId = ServerController.AddDomain(domain);
|
||||
|
||||
if (domainId < 0)
|
||||
return domainId;
|
||||
|
||||
domainCreated = true;
|
||||
}
|
||||
|
||||
return domainId;
|
||||
}
|
||||
|
||||
private static DomainInfo CreateNewDomain(int packageId, string domainName)
|
||||
{
|
||||
// new domain
|
||||
DomainInfo domain = new DomainInfo();
|
||||
domain.PackageId = packageId;
|
||||
domain.DomainName = domainName;
|
||||
domain.IsInstantAlias = true;
|
||||
domain.IsSubDomain = true;
|
||||
|
||||
return domain;
|
||||
}
|
||||
|
||||
private static int AddOrganizationToPackageItems(Organization org, int serviceId, int packageId, string organizationName, string organizationId, string domainName)
|
||||
{
|
||||
org.ServiceId = serviceId;
|
||||
org.PackageId = packageId;
|
||||
org.Name = organizationName;
|
||||
org.OrganizationId = organizationId;
|
||||
org.DefaultDomain = domainName;
|
||||
|
||||
int itemId = PackageController.AddPackageItem(org);
|
||||
return itemId;
|
||||
}
|
||||
|
||||
private void ImportDomain(string domainName)
|
||||
{
|
||||
int ret = -1;
|
||||
try
|
||||
{
|
||||
ret = AddOrganizationDomain(Global.ItemId, domainName);
|
||||
if (ret < 0)
|
||||
{
|
||||
Log.WriteError(string.Format("Unable to import domain {0}. Error code: {1}", domainName, ret));
|
||||
Global.HasErrors = true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (Utils.IsThreadAbortException(ex))
|
||||
return;
|
||||
|
||||
Log.WriteError(string.Format("Unable to import domain {0}. Error code: {1}", domainName, ret), ex);
|
||||
Global.HasErrors = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static int AddOrganizationDomain(int itemId, string domainName)
|
||||
{
|
||||
Log.WriteStart(string.Format("Importing domain {0}...", domainName));
|
||||
|
||||
// load organization
|
||||
Organization org = (Organization)PackageController.GetPackageItem(itemId);
|
||||
if (org == null)
|
||||
return -1;
|
||||
|
||||
// check package
|
||||
int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
|
||||
if (packageCheck < 0) return packageCheck;
|
||||
|
||||
DomainInfo domain = null;
|
||||
|
||||
// check if the domain already exists
|
||||
int checkResult = ServerController.CheckDomain(domainName);
|
||||
if (checkResult == BusinessErrorCodes.ERROR_DOMAIN_ALREADY_EXISTS)
|
||||
{
|
||||
// domain exists
|
||||
// check if it belongs to the same space
|
||||
domain = ServerController.GetDomain(domainName);
|
||||
if (domain == null)
|
||||
return checkResult;
|
||||
|
||||
if (domain.PackageId != org.PackageId)
|
||||
return checkResult;
|
||||
|
||||
if (DataProvider.ExchangeOrganizationDomainExists(domain.DomainId))
|
||||
return BusinessErrorCodes.ERROR_ORGANIZATION_DOMAIN_IS_IN_USE;
|
||||
}
|
||||
else if (checkResult == BusinessErrorCodes.ERROR_RESTRICTED_DOMAIN)
|
||||
{
|
||||
return checkResult;
|
||||
}
|
||||
|
||||
// create domain if required
|
||||
if (domain == null)
|
||||
{
|
||||
domain = new DomainInfo();
|
||||
domain.PackageId = org.PackageId;
|
||||
domain.DomainName = domainName;
|
||||
domain.IsInstantAlias = false;
|
||||
domain.IsSubDomain = false;
|
||||
|
||||
// add domain
|
||||
domain.DomainId = ServerController.AddDomain(domain);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// register domain
|
||||
DataProvider.AddExchangeOrganizationDomain(itemId, domain.DomainId, false);
|
||||
|
||||
// register service item
|
||||
OrganizationDomain exchDomain = new OrganizationDomain();
|
||||
exchDomain.Name = domainName;
|
||||
exchDomain.PackageId = org.PackageId;
|
||||
exchDomain.ServiceId = org.ServiceId;
|
||||
PackageController.AddPackageItem(exchDomain);
|
||||
Log.WriteEnd("Domain imported");
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
private static void ImportMailbox(DirectoryEntry directoryEntry)
|
||||
{
|
||||
int ret = -1;
|
||||
string name = null;
|
||||
try
|
||||
{
|
||||
name = (string)directoryEntry.Properties["name"].Value;
|
||||
ret = AddMailbox(Global.ItemId, directoryEntry);
|
||||
if (ret < 0)
|
||||
{
|
||||
Log.WriteError(string.Format("Unable to import mailbox {0}. Error code: {1}", name, ret));
|
||||
Global.HasErrors = true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (Utils.IsThreadAbortException(ex))
|
||||
return;
|
||||
|
||||
Log.WriteError(string.Format("Unable to import mailbox {0}. Error code: {1}", name, ret), ex);
|
||||
Global.HasErrors = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static void ImportContact(DirectoryEntry directoryEntry)
|
||||
{
|
||||
int ret = -1;
|
||||
string name = null;
|
||||
try
|
||||
{
|
||||
name = (string)directoryEntry.Properties["name"].Value;
|
||||
ret = AddContact(Global.ItemId, directoryEntry);
|
||||
if (ret < 0)
|
||||
{
|
||||
Log.WriteError(string.Format("Unable to import contact {0}. Error code: {1}", name, ret));
|
||||
Global.HasErrors = true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (Utils.IsThreadAbortException(ex))
|
||||
return;
|
||||
|
||||
Log.WriteError(string.Format("Unable to import contact {0}. Error code: {1}", name, ret), ex);
|
||||
Global.HasErrors = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static void ImportGroup(DirectoryEntry directoryEntry)
|
||||
{
|
||||
int ret = -1;
|
||||
string name = null;
|
||||
try
|
||||
{
|
||||
name = (string)directoryEntry.Properties["name"].Value;
|
||||
ret = AddGroup(Global.ItemId, directoryEntry);
|
||||
if (ret < 0)
|
||||
{
|
||||
Log.WriteError(string.Format("Unable to import group {0}. Error code: {1}", name, ret));
|
||||
Global.HasErrors = true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (Utils.IsThreadAbortException(ex))
|
||||
return;
|
||||
|
||||
Log.WriteError(string.Format("Unable to import group {0}. Error code: {1}", name, ret), ex);
|
||||
Global.HasErrors = true;
|
||||
}
|
||||
}
|
||||
|
||||
private static int AddMailbox(int itemId, DirectoryEntry entry)
|
||||
{
|
||||
string accountName = (string)entry.Properties["name"].Value;
|
||||
Log.WriteStart(string.Format("Importing user {0}...", accountName));
|
||||
|
||||
Organization org = (Organization)PackageController.GetPackageItem(itemId);
|
||||
if (org == null)
|
||||
return -1;
|
||||
|
||||
// e-mail
|
||||
string email = (string)entry.Properties["userPrincipalName"].Value;
|
||||
if (string.IsNullOrEmpty(email))
|
||||
throw new Exception("UPN is not specified");
|
||||
|
||||
if (EmailAddressExists(email))
|
||||
return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
|
||||
|
||||
|
||||
|
||||
if (AccountExists(accountName))
|
||||
throw new Exception(string.Format("Account {0} already exists", accountName));
|
||||
|
||||
string displayName = (string)entry.Properties["displayName"].Value;
|
||||
|
||||
|
||||
int userId = AddOrganizationUser(itemId, accountName, displayName, email, string.Empty);
|
||||
AddAccountEmailAddress(userId, email);
|
||||
|
||||
//account type
|
||||
PropertyValueCollection type = entry.Properties["msExchRecipientDisplayType"];
|
||||
if (type == null || type.Value == null)
|
||||
{
|
||||
Log.WriteInfo("Account type : user");
|
||||
return userId;
|
||||
}
|
||||
int mailboxType = (int)type.Value;
|
||||
ExchangeAccountType accountType = ExchangeAccountType.Undefined;
|
||||
switch (mailboxType)
|
||||
{
|
||||
case 1073741824:
|
||||
Log.WriteInfo("Account type : mailbox");
|
||||
accountType = ExchangeAccountType.Mailbox;
|
||||
break;
|
||||
case 7:
|
||||
Log.WriteInfo("Account type : room");
|
||||
accountType = ExchangeAccountType.Room;
|
||||
break;
|
||||
case 8:
|
||||
Log.WriteInfo("Account type : equipment");
|
||||
accountType = ExchangeAccountType.Equipment;
|
||||
break;
|
||||
default:
|
||||
Log.WriteInfo("Account type : unknown");
|
||||
return userId;
|
||||
}
|
||||
|
||||
UpdateExchangeAccount(userId, accountName, accountType, displayName, email, false, string.Empty, string.Empty, string.Empty);
|
||||
|
||||
string defaultEmail = (string)entry.Properties["extensionAttribute3"].Value;
|
||||
|
||||
PropertyValueCollection emails = entry.Properties["proxyAddresses"];
|
||||
if (emails != null)
|
||||
{
|
||||
foreach (string mail in emails)
|
||||
{
|
||||
string emailAddress = mail;
|
||||
if (emailAddress.ToLower().StartsWith("smtp:"))
|
||||
emailAddress = emailAddress.Substring(5);
|
||||
|
||||
|
||||
if (!emailAddress.Equals(defaultEmail, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
if (EmailAddressExists(emailAddress))
|
||||
{
|
||||
Log.WriteInfo(string.Format("Email address {0} already exists. Skipped", emailAddress));
|
||||
continue;
|
||||
}
|
||||
// register email address
|
||||
Log.WriteInfo(string.Format("Importing email {0}", emailAddress));
|
||||
AddAccountEmailAddress(userId, emailAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
Log.WriteEnd("User imported");
|
||||
return userId;
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static int AddContact(int itemId, DirectoryEntry entry)
|
||||
{
|
||||
string accountName = (string)entry.Properties["name"].Value;
|
||||
Log.WriteStart(string.Format("Importing contact {0}...", accountName));
|
||||
|
||||
Organization org = (Organization)PackageController.GetPackageItem(itemId);
|
||||
if (org == null)
|
||||
return -1;
|
||||
|
||||
|
||||
if (AccountExists(accountName))
|
||||
throw new Exception(string.Format("Account {0} already exists", accountName));
|
||||
|
||||
string displayName = (string)entry.Properties["displayName"].Value;
|
||||
string email = (string)entry.Properties["targetAddress"].Value;
|
||||
if (email != null && email.ToLower().StartsWith("smtp:"))
|
||||
email = email.Substring(5);
|
||||
|
||||
|
||||
int accountId = AddAccount(itemId, ExchangeAccountType.Contact, accountName, displayName, email, false, 0, string.Empty, null);
|
||||
|
||||
Log.WriteEnd("Contact imported");
|
||||
return accountId;
|
||||
}
|
||||
|
||||
private static int AddGroup(int itemId, DirectoryEntry entry)
|
||||
{
|
||||
string accountName = (string)entry.Properties["name"].Value;
|
||||
Log.WriteStart(string.Format("Importing group {0}...", accountName));
|
||||
|
||||
Organization org = (Organization)PackageController.GetPackageItem(itemId);
|
||||
if (org == null)
|
||||
return -1;
|
||||
|
||||
if (AccountExists(accountName))
|
||||
throw new Exception(string.Format("Account {0} already exists", accountName));
|
||||
|
||||
string displayName = (string)entry.Properties["displayName"].Value;
|
||||
string email = null;
|
||||
PropertyValueCollection proxyAddresses = entry.Properties["proxyAddresses"];
|
||||
if (proxyAddresses != null)
|
||||
{
|
||||
foreach (string address in proxyAddresses)
|
||||
{
|
||||
if (address != null && address.StartsWith("SMTP:"))
|
||||
{
|
||||
email = address.Substring(5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (string.IsNullOrEmpty(email))
|
||||
throw new Exception("Email is not specified");
|
||||
|
||||
if (EmailAddressExists(email))
|
||||
return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
|
||||
|
||||
int accountId = AddAccount(itemId, ExchangeAccountType.DistributionList, accountName, displayName, email, false, 0, string.Empty, null);
|
||||
AddAccountEmailAddress(accountId, email);
|
||||
|
||||
string defaultEmail = (string)entry.Properties["extensionAttribute3"].Value;
|
||||
|
||||
PropertyValueCollection emails = entry.Properties["proxyAddresses"];
|
||||
if (emails != null)
|
||||
{
|
||||
foreach (string mail in emails)
|
||||
{
|
||||
string emailAddress = mail;
|
||||
if (emailAddress.ToLower().StartsWith("smtp:"))
|
||||
emailAddress = emailAddress.Substring(5);
|
||||
|
||||
|
||||
if (!emailAddress.Equals(defaultEmail, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
if (EmailAddressExists(emailAddress))
|
||||
{
|
||||
Log.WriteInfo(string.Format("Email address {0} already exists. Skipped", emailAddress));
|
||||
continue;
|
||||
}
|
||||
// register email address
|
||||
Log.WriteInfo(string.Format("Importing email {0}", emailAddress));
|
||||
AddAccountEmailAddress(accountId, emailAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Log.WriteEnd("Group imported");
|
||||
return accountId;
|
||||
}
|
||||
|
||||
private static bool EmailAddressExists(string emailAddress)
|
||||
{
|
||||
return DataProvider.ExchangeAccountEmailAddressExists(emailAddress);
|
||||
}
|
||||
|
||||
private static bool AccountExists(string accountName)
|
||||
{
|
||||
return DataProvider.ExchangeAccountExists(accountName);
|
||||
}
|
||||
|
||||
private static int AddAccount(int itemId, ExchangeAccountType accountType,
|
||||
string accountName, string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
|
||||
MailboxManagerActions mailboxManagerActions, string samAccountName, string accountPassword)
|
||||
{
|
||||
return DataProvider.AddExchangeAccount(itemId, (int)accountType,
|
||||
accountName, displayName, primaryEmailAddress, mailEnabledPublicFolder,
|
||||
mailboxManagerActions.ToString(), samAccountName, CryptoUtils.Encrypt(accountPassword));
|
||||
}
|
||||
|
||||
private static int AddOrganizationUser(int itemId, string accountName, string displayName, string email, string accountPassword)
|
||||
{
|
||||
return DataProvider.AddExchangeAccount(itemId, (int)ExchangeAccountType.User, accountName, displayName, email, false, string.Empty,
|
||||
string.Empty, CryptoUtils.Encrypt(accountPassword));
|
||||
|
||||
}
|
||||
|
||||
private static void AddAccountEmailAddress(int accountId, string emailAddress)
|
||||
{
|
||||
DataProvider.AddExchangeAccountEmailAddress(accountId, emailAddress);
|
||||
}
|
||||
|
||||
private static void UpdateExchangeAccount(int accountId, string accountName, ExchangeAccountType accountType,
|
||||
string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
|
||||
string mailboxManagerActions, string samAccountName, string accountPassword)
|
||||
{
|
||||
DataProvider.UpdateExchangeAccount(accountId,
|
||||
accountName,
|
||||
accountType,
|
||||
displayName,
|
||||
primaryEmailAddress,
|
||||
mailEnabledPublicFolder,
|
||||
mailboxManagerActions,
|
||||
samAccountName,
|
||||
CryptoUtils.Encrypt(accountPassword));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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.Windows.Forms;
|
||||
using System.Threading;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
private static ApplicationForm appForm;
|
||||
private delegate void ExceptionDelegate(Exception ex);
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Log.WriteApplicationStart();
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
|
||||
Application.ApplicationExit += new EventHandler(OnApplicationExit);
|
||||
appForm = new ApplicationForm();
|
||||
Application.ThreadException += new ThreadExceptionEventHandler(OnThreadException);
|
||||
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnApplicationException);
|
||||
|
||||
ConnectForm connectForm = new ConnectForm();
|
||||
if (connectForm.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
appForm.InitializeForm(connectForm.Username, connectForm.Password);
|
||||
Application.Run(appForm);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes to log on application exit
|
||||
/// </summary>
|
||||
private static void OnApplicationExit(object sender, EventArgs e)
|
||||
{
|
||||
Log.WriteApplicationEnd();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Thread exception handler
|
||||
/// </summary>
|
||||
private static void OnThreadException(object sender, ThreadExceptionEventArgs e)
|
||||
{
|
||||
Exception ex = e.Exception;
|
||||
PublishOnMainThread(ex);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Application domain exception handler
|
||||
/// </summary>
|
||||
private static void OnApplicationException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
Exception ex = e.ExceptionObject as Exception;
|
||||
PublishOnMainThread(ex);
|
||||
}
|
||||
|
||||
private static void PublishOnMainThread(Exception exception)
|
||||
{
|
||||
if (appForm.InvokeRequired)
|
||||
{
|
||||
appForm.Invoke(new ExceptionDelegate(HandleException), new object[] { exception });
|
||||
}
|
||||
else
|
||||
{
|
||||
HandleException(exception);
|
||||
}
|
||||
}
|
||||
|
||||
private static void HandleException(Exception exception)
|
||||
{
|
||||
Log.WriteError("Fatal error occured.", exception);
|
||||
string message = "A fatal error has occurred. We apologize for this inconvenience.\n" +
|
||||
"Please contact Technical Support at support@websitepanel.net.\n\n" +
|
||||
"Make sure you include a copy of the log file from the \n" +
|
||||
"application home directory.";
|
||||
MessageBox.Show(message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
|
||||
Application.Exit();
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,248 @@
|
|||
// Copyright (c) 2011, Outercurve Foundation.
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification,
|
||||
// are permitted provided that the following conditions are met:
|
||||
//
|
||||
// - Redistributions of source code must retain the above copyright notice, this
|
||||
// list of conditions and the following disclaimer.
|
||||
//
|
||||
// - Redistributions in binary form must reproduce the above copyright notice,
|
||||
// this list of conditions and the following disclaimer in the documentation
|
||||
// and/or other materials provided with the distribution.
|
||||
//
|
||||
// - Neither the name of the Outercurve Foundation nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from this
|
||||
// software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// 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;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Windows.Forms;
|
||||
using System.Threading;
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise
|
||||
{
|
||||
/// <summary>
|
||||
/// Animated Icon.
|
||||
/// </summary>
|
||||
[ToolboxItem(true)]
|
||||
public class ProgressIcon : System.Windows.Forms.UserControl
|
||||
{
|
||||
private Thread thread = null;
|
||||
private int currentFrame = 0;
|
||||
private int delayInterval = 50;
|
||||
private int pause = 0;
|
||||
private int loopCount = 0;
|
||||
private int currentLoop = 0;
|
||||
private int firstFrame = 0;
|
||||
private int lastFrame = 13;
|
||||
private ImageList images;
|
||||
private IContainer components;
|
||||
|
||||
/// <summary>Initializes a new instance of the <b>AnimatedIcon</b> class.
|
||||
/// </summary>
|
||||
public ProgressIcon()
|
||||
{
|
||||
CheckForIllegalCrossThreadCalls = false;
|
||||
InitializeComponent();
|
||||
|
||||
this.SetStyle(ControlStyles.UserPaint, true);
|
||||
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
||||
this.SetStyle(ControlStyles.DoubleBuffer, true);
|
||||
this.SetStyle(ControlStyles.ResizeRedraw, true);
|
||||
}
|
||||
|
||||
#region Dispose
|
||||
/// <summary>Clean up any resources being used.</summary>
|
||||
/// <param name="disposing"><see langword="true"/> to release both managed
|
||||
/// and unmanaged resources; <see langword="false"/> to release
|
||||
/// only unmanaged resources.</param>
|
||||
protected override void Dispose( bool disposing )
|
||||
{
|
||||
if( disposing )
|
||||
{
|
||||
if( components != null )
|
||||
components.Dispose();
|
||||
|
||||
if( thread != null )
|
||||
thread.Abort();
|
||||
}
|
||||
base.Dispose( disposing );
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Component Designer generated code
|
||||
/// <summary>Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgressIcon));
|
||||
this.images = new System.Windows.Forms.ImageList(this.components);
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// images
|
||||
//
|
||||
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
|
||||
this.images.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.images.Images.SetKeyName(0, "ProgressImage00.bmp");
|
||||
this.images.Images.SetKeyName(1, "ProgressImage01.bmp");
|
||||
this.images.Images.SetKeyName(2, "ProgressImage02.bmp");
|
||||
this.images.Images.SetKeyName(3, "ProgressImage03.bmp");
|
||||
this.images.Images.SetKeyName(4, "ProgressImage04.bmp");
|
||||
this.images.Images.SetKeyName(5, "ProgressImage05.bmp");
|
||||
this.images.Images.SetKeyName(6, "ProgressImage06.bmp");
|
||||
this.images.Images.SetKeyName(7, "ProgressImage07.bmp");
|
||||
this.images.Images.SetKeyName(8, "ProgressImage08.bmp");
|
||||
this.images.Images.SetKeyName(9, "ProgressImage09.bmp");
|
||||
this.images.Images.SetKeyName(10, "ProgressImage10.bmp");
|
||||
this.images.Images.SetKeyName(11, "ProgressImage11.bmp");
|
||||
this.images.Images.SetKeyName(12, "ProgressImage12.bmp");
|
||||
//
|
||||
// ProgressIcon
|
||||
//
|
||||
this.Name = "ProgressIcon";
|
||||
this.Size = new System.Drawing.Size(30, 30);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>Starts animation from the beginning.
|
||||
/// </summary>
|
||||
public void StartAnimation()
|
||||
{
|
||||
StopAnimation();
|
||||
CheckRange(); // Check the first and the last frames
|
||||
|
||||
thread = new Thread( new ThreadStart( threadFunc ) );
|
||||
thread.IsBackground = true;
|
||||
thread.Start();
|
||||
}
|
||||
|
||||
/// <summary>Stops animation not changing current frame number.
|
||||
/// </summary>
|
||||
public void StopAnimation()
|
||||
{
|
||||
if( thread != null )
|
||||
{
|
||||
thread.Abort();
|
||||
thread = null;
|
||||
}
|
||||
currentLoop = 0;
|
||||
}
|
||||
|
||||
/// <summary>Displays the specified frame.</summary>
|
||||
/// <param name="frame">An index of the image stored in the <see cref="ImageList"/>.</param>
|
||||
public void ShowFrame2(int frame)
|
||||
{
|
||||
StopAnimation();
|
||||
|
||||
if( frame >= 0 && frame < images.Images.Count )
|
||||
currentFrame = frame;
|
||||
else
|
||||
currentFrame = 0;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
/// <summary>Occurs when the control is redrawn.</summary>
|
||||
/// <param name="e">A <see cref="PaintEventArgs"/> that contains
|
||||
/// the event data.</param>
|
||||
/// <remarks>The <b>OnPaint</b> method draws current image from
|
||||
/// the <see cref="ImageList"/> if exists.</remarks>
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
// Draw a crossed rectangle if there is no frame to display
|
||||
|
||||
if( images == null ||
|
||||
currentFrame < 0 ||
|
||||
currentFrame >= images.Images.Count )
|
||||
{
|
||||
if( this.Size.Width == 0 || this.Size.Height == 0 )
|
||||
return;
|
||||
|
||||
Pen pen = new Pen( SystemColors.ControlText );
|
||||
e.Graphics.DrawRectangle( pen, 0, 0, this.Size.Width-1, this.Size.Height-1 );
|
||||
e.Graphics.DrawLine( pen, 0, 0, this.Size.Width, this.Size.Height );
|
||||
e.Graphics.DrawLine( pen, 0, this.Size.Height-1, this.Size.Width-1, 0 );
|
||||
pen.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw the current frame
|
||||
|
||||
e.Graphics.DrawImage( images.Images[currentFrame], 0, 0, this.Size.Width, this.Size.Height );
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>The method to be invoked when the thread begins executing.
|
||||
/// </summary>
|
||||
private void threadFunc()
|
||||
{
|
||||
bool wasPause = false;
|
||||
currentFrame = firstFrame;
|
||||
|
||||
while( thread != null && thread.IsAlive )
|
||||
{
|
||||
Refresh(); // Redraw the current frame
|
||||
wasPause = false;
|
||||
|
||||
if( images != null )
|
||||
{
|
||||
currentFrame++;
|
||||
if( currentFrame > lastFrame ||
|
||||
currentFrame >= images.Images.Count )
|
||||
{
|
||||
if( pause > 0 ) // Sleep after every loop
|
||||
{
|
||||
Thread.Sleep( pause );
|
||||
wasPause = true;
|
||||
}
|
||||
|
||||
currentFrame = firstFrame;
|
||||
if( loopCount != 0 ) // 0 is infinitive loop
|
||||
{
|
||||
currentLoop++;
|
||||
}
|
||||
}
|
||||
|
||||
if( loopCount != 0 && currentLoop >= loopCount )
|
||||
{
|
||||
StopAnimation(); // The loop is completed
|
||||
}
|
||||
}
|
||||
if( !wasPause ) // That prevents summation (pause + delayInterval)
|
||||
Thread.Sleep( delayInterval );
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Check if the last frame is no less than the first one.
|
||||
/// Otherwise, swap them.</summary>
|
||||
private void CheckRange()
|
||||
{
|
||||
if( lastFrame < firstFrame )
|
||||
{
|
||||
int tmp = firstFrame;
|
||||
firstFrame = lastFrame;
|
||||
lastFrame = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,855 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="images.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="images.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
|
||||
qQAAAk1TRnQBSQFMAgEBDQEAAQ4BAAEEAQABHgEAAR4BAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAF4
|
||||
AwABeAMAAQEBAAEgBgAB4RIAIP8D/gH/A/4B/wP5Af8D8QH/A+kB/wPiAf8D7AH/A/EB/wPiAf8D4gH/
|
||||
A+wB/wP5Af8D/gH/A/4h//8AaQAY/wP+Af8D/gH/AfUB9AH1Af8D4gH/A9kB/wPZAf8D2QH/A9YB/wPp
|
||||
Af8D7AH/A9YB/wPZAf8D2QH/A9kB/wPiAf8D8QH/A/4B/wP+Gf//AGkAFP8D/gH/AfUB9AH1Af8B9QH0
|
||||
AfUB/wPsAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D7AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/
|
||||
AfUB9AH1Af8B9QH0AfUB/wP+Ff//AGkAEP8D/gH/A/EB/wPZAf8D3AH/A/kB/wPiAf8D2QH/A9kB/wPZ
|
||||
Af8D2QH/A+kB/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9wB/wH1AfQB9QH/A+IB/wPZAf8D7AH/A/4R//8A
|
||||
aQAM/wP+Af8D7AH/A9kB/wPZAf8D2QH/A+wB/wPxAf8D2QH/A9kB/wPZAf8D1gH/A+kB/wPsAf8D1gH/
|
||||
A9kB/wPZAf8D2QH/A+wB/wPxAf8D2QH/A9kB/wPZAf8D6QH/A/4N//8AaQAI/wP+Af8D8QH/A9kB/wPZ
|
||||
Af8D2QH/A9kB/wPZAf8B9QH0AfUB/wPiAf8D1gH/A9wB/wPiAf8D8QH/AfUB9AH1Af8D4gH/A9wB/wPZ
|
||||
Af8D3AH/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+Cf//AGkABP8D/gH/A/kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPiAf8D+QH/A/EB/wP+Af8D/gH/A/4B/wP+Af8D/gH/A/4B/wPxAf8B9QH0
|
||||
AfUB/wPpAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wPZAf8B9QH0AfUB/wP+Bf//AGkABP8D/gH/A/kB/wPp
|
||||
Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPsAf8D/gH/A/4Z/wP+Af8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZ
|
||||
Af8D2QH/A+IB/wP5Af8D/gX//wBpAAP+Af8D8QH/A+IB/wH1AfQB9QH/AfUB9AH1Af8D4gH/A9kB/wPZ
|
||||
Af8D8QH/A/4p/wP+Af8D8QH/A9kB/wPZAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wPiAf8D8QH/A/4B//8A
|
||||
aQAD/gH/A+IB/wPWAf8D2QH/A+IB/wH1AfQB9QH/A/EB/wPsAf8D/jH/A/4B/wPsAf8D8QH/A/kB/wPp
|
||||
Af8D2QH/A9YB/wPiAf8D/gH//wBpAAP5Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wPsAf8D/jn/A/4B/wPx
|
||||
Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wP5Af//AGkAA/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+
|
||||
Of8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB//8AaQAD6QH/A9kB/wPZAf8D2QH/A9kB/wPZ
|
||||
Af8D+UH/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+IB//8AaQAD4gH/A9kB/wPZAf8D2QH/A9kB/wPi
|
||||
Af8D/kH/A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/A+IB//8AaQAB9QH0AfUB/wPxAf8D8QH/A/EB/wPx
|
||||
Af8B9QH0AfUB/wP+Qf8D/gH/AfUB9AH1Af8D8QH/A/EB/wPxAf8D8QH/AfUB9AH1Af//AGkAA+kB/wPi
|
||||
Af8D4gH/A+IB/wPiAf8D7AH/A/5B/wP+Af8D7AH/A+IB/wPiAf8D4gH/A+IB/wPpAf//AGkAA+IB/wPW
|
||||
Af8D2QH/A9kB/wPWAf8D3AH/A/5B/wP+Af8D4gH/A9YB/wPZAf8D2QH/A9YB/wPiAf//AGkAA+kB/wPZ
|
||||
Af8D2QH/A9kB/wPZAf8D2QH/A/lB/wP5Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wPiAf//AGkAA/EB/wPZ
|
||||
Af8D2QH/A9kB/wPZAf8D1gH/A+wB/wP+Of8D/gH/A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/A+wB//8A
|
||||
aQAD+QH/A9wB/wPZAf8D2QH/A9kB/wHoAeQB6AH/AfUB9AH1Af8B+QH8Afk5/wP+Af8D+QH/A+kB/wPZ
|
||||
Af8D2QH/A9kB/wPZAf8D+QH//wBpAAP+Af8D4gH/A9YB/wHhAd4B4QH/AfgB8gH3Af8B6gH4AesB/wF8
|
||||
Ad4BgQH/AYUB2gGKAf8D/jH/A/4B/wPpAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wPiAf8D1gH/A+IB/wP+
|
||||
Af//AGkAA/4B/wH1AfQB9QH/AfAB6wHvAf8B8AH5AfEB/wG8AfsBwQH/AYkB+gGRAf8BagHoAXQB/wE1
|
||||
AcUBPgH/AZsB4gGgAf8D/in/A/4B/wPxAf8D2QH/A9kB/wPZAf8D6QH/A/kB/wPxAf8B9QH0AfUB/wP+
|
||||
Af//AGkABP8D/gH/AeAB+AHiAf8BkgH7AZkB/wGDAfkBjAH/AYMB+QGMAf8BiQH6AZEB/wFqAegBdAH/
|
||||
ATUBxQE+Af8BjwHdAZQB/wP+Af8D/hn/A/4B/wP+Af8D7AH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A/EB/wP+Bf//AGkABP8D/gH/AeoB+AHrAf8BkgH7AZkB/wGDAfkBjAH/AYkB+gGRAf8BiQH6AZEB/wGJ
|
||||
AfoBkQH/AWoB6AF0Af8BoQHqAaYB/wGqAdIBqwH/AYIBvQGDAf8B2wHsAdsB/wH5AfwB+QH/A/4B/wP+
|
||||
Af8D/gH/A/kB/wPsAf8D7AH/A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wP5Af8D/gX//wBpAAj/
|
||||
A/4B/wHYAfoB2wH/AYkB+gGRAf8BiQH6AZEB/wGJAfoBkQH/AYMB+QGMAf8BmgH5AaEB/wHmAfsB6AH/
|
||||
AUIBogFEAf8BDwGGAREB/wEhAYwBIwH/ATQBlQE2Af8BkgHJAZMB/wH4AfIB+AH/A9wB/wPZAf8D2QH/
|
||||
A9kB/wP5Af8D4gH/A9kB/wPZAf8D2QH/A9kB/wPxAf8D/gn//wBpAAz/A/4B/wHRAfoB1AH/AYkB+gGR
|
||||
Af8BgwH5AYwB/wGDAfkBjAH/AdgB+gHbAf8BmQHLAZkB/wEyAaMBNAH/ATsBqQE9Af8BMgGjATQB/wEc
|
||||
AZABHgH/AXwBwgF9Af8B9AHwAfQB/wPWAf8D2QH/A9kB/wPZAf8D4gH/AfUB9AH1Af8D2QH/A9kB/wPZ
|
||||
Af8D7AH/A/4N//8AaQAQ/wP+Af8B2AH6AdsB/wGSAfsBmQH/AaoB/AGxAf8B0gHqAdIB/wFDAasBRQH/
|
||||
ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/ATIBowE0Af8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D8QH/A+kB/wPZAf8D8QH/A/4R//8AaQAU/wP+Af8B6gH4AesB/wHqAfgB6wH/AXwBwgF9
|
||||
Af8BKQGgASwB/wE7AakBPQH/ATsBqQE9Af8BOwGpAT0B/wEuAaIBMgH/AYkByAGKAf8B9AHwAfQB/wPZ
|
||||
Af8D2QH/A9kB/wPZAf8D1gH/A+IB/wP5Af8D+QH/A/4V//8AaQAY/wP+Af8D/gH/Ac4B6wHQAf8BhAHI
|
||||
AYYB/wFLAbABTQH/ATgBqAE6Af8BLgGiATIB/wEnAaABKQH/AYQByAGGAf8B8QHsAfEB/wPWAf8D1gH/
|
||||
A9kB/wPcAf8D4gH/AfUB9AH1Af8D/gH/A/4Z//8AaQAg/wP+Af8D/gH/AeoB+AHrAf8BuQHgAboB/wGS
|
||||
AdABkwH/AW0BwAFvAf8BpAHYAaUB/wH0AfAB9AH/A+IB/wPpAf8D8QH/A/kB/wP+Af8D/iH//wBpACD/
|
||||
A/4B/wP+Af8B2wHsAdsB/wGgAdEBoQH/AXIBvAF0Af8BSQGlAUwB/wGZAcsBmQH/AaoB0gGrAf8BQgGi
|
||||
AUQB/wFqAbQBawH/AZkBywGZAf8B2wHsAdsB/wP+Af8D/kH/A/4B/wP+Af8B3AHwAd0B/wGgAdEBoQH/
|
||||
AXIBvAF0Af8BSQGlAUwB/wGZAcsBmQH/AaoB0gGrAf8BQgGiAUQB/wFqAbQBawH/AZkBywGZAf8B2wHs
|
||||
AdsB/wP+Af8D/kH/A/4B/wP+Af8B4AH4AeIB/wG0AewBuAH/AZAB5gGWAf8BbAHbAXQB/wGkAesBqQH/
|
||||
AfQB8AH0Af8D4gH/A+IB/wPsAf8D+QH/A/4B/wP+Qf8D/gH/A/4B/wP5Af8D8QH/A+kB/wPiAf8D7AH/
|
||||
A/EB/wPiAf8D4gH/A+wB/wP5Af8D/gH/A/45/wP+Af8D/gH/Ab8B4AHAAf8BYQGxAWIB/wEqAZoBLQH/
|
||||
ARwBkAEeAf8BFwGMARkB/wEQAYgBEQH/AYUBwgGGAf8BkgHJAZMB/wEKAYMBDAH/ARMBiAEVAf8BEwGI
|
||||
ARUB/wEiAZIBJAH/AVkBrAFbAf8BswHbAbQB/wP+Af8D/jH/A/4B/wP+Af8BvwHgAcAB/wFhAbEBYgH/
|
||||
ASoBmgEtAf8BHAGQAR4B/wEXAYwBGQH/ARABiAERAf8BhQHCAYYB/wGSAckBkwH/AQoBgwEMAf8BEwGI
|
||||
ARUB/wETAYgBFQH/ASIBkgEkAf8BWQGsAVsB/wGzAdsBtAH/A/4B/wP+Mf8D/gH/A/4B/wHNAfMB0AH/
|
||||
AYMB4QGJAf8BWgHdAWMB/wFLAdkBVAH/AUkB0gFSAf8BQgHQAUsB/wGVAeoBmwH/AfEB7AHxAf8D1gH/
|
||||
A9kB/wPZAf8D2QH/A+IB/wPxAf8D/gH/A/4x/wP+Af8D/gH/AfUB9AH1Af8D4gH/A9kB/wPZAf8D2QH/
|
||||
A9YB/wPpAf8D7AH/A9YB/wPZAf8D2QH/A9kB/wPiAf8D8QH/A/4B/wP+Lf8D/gH/AckB4gHJAf8BuQHg
|
||||
AboB/wGSAckBkwH/ARMBiAEVAf8BIgGSASQB/wEiAZIBJAH/ASIBkgEkAf8BFwGMARkB/wGJAcIBigH/
|
||||
AZkBywGZAf8BEwGIARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGMARwB/wEKAYMBDAH/AWoBtAFrAf8ByQHi
|
||||
AckB/wHBAeIBwgH/A/4p/wP+Af8ByQHiAckB/wG/AeABwAH/AZIByQGTAf8BEwGIARUB/wEiAZIBJAH/
|
||||
ASIBkgEkAf8BIgGSASQB/wEXAYwBGQH/AYkBwgGKAf8BmQHLAZkB/wETAYgBFQH/ASIBkgEkAf8BIgGS
|
||||
ASQB/wEaAYwBHAH/AQoBgwEMAf8BagG0AWsB/wHWAfQB2AH/AdAB8wHTAf8D/in/A/4B/wHJAeIByQH/
|
||||
AbgB3QG5Af8BrQHyAbIB/wFLAdkBVAH/AVUB2wFeAf8BVQHbAV4B/wFVAdsBXgH/AUkB0gFSAf8BmAHq
|
||||
AZ0B/wHxAewB8QH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wP+Kf8D/gH/
|
||||
AfUB9AH1Af8B9QH0AfUB/wPsAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D7AH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPWAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wP+Jf8D/gH/AasB2AGsAf8BLgGcATEB/wE5AaEBOwH/
|
||||
AdcB6gHYAf8BTwGqAVEB/wEiAZIBJAH/AScBlgEpAf8BIgGSASQB/wEXAYwBGQH/AYkBwgGKAf8BmQHL
|
||||
AZkB/wETAYgBFQH/ASIBkgEkAf8BIgGSASQB/wEaAYwBHAH/ASwBlQEuAf8B0AHnAdAB/wFJAaUBTAH/
|
||||
ARoBjAEcAf8BmQHLAZkB/wP+If8D/gH/AasB2AGsAf8BLgGcATEB/wE5AaEBOwH/AdcB6gHYAf8BTwGq
|
||||
AVEB/wEiAZIBJAH/AScBlgEpAf8BIgGSASQB/wEXAYwBGQH/AYkBwgGKAf8BmQHLAZkB/wETAYgBFQH/
|
||||
ASIBkgEkAf8BIgGSASQB/wEaAYwBHAH/ASwBlQEuAf8B0gHqAdIB/wFsAdsBdAH/AUIBywFKAf8BrAHq
|
||||
AbAB/wP+If8D/gH/AasB2AGsAf8BLgGcATEB/wE5AaEBOwH/AdwB8AHdAf8BfAHnAYMB/wFVAdsBXgH/
|
||||
AVoB3QFjAf8BVQHbAV4B/wFJAdIBUgH/AZUB6gGbAf8B8QHsAfEB/wPZAf8D2QH/A9kB/wPZAf8D3AH/
|
||||
AfUB9AH1Af8D4gH/A9kB/wPsAf8D/iH/A/4B/wPxAf8D2QH/A9wB/wP5Af8D4gH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPpAf8D7AH/A9kB/wPZAf8D2QH/A9kB/wPcAf8B9QH0AfUB/wPiAf8D2QH/A+wB/wP+Hf8D/gH/
|
||||
AZoB0gGbAf8BIwGZASYB/wEmAZgBKQH/AR8BkgEhAf8BkgHJAZMB/wG5AeABugH/ASIBkgEkAf8BJgGY
|
||||
ASkB/wEmAZgBKQH/ARwBkAEeAf8BiQHIAYoB/wGaAdIBmwH/ARwBkAEeAf8BJgGYASkB/wEiAZIBJAH/
|
||||
ARMBiAEVAf8BlgHJAZgB/wGqAdIBqwH/ARMBiAEVAf8BGgGMARwB/wETAYgBFQH/AYcBwgGIAf8D/hn/
|
||||
A/4B/wGaAdIBmwH/ASMBmQEmAf8BJgGYASkB/wEfAZIBIQH/AZIByQGTAf8BuAHdAbkB/wEiAZIBJAH/
|
||||
ASIBkgEkAf8BJgGYASkB/wEcAZABHgH/AYkByAGKAf8BmgHSAZsB/wEcAZABHgH/ASYBmAEpAf8BIgGS
|
||||
ASQB/wETAYgBFQH/AZABxQGRAf8BvAHxAcAB/wFCAdABSwH/AUIBywFKAf8BPAHLAUUB/wGbAeIBoAH/
|
||||
A/4Z/wP+Af8BmgHSAZsB/wEjAZkBJgH/ASYBmAEpAf8BHwGSASEB/wGJAcIBigH/Ac4B+gHRAf8BVQHb
|
||||
AV4B/wFaAd0BYwH/AVoB4AFjAf8BWgHgAWMB/wGlAfIBqgH/AfEB7AHxAf8D1gH/A9kB/wPZAf8D2QH/
|
||||
A+wB/wPxAf8D2QH/A9kB/wPZAf8D6QH/A/4Z/wP+Af8D7AH/A9kB/wPZAf8D2QH/A+wB/wPxAf8D2QH/
|
||||
A9kB/wPZAf8D1gH/A+kB/wPsAf8D1gH/A9kB/wPZAf8D2QH/A+wB/wPxAf8D2QH/A9kB/wPZAf8D6QH/
|
||||
A/4V/wP+Af8BqwHYAawB/wEmAZgBKQH/ASoBmgEtAf8BKgGaAS0B/wEqAZoBLQH/ATEBnQEzAf8B0gHq
|
||||
AdIB/wFpAbsBawH/ASMBmQEmAf8BSAGtAUsB/wFiAboBYwH/AbkB4AG6Af8BwQHiAcIB/wFtAcABbwH/
|
||||
AVIBsgFUAf8BMgGjATQB/wFTAakBVQH/AdsB7AHbAf8BPwGdAUEB/wEaAYwBHAH/ASIBkgEkAf8BGgGM
|
||||
ARwB/wESAYQBFAH/AZIByQGTAf8D/hH/A/4B/wGrAdgBrAH/ASYBmAEpAf8BKgGaAS0B/wEuAZwBMQH/
|
||||
ASoBmgEtAf8BMQGdATMB/wHSAeoB0gH/AWkBuwFrAf8BIwGZASYB/wFIAa0BSwH/AWIBugFjAf8BuQHg
|
||||
AboB/wHBAeIBwgH/AW0BwAFvAf8BUgGyAVQB/wEyAaMBNAH/AU8BqgFRAf8B3AHwAd0B/wFlAdoBbQH/
|
||||
AUIB0AFLAf8BSQHSAVIB/wFCAdABSwH/ATwBywFFAf8BqQHpAa0B/wP+Ef8D/gH/AasB2AGsAf8BJgGY
|
||||
ASkB/wEqAZoBLQH/ASoBmgEtAf8BKgGaAS0B/wExAZ0BMwH/AdIB6gHSAf8BlAHwAZoB/wFnAewBcQH/
|
||||
AYIB8QGKAf8BmgH5AaEB/wHRAfoB1AH/AfQB8AH0Af8D4gH/A9wB/wPZAf8D3AH/A/kB/wPcAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A+wB/wP+Ef8D/gH/A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D4gH/
|
||||
A9YB/wPcAf8D4gH/A/EB/wH1AfQB9QH/A+IB/wPcAf8D2QH/A9wB/wP5Af8D3AH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPsAf8D/g3/A/4B/wHcAfAB3QH/ATIBowE0Af8BJgGYASkB/wEuAZwBMQH/AS4BnAExAf8BLgGc
|
||||
ATEB/wEfAZIBIQH/AWEBsQFiAf8B0gHqAdIB/wGrAdgBrAH/AegB9QHoAf8D/gH/A/4B/wP+Af8D/gH/
|
||||
AfAB+QHxAf8BswHbAbQB/wHLAegBywH/AZIB0AGTAf8BHwGSASEB/wEfAZIBIQH/ASIBkgEkAf8BIQGM
|
||||
ASMB/wEaAYwBHAH/ARoBjAEcAf8ByQHiAckB/wP+Cf8D/gH/AdwB8AHdAf8BMgGjATQB/wEmAZgBKQH/
|
||||
AS4BnAExAf8BLgGcATEB/wEuAZwBMQH/AR8BkgEhAf8BYQGxAWIB/wHSAeoB0gH/AasB2AGsAf8B6gH4
|
||||
AesB/wP+Af8D/gH/A/4B/wP+Af8B8AH5AfEB/wGzAdsBtAH/AcsB6AHLAf8BxQH6AckB/wFaAeABYwH/
|
||||
AUkB0gFSAf8BSQHSAVIB/wFJAdIBUgH/AUIBywFKAf8BQgHLAUoB/wHWAfQB2AH/A/4J/wP+Af8B3AHw
|
||||
Ad0B/wEyAaMBNAH/ASYBmAEpAf8BLgGcATEB/wEuAZwBMQH/AS4BnAExAf8BHwGSASEB/wFhAbEBYgH/
|
||||
AeAB+AHiAf8BxQH6AckB/wHwAfkB8QH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/AfUB9AH1Af8D6QH/
|
||||
A9YB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D/gn/A/4B/wP5Af8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D4gH/A/kB/wPxAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/AfUB9AH1Af8D6QH/
|
||||
A9YB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D/gn/A/4B/wHgAfEB4QH/AZIByQGTAf8BMgGj
|
||||
ATQB/wEjAZkBJgH/AS4BnAExAf8BJgGYASkB/wEmAZgBKQH/AZIByQGTAf8D/gH/A/4Z/wP+Af8D/gH/
|
||||
AasB2AGsAf8BRQGwAUcB/wEqAZoBLQH/AR8BigEhAf8BFwGMARkB/wEaAYwBHAH/AWoBtAFrAf8B3AHw
|
||||
Ad0B/wP+Cf8D/gH/AeAB8QHhAf8BkgHJAZMB/wEyAaMBNAH/ASMBmQEmAf8BKgGaAS0B/wEmAZgBKQH/
|
||||
ASYBmAEpAf8BkgHJAZMB/wP+Af8D/hn/A/4B/wP+Af8B0QH6AdQB/wGaAfkBoQH/AWsB5QF0Af8BSAHS
|
||||
AVEB/wFCAdABSwH/AUIBywFKAf8BgQHgAYYB/wHgAfgB4gH/A/4J/wP+Af8B4AHxAeEB/wGSAckBkwH/
|
||||
ATIBowE0Af8BIwGZASYB/wEuAZwBMQH/ASoBmgEtAf8BJgGYASkB/wGSAckBkwH/A/4B/wP+Gf8D/gH/
|
||||
A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPiAf8D+QH/A/4J/wP+Af8B8AH5AfEB/wHxAewB8QH/
|
||||
AdwB2gHcAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+Af8D/hn/A/4B/wP+Af8D7AH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D4gH/A/kB/wP+Bf8D/gH/AbkB4AG6Af8BUgGyAVQB/wHBAeIBwgH/AdIB6gHSAf8BcgG8
|
||||
AXQB/wEjAZkBJgH/ARwBkAEeAf8BqgHSAasB/wP+Kf8D/gH/AcEB4gHCAf8BRQGwAUcB/wEiAZIBJAH/
|
||||
AVMBqQFVAf8BwQHiAcIB/wHJAeIByQH/AVMBqQFVAf8BqgHSAasB/wP+Af8D/gH/AbkB4AG6Af8BUgGy
|
||||
AVQB/wHBAeIBwgH/AdIB6gHSAf8BcgG8AXQB/wEjAZkBJgH/ARwBkAEeAf8BqgHSAasB/wP+Kf8D/gH/
|
||||
Ad0B+wHgAf8BmgH5AaEB/wFaAeABYwH/AWwB2wF0Af8BxQH6AckB/wH4AfIB+AH/A+IB/wPxAf8D/gH/
|
||||
A/4B/wG5AeABugH/AVIBsgFUAf8BwQHiAcIB/wHSAeoB0gH/AXIBvAF0Af8BIwGZASYB/wEcAZABHgH/
|
||||
AaoB0gGrAf8D/in/A/4B/wPxAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPxAf8D/gH/
|
||||
A/4B/wHRAfoB1AH/AYIB8QGKAf8BzgH6AdEB/wH4AfIB+AH/AegB5AHoAf8D2QH/A9kB/wPxAf8D/in/
|
||||
A/4B/wPxAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPxAf8D/gH/A/4B/wFyAbwBdAH/
|
||||
ASMBmQEmAf8BKgGaAS0B/wFwAbkBcgH/AdIB6gHSAf8BswHbAbQB/wGZAcsBmQH/A/4x/wP+Af8BswHb
|
||||
AbQB/wGzAdsBtAH/AdsB7AHbAf8BeQG8AXsB/wEiAZIBJAH/AQoBgwEMAf8BUwGpAVUB/wP+Af8D/gH/
|
||||
AXIBvAF0Af8BIwGZASYB/wEqAZoBLQH/AXABuQFyAf8B0gHqAdIB/wGzAdsBtAH/AZkBywGZAf8D/jH/
|
||||
A/4B/wHRAfoB1AH/Ac4B+gHRAf8B8AH5AfEB/wHxAewB8QH/A9kB/wPWAf8D4gH/A/4B/wP+Af8BcgG8
|
||||
AXQB/wEjAZkBJgH/ASoBmgEtAf8BcAG5AXIB/wHSAeoB0gH/AbMB2wG0Af8BmQHLAZkB/wP+Mf8D/gH/
|
||||
A+wB/wPxAf8D+QH/A+kB/wPZAf8D1gH/A+IB/wP+Af8D/gH/AZ4B8wGkAf8BagHoAXQB/wFqAegBdAH/
|
||||
AZQB8AGaAf8B4AH4AeIB/wH0AfAB9AH/A+wB/wP+Mf8D/gH/A+wB/wPxAf8D+QH/A+kB/wPZAf8D1gH/
|
||||
A+IB/wP+Af8B4AHxAeEB/wE/AakBQQH/ATIBowE0Af8BMgGjATQB/wEqAZoBLQH/ASYBmAEpAf8BmQHL
|
||||
AZkB/wP+Of8D/gH/AcEB4gHCAf8BPwGpAUEB/wETAYgBFQH/AR8BigEhAf8BGgGMARwB/wEiAZIBJAH/
|
||||
AdIB6gHSAf8B4AHxAeEB/wE/AakBQQH/ATIBowE0Af8BMgGjATQB/wEqAZoBLQH/ASYBmAEpAf8BmQHL
|
||||
AZkB/wP+Of8D/gH/AfQB8AH0Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wP5Af8B4AHxAeEB/wE/AakBQQH/
|
||||
ATIBowE0Af8BMgGjATQB/wEqAZoBLQH/ASYBmAEpAf8BmQHLAZkB/wP+Of8D/gH/A/EB/wPcAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A/kB/wHqAfgB6wH/AXoB8gGBAf8BdQHxAX4B/wFxAesBegH/AWoB6AF0Af8BWgHd
|
||||
AWMB/wGkAesBqQH/A/45/wP+Af8D8QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D+QH/AasB2AGsAf8BLgGi
|
||||
ATIB/wE2AaQBOQH/ATYBpAE5Af8BMgGjATQB/wETAYgBFQH/AZIByQGTAf8D/jn/A/4B/wGzAdsBtAH/
|
||||
ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/AasB2AGsAf8BLgGi
|
||||
ATIB/wE2AaQBOQH/ATYBpAE5Af8BMgGjATQB/wETAYgBFQH/AZIByQGTAf8D/jn/A/4B/wPsAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPsAf8BqwHYAawB/wEuAaIBMgH/ATYBpAE5Af8BNgGkATkB/wEyAaMBNAH/
|
||||
ARMBiAEVAf8BkgHJAZMB/wP+Of8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wHKAfkBzQH/
|
||||
AXUB8QF+Af8BegHyAYEB/wF6AfIBgQH/AXEB6wF6Af8BQAHPAUoB/wGkAeYBqAH/A/45/wP+Af8D7AH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/AYQByAGGAf8BKQGgASwB/wE2AaQBOQH/ATYBpAE5Af8BKgGa
|
||||
AS0B/wEhAYwBIwH/AdsB7AHbQf8B6AH1AegB/wFLAbABTQH/ASYBmAEpAf8BIgGSASQB/wEiAZIBJAH/
|
||||
ARMBiAEVAf8BagG0AWsB/wGEAcgBhgH/ASkBoAEsAf8BNgGkATkB/wE2AaQBOQH/ASoBmgEtAf8BIQGM
|
||||
ASMB/wHbAewB20H/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wGEAcgBhgH/ASkBoAEsAf8BNgGk
|
||||
ATkB/wE2AaQBOQH/ASoBmgEtAf8BIQGMASMB/wHbAewB20H/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A+IB/wGqAfwBsQH/AXUB8QF+Af8BegHyAYEB/wF6AfIBgQH/AWgB5QFxAf8BQgHLAUoB/wHgAfEB4UH/
|
||||
A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wFpAbsBawH/AS4BogEyAf8BNgGkATkB/wE2AaQBOQH/
|
||||
ASIBkgEkAf8BPgGbAUAB/wH5AfwB+UH/A/4B/wFtAcABbwH/ASMBmQEmAf8BHwGKASEB/wEfAZIBIQH/
|
||||
ARcBjAEZAf8BSQGlAUwB/wFpAbsBawH/AS4BogEyAf8BNgGkATkB/wE2AaQBOQH/ASIBkgEkAf8BPgGb
|
||||
AUAB/wH5AfwB+UH/A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wFpAbsBawH/AS4BogEyAf8BNgGk
|
||||
ATkB/wE2AaQBOQH/ASIBkgEkAf8BPgGbAUAB/wH5AfwB+UH/A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A+IB/wGaAfkBoQH/AXoB8gGBAf8BegHyAYEB/wF6AfIBgQH/AVoB4AFjAf8BWwHQAWIB/wH5AfwB+UH/
|
||||
A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wHLAegBywH/AbkB4AG6Af8BuQHgAboB/wG5AeABugH/
|
||||
AbMB2wG0Af8BwQHiAcIB/wP+Qf8D/gH/AdIB6gHSAf8BuAHdAbkB/wGzAdsBtAH/AbMB2wG0Af8BswHb
|
||||
AbQB/wG/AeABwAH/AcsB6AHLAf8BuQHgAboB/wG5AeABugH/AbkB4AG6Af8BswHbAbQB/wHBAeIBwgH/
|
||||
A/5B/wP+Af8B9QH0AfUB/wPxAf8D8QH/A/EB/wPxAf8B9QH0AfUB/wHLAegBywH/AbkB4AG6Af8BuQHg
|
||||
AboB/wG5AeABugH/AbMB2wG0Af8BwQHiAcIB/wP+Qf8D/gH/AfUB9AH1Af8D8QH/A/EB/wPxAf8D8QH/
|
||||
AfUB9AH1Af8B3QH7AeAB/wHRAfoB1AH/AdQB/AHYAf8B1AH8AdgB/wHFAfIByAH/Ac0B8wHQAf8D/kH/
|
||||
A/4B/wH1AfQB9QH/A/EB/wPxAf8D8QH/A/EB/wH1AfQB9QH/AZIB0AGTAf8BfAHCAX0B/wF8AcIBfQH/
|
||||
AXwBwgF9Af8BaQG7AWsB/wGJAcIBigH/A/5B/wP+Af8BzgH6AdEB/wGeAfMBpAH/AYwB5gGSAf8BjAHm
|
||||
AZIB/wGMAeYBkgH/AZwB7AGhAf8BkgHQAZMB/wF8AcIBfQH/AXwBwgF9Af8BfAHCAX0B/wFpAbsBawH/
|
||||
AYkBwgGKAf8D/kH/A/4B/wPsAf8D4gH/A+IB/wPiAf8D4gH/A+kB/wGSAdABkwH/AXwBwgF9Af8BfAHC
|
||||
AX0B/wF8AcIBfQH/AWkBuwFrAf8BiQHCAYoB/wP+Qf8D/gH/A+wB/wPiAf8D4gH/A+IB/wPiAf8D6QH/
|
||||
AZIByQGTAf8BdQHAAXYB/wF4AcABeQH/AXwBwgF9Af8BagG0AWsB/wGIAb8BiQH/A/5B/wP+Af8D7AH/
|
||||
A+IB/wPiAf8D4gH/A+IB/wPpAf8BaQG7AWsB/wEpAaABLAH/ATIBowE0Af8BMgGjATQB/wEcAZABHgH/
|
||||
ATQBlQE2Af8B+QH8AflB/wP+Af8BngHzAaQB/wFfAeIBaQH/AUkB0gFSAf8BSwHZAVQB/wFCAdABSwH/
|
||||
AWwB2wF0Af8BaQG7AWsB/wEpAaABLAH/ATIBowE0Af8BMgGjATQB/wEcAZABHgH/ATQBlQE2Af8B8AH5
|
||||
AfFB/wP+Af8D4gH/A9YB/wPZAf8D2QH/A9YB/wPiAf8BaQG7AWsB/wEpAaABLAH/ATIBowE0Af8BMgGj
|
||||
ATQB/wEcAZABHgH/ATQBlQE2Af8B8AH5AfFB/wP+Af8D4gH/A9YB/wPZAf8D2QH/A9YB/wPiAf8BaQG7
|
||||
AWsB/wEpAaABLAH/ATIBowE0Af8BMgGjATQB/wEcAZABHgH/ATQBlQE2Af8B8AH5AfFB/wP+Af8D4gH/
|
||||
A9YB/wPZAf8D2QH/A9YB/wPiAf8BiQHIAYoB/wEyAaMBNAH/ATsBqQE9Af8BOwGpAT0B/wEyAaMBNAH/
|
||||
AR8BigEhAf8B1wHqAdhB/wHvAfwB8AH/AYIB8QGKAf8BXwHiAWkB/wFVAdsBXgH/AVUB2wFeAf8BSQHS
|
||||
AVIB/wGMAeYBkgH/AYkByAGKAf8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BMgGjATQB/wEfAYoBIQH/
|
||||
AdcB6gHYQf8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D4gH/AYkByAGKAf8BMgGjATQB/wE7AakBPQH/
|
||||
ATsBqQE9Af8BMgGjATQB/wEfAYoBIQH/AdcB6gHYQf8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D4gH/
|
||||
AYkByAGKAf8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BMgGjATQB/wEfAYoBIQH/AdcB6gHYQf8D+QH/
|
||||
A9wB/wPZAf8D2QH/A9kB/wPZAf8D4gH/AbMB2wG0Af8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BOwGp
|
||||
AT0B/wEKAYMBDAH/AYkBwgGKAf8D/jn/A/4B/wHFAfoByQH/AWcB7AFxAf8BWgHdAWMB/wFaAd0BYwH/
|
||||
AVUB2wFeAf8BSwHZAVQB/wGwAewBtAH/AbMB2wG0Af8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BOQGh
|
||||
ATsB/wEKAYMBDAH/AYkBwgGKAf8D/jn/A/4B/wPsAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wPsAf8BswHb
|
||||
AbQB/wEyAaMBNAH/ATsBqQE9Af8BOwGpAT0B/wE5AaEBOwH/AQoBgwEMAf8BiQHCAYoB/wP+Of8D/gH/
|
||||
A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wGzAdsBtAH/ATIBowE0Af8BOwGpAT0B/wE7AakBPQH/
|
||||
ATkBoQE7Af8BCgGDAQwB/wGJAcIBigH/A/45/wP+Af8D7AH/A9YB/wPZAf8D2QH/A9kB/wPZAf8D7AH/
|
||||
AegB9QHoAf8BSwGwAU0B/wE7AakBPQH/ATIBowE0Af8BMgGjATQB/wFnAbYBaQH/AckB4gHJAf8B+QH8
|
||||
Afk5/wP+Af8B6gH4AesB/wGeAfMBpAH/AVoB3QFjAf8BVQHbAV4B/wFVAdsBXgH/AVoB3QFjAf8B4AH4
|
||||
AeIB/wHoAfUB6AH/AUsBsAFNAf8BOwGpAT0B/wEyAaMBNAH/ATIBowE0Af8BZwG2AWkB/wHJAeIByQH/
|
||||
AfkB/AH5Of8D/gH/A/kB/wPpAf8D2QH/A9kB/wPZAf8D2QH/A/kB/wHoAfUB6AH/AUsBsAFNAf8BOwGp
|
||||
AT0B/wEyAaMBNAH/ATIBowE0Af8BZwG2AWkB/wHJAeIByQH/AfkB/AH5Of8D/gH/A/kB/wPpAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A/kB/wHoAfUB6AH/AUsBsAFNAf8BOwGpAT0B/wEyAaMBNAH/ATIBowE0Af8BZwG2
|
||||
AWkB/wHJAeIByQH/AfkB/AH5Of8D/gH/A/kB/wPpAf8D2QH/A9kB/wPZAf8D2QH/A/kB/wP+Af8BfAHC
|
||||
AX0B/wEpAaABLAH/AVsBsQFdAf8BuQHgAboB/wHgAfEB4QH/AWEBsQFiAf8BdAG1AXUB/wP+Mf8D/gH/
|
||||
A+kB/wPiAf8B+AHyAfgB/wHRAfoB1AH/AXwB5wGDAf8BSwHZAVQB/wGDAeEBiQH/A/4B/wP+Af8BfAHC
|
||||
AX0B/wEpAaABLAH/AVsBsQFdAf8BuQHgAboB/wHgAfEB4QH/AWEBsQFiAf8BdAG1AXUB/wP+Mf8D/gH/
|
||||
A+kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPWAf8D4gH/A/4B/wP+Af8BfAHCAX0B/wEpAaABLAH/
|
||||
AVsBsQFdAf8BuQHgAboB/wHgAfEB4QH/AWEBsQFiAf8BdAG1AXUB/wP+Mf8D/gH/A+kB/wPiAf8B9QH0
|
||||
AfUB/wH1AfQB9QH/A+IB/wPWAf8D4gH/A/4B/wP+Af8BfAHCAX0B/wEpAaABLAH/AVsBsQFdAf8BuQHg
|
||||
AboB/wHgAfEB4QH/AWEBsQFiAf8BdAG1AXUB/wP+Mf8D/gH/A+kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/
|
||||
A+IB/wPWAf8D4gH/A/4B/wP+Af8BzgHrAdAB/wGfAdUBoQH/AdwB8AHdAf8BmgHSAZsB/wFDAasBRQH/
|
||||
ASYBmAEpAf8BEgGEARQB/wGQAcUBkQH/A/4p/wP+Af8D8QH/A9kB/wPZAf8D2QH/Ae0B6AHtAf8B9QH0
|
||||
AfUB/wG0AfMBuAH/AdAB8wHTAf8D/gH/A/4B/wHLAegBywH/AZ8B1QGhAf8B3AHwAd0B/wGaAdIBmwH/
|
||||
AUMBqwFFAf8BJgGYASkB/wESAYQBFAH/AZABxQGRAf8D/in/A/4B/wPxAf8D2QH/A9kB/wPZAf8D6QH/
|
||||
A/kB/wPxAf8B9QH0AfUB/wP+Af8D/gH/AcsB6AHLAf8BnwHVAaEB/wHcAfAB3QH/AZoB0gGbAf8BQwGr
|
||||
AUUB/wEmAZgBKQH/ARIBhAEUAf8BkAHFAZEB/wP+Kf8D/gH/A/EB/wPZAf8D2QH/A9kB/wPpAf8D+QH/
|
||||
A/EB/wH1AfQB9QH/A/4B/wP+Af8BywHoAcsB/wGfAdUBoQH/AdwB8AHdAf8BmgHSAZsB/wFDAasBRQH/
|
||||
ASYBmAEpAf8BEgGEARQB/wGQAcUBkQH/A/4p/wP+Af8D8QH/A9kB/wPZAf8D2QH/A+kB/wP5Af8D8QH/
|
||||
AfUB9AH1Af8D/gX/A/4B/wHSAeoB0gH/AVIBsgFUAf8BMgGjATQB/wE7AakBPQH/AT8BqQFBAf8BLgGc
|
||||
ATEB/wESAYQBFAH/AYIBvQGDAf8D/gH/A/4Z/wP+Af8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9wB/wH0AfAB9AH/A/4J/wP+Af8B0gHqAdIB/wFSAbIBVAH/ATIBowE0Af8BOwGpAT0B/wE/AakBQQH/
|
||||
AS4BnAExAf8BEgGEARQB/wF/AbwBgQH/A/4B/wP+Gf8D/gH/A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D8QH/A/4J/wP+Af8B0gHqAdIB/wFSAbIBVAH/ATIBowE0Af8BOwGpAT0B/wE/AakBQQH/
|
||||
AS4BnAExAf8BEgGEARQB/wF/AbwBgQH/A/4B/wP+Gf8D/gH/A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D8QH/A/4J/wP+Af8B0gHqAdIB/wFSAbIBVAH/ATIBowE0Af8BOwGpAT0B/wE/AakBQQH/
|
||||
AS4BnAExAf8BEgGEARQB/wF/AbwBgQH/A/4B/wP+Gf8D/gH/A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D8QH/A/4J/wP+Af8B4AHxAeEB/wFLAbABTQH/ATgBqAE6Af8BPwGpAUEB/wE7AakBPQH/
|
||||
AT8BqQFBAf8BIwGZASYB/wGJAcIBigH/AaoB0gGrAf8BggG9AYMB/wHbAewB2wH/AfkB/AH5Af8D/gH/
|
||||
A/4B/wP+Af8D+QH/A+wB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/kB/wP+Cf8D/gH/
|
||||
AeAB8QHhAf8BSwGwAU0B/wE4AagBOgH/AT8BqQFBAf8BOwGpAT0B/wE/AakBQQH/ASMBmQEmAf8BiQHC
|
||||
AYoB/wGqAdIBqwH/AYIBvQGDAf8B2wHsAdsB/wH5AfwB+QH/A/4B/wP+Af8D/gH/A/kB/wPsAf8D7AH/
|
||||
A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wP5Af8D/gn/A/4B/wHgAfEB4QH/AUsBsAFNAf8BOAGo
|
||||
AToB/wE/AakBQQH/ATsBqQE9Af8BPwGpAUEB/wEjAZkBJgH/AYkBwgGKAf8BqgHSAasB/wGCAb0BgwH/
|
||||
AdsB7AHbAf8B+QH8AfkB/wP+Af8D/gH/A/4B/wP5Af8D7AH/A+wB/wPxAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D+QH/A/4J/wP+Af8B4AHxAeEB/wFLAbABTQH/ATsBqQE9Af8BPwGpAUEB/wE7AakBPQH/
|
||||
AT8BqQFBAf8BIwGZASYB/wGJAcIBigH/AaoB0gGrAf8BggG9AYMB/wHbAewB2wH/AfkB/AH5Af8D/gH/
|
||||
A/4B/wP+Af8D+QH/A+wB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/kB/wP+Df8D/gH/
|
||||
AbkB4AG6Af8BOwGpAT0B/wE7AakBPQH/AT8BqQFBAf8BNgGkATkB/wFfAboBYQH/AeAB8QHhAf8BQgGi
|
||||
AUQB/wEQAYgBEQH/ASEBjAEjAf8BNAGVATYB/wGSAckBkwH/AfgB8gH4Af8D3AH/A9kB/wPZAf8D2QH/
|
||||
A/kB/wPiAf8D2QH/A9kB/wPZAf8D2QH/A/EB/wP+Ef8D/gH/AbkB4AG6Af8BOwGpAT0B/wE7AakBPQH/
|
||||
AT8BqQFBAf8BNgGkATkB/wFfAboBYQH/AeAB8QHhAf8BQgGiAUQB/wEPAYYBEQH/ASEBjAEjAf8BNAGV
|
||||
ATYB/wGSAckBkwH/AfgB8gH4Af8D3AH/A9kB/wPZAf8D2QH/A/kB/wPiAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A/EB/wP+Ef8D/gH/AbkB4AG6Af8BOwGpAT0B/wE7AakBPQH/AT8BqQFBAf8BNgGkATkB/wFfAboBYQH/
|
||||
AeAB8QHhAf8BQgGiAUQB/wEPAYYBEQH/ASEBjAEjAf8BNAGVATYB/wGSAckBkwH/AfgB8gH4Af8D3AH/
|
||||
A9kB/wPZAf8D2QH/A/kB/wPiAf8D2QH/A9kB/wPZAf8D2QH/A/EB/wP+Ef8D/gH/AbkB4AG6Af8BOwGp
|
||||
AT0B/wE7AakBPQH/AT8BqQFBAf8BNgGkATkB/wFfAboBYQH/AeAB8QHhAf8BQgGiAUQB/wEPAYYBEQH/
|
||||
ASEBjAEjAf8BNAGVATYB/wGSAckBkwH/AfgB8gH4Af8D3AH/A9kB/wPZAf8D2QH/A/kB/wPiAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A/EB/wP+Ff8D/gH/AbMB2wG0Af8BOwGpAT0B/wE4AagBOgH/ATYBpAE5Af8BuQHg
|
||||
AboB/wGaAdIBmwH/ATIBowE0Af8BOwGpAT0B/wEyAaMBNAH/ARwBkAEeAf8BfAHCAX0B/wH0AfAB9AH/
|
||||
A9YB/wPZAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wPZAf8D2QH/A9kB/wPsAf8D/hn/A/4B/wGzAdsBtAH/
|
||||
ATsBqQE9Af8BOAGoAToB/wE2AaQBOQH/AbkB4AG6Af8BmgHSAZsB/wEyAaMBNAH/ATsBqQE9Af8BMgGj
|
||||
ATQB/wEcAZABHgH/AXwBwgF9Af8B9AHwAfQB/wPWAf8D2QH/A9kB/wPZAf8D4gH/AfUB9AH1Af8D2QH/
|
||||
A9kB/wPZAf8D7AH/A/4Z/wP+Af8BswHbAbQB/wE7AakBPQH/ATgBqAE6Af8BNgGkATkB/wG5AeABugH/
|
||||
AZoB0gGbAf8BMgGjATQB/wE7AakBPQH/ATIBowE0Af8BHAGQAR4B/wF8AcIBfQH/AfQB8AH0Af8D1gH/
|
||||
A9kB/wPZAf8D2QH/A+IB/wH1AfQB9QH/A9kB/wPZAf8D2QH/A+wB/wP+Gf8D/gH/AbMB2wG0Af8BOwGp
|
||||
AT0B/wE4AagBOgH/ATYBpAE5Af8BuQHgAboB/wGaAdIBmwH/ATIBowE0Af8BOwGpAT0B/wEyAaMBNAH/
|
||||
ARwBkAEeAf8BfAHCAX0B/wH0AfAB9AH/A9YB/wPZAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wPZAf8D2QH/
|
||||
A9kB/wPsAf8D/h3/A/4B/wHBAeIBwgH/AUsBsAFNAf8BbQHAAW8B/wHSAeoB0gH/AUMBqwFFAf8BOwGp
|
||||
AT0B/wE7AakBPQH/ATsBqQE9Af8BLgGiATIB/wGJAcgBigH/AfQB8AH0Af8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPxAf8D6QH/A9kB/wPxAf8D/iH/A/4B/wHBAeIBwgH/AUsBsAFNAf8BbQHAAW8B/wHSAeoB0gH/
|
||||
AUMBqwFFAf8BOwGpAT0B/wE7AakBPQH/ATsBqQE9Af8BLgGiATIB/wGJAcgBigH/AfQB8AH0Af8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPxAf8D6QH/A9kB/wPxAf8D/iH/A/4B/wHBAeIBwgH/AUsBsAFNAf8BbQHA
|
||||
AW8B/wHSAeoB0gH/AUMBqwFFAf8BOwGpAT0B/wE7AakBPQH/ATsBqQE9Af8BLgGiATIB/wGJAcgBigH/
|
||||
AfQB8AH0Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPxAf8D6QH/A9kB/wPxAf8D/iH/A/4B/wHBAeIBwgH/
|
||||
AUsBsAFNAf8BbQHAAW8B/wHSAeoB0gH/AUMBqwFFAf8BOwGpAT0B/wE7AakBPQH/ATsBqQE9Af8BMgGj
|
||||
ATQB/wGJAcgBigH/AfQB8AH0Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPxAf8D6QH/A9kB/wPxAf8D/iX/
|
||||
A/4B/wHgAfEB4QH/AdwB8AHdAf8BfAHCAX0B/wEpAaABLAH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
|
||||
AS4BogEyAf8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/A/kB/wP5Af8D/in/
|
||||
A/4B/wHgAfEB4QH/AdwB8AHdAf8BfAHCAX0B/wEpAaABLAH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
|
||||
AS4BogEyAf8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/A/kB/wP5Af8D/in/
|
||||
A/4B/wHgAfEB4QH/AdwB8AHdAf8BfAHCAX0B/wEpAaABLAH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
|
||||
AS4BogEyAf8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/A/kB/wP5Af8D/in/
|
||||
A/4B/wHgAfEB4QH/AdwB8AHdAf8BfAHCAX0B/wEpAaABLAH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
|
||||
AS4BogEyAf8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/A/kB/wP5Af8D/i3/
|
||||
A/4B/wP+Af8BzgHrAdAB/wGEAcgBhgH/AUsBsAFNAf8BOAGoAToB/wEuAaIBMgH/AScBoAEpAf8BhAHI
|
||||
AYYB/wHxAewB8QH/A9YB/wPWAf8D2QH/A9wB/wPiAf8B9AHwAfQB/wP+Af8D/jH/A/4B/wP+Af8BzgHr
|
||||
AdAB/wGEAcgBhgH/AUsBsAFNAf8BOAGoAToB/wEuAaIBMgH/AScBoAEpAf8BhAHIAYYB/wH0AfAB9AH/
|
||||
A9YB/wPWAf8D2QH/A9wB/wPiAf8B9QH0AfUB/wP+Af8D/jH/A/4B/wP+Af8BzgHrAdAB/wGEAcgBhgH/
|
||||
AUsBsAFNAf8BOAGoAToB/wEuAaIBMgH/AScBoAEpAf8BhAHIAYYB/wHxAewB8QH/A9YB/wPWAf8D2QH/
|
||||
A9wB/wPiAf8B9QH0AfUB/wP+Af8D/jH/A/4B/wP+Af8BzgHrAdAB/wGEAcgBhgH/AUsBsAFNAf8BOAGo
|
||||
AToB/wEuAaIBMgH/AScBoAEpAf8BhAHIAYYB/wHxAewB8QH/A9YB/wPWAf8D2QH/A9wB/wPiAf8B9QH0
|
||||
AfUB/wP+Af8D/jn/A/4B/wP+Af8B8AH5AfEB/wG5AeABugH/AZIB0AGTAf8BbQHAAW8B/wGkAdgBpQH/
|
||||
AfQB8AH0Af8D4gH/A+kB/wPxAf8D+QH/A/4B/wP+Qf8D/gH/A/4B/wHqAfgB6wH/AbkB4AG6Af8BkgHQ
|
||||
AZMB/wFtAcABbwH/AaQB2AGlAf8B9AHwAfQB/wPiAf8D6QH/A/EB/wP5Af8D/gH/A/5B/wP+Af8D/gH/
|
||||
AeoB+AHrAf8BuQHgAboB/wGSAdABkwH/AW0BwAFvAf8BpAHYAaUB/wH0AfAB9AH/A+IB/wPpAf8D8QH/
|
||||
A/kB/wP+Af8D/kH/A/4B/wP+Af8B6gH4AesB/wG5AeABugH/AZIB0AGTAf8BbQHAAW8B/wGkAdgBpQH/
|
||||
AfQB8AH0Af8D4gH/A+kB/wPxAf8D+QH/A/4B/wP+Qf8D/gH/A/4B/wHgAfgB4gH/AbQB7AG4Af8BkAHm
|
||||
AZYB/wFsAdsBdAH/AbEB8QG1Af8BoAHRAaEB/wFCAaIBRAH/AWoBtAFrAf8BmQHLAZkB/wHbAewB2wH/
|
||||
A/4B/wP+Qf8D/gH/A/4B/wHbAewB2wH/AaAB0QGhAf8BcgG8AXQB/wFJAaUBTAH/AZkBywGZAf8BqgHS
|
||||
AasB/wFCAaIBRAH/AWoBtAFrAf8BmQHLAZkB/wHbAewB2wH/A/4B/wP+Qf8D/gH/A/4B/wHcAfAB3QH/
|
||||
AaAB0QGhAf8BcgG8AXQB/wFJAaUBTAH/AZkBywGZAf8BqgHSAasB/wFCAaIBRAH/AWoBtAFrAf8BmQHL
|
||||
AZkB/wHbAewB2wH/A/4B/wP+Qf8D/gH/A/4B/wHcAfAB3QH/AaAB0QGhAf8BcgG8AXQB/wFJAaUBTAH/
|
||||
AZkBywGZAf8BqgHSAasB/wFCAaIBRAH/AWoBtAFrAf8BmQHLAZkB/wHbAewB2wH/A/4B/wP+Of8D/gH/
|
||||
A/4B/wHNAfMB0AH/AYMB4QGJAf8BWgHdAWMB/wFLAdkBVAH/AUkB0gFSAf8BQgHQAUsB/wGhAeoBpgH/
|
||||
AZIByQGTAf8BCgGDAQwB/wETAYgBFQH/ARMBiAEVAf8BIgGSASQB/wFZAawBWwH/AbMB2wG0Af8D/gH/
|
||||
A/4x/wP+Af8D/gH/Ab8B4AHAAf8BYQGxAWIB/wEqAZoBLQH/ARoBjAEcAf8BFwGMARkB/wEQAYgBEQH/
|
||||
AYUBwgGGAf8BkgHJAZMB/wEKAYMBDAH/ARMBiAEVAf8BEwGIARUB/wEiAZIBJAH/AVkBrAFbAf8BswHb
|
||||
AbQB/wP+Af8D/jH/A/4B/wP+Af8BvwHgAcAB/wFhAbEBYgH/ASoBmgEtAf8BGgGMARwB/wEXAYwBGQH/
|
||||
ARABiAERAf8BhQHCAYYB/wGSAckBkwH/AQoBgwEMAf8BEwGIARUB/wETAYgBFQH/ASIBkgEkAf8BWQGs
|
||||
AVsB/wGzAdsBtAH/A/4B/wP+Mf8D/gH/A/4B/wHBAeIBwgH/AWEBsQFiAf8BKgGaAS0B/wEcAZABHgH/
|
||||
ARcBjAEZAf8BEAGIAREB/wGFAcIBhgH/AZYByQGYAf8BCgGDAQwB/wETAYgBFQH/ARMBiAEVAf8BIgGS
|
||||
ASQB/wFZAawBWwH/AbMB2wG0Af8D/gH/A/4t/wP+Af8B9QH0AfUB/wH4AfIB+AH/AakB6QGtAf8BSwHZ
|
||||
AVQB/wFVAdsBXgH/AVUB2wFeAf8BVQHbAV4B/wFJAdIBUgH/AaQB6wGpAf8BlgHJAZgB/wETAYgBFQH/
|
||||
ASIBkgEkAf8BHwGSASEB/wEaAYwBHAH/AQoBgwEMAf8BagG0AWsB/wHJAeIByQH/AcEB4gHCAf8D/in/
|
||||
A/4B/wHJAeIByQH/AbkB4AG6Af8BkgHJAZMB/wETAYgBFQH/ASIBkgEkAf8BIgGSASQB/wEiAZIBJAH/
|
||||
ARcBjAEZAf8BiQHCAYoB/wGZAcsBmQH/ARMBiAEVAf8BIgGSASQB/wEfAZIBIQH/ARoBjAEcAf8BCgGD
|
||||
AQwB/wFqAbQBawH/AckB4gHJAf8BwQHiAcIB/wP+Kf8D/gH/AckB4gHJAf8BvwHgAcAB/wGSAckBkwH/
|
||||
ARMBiAEVAf8BIgGSASQB/wEiAZIBJAH/ASIBkgEkAf8BFwGMARkB/wGJAcIBigH/AZkBywGZAf8BEwGI
|
||||
ARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGMARwB/wEKAYMBDAH/AWoBtAFrAf8ByQHiAckB/wHBAeIBwgH/
|
||||
A/4p/wP+Af8ByQHiAckB/wG5AeABugH/AZIByQGTAf8BEwGIARUB/wEiAZIBJAH/ASIBkgEkAf8BIgGS
|
||||
ASQB/wEXAYwBGQH/AYkBwgGKAf8BmQHLAZkB/wETAYgBFQH/ASIBkgEkAf8BHwGSASEB/wEaAYwBHAH/
|
||||
AQoBgwEMAf8BagG0AWsB/wHJAeIByQH/AcEB4gHCAf8D/iX/A/4B/wPxAf8D2QH/A9wB/wHvAfwB8AH/
|
||||
AXUB5QF9Af8BVQHbAV4B/wFaAd0BYwH/AVUB2wFeAf8BSQHSAVIB/wGkAesBqQH/AZIByQGTAf8BEwGI
|
||||
ARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGMARwB/wEsAZUBLgH/AdAB5wHQAf8BSQGlAUwB/wEaAYwBHAH/
|
||||
AZkBywGZAf8D/iH/A/4B/wGrAdgBrAH/AS4BnAExAf8BOQGhATsB/wHXAeoB2AH/AU8BqgFRAf8BIgGS
|
||||
ASQB/wEnAZYBKQH/AScBlgEpAf8BFwGMARkB/wGJAcIBigH/AZkBywGZAf8BEwGIARUB/wEiAZIBJAH/
|
||||
ASIBkgEkAf8BGgGMARwB/wEsAZUBLgH/AdAB5wHQAf8BSQGlAUwB/wEaAYwBHAH/AZkBywGZAf8D/iH/
|
||||
A/4B/wGrAdgBrAH/AS4BnAExAf8BOQGhATsB/wHXAeoB2AH/AU8BqgFRAf8BIgGSASQB/wEnAZYBKQH/
|
||||
ASIBkgEkAf8BFwGMARkB/wGJAcIBigH/AZkBywGZAf8BEwGIARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGM
|
||||
ARwB/wEsAZUBLgH/AdAB5wHQAf8BSQGlAUwB/wEaAYwBHAH/AZkBywGZAf8D/iH/A/4B/wGrAdgBrAH/
|
||||
AS4BnAExAf8BOQGhATsB/wHXAeoB2AH/AU8BqgFRAf8BIgGSASQB/wEnAZYBKQH/AScBlgEpAf8BFwGM
|
||||
ARkB/wGJAcIBigH/AZkBywGZAf8BEwGIARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGMARwB/wEsAZUBLgH/
|
||||
AdAB5wHQAf8BSQGlAUwB/wEaAYwBHAH/AZkBywGZAf8D/h3/A/4B/wPsAf8D2QH/A9kB/wPZAf8B8QHs
|
||||
AfEB/wHFAfIByAH/AVUB2wFeAf8BWgHdAWMB/wFaAeABYwH/AVoB4AFjAf8BsQH7AbYB/wGZAcsBmQH/
|
||||
ARwBkAEeAf8BJwGWASkB/wEiAZIBJAH/ARMBiAEVAf8BlgHJAZgB/wGqAdIBqwH/ARMBiAEVAf8BGgGM
|
||||
ARwB/wETAYgBFQH/AYcBwgGIAf8D/hn/A/4B/wGaAdIBmwH/ASMBmQEmAf8BJgGYASkB/wEfAZIBIQH/
|
||||
AZIByQGTAf8BuAHdAbkB/wEiAZIBJAH/AScBlgEpAf8BJgGYASkB/wEcAZABHgH/AYkByAGKAf8BmgHS
|
||||
AZsB/wEcAZABHgH/AScBlgEpAf8BIgGSASQB/wETAYgBFQH/AZYByQGYAf8BqgHSAasB/wETAYgBFQH/
|
||||
ARoBjAEcAf8BEgGEARQB/wGHAcIBiAH/A/4Z/wP+Af8BmgHSAZsB/wEjAZkBJgH/ASYBmAEpAf8BHwGS
|
||||
ASEB/wGSAckBkwH/AbgB3QG5Af8BIgGSASQB/wEnAZYBKQH/ASYBmAEpAf8BHAGQAR4B/wGJAcgBigH/
|
||||
AZoB0gGbAf8BHAGQAR4B/wEnAZYBKQH/ASIBkgEkAf8BEwGIARUB/wGWAckBmAH/AaoB0gGrAf8BEwGI
|
||||
ARUB/wEaAYwBHAH/ARIBhAEUAf8BhwHCAYgB/wP+Gf8D/gH/AZoB0gGbAf8BIwGZASYB/wEmAZgBKQH/
|
||||
AR8BkgEhAf8BkgHJAZMB/wG4Ad0BuQH/ASIBkgEkAf8BJwGWASkB/wEmAZgBKQH/ARwBkAEeAf8BiQHI
|
||||
AYoB/wGaAdIBmwH/ARwBkAEeAf8BJwGWASkB/wEiAZIBJAH/ARMBiAEVAf8BlgHJAZgB/wGqAdIBqwH/
|
||||
ARMBiAEVAf8BGgGMARwB/wETAYgBFQH/AYcBwgGIAf8D/hX/A/4B/wPxAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
AdwB2gHcAf8B9QH0AfUB/wGKAewBkQH/AWcB7AFxAf8BggHxAYoB/wGaAfkBoQH/AdgB+gHbAf8BwQHi
|
||||
AcIB/wFtAcABbwH/AVIBsgFUAf8BMgGjATQB/wFTAakBVQH/AdsB7AHbAf8BPwGdAUEB/wEaAYwBHAH/
|
||||
ASIBkgEkAf8BGgGMARwB/wESAYQBFAH/AZYByQGYAf8D/hH/A/4B/wGrAdgBrAH/ASYBmAEpAf8BKgGa
|
||||
AS0B/wEqAZoBLQH/ASoBmgEtAf8BMQGdATMB/wHSAeoB0gH/AWkBuwFrAf8BIwGZASYB/wFIAa0BSwH/
|
||||
AWIBugFjAf8BuQHgAboB/wHBAeIBwgH/AW0BwAFvAf8BUgGyAVQB/wEyAaMBNAH/AVMBqQFVAf8B2wHs
|
||||
AdsB/wE/AZ0BQQH/ARoBjAEcAf8BIgGSASQB/wEaAYwBHAH/ARIBhAEUAf8BlgHJAZgB/wP+Ef8D/gH/
|
||||
AasB2AGsAf8BJgGYASkB/wEqAZoBLQH/ASoBmgEtAf8BKgGaAS0B/wExAZ0BMwH/AdIB6gHSAf8BaQG7
|
||||
AWsB/wEjAZkBJgH/AUoBrAFNAf8BYgG6AWMB/wG5AeABugH/AcEB4gHCAf8BbQHAAW8B/wFSAbIBVAH/
|
||||
ATIBowE0Af8BUwGpAVUB/wHbAewB2wH/AT8BnQFBAf8BGgGMARwB/wEiAZIBJAH/ARoBjAEcAf8BEgGE
|
||||
ARQB/wGWAckBmAH/A/4R/wP+Af8BqwHYAawB/wEmAZgBKQH/ASoBmgEtAf8BKgGaAS0B/wEqAZoBLQH/
|
||||
ATEBnQEzAf8B0gHqAdIB/wFpAbsBawH/ASMBmQEmAf8BSAGtAUsB/wFiAboBYwH/AbkB4AG6Af8BwQHi
|
||||
AcIB/wFtAcABbwH/AVIBsgFUAf8BMgGjATQB/wFTAakBVQH/AdsB7AHbAf8BPwGdAUEB/wEaAYwBHAH/
|
||||
ASIBkgEkAf8BGgGMARwB/wETAYgBFQH/AZYByQGYAf8D/g3/A/4B/wP5Af8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D4gH/AeAB+AHiAf8BxQH6AckB/wHwAfkB8QH/A/4B/wP+Af8D/gH/A/4B/wHwAfkB8QH/
|
||||
AbMB2wG0Af8BywHoAcsB/wGSAdABkwH/AR8BkgEhAf8BHwGSASEB/wEfAZIBIQH/ASEBjAEjAf8BGgGM
|
||||
ARwB/wEaAYwBHAH/AckB4gHJAf8D/gn/A/4B/wHbAewB2wH/ATIBowE0Af8BJgGYASkB/wEuAZwBMQH/
|
||||
AS4BnAExAf8BLgGcATEB/wEfAZIBIQH/AWEBsQFiAf8B0gHqAdIB/wGrAdgBrAH/AegB9QHoAf8D/gH/
|
||||
A/4B/wP+Af8D/gH/AfAB+QHxAf8BswHbAbQB/wHLAegBywH/AZIB0AGTAf8BHwGSASEB/wEfAZIBIQH/
|
||||
AR8BkgEhAf8BHwGSASEB/wEaAYwBHAH/ARoBjAEcAf8ByQHiAckB/wP+Cf8D/gH/AdwB8AHdAf8BMgGj
|
||||
ATQB/wEmAZgBKQH/AS4BnAExAf8BLgGcATEB/wEuAZwBMQH/AR8BkgEhAf8BYQGxAWIB/wHSAeoB0gH/
|
||||
AasB2AGsAf8B6AH1AegB/wP+Af8D/gH/A/4B/wP+Af8B8AH5AfEB/wGzAdsBtAH/AcsB6AHLAf8BkgHQ
|
||||
AZMB/wEfAZIBIQH/AR8BkgEhAf8BIgGSASQB/wEiAZIBJAH/ARoBjAEcAf8BGgGMARwB/wHJAeIByQH/
|
||||
A/4J/wP+Af8B3AHwAd0B/wEyAaMBNAH/ASYBmAEpAf8BLgGcATEB/wEuAZwBMQH/AS4BnAExAf8BHwGS
|
||||
ASEB/wFhAbEBYgH/AdIB6gHSAf8BqwHYAawB/wHqAfgB6wH/A/4B/wP+Af8D/gH/A/4B/wHqAfgB6wH/
|
||||
AbMB2wG0Af8BywHoAcsB/wGSAdABkwH/AR8BkgEhAf8BHwGSASEB/wEiAZIBJAH/ASEBjAEjAf8BGgGM
|
||||
ARwB/wEaAYwBHAH/AckB4gHJAf8D/gn/A/4B/wP5Af8D6QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/
|
||||
A/4B/wP+Gf8D/gH/A/4B/wGrAdgBrAH/AUUBsAFHAf8BKgGaAS0B/wEfAZIBIQH/ARcBjAEZAf8BGgGM
|
||||
ARwB/wFqAbQBawH/AdsB7AHbAf8D/gn/A/4B/wHgAfEB4QH/AYkByAGKAf8BMgGjATQB/wEjAZkBJgH/
|
||||
AS4BnAExAf8BKgGaAS0B/wEnAZYBKQH/AZIByQGTAf8D/gH/A/4Z/wP+Af8D/gH/AasB2AGsAf8BRQGw
|
||||
AUcB/wEqAZoBLQH/AR8BkgEhAf8BFwGMARkB/wEaAYwBHAH/AWoBtAFrAf8B2wHsAdsB/wP+Cf8D/gH/
|
||||
AeAB8QHhAf8BkgHJAZMB/wEyAaMBNAH/ASMBmQEmAf8BLgGcATEB/wEqAZoBLQH/AScBlgEpAf8BkgHJ
|
||||
AZMB/wP+Af8D/hn/A/4B/wP+Af8BqwHYAawB/wFFAbABRwH/ASoBmgEtAf8BHwGKASEB/wEXAYwBGQH/
|
||||
ARoBjAEcAf8BagG0AWsB/wHcAfAB3QH/A/4J/wP+Af8B4AHxAeEB/wGSAckBkwH/ATIBowE0Af8BIwGZ
|
||||
ASYB/wEuAZwBMQH/ASoBmgEtAf8BJwGWASkB/wGSAckBkwH/A/4B/wP+Gf8D/gH/A/4B/wGrAdgBrAH/
|
||||
AUUBsAFHAf8BKgGaAS0B/wEfAYoBIQH/ARcBjAEZAf8BGgGMARwB/wFqAbQBawH/AdwB8AHdAf8D/gX/
|
||||
A/4B/wPxAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wPiAf8D2QH/A9kB/wPxAf8D/in/A/4B/wHBAeIBwgH/
|
||||
AUUBsAFHAf8BIgGSASQB/wFTAakBVQH/AcEB4gHCAf8ByQHiAckB/wFTAakBVQH/AaoB0gGrAf8D/gH/
|
||||
A/4B/wHRAfoB1AH/AYkB8wGQAf8B1AH8AdgB/wHSAeoB0gH/AXIBvAF0Af8BIgGSASQB/wEcAZABHgH/
|
||||
AaoB0gGrAf8D/in/A/4B/wHBAeIBwgH/AUUBsAFHAf8BIgGSASQB/wFTAakBVQH/AcEB4gHCAf8ByQHi
|
||||
AckB/wFTAakBVQH/AaoB0gGrAf8D/gH/A/4B/wG5AeABugH/AVYBsQFZAf8BwQHiAcIB/wHSAeoB0gH/
|
||||
AXIBvAF0Af8BIwGZASYB/wEcAZABHgH/AaoB0gGrAf8D/in/A/4B/wHBAeIBwgH/AUUBsAFHAf8BIgGS
|
||||
ASQB/wFTAakBVQH/AcEB4gHCAf8ByQHiAckB/wFTAakBVQH/AaoB0gGrAf8D/gH/A/4B/wG5AeABugH/
|
||||
AVIBsgFUAf8BwQHiAcIB/wHSAeoB0gH/AXIBvAF0Af8BIwGZASYB/wEcAZABHgH/AaoB0gGrAf8D/in/
|
||||
A/4B/wHBAeIBwgH/AUUBsAFHAf8BIgGSASQB/wFTAakBVQH/AcEB4gHCAf8ByQHiAckB/wFTAakBVQH/
|
||||
AaoB0gGrAf8D/gH/A/4B/wPiAf8D1gH/A9kB/wPiAf8B9QH0AfUB/wPxAf8D7AH/A/4x/wP+Af8BswHb
|
||||
AbQB/wGzAdsBtAH/AdsB7AHbAf8BeQG8AXsB/wEiAZIBJAH/AQoBgwEMAf8BUwGpAVUB/wP+Af8D/gH/
|
||||
AZ4B8wGkAf8BagHoAXQB/wFqAegBdAH/AZ4B8wGkAf8B4AH4AeIB/wGzAdsBtAH/AZkBywGZAf8D/jH/
|
||||
A/4B/wGzAdsBtAH/AbMB2wG0Af8B2wHsAdsB/wF5AbwBewH/ASIBkgEkAf8BCgGDAQwB/wFTAakBVQH/
|
||||
A/4B/wP+Af8BcgG8AXQB/wEjAZkBJgH/ASoBmgEtAf8BcAG5AXIB/wHSAeoB0gH/AbMB2wG0Af8BmQHL
|
||||
AZkB/wP+Mf8D/gH/AbMB2wG0Af8BswHbAbQB/wHbAewB2wH/AXkBvAF7Af8BIgGSASQB/wEKAYMBDAH/
|
||||
AVMBqQFVAf8D/gH/A/4B/wFyAbwBdAH/ASMBmQEmAf8BKgGaAS0B/wFwAbkBcgH/AdIB6gHSAf8BswHb
|
||||
AbQB/wGZAcsBmQH/A/4x/wP+Af8BswHbAbQB/wGzAdsBtAH/AdsB7AHbAf8BeQG8AXsB/wEiAZIBJAH/
|
||||
AQoBgwEMAf8BUwGpAVUB/wP+Af8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D7AH/A/45/wP+Af8BwQHi
|
||||
AcIB/wFCAaIBRAH/ARMBiAEVAf8BHwGKASEB/wEaAYwBHAH/ASIBkgEkAf8B0gHqAdIB/wHqAfgB6wH/
|
||||
AXoB8gGBAf8BdQHxAX4B/wFxAesBegH/AWoB6AF0Af8BWgHgAWMB/wGsAeoBsAH/A/45/wP+Af8BwQHi
|
||||
AcIB/wFCAaIBRAH/ARMBiAEVAf8BHwGKASEB/wEaAYwBHAH/ASIBkgEkAf8B0gHqAdIB/wHgAfEB4QH/
|
||||
AT8BqQFBAf8BMgGjATQB/wEyAaMBNAH/ASoBmgEtAf8BJgGYASkB/wGZAcsBmQH/A/45/wP+Af8BwQHi
|
||||
AcIB/wE/AakBQQH/ARMBiAEVAf8BHwGKASEB/wEaAYwBHAH/ASIBkgEkAf8B0gHqAdIB/wHgAfEB4QH/
|
||||
AT8BqQFBAf8BMgGjATQB/wEyAaMBNAH/ASoBmgEtAf8BJgGYASkB/wGZAcsBmQH/A/45/wP+Af8BwQHi
|
||||
AcIB/wE/AakBQQH/ARMBiAEVAf8BHwGKASEB/wEaAYwBHAH/ASIBkgEkAf8B0gHqAdIB/wPxAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPsAf8D/jn/A/4B/wGzAdsBtAH/ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/
|
||||
ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/AcgB9AHMAf8BdQHxAX4B/wF6AfIBgQH/AXoB8gGBAf8BcQHr
|
||||
AXoB/wFAAc8BSgH/AaQB5gGoAf8D/jn/A/4B/wGzAdsBtAH/ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/
|
||||
ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/AasB2AGsAf8BLgGiATIB/wE2AaQBOQH/ATYBpAE5Af8BMgGj
|
||||
ATQB/wESAYQBFAH/AZIByQGTAf8D/jn/A/4B/wGzAdsBtAH/ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/
|
||||
ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/AasB2AGsAf8BLgGiATIB/wE2AaQBOQH/ATYBpAE5Af8BMgGj
|
||||
ATQB/wETAYgBFQH/AZIByQGTAf8D/jn/A/4B/wGzAdsBtAH/ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/
|
||||
ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/lB/wHoAfUB6AH/
|
||||
AUsBsAFNAf8BJgGYASkB/wEfAZIBIQH/AR8BkgEhAf8BEwGIARUB/wFqAbQBawH/AaoB/AGxAf8BdQHx
|
||||
AX4B/wF6AfIBgQH/AXoB8gGBAf8BaAHlAXEB/wFCAcsBSgH/AeAB8QHhQf8B6AH1AegB/wFLAbABTQH/
|
||||
ASYBmAEpAf8BHwGSASEB/wEfAZIBIQH/ARMBiAEVAf8BagG0AWsB/wGEAcgBhgH/ASkBoAEsAf8BNgGk
|
||||
ATkB/wE2AaQBOQH/ASoBmgEtAf8BIgGSASQB/wHbAewB20H/AegB9QHoAf8BSwGwAU0B/wEmAZgBKQH/
|
||||
ASIBkgEkAf8BIgGSASQB/wETAYgBFQH/AWoBtAFrAf8BhAHIAYYB/wEpAaABLAH/ATYBpAE5Af8BNgGk
|
||||
ATkB/wEqAZoBLQH/ASEBjAEjAf8B2wHsAdtB/wHoAfUB6AH/AUsBsAFNAf8BJgGYASkB/wEiAZIBJAH/
|
||||
ASIBkgEkAf8BEwGIARUB/wFqAbQBawH/A+IB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A/5B/wP+Af8BbQHA
|
||||
AW8B/wEmAZgBKQH/AR8BigEhAf8BHwGSASEB/wEXAYwBGQH/AUkBpQFMAf8BmgH5AaEB/wF4AfIBgQH/
|
||||
AXoB8gGBAf8BegHyAYEB/wFaAeABYwH/AVkBzwFhAf8B+QH8AflB/wP+Af8BbQHAAW8B/wEmAZgBKQH/
|
||||
AR8BigEhAf8BHwGSASEB/wEXAYwBGQH/AUkBpQFMAf8BaQG7AWsB/wEuAaIBMgH/ATYBpAE5Af8BNgGk
|
||||
ATkB/wEiAZIBJAH/AT8BnQFBAf8B+QH8AflB/wP+Af8BbQHAAW8B/wEmAZgBKQH/AR8BigEhAf8BIgGS
|
||||
ASQB/wEXAYwBGQH/AUkBpQFMAf8BaQG7AWsB/wEuAaIBMgH/ATYBpAE5Af8BNgGkATkB/wEiAZIBJAH/
|
||||
AT4BmwFAAf8B+QH8AflB/wP+Af8BbQHAAW8B/wEjAZkBJgH/AR8BigEhAf8BHwGSASEB/wEXAYwBGQH/
|
||||
AUkBpQFMAf8B9QH0AfUB/wPxAf8D8QH/A/EB/wPxAf8B9QH0AfUB/wP+Qf8D/gH/AdIB6gHSAf8BuAHd
|
||||
AbkB/wGzAdsBtAH/AbMB2wG0Af8BswHbAbQB/wHBAeIBwgH/Ad0B+wHgAf8B0QH6AdQB/wHRAfoB1AH/
|
||||
AdQB/AHYAf8ByAH0AcwB/wHIAfQBzAH/A/5B/wP+Af8B0gHqAdIB/wG5AeABugH/AbMB2wG0Af8BswHb
|
||||
AbQB/wGzAdsBtAH/AcEB4gHCAf8ByQHiAckB/wG5AeABugH/AbkB4AG6Af8BuQHgAboB/wGzAdsBtAH/
|
||||
AcEB4gHCAf8D/kH/A/4B/wHSAeoB0gH/AbkB4AG6Af8BswHbAbQB/wGzAdsBtAH/AbMB2wG0Af8BvwHg
|
||||
AcAB/wHJAeIByQH/AbkB4AG6Af8BuQHgAboB/wG5AeABugH/AbMB2wG0Af8BwQHiAcIB/wP+Qf8D/gH/
|
||||
AdIB6gHSAf8BuAHdAbkB/wGzAdsBtAH/AbMB2wG0Af8BswHbAbQB/wHBAeIBwgH/A+kB/wPiAf8D4gH/
|
||||
A+IB/wPiAf8D7AH/A/5B/wP+Af8BpAHYAaUB/wFwAbkBcgH/AWoBtAFrAf8BagG0AWsB/wFqAbQBawH/
|
||||
AX8BvAGBAf8B7QHoAe0B/wHoAeQB6AH/AegB5AHoAf8B6AHkAegB/wHoAeQB6AH/AfEB7AHxAf8D/kH/
|
||||
A/4B/wGkAdgBpQH/AXABuQFyAf8BagG0AWsB/wFqAbQBawH/AWoBtAFrAf8BfwG8AYEB/wGSAdABkwH/
|
||||
AXwBwgF9Af8BfAHCAX0B/wF8AcIBfQH/AWkBuwFrAf8BiQHCAYoB/wP+Qf8D/gH/AaQB2AGlAf8BcAG5
|
||||
AXIB/wFqAbQBawH/AWoBtAFrAf8BagG0AWsB/wF/AcEBgQH/AZIB0AGTAf8BfAHCAX0B/wF8AcIBfQH/
|
||||
AXwBwgF9Af8BaQG7AWsB/wGJAcIBigH/A/5B/wP+Af8BpAHYAaUB/wFwAbkBcgH/AWoBtAFrAf8BagG0
|
||||
AWsB/wFqAbQBawH/AX8BvAGBAf8D4gH/A9YB/wPZAf8D2QH/A9YB/wPcAf8D/kH/A/4B/wFiAboBYwH/
|
||||
AR8BkgEhAf8BGgGMARwB/wEcAZABHgH/ARMBiAEVAf8BSQGlAUwB/wPiAf8D1gH/A9kB/wPZAf8D1gH/
|
||||
A9wB/wP+Qf8B+QH8AfkB/wFiAboBYwH/AR8BkgEhAf8BGgGMARwB/wEcAZABHgH/ARMBiAEVAf8BSQGl
|
||||
AUwB/wFpAbsBawH/ASkBoAEsAf8BMgGjATQB/wEyAaMBNAH/ARwBkAEeAf8BNAGVATYB/wH5AfwB+UH/
|
||||
AfkB/AH5Af8BYgG6AWMB/wEfAZIBIQH/ARoBjAEcAf8BHAGQAR4B/wETAYgBFQH/AUkBpQFMAf8BaQG7
|
||||
AWsB/wEpAaABLAH/ATIBowE0Af8BMgGjATQB/wEcAZABHgH/ATQBlQE2Af8B+QH8AflB/wH7Af4B/AH/
|
||||
AWIBugFjAf8BHwGSASEB/wEaAYwBHAH/ARwBkAEeAf8BEwGIARUB/wFJAaUBTAH/A+kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A/lB/wHgAfEB4QH/AUMBqwFFAf8BKgGaAS0B/wEiAZIBJAH/ASIBkgEkAf8BGgGM
|
||||
ARwB/wFwAbkBcgH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/lB/wHgAfEB4QH/AUMBqwFFAf8BKgGa
|
||||
AS0B/wEiAZIBJAH/ASIBkgEkAf8BFwGMARkB/wFwAbkBcgH/AYkByAGKAf8BMgGjATQB/wE7AakBPQH/
|
||||
ATsBqQE9Af8BMgGjATQB/wEfAYoBIQH/AdcB6gHYQf8B5wH1AegB/wFDAasBRQH/ASoBmgEtAf8BIgGS
|
||||
ASQB/wEiAZIBJAH/ARcBjAEZAf8BcAG5AXIB/wGJAcgBigH/ATIBowE0Af8BOwGpAT0B/wE7AakBPQH/
|
||||
ATIBowE0Af8BHwGKASEB/wHXAeoB2EH/AeAB8QHhAf8BQwGrAUUB/wEqAZoBLQH/ASIBkgEkAf8BIgGS
|
||||
ASQB/wEXAYwBGQH/AXABuQFyAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D7AH/A/45/wP+Af8BqwHY
|
||||
AawB/wEjAZkBJgH/AScBlgEpAf8BJwGWASkB/wEnAZYBKQH/ARoBjAEcAf8BmQHLAZkB/wPxAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9YB/wPsAf8D/jn/A/4B/wGrAdgBrAH/ASMBmQEmAf8BJwGWASkB/wEnAZYBKQH/
|
||||
AScBlgEpAf8BGgGMARwB/wGZAcsBmQH/AbMB2wG0Af8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BOwGp
|
||||
AT0B/wEKAYMBDAH/AYkBwgGKAf8D/jn/A/4B/wGrAdgBrAH/ASMBmQEmAf8BJwGWASkB/wEnAZYBKQH/
|
||||
AScBlgEpAf8BGgGMARwB/wGZAcsBmQH/AbMB2wG0Af8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BOwGp
|
||||
AT0B/wEKAYMBDAH/AYkBwgGKAf8D/jn/A/4B/wGrAdgBrAH/ASMBmQEmAf8BJwGWASkB/wEnAZYBKQH/
|
||||
AScBlgEpAf8BGgGMARwB/wGZAcsBmQH/A/4B/wPcAf8D2QH/A9kB/wPZAf8D4gH/AfUB9AH1Af8D/jn/
|
||||
AfkB/AH5Af8B2wHsAdsB/wF/AcEBgQH/AScBlgEpAf8BHwGSASEB/wEiAZIBJAH/ASoBmgEtAf8B2wHs
|
||||
AdsB/wP5Af8D3AH/A9kB/wPZAf8D2QH/A+IB/wH1AfQB9QH/A/45/wH5AfwB+QH/AdsB7AHbAf8BfwHB
|
||||
AYEB/wEnAZYBKQH/AR8BkgEhAf8BIgGSASQB/wEqAZoBLQH/AdsB7AHbAf8B5wH1AegB/wFKAawBTQH/
|
||||
ATsBqQE9Af8BMgGjATQB/wEyAaMBNAH/AWEBsQFiAf8ByQHiAckB/wP+Of8B+QH8AfkB/wHbAewB2wH/
|
||||
AX8BwQGBAf8BJwGWASkB/wEfAZIBIQH/ASIBkgEkAf8BKgGaAS0B/wHbAewB2wH/AeAB8QHhAf8BSwGw
|
||||
AU0B/wE7AakBPQH/ATIBowE0Af8BMgGjATQB/wFnAbYBaQH/AckB4gHJAf8B+QH8Afk5/wH5AfwB+QH/
|
||||
AdsB7AHbAf8BfwHBAYEB/wEnAZYBKQH/AR8BkgEhAf8BIgGSASQB/wEqAZoBLQH/AdsB7AHbAf8D/gH/
|
||||
A+IB/wPWAf8D4gH/A/EB/wP5Af8D4gH/A+kB/wP+Mf8D/gH/AYkByAGKAf8BWwGxAV0B/wHSAeoB0gH/
|
||||
AckB4gHJAf8BWwGxAV0B/wETAYgBFQH/AWEBsQFiAf8D/gH/A/4B/wPiAf8D1gH/A+IB/wPxAf8D+QH/
|
||||
A+IB/wPpAf8D/jH/A/4B/wGJAcgBigH/AVsBsQFdAf8B0gHqAdIB/wHJAeIByQH/AVsBsQFdAf8BEwGI
|
||||
ARUB/wFhAbEBYgH/A/4B/wP+Af8BfAHCAX0B/wEpAaABLAH/AVsBsQFdAf8BuQHgAboB/wHqAfgB6wH/
|
||||
AYMB4QGJAf8BhQHaAYoB/wP+Mf8D/gH/AYkByAGKAf8BWwGxAV0B/wHSAeoB0gH/AckB4gHJAf8BWwGx
|
||||
AV0B/wETAYgBFQH/AWEBsQFiAf8D/gH/A/4B/wF8AcIBfQH/ASkBoAEsAf8BWwGxAV0B/wG5AeABugH/
|
||||
AeAB8QHhAf8BYQGxAWIB/wF0AbUBdQH/A/4x/wP+Af8BiQHIAYoB/wFbAbEBXQH/AdIB6gHSAf8ByQHi
|
||||
AckB/wFbAbEBXQH/ARMBiAEVAf8BYQGxAWIB/wP+Af8D/gH/AfUB9AH1Af8D7AH/A/kB/wPsAf8D3AH/
|
||||
A9kB/wPZAf8D7AH/A/4p/wP+Af8BoAHRAaEB/wEjAZkBJgH/ASIBkgEkAf8BKgGaAS0B/wF8AcIBfQH/
|
||||
AdIB6gHSAf8BoAHRAaEB/wHBAeIBwgH/A/4B/wP+Af8B9QH0AfUB/wPsAf8D+QH/A+wB/wPcAf8D2QH/
|
||||
A9kB/wPsAf8D/in/A/4B/wGgAdEBoQH/ASIBkgEkAf8BIgGSASQB/wEqAZoBLQH/AXwBwgF9Af8B0gHq
|
||||
AdIB/wGgAdEBoQH/AcEB4gHCAf8D/gH/A/4B/wHLAegBywH/AZoB0gGbAf8B4AH4AeIB/wHFAfoByQH/
|
||||
AZIB+wGZAf8BagHoAXQB/wE1AcUBPgH/AZsB4gGgAf8D/in/A/4B/wGgAdEBoQH/ASMBmQEmAf8BIgGS
|
||||
ASQB/wEqAZoBLQH/AXwBwgF9Af8B0gHqAdIB/wGgAdEBoQH/AcEB4gHCAf8D/gH/A/4B/wHOAesB0AH/
|
||||
AZoB0gGbAf8B3AHwAd0B/wGaAdIBmwH/AUUBsAFHAf8BJgGYASkB/wESAYQBFAH/AZABxQGRAf8D/in/
|
||||
A/4B/wGgAdEBoQH/ASMBmQEmAf8BIgGSASQB/wEqAZoBLQH/AXwBwgF9Af8B0gHqAdIB/wGgAdEBoQH/
|
||||
AcEB4gHCAf8D/gX/A/4B/wH1AfQB9QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+kB/wP+Af8D/hn/
|
||||
A/4B/wP+Af8BmQHLAZkB/wEcAZABHgH/ASoBmgEtAf8BLgGcATEB/wEqAZoBLQH/AR8BkgEhAf8BLgGc
|
||||
ATEB/wG4Ad0BuQH/A/4J/wP+Af8B9QH0AfUB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D/gH/
|
||||
A/4Z/wP+Af8D/gH/AZkBywGZAf8BHAGQAR4B/wEqAZoBLQH/AS4BnAExAf8BKgGaAS0B/wEfAZIBIQH/
|
||||
AS4BnAExAf8BuAHdAbkB/wP+Cf8D/gH/AeoB+AHrAf8BkgH7AZkB/wGDAfkBjAH/AYMB+QGMAf8BiQH6
|
||||
AZEB/wFqAegBdAH/ATUBxQE+Af8BjwHdAZQB/wP+Af8D/hn/A/4B/wP+Af8BmQHLAZkB/wEcAZABHgH/
|
||||
ASoBmgEtAf8BLgGcATEB/wEqAZoBLQH/AR8BkgEhAf8BLgGcATEB/wG4Ad0BuQH/A/4J/wP+Af8B0gHq
|
||||
AdIB/wFSAbIBVAH/ATIBowE0Af8BOwGpAT0B/wE/AakBQQH/AS4BnAExAf8BEgGEARQB/wF/AbwBgQH/
|
||||
A/4B/wP+Gf8D/gH/A/4B/wGZAcsBmQH/ARwBkAEeAf8BKgGaAS0B/wEuAZwBMQH/ASoBmgEtAf8BHwGS
|
||||
ASEB/wEuAZwBMQH/AbgB3QG5Af8D/gn/A/4B/wP5Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D6QH/
|
||||
A/EB/wPsAf8D+QH/A/4B/wP+Af8D/gH/AfkB/AH5Af8B4AHvAeAB/wGJAcIBigH/AZYByQGYAf8BqgHS
|
||||
AasB/wEjAZkBJgH/AS4BnAExAf8BLgGcATEB/wEqAZoBLQH/ASYBmAEpAf8BMQGdATMB/wHSAeoB0gH/
|
||||
A/4J/wP+Af8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D1gH/A+kB/wPxAf8D7AH/A/kB/wP+Af8D/gH/
|
||||
A/4B/wH5AfwB+QH/AeAB7wHgAf8BiQHCAYoB/wGWAckBmAH/AaoB0gGrAf8BIwGZASYB/wEuAZwBMQH/
|
||||
AS4BnAExAf8BKgGaAS0B/wEmAZgBKQH/AS4BnAExAf8B0gHqAdIB/wP+Cf8D/gH/AeoB+AHrAf8BkgH7
|
||||
AZkB/wGDAfkBjAH/AYkB+gGRAf8BiQH6AZEB/wGJAfoBkQH/AWoB6AF0Af8BmAHlAZwB/wH1AfQB9QH/
|
||||
A+wB/wP5Af8D/gH/A/4B/wP+Af8B+QH8AfkB/wHgAfEB4QH/AYkBwgGKAf8BlgHJAZgB/wGqAdIBqwH/
|
||||
ASMBmQEmAf8BLgGcATEB/wEuAZwBMQH/ASoBmgEtAf8BJgGYASkB/wEuAZwBMQH/AdIB6gHSAf8D/gn/
|
||||
A/4B/wHgAfEB4QH/AUsBsAFNAf8BOAGoAToB/wE/AakBQQH/ATsBqQE9Af8BPwGpAUEB/wEjAZkBJgH/
|
||||
AYkBwgGKAf8BqgHSAasB/wGCAb0BgwH/AdsB7AHbAf8B+QH8AfkB/wP+Af8D/gH/A/4B/wHgAfEB4QH/
|
||||
AZ4B8wGkAf8BqQHpAa0B/wGqAdIBqwH/ASIBkgEkAf8BLgGcATEB/wEuAZwBMQH/ASoBmgEtAf8BJgGY
|
||||
ASkB/wEuAZwBMQH/AdIB6gHSAf8D/g3/A/4B/wPxAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wP5Af8D3AH/
|
||||
A9YB/wPZAf8D3AH/AfgB8gH4Af8BqgHSAasB/wE0AZUBNgH/ASEBjAEjAf8BEwGIARUB/wEqAZoBLQH/
|
||||
AdIB6gHSAf8BcgG8AXQB/wEmAZgBKQH/AS4BnAExAf8BKgGaAS0B/wEmAZgBKQH/AasB2AGsAf8D/hH/
|
||||
A/4B/wPxAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wP5Af8D3AH/A9YB/wPZAf8D3AH/AfgB8gH4Af8BqgHS
|
||||
AasB/wE0AZUBNgH/ASEBjAEjAf8BEwGIARUB/wEqAZoBLQH/AdIB6gHSAf8BcgG8AXQB/wEmAZgBKQH/
|
||||
AS4BnAExAf8BKgGaAS0B/wEmAZgBKQH/AasB2AGsAf8D/hH/A/4B/wHYAfoB2wH/AYkB+gGRAf8BiQH6
|
||||
AZEB/wGJAfoBkQH/AYMB+QGMAf8BmgH5AaEB/wHwAfkB8QH/AeEB3gHhAf8D1gH/AdwB2gHcAf8D3AH/
|
||||
AfgB8gH4Af8BqgHSAasB/wE0AZUBNgH/ASEBjAEjAf8BEwGIARUB/wEqAZoBLQH/AdIB6gHSAf8BcgG8
|
||||
AXQB/wEmAZgBKQH/AS4BnAExAf8BKgGaAS0B/wEmAZgBKQH/AasB2AGsAf8D/hH/A/4B/wG5AeABugH/
|
||||
ATsBqQE9Af8BOwGpAT0B/wE/AakBQQH/ATYBpAE5Af8BXwG6AWEB/wHgAfEB4QH/AUIBogFEAf8BEAGI
|
||||
AREB/wEfAYoBIQH/ATQBlQE2Af8BmQHLAZkB/wG5AewBvAH/AUwBzQFUAf8BTAHNAVQB/wFMAc0BVAH/
|
||||
AWIB4gFsAf8B4AH4AeIB/wFyAbwBdAH/ASYBmAEpAf8BLgGcATEB/wEqAZoBLQH/ASYBmAEpAf8BqwHY
|
||||
AawB/wP+Ff8D/gH/A/EB/wPZAf8D2QH/A9kB/wPxAf8D7AH/A9kB/wPZAf8D2QH/A9YB/wHxAewB8QH/
|
||||
AZIByQGTAf8BFwGRARoB/wEuAZwBMQH/ATIBowE0Af8BKgGaAS0B/wFyAbwBdAH/AdIB6gHSAf8BMgGj
|
||||
ATQB/wEmAZgBKQH/ASoBmgEtAf8BoAHRAaEB/wP+Gf8D/gH/A/EB/wPZAf8D2QH/A9kB/wPxAf8D7AH/
|
||||
A9kB/wPZAf8D2QH/A9YB/wHxAewB8QH/AZIByQGTAf8BFwGRARoB/wEuAZwBMQH/ATIBowE0Af8BKgGa
|
||||
AS0B/wFyAbwBdAH/AdIB6gHSAf8BMgGjATQB/wEmAZgBKQH/ASoBmgEtAf8BoAHRAaEB/wP+Gf8D/gH/
|
||||
AdEB+gHUAf8BiQH6AZEB/wGDAfkBjAH/AYMB+QGMAf8B0QH6AdQB/wHxAewB8QH/A9kB/wPZAf8D2QH/
|
||||
A9YB/wHxAewB8QH/AZIByQGTAf8BFwGRARoB/wEuAZwBMQH/ATIBowE0Af8BKgGaAS0B/wFyAbwBdAH/
|
||||
AdIB6gHSAf8BMgGjATQB/wEmAZgBKQH/ASoBmgEtAf8BoAHRAaEB/wP+Gf8D/gH/AbMB2wG0Af8BOwGp
|
||||
AT0B/wE4AagBOgH/ATYBpAE5Af8BuQHgAboB/wGaAdIBmwH/ATIBowE0Af8BOwGpAT0B/wEyAaMBNAH/
|
||||
ARwBkAEeAf8BhQHCAYYB/wG0AfMBuAH/AVQB4AFdAf8BagHoAXQB/wFxAesBegH/AWoB6AF0Af8BngHz
|
||||
AaQB/wHSAeoB0gH/ATIBowE0Af8BJgGYASkB/wEqAZoBLQH/AaAB0QGhAf8D/h3/A/4B/wPxAf8D3AH/
|
||||
A+IB/wH1AfQB9QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8B8QHsAfEB/wGaAdIBmwH/ASkBoAEsAf8BNgGk
|
||||
ATkB/wE2AaQBOQH/ATIBowE0Af8BKgGaAS0B/wG5AeABugH/AYkByAGKAf8BNgGkATkB/wGzAdsBtAH/
|
||||
A/4h/wP+Af8D8QH/A9wB/wPiAf8B9QH0AfUB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfEB7AHxAf8BmgHS
|
||||
AZsB/wEpAaABLAH/ATYBpAE5Af8BNgGkATkB/wEyAaMBNAH/ASoBmgEtAf8BuQHgAboB/wGJAcgBigH/
|
||||
ATYBpAE5Af8BswHbAbQB/wP+If8D/gH/AdgB+gHbAf8BkgH7AZkB/wGkAfoBqwH/AfUB9AH1Af8B3AHa
|
||||
AdwB/wPZAf8D2QH/A9kB/wPZAf8B8QHsAfEB/wGaAdIBmwH/ASkBoAEsAf8BNgGkATkB/wE2AaQBOQH/
|
||||
ATIBowE0Af8BKgGaAS0B/wG5AeABugH/AYkByAGKAf8BNgGkATkB/wGzAdsBtAH/A/4h/wP+Af8BwQHi
|
||||
AcIB/wFLAbABTQH/AW0BwAFvAf8B0gHqAdIB/wFDAasBRQH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
|
||||
AS4BogEyAf8BkgHJAZMB/wHFAfoByQH/AXUB8QF+Af8BegHyAYEB/wF6AfIBgQH/AXEB6wF6Af8BagHo
|
||||
AXQB/wHRAfoB1AH/AYUBwgGGAf8BNgGkATkB/wGzAdsBtAH/A/4l/wP+Af8D+QH/A/kB/wPiAf8D1gH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/ATYBpAE5Af8BMgGj
|
||||
ATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/4p/wP+Af8D+QH/A/kB/wPiAf8D1gH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/ATYBpAE5Af8BMgGj
|
||||
ATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/4p/wP+Af8B6gH4AesB/wHqAfgB6wH/
|
||||
AegB5AHoAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/
|
||||
ATYBpAE5Af8BMgGjATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/4p/wP+Af8B4AHx
|
||||
AeEB/wHcAfAB3QH/AXwBwgF9Af8BKQGgASwB/wE7AakBPQH/ATsBqQE9Af8BOwGpAT0B/wEuAaIBMgH/
|
||||
AZIByQGTAf8BxQH6AckB/wF1AfEBfgH/AXoB8gGBAf8BegHyAYEB/wFxAesBegH/AWoB6AF0Af8BggHx
|
||||
AYoB/wHgAfEB4QH/AdwB8AHdAf8D/i3/A/4B/wP+Af8B9QH0AfUB/wPpAf8D3AH/A9kB/wPWAf8D1gH/
|
||||
AfEB7AHxAf8BmgHSAZsB/wEjAZkBJgH/ASkBoAEsAf8BMgGjATQB/wFDAasBRQH/AXwBwgF9Af8BxwHl
|
||||
AcgB/wP+Af8D/jH/A/4B/wP+Af8B9QH0AfUB/wPpAf8D3AH/A9kB/wPWAf8D1gH/AfEB7AHxAf8BmgHS
|
||||
AZsB/wEjAZkBJgH/ASkBoAEsAf8BMgGjATQB/wFDAasBRQH/AXwBwgF9Af8BxwHlAcgB/wP+Af8D/jH/
|
||||
A/4B/wP+Af8B9QH0AfUB/wHoAeQB6AH/A9wB/wPZAf8D1gH/A9YB/wHxAewB8QH/AZoB0gGbAf8BIwGZ
|
||||
ASYB/wEpAaABLAH/ATIBowE0Af8BQwGrAUUB/wF8AcIBfQH/AccB5QHIAf8D/gH/A/4x/wP+Af8D/gH/
|
||||
Ac4B6wHQAf8BhAHIAYYB/wFLAbABTQH/ATgBqAE6Af8BLgGiATIB/wEnAaABKQH/AYkByAGKAf8BxQH6
|
||||
AckB/wF1AfEBfgH/AXUB8QF+Af8BdQHxAX4B/wGCAfEBigH/AaUB8gGqAf8B2AH6AdsB/wP+Af8D/jn/
|
||||
A/4B/wP+Af8D/gH/A/EB/wPpAf8D4gH/AfgB8gH4Af8BswHbAbQB/wFpAbsBawH/AY4BzQGQAf8BuQHg
|
||||
AboB/wHoAfUB6AH/A/4B/wP+Qf8D/gH/A/4B/wP+Af8D8QH/A+kB/wPiAf8B+AHyAfgB/wGzAdsBtAH/
|
||||
AWkBuwFrAf8BjgHNAZAB/wG5AeABugH/AegB9QHoAf8D/gH/A/5B/wP+Af8D/gH/A/4B/wH1AfQB9QH/
|
||||
A+wB/wPiAf8B+AHyAfgB/wGzAdsBtAH/AWkBuwFrAf8BjgHNAZAB/wG5AeABugH/AegB9QHoAf8D/gH/
|
||||
A/5B/wP+Af8D/gH/AeoB+AHrAf8BuQHgAboB/wGSAdABkwH/AW0BwAFvAf8BqgHSAasB/wHRAfoB1AH/
|
||||
AZ4B8wGkAf8BtAHzAbgB/wHRAfoB1AH/AfAB+QHxAf8D/gH/A/5J/wP+Af8D9gH/A+wB/wPjAf8D9QH/
|
||||
A/cB/wPiAf8D6wH/A/YB/wP+Sf8D/gH/A/4B/wP5Af8D8QH/A+kB/wPiAf8D7AH/A/EB/wPiAf8D4gH/
|
||||
A+wB/wP5Af8D/gH/A/5B/wP+Af8D/gH/A/kB/wPxAf8D6QH/A+IB/wPsAf8D8QH/A+IB/wPiAf8D7AH/
|
||||
A/kB/wP+Af8D/kH/A/4B/wP+Af8D+QH/A/EB/wPpAf8D4gH/A+wB/wPxAf8D4gH/A+IB/wPsAf8D+QH/
|
||||
A/4B/wP+Qf8D+wH/A+cB/wPbAf8D2gH/A9oB/wPaAf8D8AH/A/QB/wPaAf8D2gH/A9oB/wPbAf8D5gH/
|
||||
A/k5/wP+Af8D/gH/AfUB9AH1Af8D4gH/A9kB/wPZAf8D2QH/A9YB/wPpAf8D7AH/A9YB/wPZAf8D2QH/
|
||||
A9kB/wPiAf8D8QH/A/4B/wP+Mf8D/gH/A/4B/wH1AfQB9QH/A+IB/wPZAf8D2QH/A9kB/wPWAf8D6QH/
|
||||
A+wB/wPWAf8D2QH/A9kB/wPZAf8D4gH/A/EB/wP+Af8D/jH/A/4B/wP+Af8B9QH0AfUB/wPiAf8D2QH/
|
||||
A9kB/wPZAf8D1gH/A+kB/wPsAf8D1gH/A9kB/wPZAf8D2QH/A+IB/wPxAf8D/gH/A/4x/wP9Af8D+wH/
|
||||
A/MB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A/AB/wP0Af8D2gH/A9oB/wPaAf8D2gH/A9oB/wPsAf8D/QH/
|
||||
A/wt/wP+Af8B9QH0AfUB/wH1AfQB9QH/A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/A+kB/wPsAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9YB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A/4p/wP+Af8B9QH0AfUB/wH1AfQB9QH/
|
||||
A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/A+kB/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9YB/wPiAf8B9QH0
|
||||
AfUB/wH1AfQB9QH/A/4p/wP+Af8B9QH0AfUB/wH1AfQB9QH/A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A+kB/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9YB/wHoAeQB6AH/AdAB8wHTAf8BzQHzAdAB/wP+Kf8D9wH/
|
||||
A9sB/wPeAf8D/gH/A+IB/wPaAf8D2gH/A9oB/wPaAf8D8AH/A/QB/wPaAf8D2gH/A9oB/wPaAf8D3QH/
|
||||
A/0B/wPlAf8D2gH/A/Ul/wP+Af8D8QH/A9kB/wPcAf8D+QH/A+IB/wPZAf8D2QH/A9kB/wPZAf8D6QH/
|
||||
A+wB/wPZAf8D2QH/A9kB/wPZAf8D3AH/AfUB9AH1Af8D4gH/A9kB/wPsAf8D/iH/A/4B/wPxAf8D2QH/
|
||||
A9wB/wP5Af8D4gH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D7AH/A9kB/wPZAf8D2QH/A9kB/wPcAf8B9QH0
|
||||
AfUB/wPiAf8D2QH/A+wB/wP+If8D/gH/A/EB/wPZAf8D3AH/A/kB/wPiAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A+kB/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9wB/wHzAfcB8wH/AWwB2wF0Af8BQgHLAUoB/wGsAeoBsAH/
|
||||
A/4h/wPzAf8D2gH/A9oB/wPaAf8D8gH/A/sB/wPaAf8D2gH/A9oB/wPaAf8D8AH/A/QB/wPaAf8D2gH/
|
||||
A9oB/wPaAf8D9QH/A/kB/wPaAf8D2gH/A9oB/wPwHf8D/gH/A+wB/wPZAf8D2QH/A9kB/wPsAf8D8QH/
|
||||
A9kB/wPZAf8D2QH/A9YB/wPpAf8D7AH/A9YB/wPZAf8D2QH/A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/
|
||||
A+kB/wP+Gf8D/gH/A+wB/wPZAf8D2QH/A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9YB/wPpAf8D7AH/
|
||||
A9YB/wPZAf8D2QH/A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A+kB/wP+Gf8D/gH/A+wB/wPZAf8D2QH/
|
||||
A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9YB/wPpAf8D7AH/A9YB/wPZAf8D2QH/A9kB/wHxAewB8QH/
|
||||
AbQB7AG4Af8BQgHLAUoB/wFCAcsBSgH/ATwBywFFAf8BmwHiAaAB/wP+Gf8D9wH/A9oB/wPaAf8D2gH/
|
||||
A9oB/wPcAf8D/QH/A+kB/wPaAf8D3QH/A+UB/wP6Af8D+wH/A+UB/wPeAf8D2gH/A+EB/wP+Af8D4AH/
|
||||
A9oB/wPaAf8D2gH/A9oB/wP0Ff8D/gH/A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D4gH/
|
||||
A9YB/wPcAf8D4gH/A/EB/wH1AfQB9QH/A+IB/wPcAf8D2QH/A9wB/wP5Af8D3AH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPsAf8D/hH/A/4B/wPxAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wH1AfQB9QH/A+IB/wPWAf8D3AH/
|
||||
A+IB/wPxAf8B9QH0AfUB/wPiAf8D3AH/A9kB/wPcAf8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D7AH/
|
||||
A/4R/wP+Af8D8QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8B9QH0AfUB/wPiAf8D1gH/A9wB/wPiAf8D8QH/
|
||||
AfUB9AH1Af8D4gH/A9wB/wPZAf8B4QHeAeEB/wHqAfgB6wH/AVoB3QFjAf8BQgHQAUsB/wFJAdIBUgH/
|
||||
AUIB0AFLAf8BPAHLAUUB/wGpAekBrQH/A/4R/wP+Af8D3AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D6AH/
|
||||
A/0B/wP5Gf8D+QH/A/wB/wPwAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPbAf8D/Q3/A/4B/wP5Af8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A/kB/wPxAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/
|
||||
AfUB9AH1Af8D6QH/A9YB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D/gn/A/4B/wP5Af8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A/kB/wPxAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/
|
||||
AfUB9AH1Af8D6QH/A9YB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D/gn/A/4B/wP5Af8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A/kB/wPxAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/
|
||||
AfgB8gH4Af8BvAH7AcEB/wFaAeABYwH/AUkB0gFSAf8BSQHSAVIB/wFJAdIBUgH/AUIBywFKAf8BQgHL
|
||||
AUoB/wHWAfQB2AH/A/4N/wP+Af8D8AH/A9sB/wPaAf8D2gH/A9oB/wPaAf8D9Cn/A/YB/wPbAf8D2gH/
|
||||
A9oB/wPaAf8D2gH/A+oB/wP+Df8D/gH/A/kB/wPpAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPsAf8D/gH/
|
||||
A/4Z/wP+Af8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wP5Af8D/gn/A/4B/wP5Af8D6QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/A/4B/wP+Gf8D/gH/A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPiAf8D+QH/A/4J/wP+Af8D+QH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+Af8D/hn/
|
||||
A/4B/wP+Af8B0QH6AdQB/wGaAfkBoQH/AWsB5QF0Af8BSAHSAVEB/wFCAdABSwH/AUIB0AFLAf8BiAHi
|
||||
AY8B/wHgAfgB4gH/A/4J/wP6Af8D4QH/A/oB/wP9Af8D6QH/A9oB/wPaAf8D+TH/A/sB/wPbAf8D2gH/
|
||||
A+QB/wP8Af8D/AH/A+UB/wP5Bf8D/gH/A/EB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPZAf8D2QH/
|
||||
A/EB/wP+Kf8D/gH/A/EB/wPZAf8D2QH/A+IB/wH1AfQB9QH/AfUB9AH1Af8D4gH/A/EB/wP+Af8D/gH/
|
||||
A/EB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPZAf8D2QH/A/EB/wP+Kf8D/gH/A/EB/wPZAf8D2QH/
|
||||
A+IB/wH1AfQB9QH/AfUB9AH1Af8D4gH/A/EB/wP+Af8D/gH/A/EB/wPiAf8B9QH0AfUB/wH1AfQB9QH/
|
||||
A+IB/wPZAf8D2QH/A/EB/wP+Kf8D/gH/Ad0B+wHgAf8BmgH5AaEB/wFaAeABYwH/AXQB3AF7Af8BzQHz
|
||||
AdAB/wHJAeIByQH/AVQBpwFVAf8BqgHSAasB/wP+Bf8D6AH/A9oB/wPaAf8D6AH/A/0B/wP5Af8D9zn/
|
||||
A/cB/wP2Af8D/gH/A+4B/wPbAf8D2gH/A+UF/wP+Af8D4gH/A9YB/wPZAf8D4gH/AfUB9AH1Af8D8QH/
|
||||
A+wB/wP+Mf8D/gH/A+wB/wPxAf8D+QH/A+kB/wPZAf8D1gH/A+IB/wP+Af8D/gH/A+IB/wPWAf8D2QH/
|
||||
A+IB/wH1AfQB9QH/A/EB/wPsAf8D/jH/A/4B/wPsAf8D8QH/A/kB/wPpAf8D2QH/A9YB/wPiAf8D/gH/
|
||||
A/4B/wPiAf8D1gH/A9kB/wPiAf8B9QH0AfUB/wPxAf8D7AH/A/4x/wP+Af8B0QH6AdQB/wHUAfwB2AH/
|
||||
AdsB7AHbAf8BcgG8AXQB/wEfAYoBIQH/AQoBgwEMAf8BUwGpAVUB/wP+Af8D/gH/A9wB/wPaAf8D2gH/
|
||||
A9oB/wPaAf8D9kH/A/oB/wPdAf8D2gH/A9oB/wPaAf8D2wH/A/0B/wP5Af8D3AH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPsAf8D/jn/A/4B/wPxAf8D3AH/A9kB/wPZAf8D2QH/A9kB/wP5Af8D+QH/A9wB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D7AH/A/45/wP+Af8D8QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D+QH/A/kB/wPcAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A+wB/wP+Of8D/gH/AbkB4AG6Af8BQAGnAUIB/wETAYgBFQH/AR8BigEhAf8BGgGM
|
||||
ARwB/wEiAZIBJAH/AdIB6gHSAf8D+AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D9kH/A/kB/wPaAf8D2gH/
|
||||
A9oB/wPaAf8D2gH/A/UB/wPxAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPsAf8D/jn/A/4B/wPsAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/A/45/wP+Af8D7AH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+Of8D/gH/
|
||||
AbMB2wG0Af8BMgGjATQB/wEiAZIBJAH/ASIBkgEkAf8BIgGSASQB/wETAYgBFQH/AZIByQGTAf8D7QH/
|
||||
A9oB/wPaAf8D2gH/A9oB/wPcSf8D3QH/A9oB/wPaAf8D2gH/A9oB/wPrAf8D6QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D+UH/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wPpAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wP5Qf8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A/lB/wHoAfUB6AH/AUsBsAFNAf8BJgGYASkB/wEiAZIBJAH/ASIBkgEkAf8BEwGIARUB/wFqAbQBawH/
|
||||
A+YB/wPaAf8D2gH/A9oB/wPaAf8D4kn/A+YB/wPaAf8D2gH/A9oB/wPaAf8D4wH/A+IB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D4gH/A/5B/wP+Af8D4gH/A9kB/wPZAf8D2QH/A9kB/wPiAf8D4gH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPiAf8D/kH/A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wPiAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A+IB/wP+Qf8D/gH/AW0BwAFvAf8BJgGYASkB/wEfAYoBIQH/AR8BkgEhAf8BFwGMARkB/wFJAaUBTAH/
|
||||
A/sB/wP5Af8D+QH/A/kB/wP5Af8D/Un/A/0B/wP5Af8D+QH/A/kB/wP5Af8D+wH/AfUB9AH1Af8D8QH/
|
||||
A/EB/wPxAf8D8QH/AfUB9AH1Af8D/kH/A/4B/wH1AfQB9QH/A/EB/wPxAf8D8QH/A/EB/wH1AfQB9QH/
|
||||
AfUB9AH1Af8D8QH/A/EB/wPxAf8D8QH/AfUB9AH1Af8D/kH/A/4B/wH1AfQB9QH/A/EB/wPxAf8D8QH/
|
||||
AfQB8QHzAf8B9QH0AfUB/wH1AfQB9QH/A/EB/wPxAf8D8QH/A/EB/wH1AfQB9QH/A/5B/wP+Af8B0gHq
|
||||
AdIB/wG4Ad0BuQH/AbMB2wG0Af8BswHbAbQB/wGzAdsBtAH/AcEB4gHCAf8D8AH/A+kB/wPqAf8D6gH/
|
||||
A+kB/wP0Sf8D9gH/A+kB/wPqAf8D6gH/A+kB/wPvAf8D6QH/A+IB/wPiAf8D4gH/A+IB/wPsAf8D/kH/
|
||||
A/4B/wPsAf8D4gH/A+IB/wPiAf8D4gH/A+kB/wPpAf8D4gH/A+IB/wPiAf8D4gH/A+wB/wP+Qf8D/gH/
|
||||
AcUB+gHJAf8BlAHwAZoB/wGDAeEBiQH/AYMB4QGJAf8BgQHgAYYB/wGSAeYBmAH/A+kB/wPiAf8D4gH/
|
||||
A+IB/wPiAf8D7AH/A/5B/wP+Af8BpAHYAaUB/wFwAbkBcgH/AWoBtAFrAf8BagG0AWsB/wFqAbQBawH/
|
||||
AX8BvAGBAf8D5gH/A9oB/wPaAf8D2gH/A9oB/wPhSf8D5QH/A9oB/wPaAf8D2gH/A9oB/wPjAf8D4gH/
|
||||
A9YB/wPZAf8D2QH/A9YB/wPcAf8D/kH/A/4B/wPiAf8D1gH/A9kB/wPZAf8D1gH/A+IB/wPiAf8D1gH/
|
||||
A9kB/wPZAf8D1gH/A9wB/wP+Qf8D/gH/AZoB+QGhAf8BXwHiAWkB/wFJAdIBUgH/AUsB2QFUAf8BQgHQ
|
||||
AUsB/wFsAdsBdAH/A+IB/wPWAf8D2QH/A9kB/wPWAf8D3AH/A/5B/wP+Af8BYgG6AWMB/wEfAZIBIQH/
|
||||
ARoBjAEcAf8BHAGQAR4B/wETAYgBFQH/AUkBpQFMAf8D7gH/A9oB/wPaAf8D2gH/A9oB/wPbAf8D/kX/
|
||||
A90B/wPaAf8D2gH/A9oB/wPaAf8D6wH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/lB/wP5Af8D3AH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPiAf8D6QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D+UH/Ae8B/AHwAf8BggHx
|
||||
AYoB/wFiAeIBbAH/AVUB2wFeAf8BVQHbAV4B/wFJAdIBUgH/AYwB5gGSAf8D6QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D+UH/AeAB8QHhAf8BQwGrAUUB/wEqAZoBLQH/ASIBkgEkAf8BIgGSASQB/wEaAYwBHAH/
|
||||
AXABuQFyAf8D+AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D9kH/A/kB/wPaAf8D2gH/A9oB/wPaAf8D2gH/
|
||||
A/YB/wPxAf8D2QH/A9kB/wPZAf8D2QH/A9YB/wPsAf8D/jn/A/4B/wPsAf8D1gH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D7AH/A/45/wP+Af8BxQH6AckB/wFnAewBcQH/
|
||||
AVoB3QFjAf8BWgHdAWMB/wFVAdsBXgH/AUsB2QFUAf8BsAHsAbQB/wPxAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9YB/wPsAf8D/jn/A/4B/wGrAdgBrAH/ASMBmQEmAf8BJwGWASkB/wEnAZYBKQH/AScBlgEpAf8BGgGM
|
||||
ARwB/wGZAcsBmQH/A/4B/wPdAf8D2gH/A9oB/wPaAf8D5gH/A/1B/wP+Af8D7AH/A9sB/wPaAf8D2gH/
|
||||
A9wB/wP+Af8D+QH/A9wB/wPZAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wP+Of8D/gH/A/kB/wPpAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A/kB/wP5Af8D3AH/A9kB/wPZAf8D2QH/A+IB/wH1AfQB9QH/A/45/wH5AfwB+QH/
|
||||
AeAB+AHiAf8BpQHyAaoB/wFaAd0BYwH/AVUB2wFeAf8BVQHbAV4B/wFaAd0BYwH/AeAB+AHiAf8D+QH/
|
||||
A9wB/wPZAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wP+Of8B+QH8AfkB/wHbAewB2wH/AX8BwQGBAf8BJwGW
|
||||
ASkB/wEfAZIBIQH/ASIBkgEkAf8BKgGaAS0B/wHbAewB2wX/A+oB/wPaAf8D4AH/A/kB/wP+Af8D6gH/
|
||||
A/A5/wPzAf8D5AH/A/0B/wP8Af8D5QH/A9oB/wPnBf8D/gH/A+IB/wPWAf8D4gH/A/EB/wP5Af8D4gH/
|
||||
A+kB/wP+Mf8D/gH/A+kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPWAf8D4gH/A/4B/wP+Af8D4gH/
|
||||
A9YB/wPiAf8D8QH/A/kB/wPiAf8D6QH/A/4x/wP+Af8BiQHIAYoB/wFZAawBWwH/AckB4gHJAf8B2AH6
|
||||
AdsB/wGDAesBiwH/AUsB2QFUAf8BgwHhAYkB/wP+Af8D/gH/A+IB/wPWAf8D4gH/A/EB/wP5Af8D4gH/
|
||||
A+kB/wP+Mf8D/gH/AYkByAGKAf8BWwGxAV0B/wHSAeoB0gH/AckB4gHJAf8BWwGxAV0B/wETAYgBFQH/
|
||||
AWEBsQFiAf8D/gX/A/wB/wPyAf8D/gH/A/MB/wPcAf8D2gH/A9oB/wP3Mf8D+QH/A9oB/wPaAf8D2gH/
|
||||
A+4B/wP+Af8D9gH/A/sF/wP+Af8B9QH0AfUB/wPsAf8D+QH/A+wB/wPcAf8D2QH/A9kB/wPsAf8D/in/
|
||||
A/4B/wPxAf8D2QH/A9kB/wPZAf8D6QH/A/kB/wPxAf8B9QH0AfUB/wP+Af8D/gH/AfUB9AH1Af8D7AH/
|
||||
A/kB/wPsAf8D3AH/A9kB/wPZAf8D7AH/A/4p/wP+Af8BoAHRAaEB/wEjAZkBJgH/ASIBkgEkAf8BKgGa
|
||||
AS0B/wF5AbwBewH/AdcB6gHYAf8BvAHxAcAB/wHQAfMB0wH/A/4B/wP+Af8B9QH0AfUB/wPsAf8D+QH/
|
||||
A+wB/wPcAf8D2QH/A9kB/wPsAf8D/in/A/4B/wGgAdEBoQH/ASMBmQEmAf8BIgGSASQB/wEqAZoBLQH/
|
||||
AXwBwgF9Af8B0gHqAdIB/wGgAdEBoQH/AcEB4gHCAf8D/gn/A/wB/wPeAf8D2gH/A9oB/wPaAf8D2gH/
|
||||
A9oB/wPyKf8D9gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2wH/A/oN/wP+Af8B9QH0AfUB/wPcAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A9kB/wPpAf8D/gH/A/4Z/wP+Af8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPxAf8D/gn/A/4B/wH1AfQB9QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+kB/wP+Af8D/hn/
|
||||
A/4B/wP+Af8BmQHLAZkB/wEcAZABHgH/ASoBmgEtAf8BLgGcATEB/wEqAZoBLQH/AR8BkgEhAf8BLgGc
|
||||
ATEB/wG4Ad0BuQH/A/4J/wP+Af8B9QH0AfUB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D/gH/
|
||||
A/4Z/wP+Af8D/gH/AZkBywGZAf8BHAGQAR4B/wEqAZoBLQH/AS4BnAExAf8BKgGaAS0B/wEfAZIBIQH/
|
||||
AS4BnAExAf8BuAHdAbkB/wP+Df8D/gH/A90B/wPaAf8D2gH/A9oB/wPaAf8D2gH/A/IB/wP6Af8D9Rn/
|
||||
A/YB/wP2Af8D+AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D3AH/A/0N/wP+Af8D+QH/A9wB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D1gH/A+kB/wPxAf8D7AH/A/kB/wP+Af8D/gH/A/4B/wH7Af4B/AH/AeAB8QHhAf8BmwHi
|
||||
AaAB/wGhAeoBpgH/AfQB8AH0Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D+QH/A/4J/wP+Af8D+QH/
|
||||
A9wB/wPZAf8D2QH/A9kB/wPZAf8D1gH/A+kB/wPxAf8D7AH/A/kB/wP+Af8D/gH/A/4B/wH5AfwB+QH/
|
||||
AeAB7wHgAf8BiQHCAYoB/wGWAckBmAH/AaoB0gGrAf8BIwGZASYB/wEuAZwBMQH/AS4BnAExAf8BKgGa
|
||||
AS0B/wEmAZgBKQH/ATEBnQEzAf8B0gHqAdIB/wP+Cf8D/gH/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/
|
||||
A9YB/wPpAf8D8QH/A+wB/wP5Af8D/gH/A/4B/wP+Af8B+QH8AfkB/wHgAe8B4AH/AYkBwgGKAf8BlgHJ
|
||||
AZgB/wGqAdIBqwH/ASMBmQEmAf8BLgGcATEB/wEuAZwBMQH/ASoBmgEtAf8BJgGYASkB/wExAZ0BMwH/
|
||||
AdIB6gHSAf8D/hH/A/kB/wPaAf8D2gH/A9oB/wPaAf8D4gH/A/4B/wPgAf8D2gH/A9sB/wPhAf8D+AH/
|
||||
A/oB/wPhAf8D3AH/A9oB/wPcAf8D/QH/A+kB/wPaAf8D2gH/A9oB/wPaAf8D9xX/A/4B/wPxAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/A+IB/wP5Af8D3AH/A9YB/wPZAf8D3AH/AfgB8gH4Af8BtAHsAbgB/wFTAc0BWwH/
|
||||
AUgBzQFRAf8BQgHQAUsB/wFaAeABYwH/AeAB+AHiAf8B6AHkAegB/wPZAf8D2QH/A9kB/wPZAf8D8QH/
|
||||
A/4R/wP+Af8D8QH/A9kB/wPZAf8D2QH/A9kB/wPiAf8D+QH/A9wB/wPWAf8D2QH/A9wB/wH4AfIB+AH/
|
||||
AaoB0gGrAf8BNAGVATYB/wEhAYwBIwH/ARMBiAEVAf8BKgGaAS0B/wHSAeoB0gH/AXIBvAF0Af8BJgGY
|
||||
ASkB/wEuAZwBMQH/ASoBmgEtAf8BJgGYASkB/wGrAdgBrAH/A/4R/wP+Af8D8QH/A9kB/wPZAf8D2QH/
|
||||
A9kB/wPiAf8D+QH/A9wB/wPWAf8D2QH/A9wB/wH4AfIB+AH/AaoB0gGrAf8BNAGVATYB/wEhAYwBIwH/
|
||||
ARMBiAEVAf8BKgGaAS0B/wHSAeoB0gH/AXIBvAF0Af8BJgGYASkB/wEuAZwBMQH/ASoBmgEtAf8BJgGY
|
||||
ASkB/wGrAdgBrAH/A/4Z/wP3Af8D2gH/A9oB/wPaAf8D+gH/A/MB/wPaAf8D2gH/A9oB/wPaAf8D8AH/
|
||||
A/QB/wPaAf8D2gH/A9oB/wPaAf8D6gH/A/0B/wPbAf8D2gH/A9oB/wP0Hf8D/gH/A/EB/wPZAf8D2QH/
|
||||
A9kB/wPxAf8D7AH/A9kB/wPZAf8D2QH/A9YB/wHxAewB8QH/Aa0B8gGyAf8BVAHgAV0B/wFqAegBdAH/
|
||||
AXEB6wF6Af8BagHoAXQB/wGYAfMBnwH/AfUB9AH1Af8B3AHaAdwB/wPZAf8D2QH/A+wB/wP+Gf8D/gH/
|
||||
A/EB/wPZAf8D2QH/A9kB/wPxAf8D7AH/A9kB/wPZAf8D2QH/A9YB/wHxAewB8QH/AZIByQGTAf8BFwGR
|
||||
ARoB/wEuAZwBMQH/ATIBowE0Af8BKgGaAS0B/wFyAbwBdAH/AdIB6gHSAf8BMgGjATQB/wEmAZgBKQH/
|
||||
ASoBmgEtAf8BoAHRAaEB/wP+Gf8D/gH/A/EB/wPZAf8D2QH/A9kB/wPxAf8D7AH/A9kB/wPZAf8D2QH/
|
||||
A9YB/wHxAewB8QH/AZIByQGTAf8BFwGRARoB/wEuAZwBMQH/ATIBowE0Af8BKgGaAS0B/wFyAbwBdAH/
|
||||
AdIB6gHSAf8BMgGjATQB/wEmAZgBKQH/ASoBmgEtAf8BoAHRAaEB/wP+If8D+gH/A9wB/wPmAf8D/QH/
|
||||
A9wB/wPaAf8D2gH/A9oB/wPaAf8D8AH/A/QB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A/sB/wPvAf8D2wH/
|
||||
A/gl/wP+Af8D8QH/A9wB/wPiAf8B9QH0AfUB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfEB7AHxAf8BwQH9
|
||||
AcUB/wF1AfEBfgH/AXoB8gGBAf8BeAHyAYEB/wFxAesBegH/AWoB6AF0Af8BygH5Ac0B/wHtAegB7QH/
|
||||
A9kB/wPxAf8D/iH/A/4B/wPxAf8D3AH/A+IB/wH1AfQB9QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8B8QHs
|
||||
AfEB/wGaAdIBmwH/ASkBoAEsAf8BNgGkATkB/wE2AaQBOQH/ATIBowE0Af8BKgGaAS0B/wG5AeABugH/
|
||||
AYkByAGKAf8BNgGkATkB/wGzAdsBtAH/A/4h/wP+Af8D8QH/A9wB/wPiAf8B9QH0AfUB/wPZAf8D2QH/
|
||||
A9kB/wPZAf8D2QH/AfEB7AHxAf8BmgHSAZsB/wEpAaABLAH/ATYBpAE5Af8BNgGkATkB/wEyAaMBNAH/
|
||||
ASoBmgEtAf8BuQHgAboB/wGJAcgBigH/ATYBpAE5Af8BswHbAbQB/wP+Kf8D/gH/A/4B/wPrAf8D2gH/
|
||||
A9oB/wPaAf8D2gH/A9oB/wPwAf8D9AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D4wH/A/4B/wP+Lf8D/gH/
|
||||
A/kB/wP5Af8D4gH/A9YB/wPZAf8D2QH/A9kB/wPZAf8B8QHsAfEB/wHBAf0BxQH/AXUB8QF+Af8BegHy
|
||||
AYEB/wF6AfIBgQH/AXEB6wF6Af8BagHoAXQB/wGJAfMBkAH/AfAB+QHxAf8D+QH/A/4p/wP+Af8D+QH/
|
||||
A/kB/wPiAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/
|
||||
ATYBpAE5Af8BMgGjATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/4p/wP+Af8D+QH/
|
||||
A/kB/wPiAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/
|
||||
ATYBpAE5Af8BMgGjATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/41/wP8Af8D6wH/
|
||||
A90B/wPaAf8D2gH/A9oB/wPwAf8D9AH/A9oB/wPaAf8D2gH/A90B/wPqAf8D+zn/A/4B/wP+Af8B9QH0
|
||||
AfUB/wPpAf8D3AH/A9kB/wPWAf8D1gH/AfEB7AHxAf8BvAH7AcEB/wF1AfEBfgH/AXUB8QF+Af8BdQHx
|
||||
AX4B/wGCAfEBigH/AaUB8gGqAf8B2AH6AdsB/wP+Af8D/jH/A/4B/wP+Af8B9QH0AfUB/wPpAf8D3AH/
|
||||
A9kB/wPWAf8D1gH/AfEB7AHxAf8BmgHSAZsB/wEjAZkBJgH/ASkBoAEsAf8BMgGjATQB/wFDAasBRQH/
|
||||
AXwBwgF9Af8BxwHlAcgB/wP+Af8D/jH/A/4B/wP+Af8B9QH0AfUB/wPpAf8D3AH/A9kB/wPWAf8D1gH/
|
||||
AfEB7AHxAf8BmgHSAZsB/wEjAZkBJgH/ASkBoAEsAf8BMgGjATQB/wFDAasBRQH/AXwBwgF9Af8BxwHl
|
||||
AcgB/wP+Af8D/kH/A/4B/wP5Af8D7wH/A+YB/wP1Af8D+AH/A+UB/wPvAf8D+QH/A/5J/wP+Af8D/gH/
|
||||
A/4B/wPxAf8D6QH/A+IB/wHxAewB8QH/Ac4B+gHRAf8BmgH5AaEB/wG0AfsBugH/AdEB+gHUAf8B8AH5
|
||||
AfEB/wP+Af8D/kH/A/4B/wP+Af8D/gH/A/EB/wPpAf8D4gH/AfgB8gH4Af8BswHbAbQB/wFpAbsBawH/
|
||||
AY4BzQGQAf8BuQHgAboB/wHoAfUB6AH/A/4B/wP+Qf8D/gH/A/4B/wP+Af8D8QH/A+kB/wPiAf8B+AHy
|
||||
AfgB/wGzAdsBtAH/AWkBuwFrAf8BjgHNAZAB/wG5AeABugH/AegB9QHoAf8D/gH/A/4h/wFCAU0BPgcA
|
||||
AT4DAAEoAwABeAMAAXgDAAEBAQABAQUAAYABBxYAA///AP8A/wD/AP8A/wD/AIgACw==
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,22 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("WebsitePanel.Import.Enterprise")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyProduct("WebsitePanel.Import.Enterprise")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("fe8ffa2e-6e29-41c5-a0b2-a553119c5edb")]
|
||||
|
210
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/Properties/Resources.Designer.cs
generated
Normal file
210
WebsitePanel/Sources/Tools/WebsitePanel.Import.Enterprise/Properties/Resources.Designer.cs
generated
Normal file
|
@ -0,0 +1,210 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.1
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace WebsitePanel.Import.Enterprise.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WebsitePanel.Import.Enterprise.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap BannerImage {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("BannerImage", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ConnectImage {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ConnectImage", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ConnectLogo {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ConnectLogo", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon FolderLargeIcon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("FolderLargeIcon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon FolderSmallIcon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("FolderSmallIcon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon OU {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("OU", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ProgressImage1 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ProgressImage1", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ProgressImage2 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ProgressImage2", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ProgressImage3 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ProgressImage3", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ProgressImage4 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ProgressImage4", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ProgressImage5 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ProgressImage5", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ProgressImage6 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ProgressImage6", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ProgressImage7 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ProgressImage7", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap ProgressImage8 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ProgressImage8", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap RefreshImage {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("RefreshImage", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon SpaceLargeIcon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("SpaceLargeIcon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon SpaceSmallIcon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("SpaceSmallIcon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon UserLargeIcon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("UserLargeIcon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon UsersLargeIcon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("UsersLargeIcon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon UserSmallIcon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("UserSmallIcon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon UsersSmallIcon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("UsersSmallIcon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue