public ActionResult Backup(BackupDatabaseDetails data)
        {

           

            if (!UserPermissions.Instance.UserSpecificPermissions[HttpContext.Request.LogonUserIdentity.Name.ToUpper()].BackupFromDatabaseServerList.Contains(data.SourceDatabaseServer))
            {
                throw new Exception("You are unable to take backups from this server.");
            }




            if (data.IsOverride.HasValue && data.IsOverride.Value)
            {
                if (!UserPermissions.Instance.UserSpecificPermissions[HttpContext.Request.LogonUserIdentity.Name.ToUpper()].HasOverwriteBackupDestinationPermission)
                {
                    throw new Exception("You do not have OverwriteBackupDestinationPermission.");
                }
            }else
            {
                dynamic serverObject = JValue.Parse(data.BackupServer);
                if (!UserPermissions.Instance.UserSpecificPermissions[HttpContext.Request.LogonUserIdentity.Name.ToUpper()].BackupToDatabaseServerList.Contains((string)serverObject.BackupDatabaseServer))
                    throw new Exception("You are unable to backup onto this server.");

                data.BackupDestinationPath = DatabaseServers.Instance.ItemsList.First(server => server.Name == (string)serverObject.BackupDatabaseServer).BackupDatabaseNetworkSharePath;

            }

            if (!ModelState.IsValid)
            {
                ViewBag.RestorePermissionServerList = GetBackupToPermissionServerList();
                ViewBag.HasOverwriteBackupDestinationPermission = new Nullable<bool>(UserPermissions.Instance.UserSpecificPermissions[HttpContext.Request.LogonUserIdentity.Name.ToUpper()].HasOverwriteBackupDestinationPermission);
                return View("BackupGetDetails", data);
            }


            IBgTask task = new BackupDatabaseTask(data.SourceDatabaseServer, data.SourceDatabaseName, User.Identity.Name, data.BackupComment,Path.Combine(data.BackupDestinationPath, data.BackupFileName));

            task.Start();
            TaskContainer.Instance.AddTask(task);

            return RedirectToAction("GetProgress", "Task", new { taskGuid = task.ID });




        }
        public ActionResult BackupGetDetails(FormCollection data)
        {

            var model = new BackupDatabaseDetails() { SourceDatabaseName = data["Database"], SourceDatabaseServer = data["Server"], SourceDatabaseSizeGB = decimal.Parse(data["DatabaseSize"]) };

            ViewBag.RestorePermissionServerList = GetBackupToPermissionServerList();
            model.BackupServer = ((List<SelectListItem>)ViewBag.RestorePermissionServerList).Count > 0 ? ((List<SelectListItem>)ViewBag.RestorePermissionServerList)[0].Text: null;
            model.BackupDestinationPath = ((List<SelectListItem>)ViewBag.RestorePermissionServerList).Count > 0 ? ((dynamic)JValue.Parse(((List<SelectListItem>)ViewBag.RestorePermissionServerList)[0].Value)).BackupDatabaseNetworkSharePath : null;
            ViewBag.HasOverwriteBackupDestinationPermission = new Nullable<bool>(UserPermissions.Instance.UserSpecificPermissions[HttpContext.Request.LogonUserIdentity.Name.ToUpper()].HasOverwriteBackupDestinationPermission);

            return View(model);
        }