This commit is contained in:
Alexander Trofimov
2015-06-25 11:27:08 +03:00
parent dbf21ee32f
commit a10605c91f
174 changed files with 24121 additions and 8908 deletions

View File

@@ -49,15 +49,32 @@ public static class UrlBuilder
try
{
string sHostHeader = oHttpRequest.Headers["Host"];
string sForwardedHostHeader = oHttpRequest.Headers["X-Forwarded-Host"];
string sForwardedProtoHeader = oHttpRequest.Headers["X-Forwarded-Proto"];
Uri oSiteUri = oHttpRequest.Url;
sSiteUrl = oSiteUri.Scheme + "://";
if (!String.IsNullOrEmpty(sForwardedProtoHeader))
{
sSiteUrl += sForwardedProtoHeader;
}
else
{
sSiteUrl += oSiteUri.Scheme;
}
if (!String.IsNullOrEmpty(sHostHeader))
sSiteUrl += "://";
if (!String.IsNullOrEmpty(sForwardedHostHeader))
{
sSiteUrl += sForwardedHostHeader;
}
else if (!String.IsNullOrEmpty(sHostHeader))
{
sSiteUrl += sHostHeader;
}
else
{
sSiteUrl += oSiteUri.Host;

View File

@@ -113,9 +113,15 @@ public class CanvasService : IHttpAsyncHandler
if (ErrorTypes.NoError == eError)
{
InputCommand cmd = ReadCommand(strStream);
if(null != cmd)
{
if (null == cmd)
{
eError = ErrorTypes.Unknown;
WriteOutputCommand(oTransportClassContextRead, new OutputCommand(eError));
eError = ErrorTypes.NoError;
}
else
{
try
{
@@ -149,8 +155,9 @@ public class CanvasService : IHttpAsyncHandler
{
_log.Error("Exception catched in Print error:", e);
}
}
eError = ProcessCommand(oTransportClassContextRead, cmd);
eError = ProcessCommand(oTransportClassContextRead, cmd);
}
}
}
catch (Exception e)
@@ -1371,13 +1378,18 @@ public class CanvasService : IHttpAsyncHandler
break;
case FileStatus.SaveVersion:
{
ITaskResultInterface oTaskResult = TaskResult.NewTaskResult();
TaskResultDataToUpdate oTask = new TaskResultDataToUpdate();
oTask.eStatus = FileStatus.Ok;
TaskResultDataToUpdate oMask = new TaskResultDataToUpdate();
oMask.eStatus = FileStatus.SaveVersion;
TransportClassTaskResult oTransportClassTaskResult = new TransportClassTaskResult(oTransportClassMainAshx, cmd, oTaskResult);
oTaskResult.UpdateIfBegin(cmd.id, oMask, oTask, TaskResultUpdateIfCallback2, oTransportClassTaskResult);
if (cmd.viewmode)
WriteOutputCommand(oTransportClassMainAshx, new OutputCommand("updateversion", cmd.id + "/Editor.bin"));
else
{
ITaskResultInterface oTaskResult = TaskResult.NewTaskResult();
TaskResultDataToUpdate oTask = new TaskResultDataToUpdate();
oTask.eStatus = FileStatus.Ok;
TaskResultDataToUpdate oMask = new TaskResultDataToUpdate();
oMask.eStatus = FileStatus.SaveVersion;
TransportClassTaskResult oTransportClassTaskResult = new TransportClassTaskResult(oTransportClassMainAshx, cmd, oTaskResult);
oTaskResult.UpdateIfBegin(cmd.id, oMask, oTask, TaskResultUpdateIfCallback2, oTransportClassTaskResult);
}
}
break;
case FileStatus.UpdateVersion:
@@ -1746,30 +1758,7 @@ public class CanvasService : IHttpAsyncHandler
_log.DebugFormat("Enter DocsCallbacksGetCallback(id={0})", cmd.id);
ErrorTypes eError = oTransportClassSaveChanges2.m_oDocsCallbacks.GetEnd(ar, out oTransportClassSaveChanges2.m_sCallbackUrl);
if (ErrorTypes.NoError == eError && !string.IsNullOrEmpty(oTransportClassSaveChanges2.m_sCallbackUrl))
{
TaskResultData oTaskResultData = oTransportClassSaveChanges2.m_oTaskResultData;
OutputSfc oOutputSfc = new OutputSfc();
oOutputSfc.key = oTransportClassSaveChanges2.m_oTaskQueueData.m_sFromKey;
if (FileStatus.Ok == oTaskResultData.eStatus || (FileStatus.Err == oTaskResultData.eStatus && (int)ErrorTypes.ConvertCorrupted == oTaskResultData.nStatusInfo))
oOutputSfc.url = GetResultUrl(UrlBuilder.UrlWithoutPath(oTransportClassSaveChanges2.m_oHttpContext.Request), oTaskResultData.sKey, oTaskResultData.sTitle, oTaskResultData.sTitle, false);
_log.DebugFormat("saved file url:{0}", oOutputSfc.url);
if (!string.IsNullOrEmpty(oTransportClassSaveChanges2.m_oInputCommand.userid))
oOutputSfc.users.Add(oTransportClassSaveChanges2.m_oInputCommand.userid);
FileStatusOut eFileStatusOut = FileStatusOut.NotFound;
if (FileStatus.Ok == oTaskResultData.eStatus && !string.IsNullOrEmpty(oOutputSfc.url) && oOutputSfc.users.Count > 0)
eFileStatusOut = FileStatusOut.MustSave;
else
eFileStatusOut = FileStatusOut.Corrupted;
oOutputSfc.status = (int)eFileStatusOut;
string sJson = new JavaScriptSerializer().Serialize(oOutputSfc);
uint attempcount = uint.Parse(ConfigurationSettings.AppSettings["sfc.webrequest.attempcount"] ?? "1");
uint attempdelay = uint.Parse(ConfigurationSettings.AppSettings["sfc.webrequest.attempdelay"] ?? "0");
AsyncWebRequestOperation oAsyncWebRequestOperation = new AsyncWebRequestOperation(attempcount, attempdelay);
oTransportClassSaveChanges2.m_oAsyncWebRequestOperation = oAsyncWebRequestOperation;
_log.DebugFormat("TaskResultRemoveCallback4 url:{0}", oTransportClassSaveChanges2.m_sCallbackUrl);
oTransportClassSaveChanges2.m_oAsyncWebRequestOperationResult = oAsyncWebRequestOperation.RequestBegin(oTransportClassSaveChanges2.m_sCallbackUrl, "POST", "application/json",Encoding.UTF8.GetBytes(sJson), RequestCallback2, oTransportClassSaveChanges2);
}
oTransportClassSaveChanges2.m_oDocsCallbacks.RemoveBegin(cmd.id, DocsCallbacksRemoveCallback, oTransportClassSaveChanges2);
else
{
RemoveFromCoAuthoringHandler(oTransportClassSaveChanges2);
@@ -1781,6 +1770,100 @@ public class CanvasService : IHttpAsyncHandler
RemoveFromCoAuthoringHandler(oTransportClassSaveChanges2);
}
}
private void DocsCallbacksRemoveCallback(IAsyncResult ar)
{
TransportClassSaveChanges2 oTransportClassSaveChanges2 = ar.AsyncState as TransportClassSaveChanges2;
try
{
InputCommand cmd = oTransportClassSaveChanges2.m_oInputCommand;
_log.DebugFormat("Enter DocsCallbacksRemoveCallback(id={0})", cmd.id);
ErrorTypes eError = oTransportClassSaveChanges2.m_oDocsCallbacks.RemoveEnd(ar);
if (ErrorTypes.NoError == eError)
{
TaskResultData oTaskResultData = oTransportClassSaveChanges2.m_oTaskResultData;
if (FileStatus.Ok != oTaskResultData.eStatus && (FileStatus.Err != oTaskResultData.eStatus || (int)ErrorTypes.ConvertCorrupted != oTaskResultData.nStatusInfo))
{
OutputSfc oOutputSfc = new OutputSfc();
oOutputSfc.status = (int)FileStatusOut.Corrupted;
SendFileRequest(oOutputSfc, oTransportClassSaveChanges2);
}
else
{
Storage oStorage = new Storage();
MemoryStream oStream = new MemoryStream();
TransportClassStorage3 oTransportClassStorage3 = new TransportClassStorage3(oTransportClassSaveChanges2, cmd, oStorage, oStream, oTaskResultData.sKey, oTransportClassSaveChanges2);
oStorage.ReadFileBegin(Path.Combine(oTaskResultData.sKey, "changesHistory.json"), oStream, ReadFileCallback, oTransportClassStorage3);
}
}
else
{
RemoveFromCoAuthoringHandler(oTransportClassSaveChanges2);
}
}
catch (Exception e)
{
_log.Error("Exception catched in DocsCallbacksRemoveCallback:", e);
RemoveFromCoAuthoringHandler(oTransportClassSaveChanges2);
}
}
private void SendFileRequest(OutputSfc oOutputSfc, TransportClassSaveChanges2 oTransportClassSaveChanges2)
{
string sJson = new JavaScriptSerializer().Serialize(oOutputSfc);
uint attempcount = uint.Parse(ConfigurationSettings.AppSettings["sfc.webrequest.attempcount"] ?? "1");
uint attempdelay = uint.Parse(ConfigurationSettings.AppSettings["sfc.webrequest.attempdelay"] ?? "0");
AsyncWebRequestOperation oAsyncWebRequestOperation = new AsyncWebRequestOperation(attempcount, attempdelay);
oTransportClassSaveChanges2.m_oAsyncWebRequestOperation = oAsyncWebRequestOperation;
_log.DebugFormat("TaskResultRemoveCallback4 url:{0}", oTransportClassSaveChanges2.m_sCallbackUrl);
oTransportClassSaveChanges2.m_oAsyncWebRequestOperationResult = oAsyncWebRequestOperation.RequestBegin(oTransportClassSaveChanges2.m_sCallbackUrl, "POST", "application/json", Encoding.UTF8.GetBytes(sJson), RequestCallback2, oTransportClassSaveChanges2);
}
private void ReadFileCallback(IAsyncResult ar)
{
TransportClassStorage3 oTransportClassStorage3 = ar.AsyncState as TransportClassStorage3;
TransportClassSaveChanges2 oTransportClassSaveChanges2 = oTransportClassStorage3.m_oSaveChanges2;
try
{
Storage oStorage = oTransportClassStorage3.m_oStorage;
if (null == oStorage)
{
throw new NullReferenceException();
}
TaskResultData oTaskResultData = oTransportClassSaveChanges2.m_oTaskResultData;
int nReadWriteBytes = 0;
ErrorTypes eResult = oStorage.ReadFileEnd(ar, out nReadWriteBytes);
OutputSfc oOutputSfc = new OutputSfc();
oOutputSfc.key = oTransportClassSaveChanges2.m_oInputCommand.id;
if (ErrorTypes.NoError == eResult)
{
byte[] buffer = new byte[nReadWriteBytes];
oTransportClassStorage3.m_oStream.Seek(0, SeekOrigin.Begin);
oTransportClassStorage3.m_oStream.Read(buffer, 0, nReadWriteBytes);
oTransportClassStorage3.m_oStream.Dispose();
string strSiteUrl = UrlBuilder.UrlWithoutPath(oTransportClassSaveChanges2.m_oHttpContext.Request);
oOutputSfc.url = GetResultUrl(strSiteUrl, oTaskResultData.sKey, oTaskResultData.sTitle, oTaskResultData.sTitle, false);
oOutputSfc.changesurl = GetResultUrl(strSiteUrl, oTaskResultData.sKey, "changes.zip", oTaskResultData.sTitle, false);
oOutputSfc.changeshistory = Encoding.UTF8.GetString(buffer);
}
_log.DebugFormat("saved file url:{0}", oOutputSfc.url);
if (!string.IsNullOrEmpty(oTransportClassSaveChanges2.m_oInputCommand.userid))
oOutputSfc.users.Add(oTransportClassSaveChanges2.m_oInputCommand.userid);
FileStatusOut eFileStatusOut = FileStatusOut.NotFound;
if (!string.IsNullOrEmpty(oOutputSfc.url) && oOutputSfc.users.Count > 0)
eFileStatusOut = FileStatusOut.MustSave;
else
eFileStatusOut = FileStatusOut.Corrupted;
oOutputSfc.status = (int)eFileStatusOut;
SendFileRequest(oOutputSfc, oTransportClassSaveChanges2);
}
catch (Exception e)
{
_log.Error("Exception catched in ReadFileCallback:", e);
RemoveFromCoAuthoringHandler(oTransportClassSaveChanges2);
}
}
private void RequestCallback2(IAsyncResult ar)
{
TransportClassSaveChanges2 oTransportClassSaveChanges2 = ar.AsyncState as TransportClassSaveChanges2;
@@ -1957,6 +2040,15 @@ public class CanvasService : IHttpAsyncHandler
m_oOutputCommand = oOutputCommand;
}
}
private class TransportClassStorage3 : TransportClassStorage
{
public TransportClassSaveChanges2 m_oSaveChanges2;
public TransportClassStorage3(TransportClassMainAshx oTransportClassMainAshx, InputCommand oInputCommand, Storage oStorage, Stream stream, string sKey, TransportClassSaveChanges2 oSaveChanges2)
: base(oTransportClassMainAshx, oInputCommand, oStorage, stream, sKey)
{
m_oSaveChanges2 = oSaveChanges2;
}
}
private class TransportClassTaskQueue : TransportClassMainAshx
{
public CTaskQueue m_oTaskQueue;
@@ -2154,6 +2246,8 @@ public class CanvasService : IHttpAsyncHandler
public long status { get; set; }
public string url { get; set; }
public string changesurl { get; set; }
public string changeshistory { get; set; }
public List<string> users = new List<string>();
}
public class OutputWaitSaveData
@@ -2187,6 +2281,8 @@ public class CanvasService : IHttpAsyncHandler
public class OutputSettingsData
{
public bool canLicense;
public bool canEdit;
public bool canDownload;
public bool canCoAuthoring;
@@ -2203,6 +2299,8 @@ public class CanvasService : IHttpAsyncHandler
public OutputSettingsData()
{
canLicense = true;
canEdit = true;
canDownload = true;
canCoAuthoring = true;
@@ -2243,6 +2341,8 @@ public class CanvasService : IHttpAsyncHandler
canDownload = !aViewerFormats.Contains(sFormat);
}
canLicense = false;
}
}

