// Processes a token response object and updates the user's record. // If the user doesn't exist in the database, it will create a record. public static async Task <User> AddOrUpdateUser(string email, TokenRequestSuccessResponse tokenResponse) { // Create a filter to find the record with this email var emailFilter = Builders <User> .Filter.Eq("Email", email); // See if the user exists User user = await userCollection.Find(emailFilter).FirstOrDefaultAsync(); if (null != user) { // User exists, update tokens and expire time var update = Builders <User> .Update.Set("AccessToken", tokenResponse.AccessToken) .Set("RefreshToken", tokenResponse.RefreshToken) .Set("TokenExpires", DateTime.UtcNow.AddSeconds(Int32.Parse(tokenResponse.ExpiresIn) - 300)); var result = await userCollection.UpdateOneAsync(emailFilter, update); } else { // User does not exist, create a new user and add to the database user = new User() { Email = email, AccessToken = tokenResponse.AccessToken, RefreshToken = tokenResponse.RefreshToken, TokenExpires = DateTime.UtcNow.AddSeconds(Int32.Parse(tokenResponse.ExpiresIn) - 300) }; await userCollection.InsertOneAsync(user); } return(user); }
public void UpdateTokens(TokenRequestSuccessResponse tokenResponse) { double expireSeconds = double.Parse(tokenResponse.ExpiresIn); expireSeconds += -300; Tokens = new SessionTokenEntry() { AccessToken = tokenResponse.AccessToken, RefreshToken = tokenResponse.RefreshToken, ExpiresOn = DateTime.UtcNow.AddSeconds(expireSeconds) }; Persist(); }