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());
        }
示例#2
0
        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);
        }
示例#3
0
        // 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));
        }
示例#4
0
        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);
 }
示例#7
0
        public ActionResult Index()
        {
            var model = new MaintenanceViewModel
            {
                Caches = _cachingAppService.GetAllCaches().Items
            };

            return View(model);
        }
示例#8
0
        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));
        }
示例#9
0
        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));
        }
示例#10
0
        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 }));
        }
示例#11
0
        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));
        }
示例#12
0
        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);
        }
示例#13
0
        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));
            }
        }
示例#15
0
        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));
        }
示例#16
0
        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);
        }
示例#17
0
        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 }));
            }
        }
示例#18
0
 // 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)));
        }
示例#21
0
        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);
        }
示例#22
0
 //POST Update Maintenance
 public bool EditMaintenance(MaintenanceViewModel maintenance)
 {
     return(_maintenancesRepository.EditMaintenance(_mapper.Map <Maintenance>(maintenance)));
 }
示例#23
0
        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);
        }
示例#25
0
 public MaintenanceView()
 {
     InitializeComponent();
     BindingContext = new MaintenanceViewModel();
 }
示例#26
0
        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);
        }
示例#27
0
 //Add a new maintenance
 public int AddMaintenance(MaintenanceViewModel maintenance)
 {
     return(_maintenancesRepository.AddMaintenance(_mapper.Map <Maintenance>(maintenance)));
 }