private bool TryAuthorize <T>(ChunkedRequestHelper <T> request) { if (request.Type(InstanceCrypto) == ChunkedRequestType.Initiate) { TenantManager.SetCurrentTenant(request.TenantId); SecurityContext.AuthenticateMe(AuthManager.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, request.AuthKey(InstanceCrypto))); var cultureInfo = request.CultureInfo(SetupInfo); if (cultureInfo != null) { Thread.CurrentThread.CurrentUICulture = cultureInfo; } return(true); } if (!string.IsNullOrEmpty(request.UploadId)) { var uploadSession = ChunkedUploadSessionHolder.GetSession(request.UploadId); if (uploadSession != null) { TenantManager.SetCurrentTenant(uploadSession.TenantId); SecurityContext.AuthenticateMe(AuthManager.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, uploadSession.UserId)); var culture = SetupInfo.EnabledCulturesPersonal.Find(c => string.Equals(c.Name, uploadSession.CultureName, StringComparison.InvariantCultureIgnoreCase)); if (culture != null) { Thread.CurrentThread.CurrentUICulture = culture; } return(true); } } return(false); }
private bool TryAuthorize <T>(ChunkedRequestHelper <T> request) { if (request.Type(InstanceCrypto) == ChunkedRequestType.Initiate) { TenantManager.SetCurrentTenant(request.TenantId); SecurityContext.AuthenticateMeWithoutCookie(AuthManager.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, request.AuthKey(InstanceCrypto))); var cultureInfo = request.CultureInfo(SetupInfo); if (cultureInfo != null) { Thread.CurrentThread.CurrentUICulture = cultureInfo; } return(true); } if (!string.IsNullOrEmpty(request.UploadId)) { var uploadSession = ChunkedUploadSessionHolder.GetSession <T>(request.UploadId); if (uploadSession != null) { TenantManager.SetCurrentTenant(uploadSession.TenantId); SecurityContext.AuthenticateMeWithoutCookie(AuthManager.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, uploadSession.UserId)); var culture = SetupInfo.GetPersonalCulture(uploadSession.CultureName).Value; if (culture != null) { Thread.CurrentThread.CurrentUICulture = culture; } return(true); } } return(false); }
public async Task Invoke <T>(HttpContext context) { try { if (context.Request.Method == "OPTIONS") { context.Response.StatusCode = 200; return; } var request = new ChunkedRequestHelper <T>(context.Request); if (!TryAuthorize(request)) { await WriteError(context, "Can't authorize given initiate session request or session with specified upload id already expired"); return; } if (TenantManager.GetCurrentTenant().Status != TenantStatus.Active) { await WriteError(context, "Can't perform upload for deleted or transfering portals"); return; } switch (request.Type(InstanceCrypto)) { case ChunkedRequestType.Abort: FileUploader.AbortUpload <T>(request.UploadId); await WriteSuccess(context, null); return; case ChunkedRequestType.Initiate: var createdSession = FileUploader.InitiateUpload(request.FolderId, request.FileId, request.FileName, request.FileSize, request.Encrypted); await WriteSuccess(context, ChunkedUploadSessionHelper.ToResponseObject(createdSession, true)); return; case ChunkedRequestType.Upload: var resumedSession = FileUploader.UploadChunk <T>(request.UploadId, request.ChunkStream, request.ChunkSize); if (resumedSession.BytesUploaded == resumedSession.BytesTotal) { await WriteSuccess(context, ToResponseObject(resumedSession.File), (int)HttpStatusCode.Created); FilesMessageService.Send(resumedSession.File, MessageAction.FileUploaded, resumedSession.File.Title); } else { await WriteSuccess(context, ChunkedUploadSessionHelper.ToResponseObject(resumedSession)); } return; default: await WriteError(context, "Unknown request type."); return; } } catch (FileNotFoundException error) { Logger.Error(error); await WriteError(context, FilesCommonResource.ErrorMassage_FileNotFound); } catch (Exception error) { Logger.Error(error); await WriteError(context, error.Message); } }