/// <summary> /// Uses reflection to infer parameters from the request object and /// adds them to a web request /// </summary> /// <param name="webRequest">web request to receive parameters</param> internal void BuildRequestParameters(TelekomWebRequest webRequest) { PropertyInfo[] properties = this.GetType() .GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); foreach (PropertyInfo property in properties) { HttpParameterAttribute httpParamAttribute = property .GetCustomAttributes(typeof(HttpParameterAttribute), false) .SingleOrDefault() as HttpParameterAttribute; NoHttpParameterAttribute noHttpParamAttribute = property .GetCustomAttributes(typeof(NoHttpParameterAttribute), false) .SingleOrDefault() as NoHttpParameterAttribute; // Check for opt-out serialization attribute if (noHttpParamAttribute == null) { string parameterName; // Name overwritten? if (httpParamAttribute != null) { parameterName = httpParamAttribute.Name; } else { // Infer parameter name from property and change the // first letter to lower-case: OwnerId -> ownerId parameterName = property.Name[0].ToString().ToLower() + property.Name.Substring(1); } object value = property.GetValue(this, null); // Only add defined values if (value != null) { // Determin actual type to allow specific serialization Type actualType = Nullable.GetUnderlyingType(property.PropertyType); if (actualType == null) actualType = property.PropertyType; // Replace enum value if EnumMember attribute is specified if (actualType.IsEnum) { FieldInfo enumFieldInfo = actualType.GetField(value.ToString()); EnumMemberAttribute enumMemberAttrib = enumFieldInfo.GetCustomAttributes(typeof(EnumMemberAttribute), false) .SingleOrDefault() as EnumMemberAttribute; // Enum value overwritten with EnumMember attribute? if (enumMemberAttrib != null) { value = enumMemberAttrib.Value; } else { value = (int)enumFieldInfo.GetValue(property); } } // Convert bool to string if (actualType.Equals(typeof(bool))) { value = (bool)value ? "true" : "false"; } // Convert DateTime to the expected format if (actualType.Equals(typeof(DateTime))) { // Note: Since the service returns times in UTC that is converted to local time // by .NET, we automatically convert it the other way round value = ((DateTime)value) .ToUniversalTime() .ToString("s", System.Globalization.CultureInfo.InvariantCulture); // Add UTC suffix value += "Z"; } if (actualType.Equals(typeof(Stream))) { webRequest.AddParameter(parameterName, (Stream)value); } else { webRequest.AddParameter(parameterName, value.ToString()); } } } } }
private TelekomWebRequest CreateRequestRevokeWebRequest() { if (!HasRefreshToken()) throw new InvalidOperationException("Cannot revoke without a refresh token"); string uri = BaseUrl + "/revoke"; var request = new RevokeRequest() { ClientId = ClientId, ClientSecret = ClientSecret, Token = RefreshToken, TokenType = "refresh_token" }; var webRequest = new TelekomWebRequest(uri, HttpMethod.POST); request.BuildRequestParameters(webRequest); return webRequest; }
/// <summary> /// Prepare a web request to STS server /// </summary> /// <returns></returns> private TelekomWebRequest CreateTokenRequest() { TelekomWebRequest request = new TelekomWebRequest(Url, HttpMethod.GET); request.Credentials = new NetworkCredential(username, password); request.Accept = "text/plain"; return request; }