public async Task<int> CreateOauthAccessToken(IDbConnection db, OauthAccessToken oauthAccessToken)
 {
     string sqlQuery = @"INSERT INTO oauth_access_token(service, identity, access_token, game_id)
                         VALUES (@service, @identity, @access_token, @game_id)
                              RETURNING id";
     var obj = await db.QueryAsync<int>(sqlQuery, oauthAccessToken);
     return obj.FirstOrDefault();
 }
        public async Task<object> ThirdPartyLogin(Game game, string token, HttpRequest request)
        {
            string accessToken = request.Params["access_token"];
            string service = GetService(request.Params["ttype"]);

            StringBuilder tokenBuilder = new StringBuilder();
            tokenBuilder.Append(game.id.ToString());
            tokenBuilder.Append(request.Params["action"]);
            tokenBuilder.Append(accessToken);
            tokenBuilder.Append(game.guid);
            tokenBuilder.Append(request.Params["tstamp"]);

            string generatedToken = Helper.CalculateMD5Hash(tokenBuilder.ToString());
            if (string.Compare(token, generatedToken, true) == 0)
            {
                var api = ProxyApi.Instance;
                string oauthAccountID = api.IDRetriever(service, accessToken);
                var oauthAccessToken = (await api.GetOauthAccessToken(service, oauthAccountID, game.id)).Data;
                if (oauthAccessToken == null)
                {
                    oauthAccessToken = new OauthAccessToken()
                    {
                        service = service,
                        identity = oauthAccountID,
                        game_id = game.id,
                        access_token = accessToken
                    };
                    await api.CreateOauthAccessToken(oauthAccessToken);
                }
                else
                {
                    await api.UpdateOauthAccessToken(oauthAccessToken.id, accessToken);
                }
                var result = await GoplayService.Instance.SendAPIRequest<ResultResponse>(new Dictionary<string, string>() {
                    { ConstantValues.S_IP_ADDRESS, request.UserHostAddress},
                    { ConstantValues.S_SERVICE, service},
                    { ConstantValues.S_TOKEN, accessToken},
                    { ConstantValues.S_GAME_ID, game.guid},
                }, EGoPlayAction.LoginOauth, true);

                if (result != null && result.error_code == ErrorCodes.NON_EXISTING_OAUTH.ToErrorCode())
                    result.onlyID = oauthAccountID;
                return result;
            }
            return FailResult(ErrorCodes.INVALID_TOKEN.ToErrorCode());
        }