private KiiUser CreateCurrentKiiUser(
            Dictionary<string, object> queryParameters)
        {
            string succeeded = (string)queryParameters["kii_succeeded"];
            if (succeeded == "false")
            {
                // server error. fail to login.
                SocialException exception = null;
                string errorCode = (string)queryParameters["kii_error_code"];
                if ("UNAUTHORIZED" == errorCode)
                {
                    exception = new OAuthException(
                        "authorization credentials are rejected by provider");
                }
                else
                {
                    exception = new SocialException(
                        "login failed with error: " + errorCode);
                }
                throw exception;
            }

            if (succeeded != "true")
            {
                // server error. invalid response.
                throw new SocialException("unknown kii_succeed: " + succeeded);
            }

            KiiUser retval = KiiUser.CreateByUri(
                new Uri(Utils.Path("kiicloud://", "users", GetNotEmptyString(
                                    queryParameters, "kii_user_id"))));
            Dictionary<string, object> dictionary =
                new Dictionary<string, object>() {
                    { KiiUser.SocialResultParams.PROVIDER_USER_ID,
                      GetNotEmptyString(queryParameters, "provider_user_id")},
                    { KiiUser.SocialResultParams.PROVIDER, this.provider },
                    { KiiUser.SocialResultParams.KII_NEW_USER,
                      queryParameters["kii_new_user"] }
            };

            // oauth_token and oauth_token_secret are optinal fields.
            if (queryParameters.ContainsKey("oauth_token"))
            {
                dictionary.Add(KiiUser.SocialResultParams.OAUTH_TOKEN,
                        queryParameters["oauth_token"]);
            }
            if (queryParameters.ContainsKey("oauth_token_secret"))
            {
                dictionary.Add(KiiUser.SocialResultParams.OAUTH_TOKEN_SECRET,
                        queryParameters["oauth_token_secret"]);
            }
            if (queryParameters.ContainsKey("kii_expires_in"))
            {
                dictionary.Add("kii_expires_in",
                        queryParameters["kii_expires_in"]);
            }
            if (queryParameters.ContainsKey("oauth_token_expires_in")) {
                dictionary.Add("oauth_token_expires_in",
                    queryParameters["oauth_token_expires_in"]);
            }
            _KiiInternalUtils.SetSocialAccessTokenDictionary(retval,
                    dictionary);

            _KiiInternalUtils.SetCurrentUser(retval);
            _KiiInternalUtils.UpdateAccessToken(GetNotEmptyString(
                        queryParameters, "kii_access_token"));

            return retval;
        }
        private KiiUser CreateCurrentKiiUser(
            Dictionary <string, object> queryParameters)
        {
            string succeeded = (string)queryParameters["kii_succeeded"];

            if (succeeded == "false")
            {
                // server error. fail to login.
                SocialException exception = null;
                string          errorCode = (string)queryParameters["kii_error_code"];
                if ("UNAUTHORIZED" == errorCode)
                {
                    exception = new OAuthException(
                        "authorization credentials are rejected by provider");
                }
                else
                {
                    exception = new SocialException(
                        "login failed with error: " + errorCode);
                }
                throw exception;
            }

            if (succeeded != "true")
            {
                // server error. invalid response.
                throw new SocialException("unknown kii_succeed: " + succeeded);
            }

            KiiUser retval = KiiUser.CreateByUri(
                new Uri(Utils.Path("kiicloud://", "users", GetNotEmptyString(
                                       queryParameters, "kii_user_id"))));
            Dictionary <string, object> dictionary =
                new Dictionary <string, object>()
            {
                { KiiUser.SocialResultParams.PROVIDER_USER_ID,
                  GetNotEmptyString(queryParameters, "provider_user_id") },
                { KiiUser.SocialResultParams.PROVIDER, this.provider },
                { KiiUser.SocialResultParams.KII_NEW_USER,
                  queryParameters["kii_new_user"] }
            };

            // oauth_token and oauth_token_secret are optinal fields.
            if (queryParameters.ContainsKey("oauth_token"))
            {
                dictionary.Add(KiiUser.SocialResultParams.OAUTH_TOKEN,
                               queryParameters["oauth_token"]);
            }
            if (queryParameters.ContainsKey("oauth_token_secret"))
            {
                dictionary.Add(KiiUser.SocialResultParams.OAUTH_TOKEN_SECRET,
                               queryParameters["oauth_token_secret"]);
            }
            if (queryParameters.ContainsKey("kii_expires_in"))
            {
                dictionary.Add("kii_expires_in",
                               queryParameters["kii_expires_in"]);
            }
            if (queryParameters.ContainsKey("oauth_token_expires_in"))
            {
                dictionary.Add("oauth_token_expires_in",
                               queryParameters["oauth_token_expires_in"]);
            }
            _KiiInternalUtils.SetSocialAccessTokenDictionary(retval,
                                                             dictionary);

            _KiiInternalUtils.SetCurrentUser(retval);
            _KiiInternalUtils.UpdateAccessToken(GetNotEmptyString(
                                                    queryParameters, "kii_access_token"));

            return(retval);
        }