View File

@@ -9,17 +9,6 @@
-->
<configuration>
<configSections>
<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">
<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 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>
</sectionGroup>
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<system.serviceModel>
@@ -89,10 +78,6 @@
<add key="limits.image.types.upload" value="jpg;png;gif;bmp;ico" />
<add key="limits.image.types.copy" value="jpg;png;gif;bmp;emf;wmf;svg" />
<add key="limits.image.size" value="25000000" />
<add key="license.type" value="7" />
<add key="license.activeconnections.tracking.interval" value="300" />
<add key="license.activeconnections.tracking.cleanupperiods" value="2" />
<add key="license.file.path" value="/var/www/onlyoffice/Data/" />
<add key="fonts.route" value="OfficeWeb/sdk/Fonts/" />
<add key="sfc.webrequest.attempcount" value="3" />
<add key="sfc.webrequest.attempdelay" value="1000" />
@@ -106,14 +91,10 @@
affects performance, set this value to true only
during development.
-->
<compilation debug="true">
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="Accessibility, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<!--
@@ -134,23 +115,13 @@
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
<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" />
<remove verb="POST,GET" path="template.ashx" />
<remove verb="POST,GET" path="JavaScriptResource.ashx" />
<remove verb="POST,GET" path="UploadProgress.ashx" />
<remove verb="POST,GET" path="fckuploader.ashx" />
<remove verb="POST,GET" path="ajaxupload.ashx" />
<remove verb="POST,GET" path="ajaxpro/*.ashx" />
<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>
<!--
@@ -158,49 +129,46 @@
<remove name="MobileDetector" />
<remove name="TcpIpFilter" />
-->
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
<customErrors mode="Off" />
</system.web>
<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" compilerOptions="/d:OPEN_SOURCE">
<providerOption name="CompilerVersion" value="v3.5" />
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/d:OPEN_SOURCE">
<providerOption name="CompilerVersion" value="v4.0" />
<providerOption name="WarnAsError" value="false" />
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/d:OPEN_SOURCE">
<providerOption name="CompilerVersion" value="v3.5" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/d:OPEN_SOURCE">
<providerOption name="CompilerVersion" value="v4.0" />
<providerOption name="OptionInfer" value="true" />
<providerOption name="WarnAsError" value="false" />
</compiler>
</compilers>
</system.codedom>
<system.webServer>
<security>
<requestFiltering>
<!-- same as in FileConverterService2.exe.config maxdownloadbytes=100000000 -->
<requestLimits maxAllowedContentLength="100000000" />
</requestFiltering>
</security>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UploadProgress" />
<remove name="MobileDetector" />
<remove name="TcpIpFilter" />
<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" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<remove name="UrlRoutingModule" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, &#xD;&#xA; System.Web, Version=4.0.0.0, Culture=neutral, &#xD;&#xA; PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated" />
<remove name="ScriptHandlerFactory" />
<remove name="ScriptHandlerFactoryAppServices" />
<remove name="ScriptResource" />
<remove name="Template" />
<remove name="JavaScriptResource" />
<remove name="UpProgress" />
<remove name="FCKUp" />
<remove name="AjaxUp" />
<remove name="AjaxPro" />
<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" />
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler,&#xD;&#xA; System.Web, Version=2.0.0.0, Culture=neutral,&#xD;&#xA; PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
<staticContent>
<remove fileExtension=".ods" />
@@ -260,16 +228,4 @@
</customHeaders>
</httpProtocol>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727">
<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>
</runtime>
</configuration>