namespace DotNetOpenAuth.ApplicationBlock { using System; using System.Collections.Generic; using DotNetOpenAuth.Messaging; internal class Util { /// /// Enumerates through the individual set bits in a flag enum. /// /// The flags enum value. /// An enumeration of just the set bits in the flags enum. internal static IEnumerable GetIndividualFlags(Enum flags) { long flagsLong = Convert.ToInt64(flags); for (int i = 0; i < sizeof(long) * 8; i++) { // long is the type behind the largest enum // Select an individual application from the scopes. long individualFlagPosition = (long)Math.Pow(2, i); long individualFlag = flagsLong & individualFlagPosition; if (individualFlag == individualFlagPosition) { yield return individualFlag; } } } internal static Uri GetCallbackUrlFromContext() { Uri callback = MessagingUtilities.GetRequestUrlFromContext().StripQueryArgumentsWithPrefix("oauth_"); return callback; } } }