public AquariumDevice AddAquariumDevice(AquariumDevice device) { var newDevice = _aquariumDao.AddAquariumDevice(device); //_deviceService.SetAquarium(newDevice.Id, device.AquariumId); return(newDevice); }
public IActionResult ApplyDeviceHardware([FromBody] AquariumDevice aquariumDevice) { try { _logger.LogInformation($"POST /v1/DeviceInteraction called"); var userId = _accountService.GetCurrentUserId(); var id = _accountService.GetCurrentAquariumId(); var aquarium = _aquariumService.GetAquariumById(id); if (aquarium.Device == null) { return(BadRequest("This aquarium does not have a device")); } if (!_accountService.CanModify(userId, aquarium)) { return(BadRequest("You do not own this aquarium")); } _logger.LogInformation("Attempting to determine local ip addresses"); var localIp = Request.HttpContext.Connection.LocalIpAddress; var localPort = Request.HttpContext.Connection.LocalPort; var remoteIp = Request.HttpContext.Connection.RemoteIpAddress; var remotePort = Request.HttpContext.Connection.RemotePort; var aquariumPort = aquariumDevice.Port; _logger.LogInformation($"\n" + $"- Local Ip Address: {localIp}:{localPort}" + $"- Remote Ip Address: {remoteIp}:{remotePort}" + $"- Determined Address: {remoteIp}:{aquariumPort}" + $"\n"); //Update IP Information var ip = remoteIp; var port = aquariumPort; if ($"{remoteIp}" == "::1") { ip = localIp; } if (aquarium.Device.Address != $"{ip}" || aquarium.Device.Port != $"{port}") { aquarium.Device.Address = $"{ip}"; aquarium.Device.Port = $"{port}"; aquarium.Device = _aquariumService.UpdateAquariumDevice(userId, aquarium.Device); _notificationService.EmitAsync(userId, "Aquarium Device", $"[{aquarium.Device.Name}] Aquarium device ip/port combination was updated to ${ip}:{port}").Wait(); } aquarium.Device = _aquariumService.ApplyAquariumDeviceHardware(aquarium.Device.Id, aquariumDevice); return(new OkObjectResult(aquarium)); } catch (Exception ex) { _logger.LogError($"POST /v1/DeviceInteraction endpoint caught exception: { ex.Message } Details: { ex.ToString() }"); return(NotFound()); } }
public IActionResult AddAquariumDevice([FromBody] AquariumDevice device) { try { _logger.LogInformation($"POST /v1/Device/Add called"); var newDevice = _aquariumService.AddAquariumDevice(device); return(CreatedAtAction(nameof(UpdateAquariumDevice), new { id = newDevice.Id }, newDevice)); } catch (Exception ex) { _logger.LogError($"POST /v1/Device/Add endpoint caught exception: { ex.Message } Details: { ex.ToString() }"); return(NotFound()); } }
public IActionResult UpdateDeviceInformation([FromBody] AquariumDevice aquariumDevice) { try { _logger.LogInformation("POST /v1/Device called"); _aquariumAuthService.ApplyAquariumDeviceFromService(aquariumDevice); return(Ok()); } catch (Exception ex) { _logger.LogError($"POST /v1/Device endpoint caught exception: { ex.Message } Details: { ex.ToString() }"); _logger.LogError(ex.StackTrace); return(NotFound()); } }
public AquariumDevice ScanHardware() { var port = _hostingEnvironment; var hardware = new AquariumDevice() { Port = _config["Port"], EnabledPhoto = CanTakePhoto(), EnabledTemperature = _serialService.CanRetrieveTemperature(), EnabledNitrate = _serialService.CanRetrieveNitrate(), EnabledPh = _serialService.CanRetrievePh(), }; return(hardware); }
public AquariumDevice UpdateAquariumDevice(int userId, AquariumDevice device) { var updatedDevice = _aquariumDao.UpdateAquariumDevice(device); try { _deviceClient.Configure(updatedDevice); _deviceClient.ApplyUpdatedDevice(updatedDevice); } catch (Exception ex) { //Could not tell devices that we updated _logger.LogError("Could not send update to devices."); _notificationService.EmitAsync(userId, "Aquarium Device", $"[{device.Name}] Unable to connect to aquarium device. Your device may be offline. " + $"We attempted to contact: " + $"${device.Address}:{device.Port}").Wait(); } return(updatedDevice); }
public IActionResult GetPingFromDevice([FromBody] AquariumDevice deviceRequest) { try { _logger.LogInformation($"GET /v1/Device/Ping called"); var host = HttpContext.Connection.RemoteIpAddress.ToString(); _logger.LogInformation($"\n\nHost: ({host}) \n '{deviceRequest.PrivateKey}'"); var device = _aquariumService.GetAquariumDeviceByIpAndKey(host, deviceRequest.PrivateKey); _aquariumService.ApplyAquariumDeviceHardware(device.Id, deviceRequest); return(new OkObjectResult(device)); } catch (Exception ex) { _logger.LogError($"GET /v1/Device/Ping endpoint caught exception: { ex.Message } Details: { ex.ToString() }"); return(BadRequest()); } }
public void ApplyUpdatedDevice(AquariumDevice aquariumDevice) { var path = $"/v1/Device"; using (var client2 = GetHttpClient()) { JsonSerializerSettings jss = new JsonSerializerSettings(); jss.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; var httpContent = new StringContent(JsonConvert.SerializeObject(aquariumDevice, jss), Encoding.UTF8, "application/json"); var result = client2.PostAsync(path, httpContent).Result; if (!result.IsSuccessStatusCode) { _logger.LogError($"{result.StatusCode}: {result.ReasonPhrase}"); _logger.LogError($"Path: {path}"); throw new Exception("Could not send updated device information to device"); } } _logger.LogInformation("Device information updated on device"); }
public IActionResult UpdateAquariumDevice([FromBody] AquariumDevice device) { try { _logger.LogInformation($"POST /v1/Device/Update called"); var id = _accountService.GetCurrentUserId(); var aq = _aquariumService.GetAquariumById(device.AquariumId); if (!_accountService.CanModify(id, aq)) { return(new UnauthorizedResult()); } var updatedDevice = _aquariumService.UpdateAquariumDevice(id, device); return(new OkObjectResult(updatedDevice)); } catch (Exception ex) { _logger.LogError($"POST /v1/Device/Update endpoint caught exception: { ex.Message } Details: { ex.ToString() }"); return(NotFound()); } }
public void Configure(AquariumDevice device) { Device = device; }
public AquariumDevice ApplyAquariumDeviceHardware(int deviceId, AquariumDevice updatedDevice) { return(_aquariumDao.ApplyAquariumDeviceHardware(deviceId, updatedDevice)); }
public IActionResult DeviceLogin([FromBody] DeviceLoginRequest deviceLogin) { try { _logger.LogInformation($"POST /v1/Auth/Login/Device called"); var user = _accountService.AttemptUserCredentials(deviceLogin.Email, deviceLogin.Password); var token = _accountService.IssueDeviceLoginToken(user, deviceLogin.AquariumId); user.Aquariums = _aquariumService.GetAquariumsByAccountId(user.Id); var data = new DeviceLoginResponse { Account = user, Token = token, AquariumId = deviceLogin.AquariumId }; if (deviceLogin.AquariumId.HasValue) { var aq = user.Aquariums.First(a => a.Id == deviceLogin.AquariumId); //Register account login activity _activityService.RegisterActivity(new DeviceLoginAccountActivity() { AccountId = user.Id }); //Dispatch notification stating new login occured _notificationService.EmitAsync(new DispatchedNotification { Date = DateTime.Now.ToUniversalTime(), Type = NotificationTypes.LoginDeviceActivity, DispatcherId = user.Id, Title = "New Device Login", Subtitle = $"Aquarium monitoring device connected to {aq.Name}", }, new List <int>() { user.Id }).Wait(); //If the aquarium did not have a device, create a record for it if (aq.Device == null) { var d = new AquariumDevice { Name = "Remote Login", Type = "RaspberryPi", Address = "", Port = "0", PrivateKey = "", AquariumId = aq.Id }; aq.Device = _aquariumService.AddAquariumDevice(d); } else { aq.Device = _aquariumService.GetAquariumDeviceById(aq.Device.Id); } data.Aquarium = aq; } return(new OkObjectResult(data)); } catch (Exception ex) { _logger.LogError($"POST /v1/Auth/Login/Device endpoint caught exception: { ex.Message } Details: { ex.ToString() }"); return(Unauthorized()); } }
public void ApplyAquariumDeviceFromService(AquariumDevice aquariumDevice) { _token.Aquarium.Device = aquariumDevice; SaveTokenToCache(_token); _bootstrapSetup(); }