public ActionResult CreateMaintenance(MaintenanceViewModel viewModel) { if (!ModelState.IsValid) { ModelState.AddModelError("", "MaintenanceProblem"); return(View()); //Redirect tek nje error page } Maintenance maintenance = new Maintenance() { IssueCode = viewModel.IssueCode, //ask DateRaised = DateTime.Now, Category = viewModel.Category, Item = viewModel.Item, Priority = viewModel.Priority, Status = viewModel.Status, Note = viewModel.Note }; _context.Maintenances.Add(maintenance); _context.SaveChanges(); return(View()); }
public MaintenanceViewModel GetMessages(ContextModel context) { var result = new MaintenanceViewModel(); result.vm_messages = GetVueModel(context.ActualMachine, context.ActualPeriod); var data = _messageService.GetOldMaintenanceMessages(context.ActualMachine, context.ActualPeriod); if (data.Count == 0) { result.ignored_messages = new MaintenceVueModel(); result.kpi_messages = new MaintenceVueModel(); } else { result.ignored_messages = GetIgnoredVueModel(data, context.ActualMachine); result.kpi_messages = GetKpiVueModel(data, context.ActualMachine); } if (context.User.Role == enRole.Customer && context.ActualMachine.TimeZone != null) { result.timeZone = context.ActualMachine.TimeZone; } else if (context.User.TimeZone != null) { result.timeZone = context.User.TimeZone; } if (context.User.Role != null) { result.role = (int)context.User.Role; } return(result); }
// GET: /<controller>/ // [Route("api/[controller]")] public ActionResult Index() { //string test = User.Identity.Name; maintenanceViewModel.Username = SessionUtility.utilityUserdataModel.Username; maintenanceViewModel.ID = SessionUtility.utilityUserdataModel.ID; maintenanceViewModel.Name = SessionUtility.utilityUserdataModel.Name; maintenanceViewModel.Email = SessionUtility.utilityUserdataModel.Email; maintenanceViewModel.PhoneNumber = SessionUtility.utilityUserdataModel.PhoneNumber; try { var uri = "api/Maintenance/Get "; List <Maintenance> maintenanceItems; using (HttpClient httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", SessionUtility.utilityToken.AccessToken); httpClient.BaseAddress = new Uri("http://localhost:8961"); Task <String> response = httpClient.GetStringAsync(uri); maintenanceItems = JsonConvert.DeserializeObject <List <Maintenance> >(response.Result); } maintenanceViewModel.MaintenanceOrders = maintenanceItems; } catch (AggregateException e) { } maintenanceViewModel = SessionUtility.utilityMaintenanceViewModel; UpdateMaintenanceViewModel(); return(View(maintenanceViewModel)); }
public async Task <IActionResult> Block(MaintenanceViewModel maintenance /*string roomNumber, DateTime startDate, DateTime endDate*/) { var rooms = _roomService.CanBlockedRoomsAsync(maintenance.Room.RoomNumber, maintenance.StartDate, maintenance.EndDate).Result.ToList(); if (rooms.Count == 1 && rooms[0].RoomNumber.Equals(maintenance.Room.RoomNumber)) { maintenance.Room = rooms[0]; //add a maintenance in db var maintenanceId = _maintenanceService.AddMaintenance(maintenance); ViewBag.Message = $"The room number {maintenance.Room.RoomNumber} has blocked succesfully!"; ViewBag.Controller = "Room"; ViewBag.Action = "Index"; ViewBag.Succes = 1; return(View(nameof(Index), await _maintenanceService.AllMaintenances())); } else if (rooms.Count >= 1) { ViewBag.Message = $"The room number {maintenance.Room.RoomNumber} is not avaliable for blocking! Please have a look at below alternate rooms to block!"; ViewBag.StartDate = maintenance.StartDate; ViewBag.EndDate = maintenance.EndDate; return(View(nameof(BlockConfirmation), rooms)); } ViewBag.Message = $"The room number {maintenance.Room.RoomNumber} is not avaliable for blocking! And there is no alternative room to block. Please choose another period."; return(View(nameof(BlockConfirmation), rooms)); }
public MaintenanceView(MaintenanceViewModel maintenanceViewModel) { InitializeComponent(); this.DataContext = maintenanceViewModel; this.MaintenanceViewModel = maintenanceViewModel; this.dtpkrStarts.SelectedDate = DateTime.Now; this.Loaded += MaintenanceView_Loaded; }
public IActionResult Maintenance() { MaintenanceViewModel vm = new MaintenanceViewModel(); vm.UserName = "******"; vm.DNSDomain = this.Request.Host.Host; if (IPAddress.TryParse(vm.DNSDomain, out var unused)) vm.DNSDomain = null; return View(vm); }
public ActionResult Index() { var model = new MaintenanceViewModel { Caches = _cachingAppService.GetAllCaches().Items }; return View(model); }
public IActionResult Maintenance() { MaintenanceViewModel vm = new MaintenanceViewModel(); vm.CanUseSSH = _sshState.CanUseSSH; vm.DNSDomain = this.Request.Host.Host; if (IPAddress.TryParse(vm.DNSDomain, out var unused)) { vm.DNSDomain = null; } return(View(vm)); }
public IActionResult Maintenance() { MaintenanceViewModel vm = new MaintenanceViewModel(); vm.UserName = "******"; vm.DNSDomain = this.Request.Host.Host; vm.SetConfiguredSSH(_Options.SSHSettings); if (IPAddress.TryParse(vm.DNSDomain, out var unused)) { vm.DNSDomain = null; } return(View(vm)); }
public ActionResult GetCar(MaintenanceViewModel maintenance) { string CarSelected = maintenance.CarType; string usersEmail = maintenance.Email; Session["email"] = usersEmail; var email = (string)Session["email"]; Session["car"] = CarSelected; var car = (string)Session["car"]; return(RedirectToAction("Maintenance", "Maintenance", new { email, car })); }
public IActionResult Maintenance() { MaintenanceViewModel vm = new MaintenanceViewModel(); vm.CanUseSSH = _sshState.CanUseSSH; if (!vm.CanUseSSH) { TempData[WellKnownTempData.ErrorMessage] = "Maintenance feature requires access to SSH properly configured in BTCPayServer configuration."; } vm.DNSDomain = this.Request.Host.Host; if (IPAddress.TryParse(vm.DNSDomain, out var unused)) { vm.DNSDomain = null; } return(View(vm)); }
private IActionResult RunSSH(MaintenanceViewModel vm, string ssh) { ssh = $"sudo bash -c '. /etc/profile.d/btcpay-env.sh && nohup {ssh} > /dev/null 2>&1 & disown'"; var sshClient = vm.CreateSSHClient(this.Request.Host.Host); try { sshClient.Connect(); } catch (Renci.SshNet.Common.SshAuthenticationException) { ModelState.AddModelError(nameof(vm.Password), "Invalid credentials"); sshClient.Dispose(); return(View(vm)); } catch (Exception ex) { var message = ex.Message; if (ex is AggregateException aggrEx && aggrEx.InnerException?.Message != null) { message = aggrEx.InnerException.Message; } ModelState.AddModelError(nameof(vm.UserName), $"Connection problem ({message})"); sshClient.Dispose(); return(View(vm)); } var sshCommand = sshClient.CreateCommand(ssh); sshCommand.CommandTimeout = TimeSpan.FromMinutes(1.0); sshCommand.BeginExecute(ar => { try { Logs.PayServer.LogInformation("Running SSH command: " + ssh); var result = sshCommand.EndExecute(ar); Logs.PayServer.LogInformation("SSH command executed: " + result); } catch (Exception ex) { Logs.PayServer.LogWarning("Error while executing SSH command: " + ex.Message); } sshClient.Dispose(); }); return(null); }
public async Task <IActionResult> BlockAlternate(int?id, DateTime StartDate, DateTime EndDate) { var room = await _roomService.GetRoom((int)id); var maintenance = new MaintenanceViewModel { StartDate = StartDate, EndDate = EndDate, Room = room }; //add a maintenance in db var maintenanceId = _maintenanceService.AddMaintenance(maintenance); ViewBag.Message = $"The room number {room.RoomNumber} has blocked succesfully!"; ViewBag.Succes = 1; return(View(nameof(Index), await _maintenanceService.AllMaintenances())); }
// GET: Maintanance public ActionResult Index(int?id) { using (var db = new Models.watermentdbEntities()) { var model = new MaintenanceViewModel { //Getting desired data from the database, and returning it to the view. Equipments = db.equipments.Include(c => c.alarms).Include(c => c.facilities).ToList(), Location = db.locations.ToList(), Maintenance = db.maintenance.OrderByDescending(x => x.LastMaintenance).DistinctBy (x => x.facilities_Id).OrderBy(x => x.LastMaintenance).Take(10).ToList(), Facilites = db.facilities.ToList(), }; return(View(model)); } }
public async Task <IActionResult> Edit(int id, MaintenanceViewModel maintenance) { if (id != maintenance.MaintenanceId) { return(NotFound()); } if (ModelState.IsValid) { bool res = _maintenanceService.EditMaintenance(maintenance); if (!res) { return(NotFound()); } ViewBag.Message = $"The maintenance with number {maintenance.MaintenanceId} has updated succesfully!"; ViewBag.Succes = 1; return(View(nameof(Index), await _maintenanceService.AllMaintenances())); } return(View(maintenance)); }
private async Task <IActionResult> RunSSH(MaintenanceViewModel vm, string command) { SshClient sshClient = null; try { sshClient = await _Options.SSHSettings.ConnectAsync(); } catch (Exception ex) { var message = ex.Message; if (ex is AggregateException aggrEx && aggrEx.InnerException?.Message != null) { message = aggrEx.InnerException.Message; } ModelState.AddModelError(string.Empty, $"Connection problem ({message})"); return(View(vm)); } _ = RunSSHCore(sshClient, $". /etc/profile.d/btcpay-env.sh && nohup {command} > /dev/null 2>&1 & disown"); return(null); }
public ActionResult Update(MaintenanceViewModel update) { string usersEmail = update.Email; try { dal.UpdateMileage(update.Mileage, update.CarType, update.Email); //Check to see if inspection is checked if (update.Inspection == true) { dal.UpdateInspection(update.CarType, update.Email); } if (update.Spent != null) { string updatedValue = update.Spent.ToString(); dal.UpdateTotalCost(update.CarType, update.Email, Int32.Parse(updatedValue)); } string CarSelected = update.CarType; //string usersEmail = update.Email; Session["email"] = usersEmail; var email = (string)Session["email"]; Session["car"] = CarSelected; var car = (string)Session["car"]; //Check to see if maintenance items are selected if (CheckAndUpdateMaintenanceItems(update)) { return(RedirectToAction("Maintenance", "Maintenance", new { email, car })); } return(RedirectToAction("Maintenance", "Maintenance", new { email, car })); } catch { Session["email"] = usersEmail; var email = (string)Session["email"]; return(RedirectToAction("Maintenance", "Maintenance", new { email })); } }
// GET: /<controller>/ public ActionResult Index() { maintenanceViewModel = SessionUtility.utilityMaintenanceViewModel; return(View(maintenanceViewModel)); }
public async Task<IActionResult> Maintenance(MaintenanceViewModel vm, string command) { if (!ModelState.IsValid) return View(vm); if (command == "changedomain") { if (string.IsNullOrWhiteSpace(vm.DNSDomain)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"Required field"); return View(vm); } vm.DNSDomain = vm.DNSDomain.Trim().ToLowerInvariant(); if (IPAddress.TryParse(vm.DNSDomain, out var unused)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"This should be a domain name"); return View(vm); } if (vm.DNSDomain.Equals(this.Request.Host.Host, StringComparison.InvariantCultureIgnoreCase)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"The server is already set to use this domain"); return View(vm); } var builder = new UriBuilder(); using (var client = new HttpClient(new HttpClientHandler() { ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator })) { try { builder.Scheme = this.Request.Scheme; builder.Host = vm.DNSDomain; if (this.Request.Host.Port != null) builder.Port = this.Request.Host.Port.Value; builder.Path = "runid"; builder.Query = $"expected={RunId}"; var response = await client.GetAsync(builder.Uri); if (!response.IsSuccessStatusCode) { ModelState.AddModelError(nameof(vm.DNSDomain), $"Invalid host ({vm.DNSDomain} is not pointing to this BTCPay instance)"); return View(vm); } } catch (Exception ex) { var messages = new List<object>(); messages.Add(ex.Message); if (ex.InnerException != null) messages.Add(ex.InnerException.Message); ModelState.AddModelError(nameof(vm.DNSDomain), $"Invalid domain ({string.Join(", ", messages.ToArray())})"); return View(vm); } } var error = RunSSH(vm, $"changedomain.sh {vm.DNSDomain}"); if (error != null) return error; builder.Path = null; builder.Query = null; StatusMessage = $"Domain name changing... the server will restart, please use \"{builder.Uri.AbsoluteUri}\""; } else if (command == "update") { var error = RunSSH(vm, $"btcpay-update.sh"); if (error != null) return error; StatusMessage = $"The server might restart soon if an update is available..."; } else { return NotFound(); } return RedirectToAction(nameof(Maintenance)); }
public async Task <IActionResult> Maintenance(MaintenanceViewModel vm, string command) { if (!ModelState.IsValid) { return(View(vm)); } vm.SetConfiguredSSH(_Options.SSHSettings); if (command == "changedomain") { if (string.IsNullOrWhiteSpace(vm.DNSDomain)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"Campo requerido"); return(View(vm)); } vm.DNSDomain = vm.DNSDomain.Trim().ToLowerInvariant(); if (vm.DNSDomain.Equals(this.Request.Host.Host, StringComparison.OrdinalIgnoreCase)) { return(View(vm)); } if (IPAddress.TryParse(vm.DNSDomain, out var unused)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"Este debe ser un nombre de dominio"); return(View(vm)); } if (vm.DNSDomain.Equals(this.Request.Host.Host, StringComparison.InvariantCultureIgnoreCase)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"El servidor ya está configurado para usar este dominio."); return(View(vm)); } var builder = new UriBuilder(); using (var client = new HttpClient(new HttpClientHandler() { ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator })) { try { builder.Scheme = this.Request.Scheme; builder.Host = vm.DNSDomain; var addresses1 = GetAddressAsync(this.Request.Host.Host); var addresses2 = GetAddressAsync(vm.DNSDomain); await Task.WhenAll(addresses1, addresses2); var addressesSet = addresses1.GetAwaiter().GetResult().Select(c => c.ToString()).ToHashSet(); var hasCommonAddress = addresses2.GetAwaiter().GetResult().Select(c => c.ToString()).Any(s => addressesSet.Contains(s)); if (!hasCommonAddress) { ModelState.AddModelError(nameof(vm.DNSDomain), $"Host inválido ({vm.DNSDomain} no apunta a esta instancia de BTCPay)"); return(View(vm)); } } catch (Exception ex) { var messages = new List <object>(); messages.Add(ex.Message); if (ex.InnerException != null) { messages.Add(ex.InnerException.Message); } ModelState.AddModelError(nameof(vm.DNSDomain), $"Dominio inválido ({string.Join(", ", messages.ToArray())})"); return(View(vm)); } } var error = RunSSH(vm, $"changedomain.sh {vm.DNSDomain}"); if (error != null) { return(error); } builder.Path = null; builder.Query = null; StatusMessage = $"Cambio de nombre de dominio ... el servidor se reiniciará, por favor use \"{builder.Uri.AbsoluteUri}\""; } else if (command == "update") { var error = RunSSH(vm, $"btcpay-update.sh"); if (error != null) { return(error); } StatusMessage = $"El servidor podría reiniciarse pronto si hay una actualización disponible..."; } else if (command == "clean") { var error = RunSSH(vm, $"btcpay-clean.sh"); if (error != null) { return(error); } StatusMessage = $"Las viejas imágenes de la ventana acoplable se limpiarán pronto..."; } else { return(NotFound()); } return(RedirectToAction(nameof(Maintenance))); }
public bool CheckAndUpdateMaintenanceItems(MaintenanceViewModel update) { int currentMileage = dal.GetCarMileage(update.CarType, update.Email); if (update.AirFilterBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Air Filter")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Air Filter", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateAirFilterInformation(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.BatteryBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Battery")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Battery", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateBattery(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.BrakesBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Brakes")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Brakes", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateBattery(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.CoolantBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Coolant")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Coolant", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateCoolant(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.EngineDriveBeltsBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Engine Drive Belts")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Engine Drive Belts", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateEngineDriveBelts(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.FuelFilterBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Fuel Filter")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Fuel Filter", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateFuelFilter(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.HVACBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("HVAC")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "HVAC", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateHVAC(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.PowerSteeringBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Power Steering")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Power Steering", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdatePowerSteering(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.RadiatorHosesBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Radiator Hoses")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Radiator Hoses", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateRadiatorHoses(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.SparkPlugsBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Spark Plugs")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Spark Plugs", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateSparkPlugs(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.SuspensionBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Suspension")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Suspension", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateSuspension(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.TiresBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Tires")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Tires", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateTires(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.TransFluidBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Transmission Fluid")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Transmission Fluid", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateTransFluid(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.OilChangeBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Oil Change")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Oil Change", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateOilChange(update.Email, update.CarType, pmList); } catch { return(false); } } if (update.IgnitionSystemBox == true) { int mileageNeededAt = dal.GetMileageNeeded(dal.GetPersonalMaintenanceObjectByName("Ignition System")); int nextNeeded = currentMileage + mileageNeededAt; try { List <PersonalMaintenanceObject> pmList = new List <PersonalMaintenanceObject>() { new PersonalMaintenanceObject() { Name = "Ignition System", LastChecked = update.Mileage, NxtNeeded = nextNeeded } }; dal.UpdateIgnitionSystem(update.Email, update.CarType, pmList); } catch { return(false); } } return(true); }
//POST Update Maintenance public bool EditMaintenance(MaintenanceViewModel maintenance) { return(_maintenancesRepository.EditMaintenance(_mapper.Map <Maintenance>(maintenance))); }
public async Task <IActionResult> Maintenance(MaintenanceViewModel vm, string command) { if (!ModelState.IsValid) { return(View(vm)); } vm.SetConfiguredSSH(_Options.SSHSettings); if (command == "changedomain") { if (string.IsNullOrWhiteSpace(vm.DNSDomain)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"Required field"); return(View(vm)); } vm.DNSDomain = vm.DNSDomain.Trim().ToLowerInvariant(); if (vm.DNSDomain.Equals(this.Request.Host.Host, StringComparison.OrdinalIgnoreCase)) { return(View(vm)); } if (IPAddress.TryParse(vm.DNSDomain, out var unused)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"This should be a domain name"); return(View(vm)); } if (vm.DNSDomain.Equals(this.Request.Host.Host, StringComparison.InvariantCultureIgnoreCase)) { ModelState.AddModelError(nameof(vm.DNSDomain), $"The server is already set to use this domain"); return(View(vm)); } var builder = new UriBuilder(); using (var client = new HttpClient(new HttpClientHandler() { ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator })) { try { builder.Scheme = this.Request.Scheme; builder.Host = vm.DNSDomain; var addresses1 = GetAddressAsync(this.Request.Host.Host); var addresses2 = GetAddressAsync(vm.DNSDomain); await Task.WhenAll(addresses1, addresses2); var addressesSet = addresses1.GetAwaiter().GetResult().Select(c => c.ToString()).ToHashSet(); var hasCommonAddress = addresses2.GetAwaiter().GetResult().Select(c => c.ToString()).Any(s => addressesSet.Contains(s)); if (!hasCommonAddress) { ModelState.AddModelError(nameof(vm.DNSDomain), $"Invalid host ({vm.DNSDomain} is not pointing to this BTCPay instance)"); return(View(vm)); } } catch (Exception ex) { var messages = new List <object>(); messages.Add(ex.Message); if (ex.InnerException != null) { messages.Add(ex.InnerException.Message); } ModelState.AddModelError(nameof(vm.DNSDomain), $"Invalid domain ({string.Join(", ", messages.ToArray())})"); return(View(vm)); } } var error = RunSSH(vm, $"changedomain.sh {vm.DNSDomain}"); if (error != null) { return(error); } builder.Path = null; builder.Query = null; StatusMessage = $"Domain name changing... the server will restart, please use \"{builder.Uri.AbsoluteUri}\""; } else if (command == "update") { var error = RunSSH(vm, $"btcpay-update.sh"); if (error != null) { return(error); } StatusMessage = $"The server might restart soon if an update is available..."; } else { return(NotFound()); } return(RedirectToAction(nameof(Maintenance))); }
public MaintenanceWindow(Employee _employee) { InitializeComponent(); DataContext = new MaintenanceViewModel(_employee); }
public MaintenanceView() { InitializeComponent(); BindingContext = new MaintenanceViewModel(); }
private IActionResult RunSSH(MaintenanceViewModel vm, string ssh) { ssh = $"sudo bash -c '. /etc/profile.d/btcpay-env.sh && nohup {ssh} > /dev/null 2>&1 & disown'"; var sshClient = _Options.SSHSettings == null?vm.CreateSSHClient(this.Request.Host.Host) : new SshClient(_Options.SSHSettings.CreateConnectionInfo()); if (_Options.TrustedFingerprints.Count != 0) { sshClient.HostKeyReceived += (object sender, Renci.SshNet.Common.HostKeyEventArgs e) => { if (_Options.TrustedFingerprints.Count == 0) { Logs.Configuration.LogWarning($"SSH host fingerprint for {e.HostKeyName} is untrusted, start BTCPay with -sshtrustedfingerprints \"{Encoders.Hex.EncodeData(e.FingerPrint)}\""); e.CanTrust = true; // Not a typo, we want the connection to succeed with a warning } else { e.CanTrust = _Options.IsTrustedFingerprint(e.FingerPrint, e.HostKey); if (!e.CanTrust) { Logs.Configuration.LogError($"SSH host fingerprint for {e.HostKeyName} is untrusted, start BTCPay with -sshtrustedfingerprints \"{Encoders.Hex.EncodeData(e.FingerPrint)}\""); } } }; } else { } try { sshClient.Connect(); } catch (Renci.SshNet.Common.SshAuthenticationException) { ModelState.AddModelError(nameof(vm.Password), "Invalid credentials"); sshClient.Dispose(); return(View(vm)); } catch (Exception ex) { var message = ex.Message; if (ex is AggregateException aggrEx && aggrEx.InnerException?.Message != null) { message = aggrEx.InnerException.Message; } ModelState.AddModelError(nameof(vm.UserName), $"Connection problem ({message})"); sshClient.Dispose(); return(View(vm)); } var sshCommand = sshClient.CreateCommand(ssh); sshCommand.CommandTimeout = TimeSpan.FromMinutes(1.0); sshCommand.BeginExecute(ar => { try { Logs.PayServer.LogInformation("Running SSH command: " + ssh); var result = sshCommand.EndExecute(ar); Logs.PayServer.LogInformation("SSH command executed: " + result); } catch (Exception ex) { Logs.PayServer.LogWarning("Error while executing SSH command: " + ex.Message); } sshClient.Dispose(); }); return(null); }
//Add a new maintenance public int AddMaintenance(MaintenanceViewModel maintenance) { return(_maintenancesRepository.AddMaintenance(_mapper.Map <Maintenance>(maintenance))); }