Merge
This commit is contained in:
commit
bfd17a48c1
44 changed files with 1688 additions and 1387 deletions
|
@ -7634,3 +7634,116 @@ COMMIT TRAN
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
-- WebDAv portal
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'WebDavAccessTokens')
|
||||||
|
DROP TABLE WebDavAccessTokens
|
||||||
|
GO
|
||||||
|
CREATE TABLE WebDavAccessTokens
|
||||||
|
(
|
||||||
|
ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
|
||||||
|
FilePath NVARCHAR(MAX) NOT NULL,
|
||||||
|
AuthData NVARCHAR(MAX) NOT NULL,
|
||||||
|
AccessToken UNIQUEIDENTIFIER NOT NULL,
|
||||||
|
ExpirationDate DATETIME NOT NULL,
|
||||||
|
AccountID INT NOT NULL ,
|
||||||
|
ItemId INT NOT NULL
|
||||||
|
)
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER TABLE [dbo].[WebDavAccessTokens] WITH CHECK ADD CONSTRAINT [FK_WebDavAccessTokens_UserId] FOREIGN KEY([AccountID])
|
||||||
|
REFERENCES [dbo].[ExchangeAccounts] ([AccountID])
|
||||||
|
ON DELETE CASCADE
|
||||||
|
GO
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddWebDavAccessToken')
|
||||||
|
DROP PROCEDURE AddWebDavAccessToken
|
||||||
|
GO
|
||||||
|
CREATE PROCEDURE [dbo].[AddWebDavAccessToken]
|
||||||
|
(
|
||||||
|
@TokenID INT OUTPUT,
|
||||||
|
@FilePath NVARCHAR(MAX),
|
||||||
|
@AccessToken UNIQUEIDENTIFIER,
|
||||||
|
@AuthData NVARCHAR(MAX),
|
||||||
|
@ExpirationDate DATETIME,
|
||||||
|
@AccountID INT,
|
||||||
|
@ItemId INT
|
||||||
|
)
|
||||||
|
AS
|
||||||
|
INSERT INTO WebDavAccessTokens
|
||||||
|
(
|
||||||
|
FilePath,
|
||||||
|
AccessToken,
|
||||||
|
AuthData,
|
||||||
|
ExpirationDate,
|
||||||
|
AccountID ,
|
||||||
|
ItemId
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
@FilePath ,
|
||||||
|
@AccessToken ,
|
||||||
|
@AuthData,
|
||||||
|
@ExpirationDate ,
|
||||||
|
@AccountID,
|
||||||
|
@ItemId
|
||||||
|
)
|
||||||
|
|
||||||
|
SET @TokenID = SCOPE_IDENTITY()
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteExpiredWebDavAccessTokens')
|
||||||
|
DROP PROCEDURE DeleteExpiredWebDavAccessTokens
|
||||||
|
GO
|
||||||
|
CREATE PROCEDURE [dbo].[DeleteExpiredWebDavAccessTokens]
|
||||||
|
AS
|
||||||
|
DELETE FROM WebDavAccessTokens
|
||||||
|
WHERE ExpirationDate < getdate()
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetWebDavAccessTokenById')
|
||||||
|
DROP PROCEDURE GetWebDavAccessTokenById
|
||||||
|
GO
|
||||||
|
CREATE PROCEDURE [dbo].[GetWebDavAccessTokenById]
|
||||||
|
(
|
||||||
|
@Id int
|
||||||
|
)
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
ID ,
|
||||||
|
FilePath ,
|
||||||
|
AuthData ,
|
||||||
|
AccessToken,
|
||||||
|
ExpirationDate,
|
||||||
|
AccountID,
|
||||||
|
ItemId
|
||||||
|
FROM WebDavAccessTokens
|
||||||
|
Where ID = @Id AND ExpirationDate > getdate()
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetWebDavAccessTokenByAccessToken')
|
||||||
|
DROP PROCEDURE GetWebDavAccessTokenByAccessToken
|
||||||
|
GO
|
||||||
|
CREATE PROCEDURE [dbo].[GetWebDavAccessTokenByAccessToken]
|
||||||
|
(
|
||||||
|
@AccessToken UNIQUEIDENTIFIER
|
||||||
|
)
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
ID ,
|
||||||
|
FilePath ,
|
||||||
|
AuthData ,
|
||||||
|
AccessToken,
|
||||||
|
ExpirationDate,
|
||||||
|
AccountID,
|
||||||
|
ItemId
|
||||||
|
FROM WebDavAccessTokens
|
||||||
|
Where AccessToken = @AccessToken AND ExpirationDate > getdate()
|
||||||
|
GO
|
|
@ -0,0 +1,15 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace WebsitePanel.EnterpriseServer.Base.HostedSolution
|
||||||
|
{
|
||||||
|
public class WebDavAccessToken
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string FilePath { get; set; }
|
||||||
|
public string AuthData { get; set; }
|
||||||
|
public Guid AccessToken { get; set; }
|
||||||
|
public DateTime ExpirationDate { get; set; }
|
||||||
|
public int AccountId { get; set; }
|
||||||
|
public int ItemId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -120,6 +120,7 @@
|
||||||
<Compile Include="HostedSolution\ServiceLevel.cs" />
|
<Compile Include="HostedSolution\ServiceLevel.cs" />
|
||||||
<Compile Include="HostedSolution\CRMLycenseTypes.cs" />
|
<Compile Include="HostedSolution\CRMLycenseTypes.cs" />
|
||||||
<Compile Include="HostedSolution\ESPermission.cs" />
|
<Compile Include="HostedSolution\ESPermission.cs" />
|
||||||
|
<Compile Include="HostedSolution\WebDavAccessToken.cs" />
|
||||||
<Compile Include="Log\LogRecord.cs" />
|
<Compile Include="Log\LogRecord.cs" />
|
||||||
<Compile Include="Packages\ServiceLevelQuotaValueInfo.cs" />
|
<Compile Include="Packages\ServiceLevelQuotaValueInfo.cs" />
|
||||||
<Compile Include="Packages\HostingPlanContext.cs" />
|
<Compile Include="Packages\HostingPlanContext.cs" />
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -4330,6 +4330,57 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
#region Enterprise Storage
|
#region Enterprise Storage
|
||||||
|
|
||||||
|
public static int AddWebDavAccessToken(Base.HostedSolution.WebDavAccessToken accessToken)
|
||||||
|
{
|
||||||
|
SqlParameter prmId = new SqlParameter("@TokenID", SqlDbType.Int);
|
||||||
|
prmId.Direction = ParameterDirection.Output;
|
||||||
|
|
||||||
|
SqlHelper.ExecuteNonQuery(
|
||||||
|
ConnectionString,
|
||||||
|
CommandType.StoredProcedure,
|
||||||
|
"AddWebDavAccessToken",
|
||||||
|
prmId,
|
||||||
|
new SqlParameter("@AccessToken", accessToken.AccessToken),
|
||||||
|
new SqlParameter("@FilePath", accessToken.FilePath),
|
||||||
|
new SqlParameter("@AuthData", accessToken.AuthData),
|
||||||
|
new SqlParameter("@ExpirationDate", accessToken.ExpirationDate),
|
||||||
|
new SqlParameter("@AccountID", accessToken.AccountId),
|
||||||
|
new SqlParameter("@ItemId", accessToken.ItemId)
|
||||||
|
);
|
||||||
|
|
||||||
|
// read identity
|
||||||
|
return Convert.ToInt32(prmId.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DeleteExpiredWebDavAccessTokens()
|
||||||
|
{
|
||||||
|
SqlHelper.ExecuteNonQuery(
|
||||||
|
ConnectionString,
|
||||||
|
CommandType.StoredProcedure,
|
||||||
|
"DeleteExpiredWebDavAccessTokens"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IDataReader GetWebDavAccessTokenById(int id)
|
||||||
|
{
|
||||||
|
return SqlHelper.ExecuteReader(
|
||||||
|
ConnectionString,
|
||||||
|
CommandType.StoredProcedure,
|
||||||
|
"GetWebDavAccessTokenById",
|
||||||
|
new SqlParameter("@Id", id)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IDataReader GetWebDavAccessTokenByAccessToken(Guid accessToken)
|
||||||
|
{
|
||||||
|
return SqlHelper.ExecuteReader(
|
||||||
|
ConnectionString,
|
||||||
|
CommandType.StoredProcedure,
|
||||||
|
"GetWebDavAccessTokenByAccessToken",
|
||||||
|
new SqlParameter("@AccessToken", accessToken)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public static int AddEntepriseFolder(int itemId, string folderName, int folderQuota, string locationDrive, string homeFolder, string domain)
|
public static int AddEntepriseFolder(int itemId, string folderName, int folderQuota, string locationDrive, string homeFolder, string domain)
|
||||||
{
|
{
|
||||||
SqlParameter prmId = new SqlParameter("@FolderID", SqlDbType.Int);
|
SqlParameter prmId = new SqlParameter("@FolderID", SqlDbType.Int);
|
||||||
|
|
|
@ -152,6 +152,26 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
StartESBackgroundTaskInternal("SET_ENTERPRISE_FOLDER_SETTINGS", itemId, folder, permissions, directoyBrowsingEnabled, quota, quotaType);
|
StartESBackgroundTaskInternal("SET_ENTERPRISE_FOLDER_SETTINGS", itemId, folder, permissions, directoyBrowsingEnabled, quota, quotaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int AddWebDavAccessToken(WebDavAccessToken accessToken)
|
||||||
|
{
|
||||||
|
return DataProvider.AddWebDavAccessToken(accessToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DeleteExpiredWebDavAccessTokens()
|
||||||
|
{
|
||||||
|
DataProvider.DeleteExpiredWebDavAccessTokens();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static WebDavAccessToken GetWebDavAccessTokenById(int id)
|
||||||
|
{
|
||||||
|
return ObjectUtils.FillObjectFromDataReader<WebDavAccessToken>(DataProvider.GetWebDavAccessTokenById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static WebDavAccessToken GetWebDavAccessTokenByAccessToken(Guid accessToken)
|
||||||
|
{
|
||||||
|
return ObjectUtils.FillObjectFromDataReader<WebDavAccessToken>(DataProvider.GetWebDavAccessTokenByAccessToken(accessToken));
|
||||||
|
}
|
||||||
|
|
||||||
#region Directory Browsing
|
#region Directory Browsing
|
||||||
|
|
||||||
public static bool GetDirectoryBrowseEnabled(int itemId, string siteId)
|
public static bool GetDirectoryBrowseEnabled(int itemId, string siteId)
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
<!-- Connection strings -->
|
<!-- Connection strings -->
|
||||||
<connectionStrings>
|
<connectionStrings>
|
||||||
<!--<add name="EnterpriseServer" connectionString="Server=(local)\SQLExpress;Database=WebsitePanel;uid=sa;pwd=Password12" providerName="System.Data.SqlClient"/>-->
|
<!--<add name="EnterpriseServer" connectionString="Server=(local)\SQLExpress;Database=WebsitePanel;uid=sa;pwd=Password12" providerName="System.Data.SqlClient"/>-->
|
||||||
<add name="EnterpriseServer" connectionString="Data Source=CHERNETSI\BENQMSSERVER;Initial Catalog=WebsitePanel;uid=sa;pwd=Password12;Integrated Security=True;" providerName="System.Data.SqlClient" />
|
<add name="EnterpriseServer" connectionString="server=IOGAN_HOME\ALEX;database=WebsitePanel3;uid=WebsitePanel3;pwd=7j3j0daqj4dqpt22x8eb;" providerName="System.Data.SqlClient" />
|
||||||
</connectionStrings>
|
</connectionStrings>
|
||||||
<appSettings>
|
<appSettings>
|
||||||
<!-- Encryption util settings -->
|
<!-- Encryption util settings -->
|
||||||
<add key="WebsitePanel.CryptoKey" value="1234567890"/>
|
<add key="WebsitePanel.CryptoKey" value="31alhk2jnarmrmt5ecg3" />
|
||||||
<!-- A1D4KDHUE83NKHddF -->
|
<!-- A1D4KDHUE83NKHddF -->
|
||||||
<add key="WebsitePanel.EncryptionEnabled" value="true" />
|
<add key="WebsitePanel.EncryptionEnabled" value="true" />
|
||||||
<!-- Web Applications -->
|
<!-- Web Applications -->
|
||||||
|
|
|
@ -56,6 +56,29 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
[ToolboxItem(false)]
|
[ToolboxItem(false)]
|
||||||
public class esEnterpriseStorage : WebService
|
public class esEnterpriseStorage : WebService
|
||||||
{
|
{
|
||||||
|
[WebMethod]
|
||||||
|
public int AddWebDavAccessToken(WebDavAccessToken accessToken)
|
||||||
|
{
|
||||||
|
return EnterpriseStorageController.AddWebDavAccessToken(accessToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
[WebMethod]
|
||||||
|
public void DeleteExpiredWebDavAccessTokens()
|
||||||
|
{
|
||||||
|
EnterpriseStorageController.DeleteExpiredWebDavAccessTokens();
|
||||||
|
}
|
||||||
|
|
||||||
|
[WebMethod]
|
||||||
|
public WebDavAccessToken GetWebDavAccessTokenById(int id)
|
||||||
|
{
|
||||||
|
return EnterpriseStorageController.GetWebDavAccessTokenById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
[WebMethod]
|
||||||
|
public WebDavAccessToken GetWebDavAccessTokenByAccessToken(Guid accessToken)
|
||||||
|
{
|
||||||
|
return EnterpriseStorageController.GetWebDavAccessTokenByAccessToken(accessToken);
|
||||||
|
}
|
||||||
|
|
||||||
[WebMethod]
|
[WebMethod]
|
||||||
public bool CheckFileServicesInstallation(int serviceId)
|
public bool CheckFileServicesInstallation(int serviceId)
|
||||||
|
|
|
@ -5,17 +5,6 @@
|
||||||
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3"/>
|
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3"/>
|
||||||
<section name="websitepanel.server" type="WebsitePanel.Server.ServerConfiguration, WebsitePanel.Server"/>
|
<section name="websitepanel.server" type="WebsitePanel.Server.ServerConfiguration, WebsitePanel.Server"/>
|
||||||
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings,Microsoft.Practices.EnterpriseLibrary.Caching"/>
|
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings,Microsoft.Practices.EnterpriseLibrary.Caching"/>
|
||||||
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
|
||||||
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
|
||||||
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
|
||||||
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
|
|
||||||
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
|
|
||||||
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
|
|
||||||
<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
|
|
||||||
</sectionGroup>
|
|
||||||
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
|
|
||||||
</sectionGroup>
|
|
||||||
</sectionGroup>
|
|
||||||
</configSections>
|
</configSections>
|
||||||
<appSettings>
|
<appSettings>
|
||||||
<add key="WebsitePanel.HyperV.UseDiskPartClearReadOnlyFlag" value="false"/>
|
<add key="WebsitePanel.HyperV.UseDiskPartClearReadOnlyFlag" value="false"/>
|
||||||
|
@ -55,7 +44,7 @@
|
||||||
<!-- Perform security check -->
|
<!-- Perform security check -->
|
||||||
<enabled value="true"/>
|
<enabled value="true"/>
|
||||||
<!-- Server password -->
|
<!-- Server password -->
|
||||||
<password value="+uxnDOdf55yuH6iZYXgYAxsfIBw="/>
|
<password value="FEhQyToJwdSRkkaytoTUGQRU5k4="/>
|
||||||
</security>
|
</security>
|
||||||
</websitepanel.server>
|
</websitepanel.server>
|
||||||
<system.web>
|
<system.web>
|
||||||
|
@ -74,29 +63,8 @@
|
||||||
</protocols>
|
</protocols>
|
||||||
<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3"/>
|
<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3"/>
|
||||||
</webServices>
|
</webServices>
|
||||||
<compilation debug="true">
|
<compilation debug="true" targetFramework="4.0"/>
|
||||||
<assemblies>
|
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
|
||||||
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
|
|
||||||
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
|
|
||||||
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
|
|
||||||
</assemblies>
|
|
||||||
</compilation>
|
|
||||||
<pages>
|
|
||||||
<controls>
|
|
||||||
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
</controls>
|
|
||||||
</pages>
|
|
||||||
<httpHandlers>
|
|
||||||
<remove verb="*" path="*.asmx"/>
|
|
||||||
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
<add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
</httpHandlers>
|
|
||||||
<httpModules>
|
|
||||||
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
</httpModules>
|
|
||||||
</system.web>
|
</system.web>
|
||||||
<!-- WSE 3.0 settings -->
|
<!-- WSE 3.0 settings -->
|
||||||
<microsoft.web.services3>
|
<microsoft.web.services3>
|
||||||
|
@ -137,41 +105,7 @@
|
||||||
</wsHttpBinding>
|
</wsHttpBinding>
|
||||||
</bindings>
|
</bindings>
|
||||||
</system.serviceModel>
|
</system.serviceModel>
|
||||||
<system.codedom>
|
|
||||||
<compilers>
|
|
||||||
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
|
|
||||||
<providerOption name="CompilerVersion" value="v3.5"/>
|
|
||||||
<providerOption name="WarnAsError" value="false"/>
|
|
||||||
</compiler>
|
|
||||||
</compilers>
|
|
||||||
</system.codedom>
|
|
||||||
<system.webServer>
|
|
||||||
<validation validateIntegratedModeConfiguration="false"/>
|
|
||||||
<modules>
|
|
||||||
<remove name="ScriptModule"/>
|
|
||||||
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
</modules>
|
|
||||||
<handlers>
|
|
||||||
<remove name="WebServiceHandlerFactory-Integrated"/>
|
|
||||||
<remove name="ScriptHandlerFactory"/>
|
|
||||||
<remove name="ScriptHandlerFactoryAppServices"/>
|
|
||||||
<remove name="ScriptResource"/>
|
|
||||||
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
<add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
|
|
||||||
</handlers>
|
|
||||||
</system.webServer>
|
|
||||||
<runtime>
|
<runtime>
|
||||||
<assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
|
|
||||||
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
|
|
||||||
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
</assemblyBinding>
|
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<probing privatePath="bin/Crm2011;bin/Crm2013;bin/Exchange2013;bin/Sharepoint2013;bin/Lync2013;bin/Lync2013HP;bin/Dns2012;bin/IceWarp;bin/IIs80"/>
|
<probing privatePath="bin/Crm2011;bin/Crm2013;bin/Exchange2013;bin/Sharepoint2013;bin/Lync2013;bin/Lync2013HP;bin/Dns2012;bin/IceWarp;bin/IIs80"/>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
|
|
|
@ -17,9 +17,9 @@
|
||||||
<OldToolsVersion>4.0</OldToolsVersion>
|
<OldToolsVersion>4.0</OldToolsVersion>
|
||||||
<UpgradeBackupLocation>
|
<UpgradeBackupLocation>
|
||||||
</UpgradeBackupLocation>
|
</UpgradeBackupLocation>
|
||||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
<UseIISExpress>false</UseIISExpress>
|
<UseIISExpress>true</UseIISExpress>
|
||||||
<IISExpressSSLPort />
|
<IISExpressSSLPort />
|
||||||
<IISExpressAnonymousAuthentication />
|
<IISExpressAnonymousAuthentication />
|
||||||
<IISExpressWindowsAuthentication />
|
<IISExpressWindowsAuthentication />
|
||||||
|
@ -79,6 +79,7 @@
|
||||||
<Reference Include="System.ServiceModel" />
|
<Reference Include="System.ServiceModel" />
|
||||||
<Reference Include="System.ServiceProcess" />
|
<Reference Include="System.ServiceProcess" />
|
||||||
<Reference Include="System.Web" />
|
<Reference Include="System.Web" />
|
||||||
|
<Reference Include="System.Web.ApplicationServices" />
|
||||||
<Reference Include="System.Web.DynamicData" />
|
<Reference Include="System.Web.DynamicData" />
|
||||||
<Reference Include="System.Web.Entity" />
|
<Reference Include="System.Web.Entity" />
|
||||||
<Reference Include="System.Web.Extensions" />
|
<Reference Include="System.Web.Extensions" />
|
||||||
|
@ -271,12 +272,11 @@
|
||||||
<VisualStudio>
|
<VisualStudio>
|
||||||
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
|
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
|
||||||
<WebProjectProperties>
|
<WebProjectProperties>
|
||||||
<UseIIS>False</UseIIS>
|
<UseIIS>True</UseIIS>
|
||||||
<AutoAssignPort>False</AutoAssignPort>
|
<AutoAssignPort>False</AutoAssignPort>
|
||||||
<DevelopmentServerPort>9004</DevelopmentServerPort>
|
<DevelopmentServerPort>9004</DevelopmentServerPort>
|
||||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
||||||
<IISUrl>
|
<IISUrl>http://localhost:9003/</IISUrl>
|
||||||
</IISUrl>
|
|
||||||
<NTLMAuthentication>False</NTLMAuthentication>
|
<NTLMAuthentication>False</NTLMAuthentication>
|
||||||
<UseCustomServer>False</UseCustomServer>
|
<UseCustomServer>False</UseCustomServer>
|
||||||
<CustomServerUrl>
|
<CustomServerUrl>
|
||||||
|
|
|
@ -6,6 +6,7 @@ namespace WebsitePanel.WebDavPortal.WebConfigSections
|
||||||
public class WebDavExplorerConfigurationSettingsSection : ConfigurationSection
|
public class WebDavExplorerConfigurationSettingsSection : ConfigurationSection
|
||||||
{
|
{
|
||||||
private const string UserDomainKey = "userDomain";
|
private const string UserDomainKey = "userDomain";
|
||||||
|
private const string WebdavRootKey = "webdavRoot";
|
||||||
private const string AuthTimeoutCookieNameKey = "authTimeoutCookieName";
|
private const string AuthTimeoutCookieNameKey = "authTimeoutCookieName";
|
||||||
private const string AppName = "applicationName";
|
private const string AppName = "applicationName";
|
||||||
private const string WebsitePanelConstantUserKey = "websitePanelConstantUser";
|
private const string WebsitePanelConstantUserKey = "websitePanelConstantUser";
|
||||||
|
@ -25,6 +26,13 @@ namespace WebsitePanel.WebDavPortal.WebConfigSections
|
||||||
set { this[AuthTimeoutCookieNameKey] = value; }
|
set { this[AuthTimeoutCookieNameKey] = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ConfigurationProperty(WebdavRootKey, IsRequired = true)]
|
||||||
|
public WebdavRootElement WebdavRoot
|
||||||
|
{
|
||||||
|
get { return (WebdavRootElement)this[WebdavRootKey]; }
|
||||||
|
set { this[WebdavRootKey] = value; }
|
||||||
|
}
|
||||||
|
|
||||||
[ConfigurationProperty(UserDomainKey, IsRequired = true)]
|
[ConfigurationProperty(UserDomainKey, IsRequired = true)]
|
||||||
public UserDomainElement UserDomain
|
public UserDomainElement UserDomain
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Configuration;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace WebsitePanel.WebDav.Core.Config.WebConfigSections
|
||||||
|
{
|
||||||
|
public class WebdavRootElement : ConfigurationElement
|
||||||
|
{
|
||||||
|
private const string ValueKey = "value";
|
||||||
|
|
||||||
|
[ConfigurationProperty(ValueKey, IsKey = true, IsRequired = true)]
|
||||||
|
public string Value
|
||||||
|
{
|
||||||
|
get { return (string)this[ValueKey]; }
|
||||||
|
set { this[ValueKey] = value; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,6 +30,11 @@ namespace WebsitePanel.WebDav.Core.Config
|
||||||
get { return _configSection.UserDomain.Value; }
|
get { return _configSection.UserDomain.Value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string WebdavRoot
|
||||||
|
{
|
||||||
|
get { return _configSection.WebdavRoot.Value; }
|
||||||
|
}
|
||||||
|
|
||||||
public string ApplicationName
|
public string ApplicationName
|
||||||
{
|
{
|
||||||
get { return _configSection.ApplicationName.Value; }
|
get { return _configSection.ApplicationName.Value; }
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
using System;
|
||||||
|
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
||||||
|
using WebsitePanel.WebDav.Core.Security.Authentication.Principals;
|
||||||
|
|
||||||
|
namespace WebsitePanel.WebDav.Core.Interfaces.Managers
|
||||||
|
{
|
||||||
|
public interface IAccessTokenManager
|
||||||
|
{
|
||||||
|
WebDavAccessToken CreateToken(WspPrincipal principal, string filePath);
|
||||||
|
WebDavAccessToken GetToken(int id);
|
||||||
|
WebDavAccessToken GetToken(Guid guid);
|
||||||
|
void ClearExpiredTokens();
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,15 +5,10 @@ namespace WebsitePanel.WebDav.Core.Interfaces.Managers
|
||||||
{
|
{
|
||||||
public interface IWebDavManager
|
public interface IWebDavManager
|
||||||
{
|
{
|
||||||
string RootPath { get; }
|
IEnumerable<IHierarchyItem> OpenFolder(string path);
|
||||||
void OpenFolder(string pathPart);
|
bool IsFile(string path);
|
||||||
IEnumerable<IHierarchyItem> GetChildren();
|
byte[] GetFileBytes(string path);
|
||||||
bool IsFile(string fileName);
|
IResource GetResource(string path);
|
||||||
byte[] GetFileBytes(string fileName);
|
string GetFileUrl(string path);
|
||||||
IResource GetResource( string fileName);
|
|
||||||
string GetFileUrl(string fileName);
|
|
||||||
|
|
||||||
string CreateFileId(string path);
|
|
||||||
string FilePathFromId(string id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,6 +4,7 @@ using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Web.Security;
|
using System.Web.Security;
|
||||||
|
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
||||||
using WebsitePanel.WebDav.Core.Security.Authentication.Principals;
|
using WebsitePanel.WebDav.Core.Security.Authentication.Principals;
|
||||||
|
|
||||||
namespace WebsitePanel.WebDav.Core.Interfaces.Security
|
namespace WebsitePanel.WebDav.Core.Interfaces.Security
|
||||||
|
@ -11,9 +12,7 @@ namespace WebsitePanel.WebDav.Core.Interfaces.Security
|
||||||
public interface IAuthenticationService
|
public interface IAuthenticationService
|
||||||
{
|
{
|
||||||
WspPrincipal LogIn(string login, string password);
|
WspPrincipal LogIn(string login, string password);
|
||||||
WspPrincipal LogIn(string accessToken);
|
|
||||||
void CreateAuthenticationTicket(WspPrincipal principal);
|
void CreateAuthenticationTicket(WspPrincipal principal);
|
||||||
string CreateAccessToken(WspPrincipal principal);
|
|
||||||
void LogOut();
|
void LogOut();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
using System;
|
||||||
|
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
||||||
|
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
||||||
|
using WebsitePanel.WebDav.Core.Security.Authentication.Principals;
|
||||||
|
using WebsitePanel.WebDav.Core.Wsp.Framework;
|
||||||
|
|
||||||
|
namespace WebsitePanel.WebDav.Core.Managers
|
||||||
|
{
|
||||||
|
public class AccessTokenManager : IAccessTokenManager
|
||||||
|
{
|
||||||
|
public WebDavAccessToken CreateToken(WspPrincipal principal, string filePath)
|
||||||
|
{
|
||||||
|
var token = new WebDavAccessToken();
|
||||||
|
|
||||||
|
token.AccessToken = Guid.NewGuid();
|
||||||
|
token.AccountId = principal.AccountId;
|
||||||
|
token.ItemId = principal.ItemId;
|
||||||
|
token.AuthData = principal.EncryptedPassword;
|
||||||
|
token.ExpirationDate = DateTime.Now.AddHours(3);
|
||||||
|
token.FilePath = filePath;
|
||||||
|
|
||||||
|
token.Id = WSP.Services.EnterpriseStorage.AddWebDavAccessToken(token);
|
||||||
|
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WebDavAccessToken GetToken(int id)
|
||||||
|
{
|
||||||
|
return WSP.Services.EnterpriseStorage.GetWebDavAccessTokenById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WebDavAccessToken GetToken(Guid guid)
|
||||||
|
{
|
||||||
|
return WSP.Services.EnterpriseStorage.GetWebDavAccessTokenByAccessToken(guid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearExpiredTokens()
|
||||||
|
{
|
||||||
|
WSP.Services.EnterpriseStorage.DeleteExpiredWebDavAccessTokens();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,16 +21,8 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
|
|
||||||
private readonly ILog Log;
|
private readonly ILog Log;
|
||||||
|
|
||||||
private IFolder _currentFolder;
|
|
||||||
private bool _isRoot = true;
|
private bool _isRoot = true;
|
||||||
|
private IFolder _currentFolder;
|
||||||
private Lazy<IList<SystemFile>> _rootFolders;
|
|
||||||
private Lazy<string> _webDavRootPath;
|
|
||||||
|
|
||||||
public string RootPath
|
|
||||||
{
|
|
||||||
get { return _webDavRootPath.Value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public WebDavManager(ICryptography cryptography)
|
public WebDavManager(ICryptography cryptography)
|
||||||
{
|
{
|
||||||
|
@ -38,47 +30,27 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
Log = LogManager.GetLogger(this.GetType());
|
Log = LogManager.GetLogger(this.GetType());
|
||||||
|
|
||||||
_webDavSession = new WebDavSession();
|
_webDavSession = new WebDavSession();
|
||||||
|
|
||||||
_rootFolders = new Lazy<IList<SystemFile>>(ConnectToWebDavServer);
|
|
||||||
_webDavRootPath = new Lazy<string>(() =>
|
|
||||||
{
|
|
||||||
if (_rootFolders.Value.Any())
|
|
||||||
{
|
|
||||||
var folder = _rootFolders.Value.First();
|
|
||||||
var uri = new Uri(folder.Url);
|
|
||||||
return uri.Scheme + "://" + uri.Host + uri.Segments[0] + uri.Segments[1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return string.Empty;
|
public IEnumerable<IHierarchyItem> OpenFolder(string pathPart)
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OpenFolder(string pathPart)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(pathPart))
|
|
||||||
{
|
|
||||||
_isRoot = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_isRoot = false;
|
|
||||||
|
|
||||||
_webDavSession.Credentials = new NetworkCredential(WspContext.User.Login, _cryptography.Decrypt(WspContext.User.EncryptedPassword), WebDavAppConfigManager.Instance.UserDomain);
|
|
||||||
|
|
||||||
_currentFolder = _webDavSession.OpenFolder(_webDavRootPath.Value + pathPart);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<IHierarchyItem> GetChildren()
|
|
||||||
{
|
{
|
||||||
IHierarchyItem[] children;
|
IHierarchyItem[] children;
|
||||||
|
|
||||||
if (_isRoot)
|
if (string.IsNullOrWhiteSpace(pathPart))
|
||||||
{
|
{
|
||||||
children = _rootFolders.Value.Select(x => new WebDavHierarchyItem {Href = new Uri(x.Url), ItemType = ItemType.Folder}).ToArray();
|
children = ConnectToWebDavServer().Select(x => new WebDavHierarchyItem { Href = new Uri(x.Url), ItemType = ItemType.Folder }).ToArray();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (_currentFolder == null || _currentFolder.Path.ToString() != pathPart)
|
||||||
|
{
|
||||||
|
_webDavSession.Credentials = new NetworkCredential(WspContext.User.Login,
|
||||||
|
_cryptography.Decrypt(WspContext.User.EncryptedPassword),
|
||||||
|
WebDavAppConfigManager.Instance.UserDomain);
|
||||||
|
|
||||||
|
_currentFolder = _webDavSession.OpenFolder(string.Format("{0}{1}/{2}", WebDavAppConfigManager.Instance.WebdavRoot, WspContext.User.OrganizationId, pathPart));
|
||||||
|
}
|
||||||
|
|
||||||
children = _currentFolder.GetChildren();
|
children = _currentFolder.GetChildren();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,30 +60,46 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
return sortedChildren;
|
return sortedChildren;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsFile(string fileName)
|
public bool IsFile(string path)
|
||||||
|
{
|
||||||
|
string folder = GetFileFolder(path);
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(folder))
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(fileName) | _currentFolder == null)
|
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var resourceName = GetResourceName(path);
|
||||||
|
|
||||||
|
OpenFolder(folder);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IResource resource = _currentFolder.GetResource(fileName);
|
IResource resource = _currentFolder.GetResource(resourceName);
|
||||||
//Stream stream = resource.GetReadStream();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException)
|
catch (Exception e){}
|
||||||
{
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] GetFileBytes(string fileName)
|
|
||||||
|
public byte[] GetFileBytes(string path)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IResource resource = _currentFolder.GetResource(fileName);
|
string folder = GetFileFolder(path);
|
||||||
|
|
||||||
|
var resourceName = GetResourceName(path);
|
||||||
|
|
||||||
|
OpenFolder(folder);
|
||||||
|
|
||||||
|
IResource resource = _currentFolder.GetResource(resourceName);
|
||||||
|
|
||||||
Stream stream = resource.GetReadStream();
|
Stream stream = resource.GetReadStream();
|
||||||
byte[] fileBytes = ReadFully(stream);
|
byte[] fileBytes = ReadFully(stream);
|
||||||
|
|
||||||
return fileBytes;
|
return fileBytes;
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException exception)
|
catch (InvalidOperationException exception)
|
||||||
|
@ -120,12 +108,17 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IResource GetResource(string fileName)
|
public IResource GetResource(string path)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IResource resource = _currentFolder.GetResource(fileName);
|
string folder = GetFileFolder(path);
|
||||||
return resource;
|
|
||||||
|
var resourceName = GetResourceName(path);
|
||||||
|
|
||||||
|
OpenFolder(folder);
|
||||||
|
|
||||||
|
return _currentFolder.GetResource(resourceName);
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException exception)
|
catch (InvalidOperationException exception)
|
||||||
{
|
{
|
||||||
|
@ -133,11 +126,17 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetFileUrl(string fileName)
|
public string GetFileUrl(string path)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IResource resource = _currentFolder.GetResource(fileName);
|
string folder = GetFileFolder(path);
|
||||||
|
|
||||||
|
var resourceName = GetResourceName(path);
|
||||||
|
|
||||||
|
OpenFolder(folder);
|
||||||
|
|
||||||
|
IResource resource = _currentFolder.GetResource(resourceName);
|
||||||
return resource.Href.ToString();
|
return resource.Href.ToString();
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException exception)
|
catch (InvalidOperationException exception)
|
||||||
|
@ -171,6 +170,8 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
return rootFolders;
|
return rootFolders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Helpers
|
||||||
|
|
||||||
private byte[] ReadFully(Stream input)
|
private byte[] ReadFully(Stream input)
|
||||||
{
|
{
|
||||||
var buffer = new byte[16 * 1024];
|
var buffer = new byte[16 * 1024];
|
||||||
|
@ -183,15 +184,34 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetFileFolder(string path)
|
||||||
public string CreateFileId(string path)
|
|
||||||
{
|
{
|
||||||
return _cryptography.Encrypt(path).Replace("/", "AAAAA");
|
path = path.TrimEnd('/');
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(path) || !path.Contains('/'))
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string FilePathFromId(string id)
|
string fileName = path.Split('/').Last();
|
||||||
|
int index = path.LastIndexOf(fileName, StringComparison.InvariantCultureIgnoreCase);
|
||||||
|
string folder = string.IsNullOrEmpty(fileName)? path : path.Remove(index - 1, fileName.Length + 1);
|
||||||
|
|
||||||
|
return folder;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetResourceName(string path)
|
||||||
{
|
{
|
||||||
return _cryptography.Decrypt(id.Replace("AAAAA", "/"));
|
path = path.TrimEnd('/');
|
||||||
}
|
|
||||||
|
if (string.IsNullOrEmpty(path) || !path.Contains('/'))
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
return path.Split('/').Last(); ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -23,13 +23,7 @@ namespace WebsitePanel.WebDav.Core.Owa
|
||||||
|
|
||||||
public CheckFileInfo GetCheckFileInfo(string path)
|
public CheckFileInfo GetCheckFileInfo(string path)
|
||||||
{
|
{
|
||||||
string fileName = path.Split('/').Last();
|
var resource = _webDavManager.GetResource(path);
|
||||||
int index = path.LastIndexOf(fileName, StringComparison.InvariantCultureIgnoreCase);
|
|
||||||
string folder = path.Remove(index - 1, fileName.Length + 1);
|
|
||||||
|
|
||||||
_webDavManager.OpenFolder(folder);
|
|
||||||
|
|
||||||
var resource = _webDavManager.GetResource(fileName);
|
|
||||||
|
|
||||||
var cFileInfo = new CheckFileInfo
|
var cFileInfo = new CheckFileInfo
|
||||||
{
|
{
|
||||||
|
@ -44,13 +38,7 @@ namespace WebsitePanel.WebDav.Core.Owa
|
||||||
|
|
||||||
public FileResult GetFile(string path)
|
public FileResult GetFile(string path)
|
||||||
{
|
{
|
||||||
string fileName = path.Split('/').Last();
|
var fileBytes = _webDavManager.GetFileBytes(path);
|
||||||
int index = path.LastIndexOf(fileName, StringComparison.InvariantCultureIgnoreCase);
|
|
||||||
string folder = path.Remove(index - 1, fileName.Length + 1);
|
|
||||||
|
|
||||||
_webDavManager.OpenFolder(folder);
|
|
||||||
|
|
||||||
var fileBytes = _webDavManager.GetFileBytes(fileName);
|
|
||||||
|
|
||||||
return new FileContentResult(fileBytes, MediaTypeNames.Application.Octet);
|
return new FileContentResult(fileBytes, MediaTypeNames.Application.Octet);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ using System.Threading;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Script.Serialization;
|
using System.Web.Script.Serialization;
|
||||||
using System.Web.Security;
|
using System.Web.Security;
|
||||||
|
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
||||||
using WebsitePanel.WebDav.Core.Config;
|
using WebsitePanel.WebDav.Core.Config;
|
||||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||||
using WebsitePanel.WebDav.Core.Security.Authentication.Principals;
|
using WebsitePanel.WebDav.Core.Security.Authentication.Principals;
|
||||||
|
@ -25,12 +26,17 @@ namespace WebsitePanel.WebDav.Core.Security.Authentication
|
||||||
|
|
||||||
public WspPrincipal LogIn(string login, string password)
|
public WspPrincipal LogIn(string login, string password)
|
||||||
{
|
{
|
||||||
if (_principalContext.ValidateCredentials(login, password) == false)
|
if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password))
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//var user = UserPrincipal.FindByIdentity(_principalContext, IdentityType.UserPrincipalName, login);
|
var user = UserPrincipal.FindByIdentity(_principalContext, IdentityType.UserPrincipalName, login);
|
||||||
|
|
||||||
|
if (_principalContext.ValidateCredentials(login, password) == false && user != null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
var principal = new WspPrincipal(login);
|
var principal = new WspPrincipal(login);
|
||||||
|
|
||||||
|
@ -53,24 +59,6 @@ namespace WebsitePanel.WebDav.Core.Security.Authentication
|
||||||
return principal;
|
return principal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WspPrincipal LogIn(string accessToken)
|
|
||||||
{
|
|
||||||
var token = _cryptography.Decrypt(accessToken.Replace("AAAAA", "/"));
|
|
||||||
|
|
||||||
var splitResult = token.Split(':');
|
|
||||||
|
|
||||||
var login = splitResult[0];
|
|
||||||
var password = _cryptography.Decrypt(splitResult[1]);
|
|
||||||
var expiration = DateTime.Parse(splitResult[2]);
|
|
||||||
|
|
||||||
if (expiration < DateTime.Today)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return LogIn(login, password);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CreateAuthenticationTicket(WspPrincipal principal)
|
public void CreateAuthenticationTicket(WspPrincipal principal)
|
||||||
{
|
{
|
||||||
var serializer = new JavaScriptSerializer();
|
var serializer = new JavaScriptSerializer();
|
||||||
|
@ -91,13 +79,6 @@ namespace WebsitePanel.WebDav.Core.Security.Authentication
|
||||||
HttpContext.Current.Response.Cookies.Add(cookie);
|
HttpContext.Current.Response.Cookies.Add(cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string CreateAccessToken(WspPrincipal principal)
|
|
||||||
{
|
|
||||||
var token = string.Format("{0}:{1}:{2}", principal.Login, principal.EncryptedPassword, DateTime.Now.ToShortDateString());
|
|
||||||
|
|
||||||
return _cryptography.Encrypt(token).Replace("/", "AAAAA");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void LogOut()
|
public void LogOut()
|
||||||
{
|
{
|
||||||
FormsAuthentication.SignOut();
|
FormsAuthentication.SignOut();
|
||||||
|
|
|
@ -12,7 +12,6 @@ namespace WebsitePanel.WebDav.Core.Security.Authentication.Principals
|
||||||
public int ItemId { get; set; }
|
public int ItemId { get; set; }
|
||||||
|
|
||||||
public string Login { get; set; }
|
public string Login { get; set; }
|
||||||
public string EncryptedPassword { get; set; }
|
|
||||||
|
|
||||||
public string DisplayName { get; set; }
|
public string DisplayName { get; set; }
|
||||||
|
|
||||||
|
@ -27,6 +26,8 @@ namespace WebsitePanel.WebDav.Core.Security.Authentication.Principals
|
||||||
[XmlIgnore, ScriptIgnore]
|
[XmlIgnore, ScriptIgnore]
|
||||||
public IIdentity Identity { get; private set; }
|
public IIdentity Identity { get; private set; }
|
||||||
|
|
||||||
|
public string EncryptedPassword { get; set; }
|
||||||
|
|
||||||
public WspPrincipal(string username)
|
public WspPrincipal(string username)
|
||||||
{
|
{
|
||||||
Identity = new GenericIdentity(username);//new WindowsIdentity(username, "WindowsAuthentication");
|
Identity = new GenericIdentity(username);//new WindowsIdentity(username, "WindowsAuthentication");
|
||||||
|
|
|
@ -41,10 +41,11 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\..\..\..\Scheduler Domains\WebsitePanel\Bin\Microsoft.Web.Services3.dll</HintPath>
|
<HintPath>..\packages\Microsoft.Web.Services3.3.0.0.0\lib\net20\Microsoft.Web.Services3.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.DirectoryServices.AccountManagement" />
|
<Reference Include="System.DirectoryServices.AccountManagement" />
|
||||||
|
@ -83,9 +84,8 @@
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="WebsitePanel.EnterpriseServer.Base, Version=2.1.0.1, Culture=neutral, PublicKeyToken=da8782a6fc4d0081, processorArchitecture=MSIL">
|
<Reference Include="WebsitePanel.EnterpriseServer.Base">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\WebsitePanel.WebPortal\Bin\WebsitePanel.EnterpriseServer.Base.dll</HintPath>
|
||||||
<HintPath>..\..\..\..\Scheduler Domains\WebsitePanel\Bin\WebsitePanel.EnterpriseServer.Base.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="WebsitePanel.EnterpriseServer.Client">
|
<Reference Include="WebsitePanel.EnterpriseServer.Client">
|
||||||
<HintPath>..\WebsitePanel.WebPortal\Bin\WebsitePanel.EnterpriseServer.Client.dll</HintPath>
|
<HintPath>..\WebsitePanel.WebPortal\Bin\WebsitePanel.EnterpriseServer.Client.dll</HintPath>
|
||||||
|
@ -114,6 +114,7 @@
|
||||||
<Compile Include="Config\WebConfigSections\SessionKeysElementCollection.cs" />
|
<Compile Include="Config\WebConfigSections\SessionKeysElementCollection.cs" />
|
||||||
<Compile Include="Config\WebConfigSections\UserDomainElement.cs" />
|
<Compile Include="Config\WebConfigSections\UserDomainElement.cs" />
|
||||||
<Compile Include="Config\WebConfigSections\WebDavExplorerConfigurationSettingsSection.cs" />
|
<Compile Include="Config\WebConfigSections\WebDavExplorerConfigurationSettingsSection.cs" />
|
||||||
|
<Compile Include="Config\WebConfigSections\WebdavRootElement.cs" />
|
||||||
<Compile Include="Config\WebConfigSections\WebsitePanelConstantUserElement.cs" />
|
<Compile Include="Config\WebConfigSections\WebsitePanelConstantUserElement.cs" />
|
||||||
<Compile Include="Config\WebDavAppConfigManager.cs" />
|
<Compile Include="Config\WebDavAppConfigManager.cs" />
|
||||||
<Compile Include="Entities\Owa\CheckFileInfo.cs" />
|
<Compile Include="Entities\Owa\CheckFileInfo.cs" />
|
||||||
|
@ -126,6 +127,8 @@
|
||||||
<Compile Include="IFolder.cs" />
|
<Compile Include="IFolder.cs" />
|
||||||
<Compile Include="IHierarchyItem.cs" />
|
<Compile Include="IHierarchyItem.cs" />
|
||||||
<Compile Include="IItemContent.cs" />
|
<Compile Include="IItemContent.cs" />
|
||||||
|
<Compile Include="Managers\AccessTokenManager.cs" />
|
||||||
|
<Compile Include="Interfaces\Managers\IAccessTokenManager.cs" />
|
||||||
<Compile Include="Interfaces\Managers\IWebDavManager.cs" />
|
<Compile Include="Interfaces\Managers\IWebDavManager.cs" />
|
||||||
<Compile Include="Interfaces\Owa\IWopiServer.cs" />
|
<Compile Include="Interfaces\Owa\IWopiServer.cs" />
|
||||||
<Compile Include="Interfaces\Security\IAuthenticationService.cs" />
|
<Compile Include="Interfaces\Security\IAuthenticationService.cs" />
|
||||||
|
|
|
@ -5,4 +5,5 @@
|
||||||
<package id="Microsoft.AspNet.Razor" version="3.2.2" targetFramework="net45" />
|
<package id="Microsoft.AspNet.Razor" version="3.2.2" targetFramework="net45" />
|
||||||
<package id="Microsoft.AspNet.WebPages" version="3.2.2" targetFramework="net45" />
|
<package id="Microsoft.AspNet.WebPages" version="3.2.2" targetFramework="net45" />
|
||||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
|
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
|
||||||
|
<package id="Microsoft.Web.Services3" version="3.0.0.0" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
|
@ -3,7 +3,7 @@
|
||||||
<!-- Display Settings -->
|
<!-- Display Settings -->
|
||||||
<PortalName>WebsitePanel</PortalName>
|
<PortalName>WebsitePanel</PortalName>
|
||||||
<!-- Enterprise Server -->
|
<!-- Enterprise Server -->
|
||||||
<EnterpriseServer>http://127.0.0.1:9555</EnterpriseServer>
|
<EnterpriseServer>http://localhost:9002</EnterpriseServer>
|
||||||
<!-- General Settings -->
|
<!-- General Settings -->
|
||||||
<CultureCookieName>UserCulture</CultureCookieName>
|
<CultureCookieName>UserCulture</CultureCookieName>
|
||||||
<ThemeCookieName>UserTheme</ThemeCookieName>
|
<ThemeCookieName>UserTheme</ThemeCookieName>
|
||||||
|
|
|
@ -30,13 +30,13 @@ namespace WebsitePanel.WebDavPortal
|
||||||
|
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
name: OwaRouteNames.GetFile,
|
name: OwaRouteNames.GetFile,
|
||||||
url: "owa/wopi*/files/{encodedPath}/contents",
|
url: "owa/wopi*/files/{accessTokenId}/contents",
|
||||||
defaults: new { controller = "Owa", action = "GetFile" }
|
defaults: new { controller = "Owa", action = "GetFile" }
|
||||||
);
|
);
|
||||||
|
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
name: OwaRouteNames.CheckFileInfo,
|
name: OwaRouteNames.CheckFileInfo,
|
||||||
url: "owa/wopi*/files/{encodedPath}",
|
url: "owa/wopi*/files/{accessTokenId}",
|
||||||
defaults: new { controller = "Owa", action = "CheckFileInfo" }
|
defaults: new { controller = "Owa", action = "CheckFileInfo" }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -48,6 +48,12 @@ namespace WebsitePanel.WebDavPortal
|
||||||
defaults: new { controller = "FileSystem", action = "ShowOfficeDocument", pathPart = UrlParameter.Optional }
|
defaults: new { controller = "FileSystem", action = "ShowOfficeDocument", pathPart = UrlParameter.Optional }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
routes.MapRoute(
|
||||||
|
name: FileSystemRouteNames.ShowAdditionalContent,
|
||||||
|
url: "show-additional-content/{*path}",
|
||||||
|
defaults: new { controller = "FileSystem", action = "ShowAdditionalContent", path = UrlParameter.Optional }
|
||||||
|
);
|
||||||
|
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
name: FileSystemRouteNames.FilePath,
|
name: FileSystemRouteNames.FilePath,
|
||||||
url: "{org}/{*pathPart}",
|
url: "{org}/{*pathPart}",
|
||||||
|
|
|
@ -40,9 +40,9 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
{
|
{
|
||||||
var user = _authenticationService.LogIn(model.Login, model.Password);
|
var user = _authenticationService.LogIn(model.Login, model.Password);
|
||||||
|
|
||||||
ViewBag.LdapIsAuthentication = user.Identity.IsAuthenticated;
|
ViewBag.LdapIsAuthentication = user != null;
|
||||||
|
|
||||||
if (user.Identity.IsAuthenticated)
|
if (user != null && user.Identity.IsAuthenticated)
|
||||||
{
|
{
|
||||||
_authenticationService.CreateAuthenticationTicket(user);
|
_authenticationService.CreateAuthenticationTicket(user);
|
||||||
|
|
||||||
|
|
|
@ -29,31 +29,35 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
private readonly ICryptography _cryptography;
|
private readonly ICryptography _cryptography;
|
||||||
private readonly IWebDavManager _webdavManager;
|
private readonly IWebDavManager _webdavManager;
|
||||||
private readonly IAuthenticationService _authenticationService;
|
private readonly IAuthenticationService _authenticationService;
|
||||||
|
private readonly IAccessTokenManager _tokenManager;
|
||||||
|
|
||||||
public FileSystemController(ICryptography cryptography, IWebDavManager webdavManager, IAuthenticationService authenticationService)
|
public FileSystemController(ICryptography cryptography, IWebDavManager webdavManager, IAuthenticationService authenticationService, IAccessTokenManager tokenManager)
|
||||||
{
|
{
|
||||||
_cryptography = cryptography;
|
_cryptography = cryptography;
|
||||||
_webdavManager = webdavManager;
|
_webdavManager = webdavManager;
|
||||||
_authenticationService = authenticationService;
|
_authenticationService = authenticationService;
|
||||||
|
_tokenManager = tokenManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public ActionResult ShowContent(string org, string pathPart = "")
|
public ActionResult ShowContent(string org, string pathPart = "")
|
||||||
{
|
{
|
||||||
if (org != WspContext.User.OrganizationId)
|
if (org != WspContext.User.OrganizationId)
|
||||||
|
{
|
||||||
return new HttpStatusCodeResult(HttpStatusCode.NoContent);
|
return new HttpStatusCodeResult(HttpStatusCode.NoContent);
|
||||||
|
}
|
||||||
|
|
||||||
string fileName = pathPart.Split('/').Last();
|
string fileName = pathPart.Split('/').Last();
|
||||||
if (_webdavManager.IsFile(fileName))
|
|
||||||
|
if (_webdavManager.IsFile(pathPart))
|
||||||
{
|
{
|
||||||
var fileBytes = _webdavManager.GetFileBytes(fileName);
|
var fileBytes = _webdavManager.GetFileBytes(pathPart);
|
||||||
return File(fileBytes, MediaTypeNames.Application.Octet, fileName);
|
return File(fileBytes, MediaTypeNames.Application.Octet, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_webdavManager.OpenFolder(pathPart);
|
IEnumerable<IHierarchyItem> children = _webdavManager.OpenFolder(pathPart).Where(x => !WebDavAppConfigManager.Instance.ElementsRendering.ElementsToIgnore.Contains(x.DisplayName.Trim('/')));
|
||||||
IEnumerable<IHierarchyItem> children = _webdavManager.GetChildren().Where(x => !WebDavAppConfigManager.Instance.ElementsRendering.ElementsToIgnore.Contains(x.DisplayName.Trim('/')));
|
|
||||||
|
|
||||||
var model = new ModelForWebDav { Items = children.Take(WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount), UrlSuffix = pathPart };
|
var model = new ModelForWebDav { Items = children.Take(WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount), UrlSuffix = pathPart };
|
||||||
Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] = WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount;
|
Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] = WebDavAppConfigManager.Instance.ElementsRendering.DefaultCount;
|
||||||
|
@ -70,33 +74,26 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
{
|
{
|
||||||
var owaOpener = WebDavAppConfigManager.Instance.OfficeOnline.Single(x => x.Extension == Path.GetExtension(pathPart));
|
var owaOpener = WebDavAppConfigManager.Instance.OfficeOnline.Single(x => x.Extension == Path.GetExtension(pathPart));
|
||||||
|
|
||||||
string fileUrl = _webdavManager.RootPath.TrimEnd('/') + "/" + pathPart.TrimStart('/');
|
string fileUrl = WebDavAppConfigManager.Instance.WebdavRoot+ org + "/" + pathPart.TrimStart('/');
|
||||||
string accessToken = _authenticationService.CreateAccessToken(WspContext.User);
|
var accessToken = _tokenManager.CreateToken(WspContext.User, pathPart);
|
||||||
|
|
||||||
string wopiSrc = Server.UrlDecode(Url.RouteUrl(OwaRouteNames.CheckFileInfo, new { encodedPath = _webdavManager.CreateFileId(pathPart) }, Request.Url.Scheme));
|
string wopiSrc = Server.UrlDecode(Url.RouteUrl(OwaRouteNames.CheckFileInfo, new { accessTokenId = accessToken.Id }, Request.Url.Scheme));
|
||||||
|
|
||||||
var uri = string.Format("{0}/{1}?WOPISrc={2}&access_token={3}", WebDavAppConfigManager.Instance.OfficeOnline.Url, owaOpener.OwaOpener, Server.UrlEncode(wopiSrc), Server.UrlEncode(accessToken));
|
var uri = string.Format("{0}/{1}?WOPISrc={2}&access_token={3}", WebDavAppConfigManager.Instance.OfficeOnline.Url, owaOpener.OwaOpener, Server.UrlEncode(wopiSrc), Server.UrlEncode(accessToken.AccessToken.ToString("N")));
|
||||||
|
|
||||||
return View(new OfficeOnlineModel(uri, new Uri(fileUrl).Segments.Last()));
|
return View(new OfficeOnlineModel(uri, new Uri(fileUrl).Segments.Last()));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public ActionResult ShowAdditionalContent()
|
public ActionResult ShowAdditionalContent(string path = "", int resourseRenderCount = 0)
|
||||||
{
|
{
|
||||||
if (Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] != null)
|
path = path.Replace(WspContext.User.OrganizationId, "").Trim('/');
|
||||||
{
|
|
||||||
var renderedElementsCount = (int)Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount];
|
|
||||||
|
|
||||||
IEnumerable<IHierarchyItem> children = _webdavManager.GetChildren();
|
IEnumerable<IHierarchyItem> children = _webdavManager.OpenFolder(path);
|
||||||
|
|
||||||
var result = children.Skip(renderedElementsCount).Take(WebDavAppConfigManager.Instance.ElementsRendering.AddElementsCount);
|
var result = children.Skip(resourseRenderCount).Take(WebDavAppConfigManager.Instance.ElementsRendering.AddElementsCount);
|
||||||
|
|
||||||
Session[WebDavAppConfigManager.Instance.SessionKeys.ResourseRenderCount] = renderedElementsCount + WebDavAppConfigManager.Instance.ElementsRendering.AddElementsCount;
|
|
||||||
|
|
||||||
return PartialView("_ResourseCollectionPartial", result);
|
return PartialView("_ResourseCollectionPartial", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HttpStatusCodeResult(HttpStatusCode.NoContent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,12 +1,15 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
|
||||||
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
||||||
using WebsitePanel.WebDav.Core.Interfaces.Owa;
|
using WebsitePanel.WebDav.Core.Interfaces.Owa;
|
||||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||||
using WebsitePanel.WebDav.Core.Security.Cryptography;
|
using WebsitePanel.WebDav.Core.Security.Cryptography;
|
||||||
|
using WebsitePanel.WebDav.Core.Wsp.Framework;
|
||||||
|
|
||||||
namespace WebsitePanel.WebDavPortal.Controllers
|
namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
{
|
{
|
||||||
|
@ -16,28 +19,40 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
private readonly IWopiServer _wopiServer;
|
private readonly IWopiServer _wopiServer;
|
||||||
private readonly IWebDavManager _webDavManager;
|
private readonly IWebDavManager _webDavManager;
|
||||||
private readonly IAuthenticationService _authenticationService;
|
private readonly IAuthenticationService _authenticationService;
|
||||||
|
private readonly IAccessTokenManager _tokenManager;
|
||||||
|
private readonly ICryptography _cryptography;
|
||||||
|
private WebDavAccessToken _token;
|
||||||
|
|
||||||
public OwaController(IWopiServer wopiServer, IWebDavManager webDavManager, IAuthenticationService authenticationService)
|
|
||||||
|
public OwaController(IWopiServer wopiServer, IWebDavManager webDavManager, IAuthenticationService authenticationService, IAccessTokenManager tokenManager, ICryptography cryptography)
|
||||||
{
|
{
|
||||||
_wopiServer = wopiServer;
|
_wopiServer = wopiServer;
|
||||||
_webDavManager = webDavManager;
|
_webDavManager = webDavManager;
|
||||||
_authenticationService = authenticationService;
|
_authenticationService = authenticationService;
|
||||||
|
_tokenManager = tokenManager;
|
||||||
|
_cryptography = cryptography;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JsonResult CheckFileInfo( string encodedPath)
|
public ActionResult CheckFileInfo(int accessTokenId)
|
||||||
{
|
{
|
||||||
var path = _webDavManager.FilePathFromId(encodedPath);
|
if (!CheckAccess(accessTokenId))
|
||||||
|
{
|
||||||
|
return new HttpStatusCodeResult(HttpStatusCode.NoContent);
|
||||||
|
}
|
||||||
|
|
||||||
var fileInfo = _wopiServer.GetCheckFileInfo(path);
|
var fileInfo = _wopiServer.GetCheckFileInfo(_token.FilePath);
|
||||||
|
|
||||||
return Json(fileInfo, JsonRequestBehavior.AllowGet);
|
return Json(fileInfo, JsonRequestBehavior.AllowGet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileResult GetFile(string encodedPath)
|
public ActionResult GetFile(int accessTokenId)
|
||||||
{
|
{
|
||||||
var path = _webDavManager.FilePathFromId(encodedPath);
|
if (!CheckAccess(accessTokenId))
|
||||||
|
{
|
||||||
|
return new HttpStatusCodeResult(HttpStatusCode.NoContent);
|
||||||
|
}
|
||||||
|
|
||||||
return _wopiServer.GetFile(path);
|
return _wopiServer.GetFile((_token.FilePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnActionExecuting(ActionExecutingContext filterContext)
|
protected override void OnActionExecuting(ActionExecutingContext filterContext)
|
||||||
|
@ -46,8 +61,26 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Request["access_token"]))
|
if (!string.IsNullOrEmpty(Request["access_token"]))
|
||||||
{
|
{
|
||||||
_authenticationService.LogIn(Request["access_token"]);
|
var guid = Guid.Parse((Request["access_token"]));
|
||||||
}
|
|
||||||
|
_tokenManager.ClearExpiredTokens();
|
||||||
|
|
||||||
|
_token = _tokenManager.GetToken(guid);
|
||||||
|
|
||||||
|
var user = WSP.Services.ExchangeServer.GetAccount(_token.ItemId, _token.AccountId);
|
||||||
|
|
||||||
|
_authenticationService.LogIn(user.UserPrincipalName, _cryptography.Decrypt(_token.AuthData));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CheckAccess(int accessTokenId)
|
||||||
|
{
|
||||||
|
if (_token == null || accessTokenId != _token.Id)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,6 +7,7 @@ using System.Web.SessionState;
|
||||||
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
using WebsitePanel.WebDav.Core.Interfaces.Managers;
|
||||||
using WebsitePanel.WebDav.Core.Interfaces.Owa;
|
using WebsitePanel.WebDav.Core.Interfaces.Owa;
|
||||||
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
using WebsitePanel.WebDav.Core.Interfaces.Security;
|
||||||
|
using WebsitePanel.WebDav.Core.Managers;
|
||||||
using WebsitePanel.WebDav.Core.Owa;
|
using WebsitePanel.WebDav.Core.Owa;
|
||||||
using WebsitePanel.WebDav.Core.Security;
|
using WebsitePanel.WebDav.Core.Security;
|
||||||
using WebsitePanel.WebDav.Core.Security.Authentication;
|
using WebsitePanel.WebDav.Core.Security.Authentication;
|
||||||
|
@ -23,7 +24,8 @@ namespace WebsitePanel.WebDavPortal.DependencyInjection
|
||||||
kernel.Bind<HttpSessionState>().ToProvider<HttpSessionStateProvider>();
|
kernel.Bind<HttpSessionState>().ToProvider<HttpSessionStateProvider>();
|
||||||
kernel.Bind<ICryptography>().To<CryptoUtils>();
|
kernel.Bind<ICryptography>().To<CryptoUtils>();
|
||||||
kernel.Bind<IAuthenticationService>().To<FormsAuthenticationService>();
|
kernel.Bind<IAuthenticationService>().To<FormsAuthenticationService>();
|
||||||
kernel.Bind<IWebDavManager>().ToProvider<WebDavManagerProvider>();
|
kernel.Bind<IWebDavManager>().To<WebDavManager>();
|
||||||
|
kernel.Bind<IAccessTokenManager>().To<AccessTokenManager>();
|
||||||
kernel.Bind<IWopiServer>().To<WopiServer>();
|
kernel.Bind<IWopiServer>().To<WopiServer>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,8 @@ var oldResourcesDivHeight = $('#resourcesDiv').height();
|
||||||
function GetResources() {
|
function GetResources() {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: '/FileSystem/ShowAdditionalContent',
|
url: '/show-additional-content',
|
||||||
data: '',
|
data: { path: window.location.pathname, resourseRenderCount: $(".element-container").length },
|
||||||
dataType: "html",
|
dataType: "html",
|
||||||
success: function (result) {
|
success: function (result) {
|
||||||
var domElement = $(result);
|
var domElement = $(result);
|
||||||
|
|
|
@ -8,5 +8,6 @@ namespace WebsitePanel.WebDavPortal.UI.Routes
|
||||||
public class FileSystemRouteNames
|
public class FileSystemRouteNames
|
||||||
{
|
{
|
||||||
public const string FilePath = "FilePathRoute";
|
public const string FilePath = "FilePathRoute";
|
||||||
|
public const string ShowAdditionalContent = "ShowAdditionalContentRoute";
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -38,6 +38,7 @@
|
||||||
</appSettings>
|
</appSettings>
|
||||||
<webDavExplorerConfigurationSettings>
|
<webDavExplorerConfigurationSettings>
|
||||||
<userDomain value="websitepanel.net" />
|
<userDomain value="websitepanel.net" />
|
||||||
|
<webdavRoot value="https://webdav.websitepanel.net/" />
|
||||||
<applicationName value="WebDAV Explorer" />
|
<applicationName value="WebDAV Explorer" />
|
||||||
<authTimeoutCookieName value=".auth-logout-timeout" />
|
<authTimeoutCookieName value=".auth-logout-timeout" />
|
||||||
<elementsRendering defaultCount="20" addElementsCount="20" elementsToIgnoreKey="web.config" />
|
<elementsRendering defaultCount="20" addElementsCount="20" elementsToIgnoreKey="web.config" />
|
||||||
|
|
|
@ -327,5 +327,22 @@ namespace WebsitePanel.Portal
|
||||||
var idn = new IdnMapping();
|
var idn = new IdnMapping();
|
||||||
return idn.GetAscii(domainName);
|
return idn.GetAscii(domainName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the specified parameter to the Query String.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="url"></param>
|
||||||
|
/// <param name="paramName">Name of the parameter to add.</param>
|
||||||
|
/// <param name="paramValue">Value for the parameter to add.</param>
|
||||||
|
/// <returns>Url with added parameter.</returns>
|
||||||
|
public static Uri AddParameterToUrl(Uri url, string paramName, string paramValue)
|
||||||
|
{
|
||||||
|
var uriBuilder = new UriBuilder(url);
|
||||||
|
var query = HttpUtility.ParseQueryString(uriBuilder.Query);
|
||||||
|
query[paramName] = paramValue;
|
||||||
|
uriBuilder.Query = query.ToString();
|
||||||
|
|
||||||
|
return new Uri(uriBuilder.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<div class="FormBody">
|
<div class="FormBody">
|
||||||
|
|
||||||
<p id="DomainPanel" runat="server" style="padding: 15px 0 15px 5px;">
|
<p id="DomainPanel" runat="server" style="padding: 15px 0 15px 5px;">
|
||||||
<wsp:DomainControl ID="DomainName" runat="server" RequiredEnabled="True" ValidationGroup="Domain" OnTextChanged="DomainName_TextChanged"></wsp:DomainControl>
|
<wsp:DomainControl ID="DomainName" runat="server" RequiredEnabled="True" ValidationGroup="Domain"></wsp:DomainControl>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<wsp:CollapsiblePanel id="OptionsPanelHeader" runat="server"
|
<wsp:CollapsiblePanel id="OptionsPanelHeader" runat="server"
|
||||||
|
|
|
@ -158,8 +158,11 @@ namespace WebsitePanel.Portal
|
||||||
// allow sub-domains
|
// allow sub-domains
|
||||||
AllowSubDomainsPanel.Visible = (type == DomainType.Domain) && PanelSecurity.EffectiveUser.Role != UserRole.User;
|
AllowSubDomainsPanel.Visible = (type == DomainType.Domain) && PanelSecurity.EffectiveUser.Role != UserRole.User;
|
||||||
|
|
||||||
|
if (IsPostBack)
|
||||||
|
{
|
||||||
CheckForCorrectIdnDomainUsage(DomainName.Text);
|
CheckForCorrectIdnDomainUsage(DomainName.Text);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private DomainType GetDomainType(string typeName)
|
private DomainType GetDomainType(string typeName)
|
||||||
{
|
{
|
||||||
|
@ -279,10 +282,5 @@ namespace WebsitePanel.Portal
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void DomainName_TextChanged(object sender, DomainControl.DomainNameEventArgs e)
|
|
||||||
{
|
|
||||||
CheckForCorrectIdnDomainUsage(e.DomainName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,14 @@ namespace WebsitePanel.Portal
|
||||||
|
|
||||||
private void RedirectBack()
|
private void RedirectBack()
|
||||||
{
|
{
|
||||||
Response.Redirect(NavigateURL("PoolID", ddlPools.SelectedValue));
|
var returnUrl = Request["ReturnUrl"];
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(returnUrl))
|
||||||
|
{
|
||||||
|
returnUrl = NavigateURL("PoolID", ddlPools.SelectedValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
Response.Redirect(returnUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ddlPools_SelectedIndexChanged(object sender, EventArgs e)
|
protected void ddlPools_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
|
|
@ -107,7 +107,14 @@ namespace WebsitePanel.Portal
|
||||||
|
|
||||||
private void RedirectBack()
|
private void RedirectBack()
|
||||||
{
|
{
|
||||||
Response.Redirect(NavigateURL("PoolID", ddlPools.SelectedValue));
|
var returnUrl = Request["ReturnUrl"];
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(returnUrl))
|
||||||
|
{
|
||||||
|
returnUrl = NavigateURL("PoolID", ddlPools.SelectedValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
Response.Redirect(returnUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void btnUpdate_Click(object sender, EventArgs e)
|
protected void btnUpdate_Click(object sender, EventArgs e)
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<Columns>
|
<Columns>
|
||||||
<asp:TemplateField SortExpression="ExternalIP" HeaderText="gvIPAddressesExternalIP">
|
<asp:TemplateField SortExpression="ExternalIP" HeaderText="gvIPAddressesExternalIP">
|
||||||
<ItemTemplate>
|
<ItemTemplate>
|
||||||
<asp:hyperlink NavigateUrl='<%# EditModuleUrl("AddressID", Eval("AddressID").ToString(), "edit_ip") %>' runat="server" ID="lnkEdit">
|
<asp:hyperlink NavigateUrl='<%# EditModuleUrl("AddressID", Eval("AddressID").ToString(), "edit_ip", "ReturnUrl", GetReturnUrl()) %>' runat="server" ID="lnkEdit">
|
||||||
<%# Eval("ExternalIP") %>
|
<%# Eval("ExternalIP") %>
|
||||||
</asp:hyperlink>
|
</asp:hyperlink>
|
||||||
</ItemTemplate>
|
</ItemTemplate>
|
||||||
|
|
|
@ -55,9 +55,15 @@ namespace WebsitePanel.Portal
|
||||||
return HostModule.EditUrl(key, keyVal, ctrlKey, key2 + "=" + keyVal2);
|
return HostModule.EditUrl(key, keyVal, ctrlKey, key2 + "=" + keyVal2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GetReturnUrl()
|
||||||
|
{
|
||||||
|
var returnUrl = Utils.AddParameterToUrl(Request.Url, "IpAddressesCollapsed", "False");
|
||||||
|
return Uri.EscapeDataString("~" + returnUrl.PathAndQuery);
|
||||||
|
}
|
||||||
|
|
||||||
protected void btnAdd_Click(object sender, EventArgs e)
|
protected void btnAdd_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Response.Redirect(HostModule.EditUrl("ServerID", PanelRequest.ServerId.ToString(), "add_ip"), true);
|
Response.Redirect(EditModuleUrl("ServerID", PanelRequest.ServerId.ToString(), "add_ip", "ReturnUrl", GetReturnUrl()), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,8 @@ namespace WebsitePanel.Portal
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IPAddressesHeader.IsCollapsed = IsIpAddressesCollapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BindTools()
|
private void BindTools()
|
||||||
|
@ -232,5 +234,13 @@ namespace WebsitePanel.Portal
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected bool IsIpAddressesCollapsed
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return PanelRequest.GetBool("IpAddressesCollapsed", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,11 +77,15 @@ namespace WebsitePanel.Portal.UserControls
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var domainName = txtDomainName.Text.Trim();
|
var domainName = txtDomainName.Text.Trim();
|
||||||
if (IsSubDomain)
|
if (!IsSubDomain) return domainName;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(domainName))
|
||||||
{
|
{
|
||||||
domainName += "." + DomainsList.SelectedValue;
|
// Only return selected domain from DomainsList when no subdomain is entered yet
|
||||||
|
return DomainsList.SelectedValue;
|
||||||
}
|
}
|
||||||
return domainName;
|
|
||||||
|
return domainName + "." + DomainsList.SelectedValue;
|
||||||
}
|
}
|
||||||
set { txtDomainName.Text = value; }
|
set { txtDomainName.Text = value; }
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,7 +220,7 @@ namespace WebsitePanel.Portal
|
||||||
function wspValidatePasswordSymbols(source, args)
|
function wspValidatePasswordSymbols(source, args)
|
||||||
{
|
{
|
||||||
if(args.Value == source.getAttribute('dpsw')) return true;
|
if(args.Value == source.getAttribute('dpsw')) return true;
|
||||||
args.IsValid = wspValidatePattern(/(\W)/g, args.Value,
|
args.IsValid = wspValidatePattern(/([\W_])/g, args.Value,
|
||||||
parseInt(source.getAttribute('minimumNumber')));
|
parseInt(source.getAttribute('minimumNumber')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,7 +357,7 @@ namespace WebsitePanel.Portal
|
||||||
|
|
||||||
protected void valRequireSymbols_ServerValidate(object source, ServerValidateEventArgs args)
|
protected void valRequireSymbols_ServerValidate(object source, ServerValidateEventArgs args)
|
||||||
{
|
{
|
||||||
args.IsValid = ((args.Value == EMPTY_PASSWORD) || ValidatePattern("(\\W)", args.Value, MinimumSymbols));
|
args.IsValid = ((args.Value == EMPTY_PASSWORD) || ValidatePattern("([\\W_])", args.Value, MinimumSymbols));
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ValidatePattern(string regexp, string val, int minimumNumber)
|
private bool ValidatePattern(string regexp, string val, int minimumNumber)
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
<IISExpressAnonymousAuthentication />
|
<IISExpressAnonymousAuthentication />
|
||||||
<IISExpressWindowsAuthentication />
|
<IISExpressWindowsAuthentication />
|
||||||
<IISExpressUseClassicPipelineMode />
|
<IISExpressUseClassicPipelineMode />
|
||||||
|
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
|
||||||
|
<RestorePackages>true</RestorePackages>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -74,8 +76,7 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\..\Lib\Microsoft.Web.Services3.dll</HintPath>
|
<HintPath>..\packages\Microsoft.Web.Services3.3.0.0.0\lib\net20\Microsoft.Web.Services3.dll</HintPath>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
|
@ -292,6 +293,7 @@
|
||||||
<Content Include="App_Themes\Default\Common.skin" />
|
<Content Include="App_Themes\Default\Common.skin" />
|
||||||
<Content Include="App_Themes\Default\DataBoundControls.skin" />
|
<Content Include="App_Themes\Default\DataBoundControls.skin" />
|
||||||
<Content Include="App_Themes\Default\Icons.skin" />
|
<Content Include="App_Themes\Default\Icons.skin" />
|
||||||
|
<Content Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="App_Containers\Default\TopPane.ascx" />
|
<Content Include="App_Containers\Default\TopPane.ascx" />
|
||||||
|
@ -802,4 +804,5 @@
|
||||||
</FilesForPackagingFromProject>
|
</FilesForPackagingFromProject>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Target>
|
</Target>
|
||||||
|
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||||
</Project>
|
</Project>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Microsoft.Web.Services3" version="3.0.0.0" targetFramework="net40" />
|
||||||
|
</packages>
|
Loading…
Add table
Add a link
Reference in a new issue