/// <summary> /// For a given request token and verifier string return an access token. /// </summary> /// <param name="requestToken"></param> /// <param name="requestTokenSecret"></param> /// <param name="verifier"></param> /// <returns></returns> public OAuthAccessToken OAuthGetAccessToken(string requestToken, string requestTokenSecret, string verifier) { CheckApiKey(); string url = "https://www.flickr.com/services/oauth/access_token"; Dictionary <string, string> parameters = OAuthGetBasicParameters(); parameters.Add("oauth_verifier", verifier); parameters.Add("oauth_token", requestToken); string sig = OAuthCalculateSignature("POST", url, parameters, requestTokenSecret); parameters.Add("oauth_signature", sig); string response = FlickrResponder.GetDataResponse(this, url, parameters); var accessToken = FlickrNet.OAuthAccessToken.ParseResponse(response); // Set current access token. OAuthAccessToken = accessToken.Token; OAuthAccessTokenSecret = accessToken.TokenSecret; return(accessToken); }
/// <summary> /// Get an <see cref="OAuthRequestToken"/> for the given callback URL. /// </summary> /// <remarks>Specify 'oob' as the callback for no callback to be performed.</remarks> /// <param name="callback">The callback Uri, or 'oob' if no callback is to be performed.</param> /// <returns></returns> public OAuthRequestToken OAuthGetRequestToken(string callback) { string url = "http://www.flickr.com/services/oauth/request_token"; Dictionary <string, string> parameters = OAuthGetBasicParameters(); parameters.Add("oauth_callback", callback); string sig = OAuthCalculateSignature("POST", url, parameters, null); parameters.Add("oauth_signature", sig); string response = FlickrResponder.GetDataResponse(this, url, parameters);; return(OAuthRequestToken.ParseResponse(response)); }
internal T GetResponse <T>(IDictionary <string, string> parameters) where T : class, IFlickrParsable, new() { if (!parameters.ContainsKey("oauth_consumer_key")) { parameters.Add("oauth_consumer_key", ApiKey); } var result = FlickrResponder.GetDataResponse(this, BaseApiUrl, parameters); LastResponse = result; if (typeof(T).IsEnum) { return(default(T)); } if (typeof(T).GetInterface("FlickrNet.IFlickrParsable") != null) { using (var reader = new XmlTextReader(new StringReader(result))) { reader.WhitespaceHandling = WhitespaceHandling.None; if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") { throw ExceptionHandler.CreateResponseException(reader); } } reader.MoveToElement(); reader.Read(); var item = new T(); item.Load(reader); return(item); } } return(default(T)); }
private T GetResponse <T>(Dictionary <string, string> parameters, TimeSpan cacheTimeout) where T : IFlickrParsable, new() { // Flow for GetResponse. // 1. Check API Key // 2. Calculate Cache URL. // 3. Check Cache for URL. // 4. Get Response if not in cache. // 5. Write Cache. // 6. Parse Response. CheckApiKey(); parameters["api_key"] = ApiKey; // If performing one of the old 'flickr.auth' methods then use old authentication details. var method = parameters["method"]; // User of obsolete AuthToken property while we transition over to the new OAuth authentication process. #pragma warning disable 612,618 if (method.StartsWith("flickr.auth") && !method.EndsWith("oauth.checkToken")) { if (!String.IsNullOrEmpty(AuthToken)) { parameters["auth_token"] = AuthToken; } } else { // If OAuth Token exists or no authentication required then use new OAuth if (!String.IsNullOrEmpty(OAuthAccessToken) || String.IsNullOrEmpty(AuthToken)) { parameters.Remove("api_key"); OAuthGetBasicParameters(parameters); if (!String.IsNullOrEmpty(OAuthAccessToken)) { parameters["oauth_token"] = OAuthAccessToken; } } else { parameters["auth_token"] = AuthToken; } } #pragma warning restore 612,618 var url = CalculateUri(parameters, !String.IsNullOrEmpty(sharedSecret)); lastRequest = url; string responseXml; if (InstanceCacheDisabled) { responseXml = FlickrResponder.GetDataResponse(this, BaseUri.AbsoluteUri, parameters); } else { var urlComplete = url; var cached = (ResponseCacheItem)Cache.Responses.Get(urlComplete, cacheTimeout, true); if (cached != null) { Debug.WriteLine("Cache hit."); responseXml = cached.Response; } else { Debug.WriteLine("Cache miss."); responseXml = FlickrResponder.GetDataResponse(this, BaseUri.AbsoluteUri, parameters); var resCache = new ResponseCacheItem(new Uri(urlComplete), responseXml, DateTime.UtcNow); Cache.Responses.Shrink(Math.Max(0, Cache.CacheSizeLimit - responseXml.Length)); Cache.Responses[urlComplete] = resCache; } } lastResponse = responseXml; //responseXml = responseXml.Trim(); var reader = new XmlTextReader(new StringReader(responseXml)) { WhitespaceHandling = WhitespaceHandling.None, }; if (!reader.ReadToDescendant("rsp")) { throw new XmlException("Unable to find response element 'rsp' in Flickr response"); } while (reader.MoveToNextAttribute()) { if (reader.LocalName == "stat" && reader.Value == "fail") { throw ExceptionHandler.CreateResponseException(reader); } } reader.MoveToElement(); reader.Read(); var item = new T(); item.Load(reader); return(item); }
private T GetResponse <T>(Dictionary <string, string> parameters, TimeSpan cacheTimeout) where T : IFlickrParsable, new() { // Flow for GetResponse. // 1. Check API Key // 2. Calculate Cache URL. // 3. Check Cache for URL. // 4. Get Response if not in cache. // 5. Write Cache. // 6. Parse Response. CheckApiKey(); parameters["api_key"] = ApiKey; // If performing one of the old 'flickr.auth' methods then use old authentication details. var method = parameters["method"]; // User of obsolete AuthToken property while we transition over to the new OAuth authentication process. #pragma warning disable 612,618 if (method.StartsWith("flickr.auth", StringComparison.Ordinal) && !method.EndsWith("oauth.checkToken", StringComparison.Ordinal)) { if (!string.IsNullOrEmpty(AuthToken)) { parameters["auth_token"] = AuthToken; } } else { // If OAuth Token exists or no authentication required then use new OAuth if (!string.IsNullOrEmpty(OAuthAccessToken) || string.IsNullOrEmpty(AuthToken)) { parameters.Remove("api_key"); OAuthGetBasicParameters(parameters); if (!string.IsNullOrEmpty(OAuthAccessToken)) { parameters["oauth_token"] = OAuthAccessToken; } } else { parameters["auth_token"] = AuthToken; } } #pragma warning restore 612,618 var url = CalculateUri(parameters, !string.IsNullOrEmpty(sharedSecret)); lastRequest = url; string responseXml; if (InstanceCacheDisabled) { responseXml = FlickrResponder.GetDataResponse(this, BaseUri.AbsoluteUri, parameters); } else { var urlComplete = url; var cached = (ResponseCacheItem)Cache.Responses.Get(urlComplete, cacheTimeout, true); if (cached != null) { Debug.WriteLine("Cache hit."); responseXml = cached.Response; } else { Debug.WriteLine("Cache miss."); responseXml = FlickrResponder.GetDataResponse(this, BaseUri.AbsoluteUri, parameters); var resCache = new ResponseCacheItem(new Uri(urlComplete), responseXml, DateTime.UtcNow); Cache.Responses.Shrink(Math.Max(0, Cache.CacheSizeLimit - responseXml.Length)); Cache.Responses[urlComplete] = resCache; } } lastResponse = responseXml; var item = new T(); item.Load(responseXml); return(item); }