public ActionResult RestaurarBackup(ArquivoModel model) { //Se não tiver login, encaminhar para a tela de login if (string.IsNullOrWhiteSpace(SessaoUsuario.SessaoLogin.Identificacao)) { return(RedirectToAction("Login", "Usuario")); } if (!SessaoUsuario.SessaoLogin.Administrador) { ViewBag.MensagemErro = "Para restaurar um backup é necessário " + $"logar com um usuário administrador."; return(View("SemPermissao")); } //Validar a model recebida if (!ModelState.IsValid) { return(View(model)); } //Converter para DTO RequisicaoArquivoDto requisicaoDto = new RequisicaoArquivoDto { Identificacao = SessaoUsuario.SessaoLogin.Identificacao, IdUsuario = SessaoUsuario.SessaoLogin.IdUsuario }; string mensagemErro = ""; if (!model.ConverterModelParaDto(ref requisicaoDto, ref mensagemErro)) { ModelState.AddModelError("", $"Erro ao converter para Dto: {mensagemErro}"); return(View(model)); } //Preparar requisição e retorno RetornoDto retorno = new RetornoDto(); //Consumir o serviço RecursosBdBll recursosBll = new RecursosBdBll(); recursosBll.RestaurarBackup(requisicaoDto, ref retorno); //Verificar o retorno if (retorno.Retorno == false) { //Se houver erro, exibir na tela de inclusão ModelState.AddModelError("", retorno.Mensagem); return(View(model)); } TempData["Retorno"] = "BACKUPRESTAURADO"; //Retornar para inicio return(RedirectToAction("Inicio", "Usuario")); }
/// <summary> /// Restaura o banco de dados a partir do backup /// </summary> /// <param name="requisicaoDto"></param> /// <param name="retornoDto"></param> /// <returns></returns> public bool RestaurarBackup(RequisicaoArquivoDto requisicaoDto, ref RetornoDto retornoDto) { string mensagemErro = ""; if (!UtilitarioBll.ValidarIdentificacao(requisicaoDto.Identificacao, requisicaoDto.IdUsuario, ref mensagemErro)) { retornoDto.Retorno = false; retornoDto.Mensagem = mensagemErro; logBll.ResgistrarLog(requisicaoDto, LogRecursos.RestaurarBackup, Guid.Empty, mensagemErro); return(false); } try { PizzaByteContexto context = new PizzaByteContexto(); Byte[] bytes = Convert.FromBase64String(requisicaoDto.ArquivoBase64); string comandosSql = Encoding.UTF8.GetString(bytes); string backupDescriptografado = ""; if (!UtilitarioBll.DescriptografarString(comandosSql, ref backupDescriptografado)) { retornoDto.Retorno = false; retornoDto.Mensagem = "Erro ao criptografar o backup"; logBll.ResgistrarLog(requisicaoDto, LogRecursos.RestaurarBackup, Guid.Empty, retornoDto.Mensagem); return(false); } using (SqlConnection conn = new SqlConnection(context.Database.Connection.ConnectionString)) { Server server = new Server(new ServerConnection(conn)); if (server.ConnectionContext.ExecuteNonQuery(backupDescriptografado) < 0) { retornoDto.Mensagem = "Falha ao restaurar o backup: "; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.RestaurarBackup, Guid.Empty, retornoDto.Mensagem); return(false); } } retornoDto.Retorno = true; return(true); } catch (Exception ex) { retornoDto.Mensagem = "Falha ao restaurar o backup: " + ex.Message; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.RestaurarBackup, Guid.Empty, retornoDto.Mensagem); return(false); } }
/// <summary> /// Converte o arquivo para dto /// </summary> /// <param name="arquivoDto"></param> /// <param name="mensagemErro"></param> /// <returns></returns> public bool ConverterModelParaDto(ref RequisicaoArquivoDto arquivoDto, ref string mensagemErro) { try { arquivoDto.ArquivoBase64 = string.IsNullOrWhiteSpace(this.ArquivoBase64) ? "" : this.ArquivoBase64.Trim(); return(true); } catch (Exception ex) { mensagemErro = ex.Message; return(false); } }