public virtual ActionResult Restore(string ID)
        {
            try
            {
                // Fetch database info.
                RestoreSubmission restoreSubmission = new RestoreSubmission();
                DatabaseInfo      database          = MgmtMdl.GetDatabase(ID);
                restoreSubmission.Database = database;

                // Preset form.
                restoreSubmission.Method  = "Select";
                restoreSubmission.Backups = MgmtMdl.GetBackups(User.Identity.GetADUsername(), database.Name, database.Host, restoreSubmission.Database.Host.Protocol.ToLower());
                restoreSubmission.Backups.Insert(0, new SelectListItem {
                    Text = "Select a Backup", Value = "default"
                });

                // Verify user privileges.
                if (database.Owner != User.Identity.GetADUsername())
                {
                    System.Web.HttpContext.Current.Session["StatusMessage"] = "You do not have permisson to access the <strong>" + database.Name + "</strong> database.";
                    return(RedirectToAction("Index", "View"));
                }

                return(View("Restore", restoreSubmission));
            }
            catch (Exception e)
            {
                System.Web.HttpContext.Current.Session["ErrorInfo"] = e.ToString();
                return(RedirectToAction("Error", "View"));
            }
        }
        public virtual ActionResult Restore(RestoreSubmission restoreSubmission, string ID)
        {
            try
            {
                // Reattach database info to submission.
                restoreSubmission.Database = MgmtMdl.GetDatabase(ID);
                restoreSubmission.Backups  = MgmtMdl.GetBackups(User.Identity.GetADUsername(), restoreSubmission.Database.Name, restoreSubmission.Database.Host, restoreSubmission.Database.Host.Protocol.ToLower());
                restoreSubmission.Backups.Insert(0, new SelectListItem {
                    Text = "Select a Backup", Value = "default"
                });

                // Verify data.
                if (!ModelState.IsValid) // Invalid HTML form.
                {
                    return(View(restoreSubmission));
                }
                if (restoreSubmission.Method == "Select" && restoreSubmission.FilePath == "default") // No backup selected.
                {
                    System.Web.HttpContext.Current.Session["StatusMessage"] = "No backup file selected.";
                    return(View(restoreSubmission));
                }
                if (restoreSubmission.Method == "Upload")
                {
                    if (restoreSubmission.File == null) // No backup selected.
                    {
                        System.Web.HttpContext.Current.Session["StatusMessage"] = "No backup file uploaded.";
                        return(View(restoreSubmission));
                    }
                    if (restoreSubmission.File.ContentLength == 0) // Empty backup selected.
                    {
                        System.Web.HttpContext.Current.Session["StatusMessage"] = "Empty file uploaded. Please select a valid " + restoreSubmission.Database.Host.Protocol + " file.";
                        return(View(restoreSubmission));
                    }
                    if (Path.GetExtension(restoreSubmission.File.FileName) != ("." + restoreSubmission.Database.Host.Protocol.ToLower())) // Invalid file extension.
                    {
                        System.Web.HttpContext.Current.Session["StatusMessage"] = "Invalid file uploaded. Please select a valid " + restoreSubmission.Database.Host.Protocol + " file.";
                        return(View(restoreSubmission));
                    }
                }

                // Extract backup file path.
                string filepath = "";
                if (restoreSubmission.Method == "Select")
                {
                    filepath = @"Backups\" + User.Identity.GetADUsername() + @"\" + restoreSubmission.FilePath;
                }

                // Save file, if needed.
                if (restoreSubmission.Method == "Upload")
                {
                    string filename = Path.GetFileName(restoreSubmission.File.FileName);
                    string savepath = Path.Combine(Server.MapPath("/Tmp/Uploads/" + filename));
                    restoreSubmission.File.SaveAs(savepath);
                    filepath = @"Tmp\Uploads\" + filename;
                }

                // Attempt to restore the database.
                IntfcMdl.Restore(restoreSubmission, filepath);

                // Redirect and display success message.
                System.Web.HttpContext.Current.Session["StatusMessage"] = "The database <strong>" + restoreSubmission.Database.Name + "</strong> was restored using <strong>" + Path.GetFileName(filepath) + "</strong>.";
                System.Web.HttpContext.Current.Session["StatusStyle"]   = "success";
                return(RedirectToAction("Database", "View", new { id = restoreSubmission.Database.DatabaseID }));
            }
            catch (Exception e)
            {
                System.Web.HttpContext.Current.Session["ErrorInfo"] = e.ToString();
                return(RedirectToAction("Error", "View"));
            }
        }