public static async Task <string> CreateSfsSession(LoginContext loginContext, string ipAddress, string userAccessToken) { using (var connection = GetMysqlConnection()) { var userLoginId = loginContext.GenerateAppScopedLoginId(); User matchedExistingUser = await GetUser(userLoginId); if (matchedExistingUser == null || !matchedExistingUser.BasicUserInfo.IsRecent()) { var userInfoFacebook = await Facebook.GetUserProfileInfo(loginContext.UserId, userAccessToken); var basicUserInfo = BasicUserInfo.CreateFromUserProfileInfo(userInfoFacebook); await UpdateBasicUserInfo(basicUserInfo, userLoginId, userAccessToken, matchedExistingUser == null); } string cmdText = $"INSERT INTO user_sessions (user_login_id, session_token, ip_address, date_created) VALUES (@userLoginId, @sessionToken, @ipAddress, @dateCreated)"; var cmd = new MySqlCommand(cmdText, connection); cmd.Parameters.AddWithValue("@userLoginId", userLoginId); var sessionToken = Guid.NewGuid().ToString(); cmd.Parameters.AddWithValue("@sessionToken", sessionToken); cmd.Parameters.AddWithValue("@ipAddress", ipAddress); cmd.Parameters.AddWithValue("@dateCreated", Utilities.GetSQLFormattedDateTime(DateTime.Now)); var affectedRows = await cmd.ExecuteNonQueryAsync(); if (affectedRows == 0) { throw new Exception("Could not create a game session. Please try again."); } return(sessionToken); } }
public static async Task <string> CreateGuestSfsSession(LoginContext loginContext, string ipAddress) { using (var connection = GetMysqlConnection()) { var userLoginId = loginContext.GenerateAppScopedLoginId(); var basicUserInfo = BasicUserInfo.CreateGuestBasicUserInfo(); await UpdateBasicUserInfo(basicUserInfo, userLoginId, string.Empty, true); string cmdText = $"INSERT INTO user_sessions (user_login_id, session_token, ip_address, date_created) VALUES (@userLoginId, @sessionToken, @ipAddress, @dateCreated)"; var cmd = new MySqlCommand(cmdText, connection); cmd.Parameters.AddWithValue("@userLoginId", userLoginId); var sessionToken = Guid.NewGuid().ToString(); cmd.Parameters.AddWithValue("@sessionToken", sessionToken); cmd.Parameters.AddWithValue("@ipAddress", ipAddress); cmd.Parameters.AddWithValue("@dateCreated", Utilities.GetSQLFormattedDateTime(DateTime.Now)); var affectedRows = await cmd.ExecuteNonQueryAsync(); if (affectedRows == 0) { throw new Exception("Could not create a game session. Please try again."); } return(sessionToken); } }
public static async Task <LoginResult> Login(string accessToken, string ipAddress, LoginContext loginContext) { try { var userLoginId = loginContext.GenerateAppScopedLoginId(); EnsureAccessTokenNotEmpty(accessToken); var tokenDebugInfo = await Facebook.GetFacebookAccessTokenDebugInfo(accessToken); if (!tokenDebugInfo.IsValid() || tokenDebugInfo.user_id != loginContext.UserId) { throw new Exception("Invalid Access Token. " + tokenDebugInfo.GetErrorMessage()); } var sessionToken = await Database.CreateSfsSession(loginContext, ipAddress, accessToken); string tokenToReturn = accessToken; // not doing this for now. let the user renew his 2 hr token //if (tokenDebugInfo.IsTokenExpiringInLessThanOneDay()) //{ // try // { // tokenToReturn = await Facebook.ExchangeTokenForLongLivedToken(accessToken); // await Database.UpdateUserAccessToken(userLoginId, tokenToReturn); // } // catch (Exception e) // { // // do nothing let go as exchanging token or saving it is not important to stop user login flow. it can be done // // at a later login. // } //} return(LoginResult.CreateSuccess(new { newAccessToken = tokenToReturn == accessToken ? null : tokenToReturn, userLoginId = loginContext.GenerateAppScopedLoginId(), sessionToken = sessionToken })); } catch (Exception e) { return(LoginResult.CreateFailed("Oops! Please try signing in again.")); } }
public static async Task <LoginResult> Login(string requestUserHostAddress, LoginContext loginContext) { try { var sessionToken = await Database.CreateGuestSfsSession(loginContext, requestUserHostAddress); return(LoginResult.CreateSuccess(new { userLoginId = loginContext.GenerateAppScopedLoginId(), sessionToken = sessionToken })); } catch (Exception e) { return(LoginResult.CreateFailed("Oops! Please try signing in again.")); } }