csharp.Configuration.mustache Maven / Gradle / Ivy
{{>partial_header}}
using System;
using System.Reflection;
{{^net35}}
using System.Collections.Concurrent;
{{/net35}}
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace {{packageName}}.Client
{
///
/// Represents a set of configuration settings
///
{{>visibility}} class Configuration : IReadableConfiguration
{
#region Constants
///
/// Version of the package.
///
/// Version of the package.
public const string Version = "{{packageVersion}}";
///
/// Identifier for ISO 8601 DateTime Format
///
/// See https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 for more information.
// ReSharper disable once InconsistentNaming
public const string ISO8601_DATETIME_FORMAT = "o";
#endregion Constants
#region Static Members
private static readonly object GlobalConfigSync = new { };
private static Configuration _globalConfiguration;
///
/// Default creation of exceptions for a given method name and response object
///
public static readonly ExceptionFactory DefaultExceptionFactory = (methodName, response) =>
{
var status = (int)response.StatusCode;
if (status >= 400)
{
return new ApiException(status,
string.Format("Error calling {0}: {1}", methodName, response.Content),
response.Content);
}
{{^netStandard}}if (status == 0)
{
return new ApiException(status,
string.Format("Error calling {0}: {1}", methodName, response.ErrorMessage), response.ErrorMessage);
}{{/netStandard}}
return null;
};
///
/// Gets or sets the default Configuration.
///
/// Configuration.
public static Configuration Default
{
get { return _globalConfiguration; }
set
{
lock (GlobalConfigSync)
{
_globalConfiguration = value;
}
}
}
#endregion Static Members
#region Private Members
///
/// Gets or sets the API key based on the authentication name.
///
/// The API key.
private IDictionary _apiKey = null;
///
/// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name.
///
/// The prefix of the API key.
private IDictionary _apiKeyPrefix = null;
private string _dateTimeFormat = ISO8601_DATETIME_FORMAT;
private string _tempFolderPath = Path.GetTempPath();
#endregion Private Members
#region Constructors
static Configuration()
{
_globalConfiguration = new GlobalConfiguration();
}
///
/// Initializes a new instance of the class
///
public Configuration()
{
UserAgent = "{{#httpUserAgent}}{{.}}{{/httpUserAgent}}{{^httpUserAgent}}OpenAPI-Generator/{{packageVersion}}/csharp{{/httpUserAgent}}";
BasePath = "{{{basePath}}}";
DefaultHeader = new {{^net35}}Concurrent{{/net35}}Dictionary();
ApiKey = new {{^net35}}Concurrent{{/net35}}Dictionary();
ApiKeyPrefix = new {{^net35}}Concurrent{{/net35}}Dictionary();
// Setting Timeout has side effects (forces ApiClient creation).
Timeout = 100000;
}
///
/// Initializes a new instance of the class
///
public Configuration(
IDictionary defaultHeader,
IDictionary apiKey,
IDictionary apiKeyPrefix,
string basePath = "{{{basePath}}}") : this()
{
if (string.{{^net35}}IsNullOrWhiteSpace{{/net35}}{{#net35}}IsNullOrEmpty{{/net35}}(basePath))
throw new ArgumentException("The provided basePath is invalid.", "basePath");
if (defaultHeader == null)
throw new ArgumentNullException("defaultHeader");
if (apiKey == null)
throw new ArgumentNullException("apiKey");
if (apiKeyPrefix == null)
throw new ArgumentNullException("apiKeyPrefix");
BasePath = basePath;
foreach (var keyValuePair in defaultHeader)
{
DefaultHeader.Add(keyValuePair);
}
foreach (var keyValuePair in apiKey)
{
ApiKey.Add(keyValuePair);
}
foreach (var keyValuePair in apiKeyPrefix)
{
ApiKeyPrefix.Add(keyValuePair);
}
}
///
/// Initializes a new instance of the class with different settings
///
/// Api client
/// Dictionary of default HTTP header
/// Username
/// Password
/// accessToken
/// Dictionary of API key
/// Dictionary of API key prefix
/// Temp folder path
/// DateTime format string
/// HTTP connection timeout (in milliseconds)
/// HTTP user agent
[Obsolete("Use explicit object construction and setting of properties.", true)]
public Configuration(
// ReSharper disable UnusedParameter.Local
ApiClient apiClient = null,
IDictionary defaultHeader = null,
string username = null,
string password = null,
string accessToken = null,
IDictionary apiKey = null,
IDictionary apiKeyPrefix = null,
string tempFolderPath = null,
string dateTimeFormat = null,
int timeout = 100000,
string userAgent = "{{#httpUserAgent}}{{.}}{{/httpUserAgent}}{{^httpUserAgent}}OpenAPI-Generator/{{packageVersion}}/csharp{{/httpUserAgent}}"
// ReSharper restore UnusedParameter.Local
)
{
}
///
/// Initializes a new instance of the Configuration class.
///
/// Api client.
[Obsolete("This constructor caused unexpected sharing of static data. It is no longer supported.", true)]
// ReSharper disable once UnusedParameter.Local
public Configuration(ApiClient apiClient)
{
}
#endregion Constructors
#region Properties
private ApiClient _apiClient = null;
///
/// Gets an instance of an ApiClient for this configuration
///
public virtual ApiClient ApiClient
{
get
{
if (_apiClient == null) _apiClient = CreateApiClient();
return _apiClient;
}
}
private String _basePath = null;
///
/// Gets or sets the base path for API access.
///
public virtual string BasePath {
get { return _basePath; }
set {
_basePath = value;
// pass-through to ApiClient if it's set.
if(_apiClient != null) {
_apiClient.RestClient.BaseUrl = new Uri(_basePath);
}
}
}
///
/// Gets or sets the default header.
///
public virtual IDictionary DefaultHeader { get; set; }
///
/// Gets or sets the HTTP timeout (milliseconds) of ApiClient. Default to 100000 milliseconds.
///
public virtual int Timeout
{
{{#netStandard}}get { return (int)ApiClient.RestClient.Timeout.GetValueOrDefault(TimeSpan.FromSeconds(0)).TotalMilliseconds; }
set { ApiClient.RestClient.Timeout = TimeSpan.FromMilliseconds(value); }{{/netStandard}}{{^netStandard}}
get { return ApiClient.RestClient.Timeout; }
set { ApiClient.RestClient.Timeout = value; }{{/netStandard}}
}
///
/// Gets or sets the HTTP user agent.
///
/// Http user agent.
public virtual string UserAgent { get; set; }
///
/// Gets or sets the username (HTTP basic authentication).
///
/// The username.
public virtual string Username { get; set; }
///
/// Gets or sets the password (HTTP basic authentication).
///
/// The password.
public virtual string Password { get; set; }
///
/// Gets the API key with prefix.
///
/// API key identifier (authentication scheme).
/// API key with prefix.
public string GetApiKeyWithPrefix(string apiKeyIdentifier)
{
var apiKeyValue = "";
ApiKey.TryGetValue (apiKeyIdentifier, out apiKeyValue);
var apiKeyPrefix = "";
if (ApiKeyPrefix.TryGetValue (apiKeyIdentifier, out apiKeyPrefix))
return apiKeyPrefix + " " + apiKeyValue;
else
return apiKeyValue;
}
///
/// Gets or sets the access token for OAuth2 authentication.
///
/// The access token.
public virtual string AccessToken { get; set; }
///
/// Gets or sets the temporary folder path to store the files downloaded from the server.
///
/// Folder path.
public virtual string TempFolderPath
{
get { return _tempFolderPath; }
set
{
if (string.IsNullOrEmpty(value))
{
_tempFolderPath = Path.GetTempPath();
return;
}
// create the directory if it does not exist
if (!Directory.Exists(value))
{
Directory.CreateDirectory(value);
}
// check if the path contains directory separator at the end
if (value[value.Length - 1] == Path.DirectorySeparatorChar)
{
_tempFolderPath = value;
}
else
{
_tempFolderPath = value + Path.DirectorySeparatorChar;
}
}
}
///
/// Gets or sets the date time format used when serializing in the ApiClient
/// By default, it's set to ISO 8601 - "o", for others see:
/// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx
/// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
/// No validation is done to ensure that the string you're providing is valid
///
/// The DateTimeFormat string
public virtual string DateTimeFormat
{
get { return _dateTimeFormat; }
set
{
if (string.IsNullOrEmpty(value))
{
// Never allow a blank or null string, go back to the default
_dateTimeFormat = ISO8601_DATETIME_FORMAT;
return;
}
// Caution, no validation when you choose date time format other than ISO 8601
// Take a look at the above links
_dateTimeFormat = value;
}
}
///
/// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name.
///
/// The prefix of the API key.
public virtual IDictionary ApiKeyPrefix
{
get { return _apiKeyPrefix; }
set
{
if (value == null)
{
throw new InvalidOperationException("ApiKeyPrefix collection may not be null.");
}
_apiKeyPrefix = value;
}
}
///
/// Gets or sets the API key based on the authentication name.
///
/// The API key.
public virtual IDictionary ApiKey
{
get { return _apiKey; }
set
{
if (value == null)
{
throw new InvalidOperationException("ApiKey collection may not be null.");
}
_apiKey = value;
}
}
#endregion Properties
#region Methods
///
/// Add default header.
///
/// Header field name.
/// Header field value.
///
public void AddDefaultHeader(string key, string value)
{
DefaultHeader[key] = value;
}
///
/// Creates a new based on this instance.
///
///
public ApiClient CreateApiClient()
{
return new ApiClient(BasePath) { Configuration = this };
}
///
/// Returns a string with essential information for debugging.
///
public static String ToDebugReport()
{
String report = "C# SDK ({{{packageName}}}) Debug Report:\n";
{{^netStandard}}
{{^supportsUWP}}
report += " OS: " + System.Environment.OSVersion + "\n";
report += " .NET Framework Version: " + System.Environment.Version + "\n";
{{/supportsUWP}}
{{/netStandard}}
{{#netStandard}}
report += " OS: " + System.Runtime.InteropServices.RuntimeInformation.OSDescription + "\n";
{{/netStandard}}
report += " Version of the API: {{{version}}}\n";
report += " SDK Package Version: {{{packageVersion}}}\n";
return report;
}
///
/// Add Api Key Header.
///
/// Api Key name.
/// Api Key value.
///
public void AddApiKey(string key, string value)
{
ApiKey[key] = value;
}
///
/// Sets the API key prefix.
///
/// Api Key name.
/// Api Key value.
public void AddApiKeyPrefix(string key, string value)
{
ApiKeyPrefix[key] = value;
}
#endregion Methods
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy