Beispiel #1
0
 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());
     }
 }
Beispiel #2
0
        /* 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());
            }
        }