sdk/Util/CallbackHeaderBuilder.cs (92 lines of code) (raw):
/*
* Copyright (C) Alibaba Cloud Computing
* All rights reserved.
*
*/
using System;
using System.Text;
using System.Collections.Generic;
namespace Aliyun.OSS.Util
{
/// <summary>
/// Callback body's format type. The OSS will issue a post request to the callback url with the data specified in the request's callbackbody header.
/// <para>
/// OSS does not validate the data sent to callback url.
/// </para>
/// </summary>
public enum CallbackBodyType
{
/// <summary>
/// Url encoded.
/// </summary>
[StringValue("application/x-www-form-urlencoded")]
Url = 0,
/// <summary>
/// Json encoded
/// </summary>
[StringValue("application/json")]
Json
}
/// <summary>
/// The callback header's builder
/// </summary>
public class CallbackHeaderBuilder
{
/// <summary>
/// Gets or sets the callback url such as “http://callback.oss.demo.com:9000”
/// </summary>
public string CallbackUrl { get; set; }
/// <summary>
/// Gets or sets the callback host.By default it's <see cref="CallbackHeaderBuilder.CallbackUrl"/>
/// </summary>
public string CallbackHost { get; set; }
/// <summary>
/// Gets or sets the callback body.
/// </summary>
public string CallbackBody { get; set; }
/// <summary>
/// Gets or sets the callback body type.
/// </summary>
public CallbackBodyType CallbackBodyType { get; set; }
/// <summary>
/// Creates a new instance of <see cref="CallbackHeaderBuilder" />
/// </summary>
/// <param name="callbackUrl">callback url</param>
/// <param name="callbackBody">callback body</param>
public CallbackHeaderBuilder(string callbackUrl, string callbackBody)
{
CallbackUrl = callbackUrl;
CallbackHost = null;
CallbackBody = callbackBody;
CallbackBodyType = CallbackBodyType.Url;
}
/// <summary>
/// Creates a new instance of <see cref="CallbackHeaderBuilder" />
/// </summary>
/// <param name="callbackUrl">callback url</param>
/// <param name="callbackHost"> callback host</param>
/// <param name="callbackBody">callback body</param>
/// <param name="callbackBodyType">callback body type</param>
public CallbackHeaderBuilder(string callbackUrl, string callbackHost, string callbackBody, CallbackBodyType callbackBodyType)
{
CallbackUrl = callbackUrl;
CallbackHost = callbackHost;
CallbackBody = callbackBody;
CallbackBodyType = callbackBodyType;
}
/// <summary>
/// Builds the callback header.
/// </summary>
/// <returns>the callback header</returns>
public string Build()
{
if (CallbackUrl == null || CallbackBody == null)
{
throw new ArgumentException("Callback argument invalid");
}
var stringBuilder = new StringBuilder();
stringBuilder.Append("{");
stringBuilder.Append(String.Format("\"callbackUrl\":\"{0}\"", CallbackUrl));
if (CallbackHost != null)
{
stringBuilder.Append(String.Format(",\"callbackHost\":\"{0}\"", CallbackHost));
}
stringBuilder.Append(String.Format(",\"callbackBody\":\"{0}\"", CallbackBody));
if (CallbackBodyType == CallbackBodyType.Json)
{
stringBuilder.Append(String.Format(",\"callbackBodyType\":\"application/json\""));
}
stringBuilder.Append("}");
return Convert.ToBase64String(Encoding.Default.GetBytes(stringBuilder.ToString()));
}
}
/// <summary>
/// The callback variable header builder.
/// </summary>
public class CallbackVariableHeaderBuilder
{
private readonly IDictionary<string, string> _callbackVariable = new Dictionary<string, string>();
/// <summary>
/// Gets the callback variable dictionary.
/// </summary>
/// <remarks>
/// The custom parameter's key must start with "x:" and be in lowercase.
/// </remarks>
public IDictionary<string, string> CallbackVariable
{
get { return _callbackVariable; }
}
/// <summary>
/// Adds the callback variable
/// </summary>
/// <param name="key">the custom variable, must start with "x:"</param>
/// <param name="value">the value of the custom variable.</param>
public CallbackVariableHeaderBuilder AddCallbackVariable(string key, string value)
{
if (!key.StartsWith("x:"))
{
throw new ArgumentException("Callback variable key invalid");
}
_callbackVariable.Add(key, value);
return this;
}
/// <summary>
/// Builds the callback variables' header value
/// </summary>
/// <returns>The callback variables' header value</returns>
public string Build()
{
if (_callbackVariable.Count == 0)
{
return "";
}
var stringBuilder = new StringBuilder();
stringBuilder.Append("{");
foreach (var entry in _callbackVariable)
{
if (stringBuilder.Length > 1)
{
stringBuilder.Append(",");
}
stringBuilder.Append(String.Format("\"{0}\":\"{1}\"", entry.Key, entry.Value));
}
stringBuilder.Append("}");
return Convert.ToBase64String(Encoding.Default.GetBytes(stringBuilder.ToString()));
}
}
}