public void StoreAuthToken(LivemeAuthentication authentication) { using (var db = _dbContextFactory.CreateApplicationDbContext()) { var found = db.LivemeAuthentication.FirstOrDefault(); if (found != null) { db.LivemeAuthentication.Remove(found); } db.LivemeAuthentication.Add(authentication); db.SaveChanges(); } }
public async Task Login() { var foundInDb = _dataAccess.FindAuthToken(); if (foundInDb != null) { double secondsSinceLastLogin = DateTime.UtcNow.ToUnixTimestamp() - foundInDb.LoginTimestamp; if (secondsSinceLastLogin < TimeSpan.FromMinutes(30).TotalSeconds) { return; } } if (_settings.Email == null || _settings.Password == null) { throw new ArgumentException("Either email or password was not provided"); } var request = AuthRequest(_settings.Email, _settings.Password); var res = await _client.Fetch(request, CancellationToken.None); dynamic json = JsonConvert.DeserializeObject(res); var authentication = new LivemeAuthentication { Sid = json.data.sid, SsoToken = json.data.sso_token }; var loginRequest = HttpRequestBuilder .Post(LiveMeUrls.AppLogin) .WithFormData( new { sso_token = authentication.SsoToken }); var loginResponse = await _client.Fetch(loginRequest, CancellationToken.None); dynamic loginData = JsonConvert.DeserializeObject(loginResponse); authentication.Tuid = loginData.data.user.user_info.uid; authentication.Token = loginData.data.token; authentication.LoginTimestamp = DateTime.UtcNow.ToUnixTimestamp(); _dataAccess.StoreAuthToken(authentication); }