public IActionResult AttemptLogin([FromBody] DeviceLoginRequest loginRequest) { try { _logger.LogInformation("POST /ClientApp/Login called"); var data = _aquariumAuthService.AttemptLogin(loginRequest).Result; return(new OkObjectResult(data.Account)); } catch (Exception ex) { _logger.LogError($"POST /v1/ClientApp/Login caught exception: { ex.Message } Details: { ex.ToString() }"); _logger.LogError(ex.StackTrace); return(NotFound()); } }
/* Attempt to retrieve login token */ /* First attempt will log user with no aquarium */ /* Second attempt will select an aquarium */ public async Task <DeviceLoginResponse> AttemptLogin(DeviceLoginRequest loginRequest) { var path = $"/v1/Auth/Login/Device"; using (var client = new HttpClient()) { client.BaseAddress = new Uri(_config["AquariumServiceUrl"]); client.Timeout = TimeSpan.FromMinutes(5); var result = await client.PostAsJsonAsync(path, loginRequest); if (!result.IsSuccessStatusCode) { if (result.StatusCode == System.Net.HttpStatusCode.NotFound) { throw new Exception("Invalid request"); } if (result.StatusCode == System.Net.HttpStatusCode.BadRequest) { throw new Exception("Service does not have this device key on record. Please check your device key and IP combination"); } else { throw new Exception(result.ReasonPhrase); } } var res = await result.Content.ReadAsStringAsync(); var response = JsonConvert.DeserializeObject <DeviceLoginResponse>(res); SaveTokenToCache(response); if (loginRequest.AquariumId.HasValue) { _bootstrapSetup(); } //Schedule a renew ScheduleRenewToken(); return(response); } }
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()); } }