public virtual async Task <ActionResult> Editor(FileServerModel model, bool?saveAndContinue)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var record   = _fileServerModelFactory.PrepareTblFileServers(model);
            var recordId = model.Id;

            try
            {
                var server = _fileServersService.GetWebService(record);
                var result = await server.EnumerateFilesAsync("\\", "*.*", false, TimeSpan.Zero, 0).ConfigureAwait(false);

                server.Close();
            }
            catch (Exception ex)
            {
                var errorCode = ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Error(ex, System.Web.HttpContext.Current));
                ModelState.AddModelError("", string.Format(_localizationService.GetResource("ErrorOnOperation"), ex.Message, errorCode));
                return(View(model));
            }

            try
            {
                if (model.Id == null)
                {
                    //Add new record
                    recordId = await _fileServersService.AddAsync(record);
                }
                else
                {
                    //Edit record
                    await _fileServersService.UpdateAsync(record);
                }
            }
            catch (Exception e)
            {
                var errorCode = ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Error(e, System.Web.HttpContext.Current));
                ModelState.AddModelError("", string.Format(_localizationService.GetResource("ErrorOnOperation"), e.Message, errorCode));
                return(View(model));
            }

            if (saveAndContinue != null && saveAndContinue.Value)
            {
                return(RedirectToAction("Editor", "ManageFileServers", new { id = recordId }));
            }

            return(Content(@"<script language='javascript' type='text/javascript'>
                                window.close();
                                window.opener.refreshFileServersGrid();
                             </script>"));
        }
示例#2
0
        public virtual TblFileServers PrepareTblFileServers(FileServerModel fileServer)
        {
            var result = fileServer.Adapt <TblFileServers>();

            return(result);
        }
示例#3
0
 public FtpBackup(Service service, string bucketName) : this(
         FileServerModel.DetermineFileServer(service, BackupType.Ftp), bucketName)
 {
 }
示例#4
0
        public async Task <ActionResult> BackupFile(int id, string file, BackupType backupType = BackupType.S3)
        {
            var service = Service.GetSelectedService();
            var server  = TCAdmin.GameHosting.SDK.Objects.Server.GetSelectedServer();
            var dirsec  = service.GetDirectorySecurityForCurrentUser();
            var vdir    = new TCAdmin.SDK.VirtualFileSystem.VirtualDirectory(server.OperatingSystem, dirsec);

            this.EnforceFeaturePermission("FileManager");
            if (string.IsNullOrEmpty(file))
            {
                return(new JsonHttpStatusResult(new
                {
                    Message = "Please choose a file to backup."
                }, HttpStatusCode.BadRequest));
            }

            var realFileName = Path.GetFileName(file);

            if (realFileName.Any(Path.GetInvalidFileNameChars().Contains) ||
                !Regex.IsMatch(realFileName, @"^[\w\-.@ ]+$"))
            {
                return(new JsonHttpStatusResult(new
                {
                    Message = "File contains invalid characters."
                }, HttpStatusCode.BadRequest));
            }

            var fileSystem     = server.FileSystemService;
            var backupSolution = Backup.ParseBackupSolution(backupType, service);
            var filePath       = vdir.CombineWithPhysicalPath(file);
            var fileSize       = fileSystem.GetFileSize(filePath);

            if (GetBackupsSize(service, backupType) + fileSize > GetBackupsLimit(service, backupType))
            {
                return(new JsonHttpStatusResult(new
                {
                    Message = "Backing up this file will exceed your assigned capacity."
                }, HttpStatusCode.BadRequest));
            }

            if (Backup.DoesBackupExist(service, realFileName, backupType))
            {
                return(new JsonHttpStatusResult(new
                {
                    Message = $"Backup already exists with name <strong>{realFileName}</strong>"
                }, HttpStatusCode.BadRequest));
            }

            var remoteDownload = new RemoteDownload(server)
            {
                DirectorySecurity = service.GetDirectorySecurityForCurrentUser(),
                FileName          = filePath
            };

            var backupName = $"{realFileName}";
            var contents   = GetFileContents(remoteDownload.GetDownloadUrl());

            try
            {
                await backupSolution.Backup(backupName, contents, MimeMapping.GetMimeMapping(realFileName));

                var fileServer = FileServerModel.DetermineFileServer(service, backupType);
                var backup     = new Backup
                {
                    ServiceId    = service.ServiceId,
                    FileServerId = fileServer.FileServerId,
                    FileName     = backupName,
                    BackupType   = backupType,
                };
                backup.CustomFields["SIZE"] = fileSize;
                backup.GenerateKey();
                backup.Save();
            }
            catch (Exception e)
            {
                return(new JsonHttpStatusResult(new
                {
                    Message = "Failed to backup - " + e.Message + " | " + e.StackTrace
                }, HttpStatusCode.InternalServerError));
            }

            return(Json(new
            {
                Message = $"Backed up <strong>{backupName}</strong>"
            }));
        }