Пример #1
0
        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);
            }
        }
Пример #2
0
        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."));
            }
        }
Пример #4
0
        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."));
            }
        }