/// <summary> /// Calculates the URL to redirect the user to Flickr web site for /// authentication. Used by desktop application. /// See <see cref="AuthGetFrob"/> for example code. /// </summary> /// <param name="frob">The FROB to be used for authentication.</param> /// <param name="authLevel">The <see cref="AuthLevel"/> stating the maximum authentication level your application requires.</param> /// <returns>The url to redirect the user to.</returns> public string AuthCalcUrl(string frob, AuthLevel authLevel) { if (sharedSecret == null) { throw new SignatureRequiredException(); } string hash = sharedSecret + "api_key" + apiKey + "frob" + frob + "perms" + UtilityMethods.AuthLevelToString(authLevel); hash = UtilityMethods.MD5Hash(hash); string url = AuthUrl + "?api_key=" + apiKey + "&perms=" + UtilityMethods.AuthLevelToString(authLevel) + "&frob=" + frob; url += "&api_sig=" + hash; return(url); }
void IFlickrParsable.Load(XmlReader reader) { if (reader.LocalName != "comment") { UtilityMethods.CheckParsingException(reader); } while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "id": CommentId = reader.Value; break; case "author": AuthorUserId = reader.Value; break; case "authorname": AuthorUserName = reader.Value; break; case "permalink": Permalink = reader.Value; break; case "datecreate": DateCreated = UtilityMethods.UnixTimestampToDate(reader.Value); break; case "iconserver": IconServer = reader.Value; break; case "iconfarm": IconFarm = reader.Value; break; case "path_alias": PathAlias = reader.Value; break; case "realname": AuthorRealName = reader.Value; break; case "author_is_deleted": AuthorIsDeleted = reader.Value == "1"; break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); CommentHtml = reader.ReadContentAsString(); reader.Skip(); }
void IFlickrParsable.Load(XmlReader reader) { while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "created": DateCreated = UtilityMethods.UnixTimestampToDate(reader.Value); break; case "alpha": Alpha = reader.ReadContentAsDouble(); break; case "count_points": PointCount = reader.ReadContentAsInt(); break; case "count_edges": EdgeCount = reader.ReadContentAsInt(); break; case "has_donuthole": HasDonutHole = reader.Value == "1"; break; case "is_donuthole": IsDonutHole = reader.Value == "1"; break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); while (reader.NodeType != XmlNodeType.EndElement) { switch (reader.LocalName) { case "polylines": reader.Read(); while (reader.LocalName == "polyline") { var polyline = new Collection <PointD>(); string polystring = reader.ReadElementContentAsString(); string[] points = polystring.Split(' '); foreach (string point in points) { string[] xy = point.Split(','); if (xy.Length != 2) { throw new ParsingException("Invalid polypoint found in polyline : '" + polystring + "'"); } polyline.Add(new PointD(double.Parse(xy[0], NumberFormatInfo.InvariantInfo), double.Parse(xy[1], NumberFormatInfo.InvariantInfo))); } PolyLines.Add(polyline); } reader.Read(); break; case "urls": reader.Skip(); break; } } reader.Read(); }
/// <summary> /// Calculates the signature for an OAuth call. /// </summary> /// <param name="method">POST or GET method.</param> /// <param name="url">The URL the request will be sent to.</param> /// <param name="parameters">Parameters to be added to the signature.</param> /// <param name="tokenSecret">The token secret (either request or access) for generating the SHA-1 key.</param> /// <returns>Base64 encoded SHA-1 hash.</returns> public string OAuthCalculateSignature(string method, string url, Dictionary <string, string> parameters, string tokenSecret) { string baseString = ""; string key = ApiSecret + "&" + tokenSecret; byte[] keyBytes = System.Text.Encoding.UTF8.GetBytes(key); #if !SILVERLIGHT var sorted = new SortedList <string, string>(); foreach (KeyValuePair <string, string> pair in parameters) { sorted.Add(pair.Key, pair.Value); } #else var sorted = parameters.OrderBy(p => p.Key); #endif var sb = new StringBuilder(); foreach (KeyValuePair <string, string> pair in sorted) { sb.Append(pair.Key); sb.Append("="); sb.Append(UtilityMethods.EscapeOAuthString(pair.Value)); sb.Append("&"); } sb.Remove(sb.Length - 1, 1); baseString = method + "&" + UtilityMethods.EscapeOAuthString(url) + "&" + UtilityMethods.EscapeOAuthString(sb.ToString()); #if WindowsCE FlickrNet.Security.Cryptography.HMACSHA1 sha1 = new FlickrNet.Security.Cryptography.HMACSHA1(keyBytes); #else var sha1 = new System.Security.Cryptography.HMACSHA1(keyBytes); #endif byte[] hashBytes = sha1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(baseString)); string hash = Convert.ToBase64String(hashBytes); return(hash); }
/// <summary> /// Returns the authorization URL for OAuth authorization, based off the request token and permissions provided. /// </summary> /// <param name="requestToken">The request token to include in the authorization url.</param> /// <param name="perms">The permissions being requested.</param> /// <param name="mobile">Should the url be generated be the mobile one or not.</param> /// <returns></returns> public string OAuthCalculateAuthorizationUrl(string requestToken, AuthLevel perms, bool mobile) { string permsString = (perms == AuthLevel.None) ? "" : "&perms=" + UtilityMethods.AuthLevelToString(perms); return("https://" + (mobile?"m":"www") + ".flickr.com/services/oauth/authorize?oauth_token=" + requestToken + permsString); }
private void LoadElements(System.Xml.XmlReader reader) { while (reader.LocalName != "photo") { switch (reader.LocalName) { case "owner": ParseOwner(reader); break; case "title": Title = reader.ReadElementContentAsString(); break; case "description": Description = reader.ReadElementContentAsString(); break; case "visibility": ParseVisibility(reader); break; case "permissions": ParsePermissions(reader); break; case "editability": ParseEditability(reader); break; case "publiceditability": ParsePublicEditability(reader); break; case "dates": ParseDates(reader); break; case "usage": ParseUsage(reader); break; case "comments": CommentsCount = reader.ReadElementContentAsInt(); break; case "notes": ParseNotes(reader); break; case "tags": ParseTags(reader); break; case "urls": ParseUrls(reader); break; case "location": Location = new PlaceInfo(); ((IFlickrParsable)Location).Load(reader); break; case "geoperms": GeoPermissions = new GeoPermissions(); ((IFlickrParsable)GeoPermissions).Load(reader); break; case "video": VideoInfo = new VideoInfo(); ((IFlickrParsable)VideoInfo).Load(reader); break; case "people": HasPeople = reader.GetAttribute("haspeople") == "1"; reader.Skip(); break; case "path_alias": PathAlias = reader.Value; break; default: UtilityMethods.CheckParsingException(reader); reader.Skip(); break; } } reader.Skip(); }
private void LoadAttributes(System.Xml.XmlReader reader) { while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "id": PhotoId = reader.Value; break; case "secret": Secret = reader.Value; break; case "server": Server = reader.Value; break; case "farm": Farm = reader.Value; break; case "originalformat": OriginalFormat = reader.Value; break; case "originalsecret": OriginalSecret = reader.Value; break; case "dateuploaded": DateUploaded = UtilityMethods.UnixTimestampToDate(reader.Value); break; case "isfavorite": IsFavorite = reader.Value == "1"; break; case "license": License = (LicenseType)int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "views": ViewCount = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "rotation": Rotation = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "media": Media = reader.Value == "photo" ? MediaType.Photos : MediaType.Videos; break; case "safety_level": SafetyLevel = (SafetyLevel)reader.ReadContentAsInt(); break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); }
void IFlickrParsable.Load(XmlReader reader) { while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "nsid": case "id": GroupId = reader.Value; break; case "iconserver": IconServer = reader.Value; break; case "iconfarm": IconFarm = reader.Value; break; case "lang": Language = reader.Value; break; case "ispoolmoderated": IsPoolModerated = reader.Value == "1"; break; case "path_alias": PathAlias = reader.Value == "" ? null : reader.Value; break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); while (reader.LocalName != "group") { switch (reader.LocalName) { case "name": GroupName = reader.ReadElementContentAsString(); break; case "description": Description = reader.ReadElementContentAsString(); break; case "members": Members = reader.ReadElementContentAsInt(); break; case "privacy": Privacy = (PoolPrivacy)reader.ReadElementContentAsInt(); break; case "blast": BlastDateAdded = UtilityMethods.UnixTimestampToDate(reader.GetAttribute("date_blast_added")); BlastUserId = reader.GetAttribute("user_id"); BlastHtml = reader.ReadElementContentAsString(); break; case "throttle": ThrottleInfo = new GroupThrottleInfo(); ((IFlickrParsable)ThrottleInfo).Load(reader); break; case "restrictions": Restrictions = new GroupInfoRestrictions(); ((IFlickrParsable)Restrictions).Load(reader); break; case "roles": MemberRoleName = reader.GetAttribute("member"); ModeratorRoleName = reader.GetAttribute("moderator"); AdminRoleName = reader.GetAttribute("admin"); reader.Read(); break; case "rules": Rules = reader.ReadElementContentAsString(); break; case "pool_count": PoolCount = reader.ReadElementContentAsInt(); break; case "topic_count": TopicCount = reader.ReadElementContentAsInt(); break; default: UtilityMethods.CheckParsingException(reader); reader.Skip(); break; } } reader.Read(); }
void IFlickrParsable.Load(XmlReader reader) { while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "nsid": GroupId = reader.Value; break; case "name": GroupName = reader.Value; break; case "admin": IsAdmin = reader.Value == "1"; break; case "eighteenplus": EighteenPlus = reader.Value == "1"; break; case "invitation_only": InvitationOnly = reader.Value == "1"; break; case "iconfarm": IconFarm = reader.Value; break; case "iconserver": IconServer = reader.Value; break; case "members": Members = reader.ReadContentAsInt(); break; case "pool_count": PoolCount = reader.ReadContentAsLong(); break; case "is_member": IsMember = reader.Value == "1"; break; case "is_moderator": IsModerator = reader.Value == "1"; break; case "is_admin": IsAdmin = reader.Value == "1"; break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); }
private void LoadAttributes(System.Xml.XmlReader reader) { while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "id": case "nsid": UserId = reader.Value; break; case "ispro": IsPro = reader.Value == "1"; break; case "iconserver": IconServer = reader.Value; break; case "iconfarm": IconFarm = reader.Value; break; case "path_alias": PathAlias = reader.Value; break; case "gender": Gender = reader.Value; break; case "ignored": IsIgnored = reader.Value == "1"; break; case "contact": IsContact = reader.Value == "1"; break; case "friend": IsFriend = reader.Value == "1"; break; case "family": IsFamily = reader.Value == "1"; break; case "revcontact": IsReverseContact = reader.Value == "1"; break; case "revfriend": IsReverseFriend = reader.Value == "1"; break; case "revfamily": IsReverseFamily = reader.Value == "1"; break; case "can_buy_pro": CanBuyPro = reader.Value == "1"; break; case "has_stats": HasStats = reader.Value == "1"; break; case "expire": // TODO: Not sure what the 'expire' attribute signifies. Is it a Bool? break; case "pro_badge": ProBadgeStyle = reader.Value; break; case "upload_count": { UploadCount = int.TryParse(reader.Value, out int i) ? (int?)i : null; break; } case "upload_limit": { if (reader.Value != "-1") { UploadLimit = int.TryParse(reader.Value, out int i) ? (int?)i : null; } break; } case "upload_limit_status": UploadLimitStatus = reader.Value; break; case "is_cognito_user": case "all_rights_reserved_photos_count": break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); }
private void LoadAttributes(System.Xml.XmlReader reader) { while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "name": Description = reader.Value; break; case "place_id": PlaceId = reader.Value; break; case "place_url": PlaceUrl = reader.Value; break; case "place_type_id": PlaceType = (PlaceType)reader.ReadContentAsInt(); break; case "place_type": PlaceType = (PlaceType)Enum.Parse(typeof(PlaceType), reader.Value, true); break; case "woeid": WoeId = reader.Value; break; case "latitude": Latitude = reader.ReadContentAsDouble(); break; case "longitude": Longitude = reader.ReadContentAsDouble(); break; case "accuracy": Accuracy = (GeoAccuracy)reader.ReadContentAsInt(); break; case "context": Context = (GeoContext)reader.ReadContentAsInt(); break; case "timezone": TimeZone = reader.Value; break; case "has_shapedata": HasShapeData = reader.Value == "1"; break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); }
/// <summary> /// Takes the various properties of this instance and adds them to a <see cref="Dictionary{K,V}"/> instanced passed in, ready for sending to Flickr. /// </summary> /// <param name="parameters">The <see cref="Dictionary{K,V}"/> to add the options to.</param> public void AddToDictionary(Dictionary <string, string> parameters) { if (UserId != null && UserId.Length > 0) { parameters.Add("user_id", UserId); } if (GroupId != null && GroupId.Length > 0) { parameters.Add("group_id", GroupId); } if (Text != null && Text.Length > 0) { parameters.Add("text", Text); } if (Tags != null && Tags.Length > 0) { parameters.Add("tags", Tags); } if (TagMode != TagMode.None) { parameters.Add("tag_mode", UtilityMethods.TagModeToString(TagMode)); } if (MachineTags != null && MachineTags.Length > 0) { parameters.Add("machine_tags", MachineTags); } if (MachineTagMode != MachineTagMode.None) { parameters.Add("machine_tag_mode", UtilityMethods.MachineTagModeToString(MachineTagMode)); } if (MinUploadDate != DateTime.MinValue) { parameters.Add("min_upload_date", UtilityMethods.DateToUnixTimestamp(MinUploadDate).ToString()); } if (MaxUploadDate != DateTime.MinValue) { parameters.Add("max_upload_date", UtilityMethods.DateToUnixTimestamp(MaxUploadDate).ToString()); } if (MinTakenDate != DateTime.MinValue) { parameters.Add("min_taken_date", UtilityMethods.DateToMySql(MinTakenDate)); } if (MaxTakenDate != DateTime.MinValue) { parameters.Add("max_taken_date", UtilityMethods.DateToMySql(MaxTakenDate)); } if (Licenses.Count != 0) { List <string> licenseArray = new List <string>(); foreach (LicenseType license in Licenses) { licenseArray.Add(license.ToString("d")); } parameters.Add("license", String.Join(",", licenseArray.ToArray())); } if (PerPage != 0) { parameters.Add("per_page", PerPage.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); } if (Page != 0) { parameters.Add("page", Page.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); } if (Extras != PhotoSearchExtras.None) { parameters.Add("extras", ExtrasString); } if (SortOrder != PhotoSearchSortOrder.None) { parameters.Add("sort", SortOrderString); } if (PrivacyFilter != PrivacyFilter.None) { parameters.Add("privacy_filter", PrivacyFilter.ToString("d")); } if (BoundaryBox != null && BoundaryBox.IsSet) { parameters.Add("bbox", BoundaryBox.ToString()); } if (Accuracy != GeoAccuracy.None) { parameters.Add("accuracy", Accuracy.ToString("d")); } if (SafeSearch != SafetyLevel.None) { parameters.Add("safe_search", SafeSearch.ToString("d")); } if (ContentType != ContentTypeSearch.None) { parameters.Add("content_type", ContentType.ToString("d")); } if (HasGeo != null) { parameters.Add("has_geo", HasGeo.Value ? "1" : "0"); } if (Latitude != null) { parameters.Add("lat", Latitude.Value.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); } if (Longitude != null) { parameters.Add("lon", Longitude.Value.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); } if (Radius != null) { parameters.Add("radius", Radius.Value.ToString("0.00000", System.Globalization.NumberFormatInfo.InvariantInfo)); } if (RadiusUnits != RadiusUnit.None) { parameters.Add("radius_units", (RadiusUnits == RadiusUnit.Miles ? "mi" : "km")); } if (Contacts != ContactSearch.None) { parameters.Add("contacts", (Contacts == ContactSearch.AllContacts ? "all" : "ff")); } if (WoeId != null) { parameters.Add("woe_id", WoeId); } if (PlaceId != null) { parameters.Add("place_id", PlaceId); } if (IsCommons) { parameters.Add("is_commons", "1"); } if (InGallery) { parameters.Add("in_gallery", "1"); } if (IsGetty) { parameters.Add("is_getty", "1"); } if (MediaType != MediaType.None) { parameters.Add("media", UtilityMethods.MediaTypeToString(MediaType)); } if (GeoContext != GeoContext.NotDefined) { parameters.Add("geo_context", GeoContext.ToString("d")); } if (Faves) { parameters.Add("faves", "1"); } if (PersonId != null) { parameters.Add("person_id", PersonId); } if (Camera != null) { parameters.Add("camera", Camera); } if (JumpTo != null) { parameters.Add("jump_to", JumpTo); } }
private void LoadAttributes(XmlReader reader) { while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "type": switch (reader.Value) { case "photoset": ItemType = ActivityItemType.Photoset; break; case "photo": ItemType = ActivityItemType.Photo; break; case "gallery": ItemType = ActivityItemType.Gallery; break; } break; case "media": switch (reader.Value) { case "photo": Media = MediaType.Photos; break; case "video": Media = MediaType.Videos; break; } break; case "owner": OwnerId = reader.Value; break; case "ownername": OwnerName = reader.Value; break; case "id": Id = reader.Value; break; case "secret": Secret = reader.Value; break; case "server": Server = reader.Value; break; case "farm": Farm = reader.Value; break; case "iconserver": OwnerServer = reader.Value; break; case "iconfarm": OwnerFarm = reader.Value; break; case "commentsnew": NewComments = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "commentsold": OldComments = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "comments": Comments = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "views": Views = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "photos": Photos = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "more": More = reader.Value == "0"; break; case "primary": PrimaryPhotoId = reader.Value; break; case "notesnew": NewNotes = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "notesold": OldNotes = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "notes": Notes = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "faves": Favorites = int.Parse(reader.Value, System.Globalization.NumberFormatInfo.InvariantInfo); break; case "realname": RealName = reader.Value; break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); }
void IFlickrParsable.Load(XmlReader reader) { if (reader.LocalName != "camera") { UtilityMethods.CheckParsingException(reader); } while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "id": CameraId = reader.Value; break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Read(); while (reader.LocalName != "camera") { switch (reader.LocalName) { case "details": case "images": reader.Read(); break; case "name": CameraName = reader.ReadElementContentAsString(); break; case "megapixels": MegaPixels = reader.ReadElementContentAsString(); break; case "lcd_screen_size": LcdScreenSize = reader.ReadElementContentAsString(); break; case "memory_type": MemoryType = reader.ReadElementContentAsString(); break; case "small": SmallImage = reader.ReadElementContentAsString(); break; case "large": LargeImage = reader.ReadElementContentAsString(); break; default: UtilityMethods.CheckParsingException(reader); break; } } reader.Skip(); }