/// <summary>
        /// Gets the file locked user id.
        /// </summary>
        /// <param name="fileUrl">The file URL.</param>
        /// <returns></returns>
        public static UserLight GetFileLockedUserId(string fileUrl)
        {
            UserLight retVal = null;

            try
            {
                WebDavTicket          ticket   = WebDavUrlBuilder.GetWebDavTicket(fileUrl);
                WebDavAbstractFactory factory  = new WebDavAbstractFactory();
                WebDavPropertyStorage provider =
                    factory.Create <WebDavElementStorageProvider>(ticket.AbsolutePath.StorageType) as WebDavPropertyStorage;
                if (provider != null)
                {
                    WebDavElementInfo elInfo = provider.GetElementInfo(ticket.ToString());
                    foreach (ActiveLockElement activeLock in provider.GetActiveLocks(elInfo))
                    {
                        UserLight user = UserLight.Load(activeLock.Owner);
                        if (user != null)
                        {
                            retVal = user;
                            break;
                        }
                    }
                }
            }
            catch (System.Exception)
            {
            }

            return(retVal);
        }
Exemple #2
0
        /// <summary>
        /// Gets the absolute path.
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <returns></returns>
        public string GetAbsolutePath(string url)
        {
            string retVal = url;

            try
            {
                WebDavTicket ticket = WebDavUrlBuilder.GetWebDavTicket(url);
                if (ticket != null)
                {
                    retVal = ticket.ToString();
                }
            }
            catch (System.Exception)
            {
                //throw new Exception("webdav ticket incorrect format");
            }

            return(retVal);
        }
Exemple #3
0
        public void ProcessRequest(HttpContext context)
        {
            //try
            //{
            //проверяем есть ли в ticket-е идентификатор сессии
            WebDavTicket ticket = WebDavUrlBuilder.GetWebDavTicket(context.Request.Url.ToString());

            if (ticket == null)
            {
                throw new HttpException((int)HttpStatusCode.BadRequest, "Incorrect URI.");
            }

            if (!WebDavAuthHelper.WebDavAuthentificate(context, ticket))
            {
                //Используем стандартный механизм аутентификации
                System.Web.Security.FormsAuthentication.RedirectToLoginPage();
                return;
            }
            //throw new HttpException((int)HttpStatusCode.Unauthorized, "Unauthorized");
            WebDavAbstractFactory        factory         = new WebDavAbstractFactory();
            WebDavElementStorageProvider storageProvider =
                factory.Create <WebDavElementStorageProvider>(ticket.AbsolutePath.StorageType);

            if (storageProvider == null)
            {
                throw new HttpException((int)HttpStatusCode.BadRequest, "Incorrect URI.");
            }


            //Запускаем механизм обработки web dav запроса
            WebDavTicketRequest  request  = new WebDavTicketRequest(context.Request, ePluginToken.webdav);
            WebDavTicketResponse response = new WebDavTicketResponse(context.Response);

            WebDavApplication.DefaultProvider = storageProvider;

            try
            {
                bool enableTrace = Convert.ToBoolean(ConfigurationManager.AppSettings[ConstEnableTrace]);
                if (enableTrace)
                {
                    WebDavTracer.TraceBinaryBody = false;
                    WebDavTracer.EnableTrace     = true;
                }
            }
            catch (FormatException)
            {
            }


            if (request.HttpMethod == WebDavHttpMethod.GET)
            {
                //для get запросов выключаем буферизацию для работы с большими файлами
                context.Response.BufferOutput = false;
                //Некоторые браузеры кешируют результаты GET запроса при редактировании на сервере.
                //Установка expires равную текущей дате позволят указать браузеру что кеширование не требуется
                HttpCachePolicy cache = HttpContext.Current.Response.Cache;
                cache.SetExpires(DateTime.Now);

                //Если для запрошенного файла стоит флаг ForceDownload и не включен фдаг WebDav
                //то вернуть как attachment для выбора пользователем приложения для работы с документом
                if (!string.IsNullOrEmpty(ticket.AbsolutePath.FileName))
                {
                    string fileExtension = Path.GetExtension(ticket.AbsolutePath.FileName);
                    if (!ContentTypeResolver.IsWebDAVSupportedExtension(fileExtension) &&
                        ContentTypeResolver.IsAllowForceDownload(fileExtension))
                    {
                        context.Response.AddHeader("Content-Disposition", "attachment;" + "filename=" + ticket.AbsolutePath.FileName);
                    }
                }
            }

            WebDavApplication.ProcessRequest(request, response);

            //}
            //catch (HttpException ex)
            //{
            //    // Http Exception
            //    context.Response.Clear();

            //    context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            //    context.Response.StatusCode = ex.GetHttpCode();
            //    context.Response.StatusDescription = ex.Message;
            //}
            //catch (Exception ex)
            //{
            //    // Global Exception
            //    context.Response.Clear();

            //    context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            //    context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            //    context.Response.StatusDescription = ex.Message;

            //    byte[] errorBuffer = System.Text.Encoding.UTF8.GetBytes(ex.ToString());
            //    context.Response.OutputStream.Write(errorBuffer, 0, errorBuffer.Length);
            //}

            //context.Response.Flush();
        }