// [HttpPost]
        public async Task <ActionResult> Backup_Fmt(string id, string format = "json")
        {
            var bk = await BackupsManager.BackupDatabase(
                GetBackupsConnectionString(),
                id,
                Logger
                );

            if (string.IsNullOrWhiteSpace(format))
            {
                return(HttpNotAcceptable(__("No format specified")));
            }

            if (!IsDatabaseAuthorized(User, id))
            {
                return(HttpNotAuthorized());
            }

            if (bk == null)
            {
                return(HttpNotFound(string.Format(__("Unable to create database backup for '{0}'"), id)));
            }

            // Zip hook, direct backup and return result
            if (format.ToLowerInvariant() == @"zip")
            {
                var path     = bk.Path;
                var fileName = Path.GetFileName(path);

                return(File(path, "application/zip", fileName));
            }

            return(FormatResult(format, bk));
        }
        /**
         * Index
         */

        public async Task <ActionResult> Index()
        {
            var bks = DbContext.History
                      .AsEnumerable()
                      .Where(_ => IsDatabaseAuthorized(User, _.Database))
                      .OrderBy(_ => _.Id);

            var dbInfo = await BackupsManager.GetDatabasesInfo(User);

            return(View(new IndexViewModel(dbInfo, bks)));
        }
        public ActionResult BackupsPurge()
        {
            if (BackupsManager.PurgeOldBackups(DbContext, DateTime.Now, Logger))
            {
                AddFlashMessage(__("Outdated backups successfully purged"), FlashMessageType.Success);
            }
            else
            {
                AddFlashMessage(__("An error occurred during purging"), FlashMessageType.Error);
            }

            return(RedirectToAction("Index"));
        }
        public ActionResult Delete(int id)
        {
            var bk = DbContext.History.Find(id);

            if (bk == null)
            {
                return(HttpNotFound(__("Not a valid backup id")));
            }

            if (!User.IsInRole("Admin") && !User.IsInRole("Operator"))
            {
                var bkName = bk.Username;
                var uName  = User.Identity.Name;
                if (bkName == null || uName == null || (bkName.ToLowerInvariant() != User.Identity.Name.ToLowerInvariant()))
                {
                    return(HttpNotAuthorized());
                }
            }

            if (BackupsManager.DeleteBackup(DbContext, bk, Logger))
            {
                try
                {
                    DbContext.SaveChanges();
                    if (Request.IsAjaxRequest())
                    {
                        return(Content(@"OK", "text/plain"));
                    }

                    AddFlashMessage(__("Backup successfully deleted"), FlashMessageType.Success);

                    return(RedirectToAction("Index"));
                }
                catch (Exception ex)
                {
                    Logger.ErrorException(__("While saving database changes"), ex);
                }
            }

            if (Request.IsAjaxRequest())
            {
                return(Content(@"ERR", "text/plain"));
            }

            AddFlashMessage(__("An error occurred while deleting backup."), FlashMessageType.Error);

            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult> Backup(string id)
        {
            if (!IsDatabaseAuthorized(User, id))
            {
                AddFlashMessage(MessageUnauthorizedDatabase, FlashMessageType.Error);
                return(RedirectToAction("Index"));
            }

            var bk = await BackupsManager.BackupDatabase(
                GetBackupsConnectionString(),
                id,
                Logger
                );

            if (bk == null)
            {
                return(HttpNotFound(string.Format(__("Unable to create database backup for '{0}'"), id)));
            }

            return(PartialView("_BackupItem", bk));
        }
Example #6
0
 protected static string GetBackupsConnectionString()
 {
     return(BackupsManager.GetBackupsConnectionString());
 }
        /**
         * Database list as a service
         */

        public async Task <ActionResult> List_Fmt(string format = "json")
        {
            var dbInfo = await BackupsManager.GetDatabasesInfo(User);

            return(FormatResult(format, dbInfo));
        }
 /// <summary>
 /// Is the current <see cref="user"/> authorized to access the database ?
 /// </summary>
 /// <param name="user"><see cref="IPrincipal"/> to test</param>
 /// <param name="database">Database name</param>
 /// <returns>true or false</returns>
 protected bool IsDatabaseAuthorized(IPrincipal user, string database)
 {
     return(BackupsManager.IsDatabaseAuthorized(DbContext, user, database));
 }