Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public partial interface ISightengineClient
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>

public void AuthorizeUsingBearer(
string apiKey);
}
Expand Down
34 changes: 34 additions & 0 deletions src/libs/Sightengine/Generated/Sightengine.PathBuilder.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,40 @@ public PathBuilder AddOptionalParameter<T>(
return this;
}

/// <summary>
/// Adds a pre-serialized query string fragment to the URL.
/// </summary>
/// <param name="value">The serialized query string value.</param>
/// <returns>The current <see cref="PathBuilder"/> instance.</returns>
public PathBuilder AddRawQueryString(
string value)
{
if (string.IsNullOrWhiteSpace(value))
{
return this;
}

value = value.TrimStart('?', '&');
if (value.Length == 0)
{
return this;
}

if (_firstParameter)
{
_stringBuilder.Append('?');
_firstParameter = false;
}
else
{
_stringBuilder.Append('&');
}

_stringBuilder.Append(value);

return this;
}

/// <summary>
/// Returns the constructed URL as a string.
/// </summary>
Expand Down
145 changes: 145 additions & 0 deletions src/libs/Sightengine/Generated/Sightengine.Security.g.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
#nullable enable

namespace Sightengine
{
internal sealed class EndPointAuthorizationRequirement
{
internal string Type { get; set; } = string.Empty;

internal string Location { get; set; } = string.Empty;

internal string Name { get; set; } = string.Empty;

internal string FriendlyName { get; set; } = string.Empty;
}

internal sealed class EndPointSecurityRequirement
{
internal global::System.Collections.Generic.IReadOnlyList<EndPointAuthorizationRequirement> Authorizations { get; set; } =
global::System.Array.Empty<EndPointAuthorizationRequirement>();
}

internal static class EndPointSecurityResolver
{
internal static global::System.Collections.Generic.List<EndPointAuthorization> ResolveAuthorizations(
global::System.Collections.Generic.IReadOnlyList<EndPointAuthorization> availableAuthorizations,
global::System.Collections.Generic.IReadOnlyList<EndPointSecurityRequirement> securityRequirements,
string operationName)
{
availableAuthorizations = availableAuthorizations ?? throw new global::System.ArgumentNullException(nameof(availableAuthorizations));
securityRequirements = securityRequirements ?? throw new global::System.ArgumentNullException(nameof(securityRequirements));
operationName = operationName ?? throw new global::System.ArgumentNullException(nameof(operationName));

if (securityRequirements.Count == 0)
{
return new global::System.Collections.Generic.List<EndPointAuthorization>();
}

var allowsAnonymous = false;

foreach (var requirement in securityRequirements)
{
if (requirement.Authorizations.Count == 0)
{
allowsAnonymous = true;
continue;
}

var selected = new global::System.Collections.Generic.List<EndPointAuthorization>(requirement.Authorizations.Count);
var satisfied = true;

foreach (var requiredAuthorization in requirement.Authorizations)
{
var found = false;

for (var i = 0; i < availableAuthorizations.Count; i++)
{
if (!Matches(availableAuthorizations[i], requiredAuthorization))
{
continue;
}

selected.Add(availableAuthorizations[i]);
found = true;
break;
}

if (!found)
{
satisfied = false;
break;
}
}

if (satisfied)
{
return selected;
}
}

if (allowsAnonymous)
{
return new global::System.Collections.Generic.List<EndPointAuthorization>();
}

throw new global::System.InvalidOperationException(
$"Operation '{operationName}' requires one of the configured security alternatives: {DescribeRequirements(securityRequirements)}.");
}

private static bool Matches(
EndPointAuthorization availableAuthorization,
EndPointAuthorizationRequirement requiredAuthorization)
{
if (!string.Equals(availableAuthorization.Type, requiredAuthorization.Type, global::System.StringComparison.Ordinal))
{
return false;
}

return requiredAuthorization.Type switch
{
"OAuth2" => true,
"Http" => string.Equals(
availableAuthorization.Name,
requiredAuthorization.Name,
global::System.StringComparison.Ordinal),
"ApiKey" => string.Equals(
availableAuthorization.Location,
requiredAuthorization.Location,
global::System.StringComparison.Ordinal) &&
string.Equals(
availableAuthorization.Name,
requiredAuthorization.Name,
global::System.StringComparison.Ordinal),
_ => string.Equals(
availableAuthorization.Location,
requiredAuthorization.Location,
global::System.StringComparison.Ordinal) &&
string.Equals(
availableAuthorization.Name,
requiredAuthorization.Name,
global::System.StringComparison.Ordinal),
};
}

private static string DescribeRequirements(
global::System.Collections.Generic.IReadOnlyList<EndPointSecurityRequirement> securityRequirements)
{
var parts = new global::System.Collections.Generic.List<string>(securityRequirements.Count);

foreach (var requirement in securityRequirements)
{
if (requirement.Authorizations.Count == 0)
{
parts.Add("anonymous");
continue;
}

parts.Add(string.Join(
" + ",
global::System.Linq.Enumerable.Select(requirement.Authorizations, static x => x.FriendlyName)));
}

return string.Join(" or ", parts);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,23 @@ namespace Sightengine
{
public sealed partial class SightengineClient
{

/// <inheritdoc/>
public void AuthorizeUsingBearer(
string apiKey)
{
apiKey = apiKey ?? throw new global::System.ArgumentNullException(nameof(apiKey));

Authorizations.Clear();
for (var i = Authorizations.Count - 1; i >= 0; i--)
{
var __authorization = Authorizations[i];
if (__authorization.Type == "Http" &&
__authorization.Name == "Bearer")
{
Authorizations.RemoveAt(i);
}
}

Authorizations.Add(new global::Sightengine.EndPointAuthorization
{
Type = "Http",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,25 @@ namespace Sightengine
{
public partial class SightengineClient
{


private static readonly global::Sightengine.EndPointSecurityRequirement s_CheckImageByUploadSecurityRequirement0 =
new global::Sightengine.EndPointSecurityRequirement
{
Authorizations = new global::Sightengine.EndPointAuthorizationRequirement[]
{ new global::Sightengine.EndPointAuthorizationRequirement
{
Type = "Http",
Location = "Header",
Name = "Bearer",
FriendlyName = "Bearer",
},
},
};
private static readonly global::Sightengine.EndPointSecurityRequirement[] s_CheckImageByUploadSecurityRequirements =
new global::Sightengine.EndPointSecurityRequirement[]
{ s_CheckImageByUploadSecurityRequirement0,
};
partial void PrepareCheckImageByUploadArguments(
global::System.Net.Http.HttpClient httpClient,
global::Sightengine.CheckImageByUploadRequest request);
Expand Down Expand Up @@ -44,9 +63,15 @@ partial void ProcessCheckImageByUploadResponseContent(
httpClient: HttpClient,
request: request);


var __authorizations = global::Sightengine.EndPointSecurityResolver.ResolveAuthorizations(
availableAuthorizations: Authorizations,
securityRequirements: s_CheckImageByUploadSecurityRequirements,
operationName: "CheckImageByUploadAsync");

var __pathBuilder = new global::Sightengine.PathBuilder(
path: "/check.json",
baseUri: HttpClient.BaseAddress);
baseUri: HttpClient.BaseAddress);
var __path = __pathBuilder.ToString();
using var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
method: global::System.Net.Http.HttpMethod.Post,
Expand All @@ -56,7 +81,7 @@ partial void ProcessCheckImageByUploadResponseContent(
__httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
#endif

foreach (var __authorization in Authorizations)
foreach (var __authorization in __authorizations)
{
if (__authorization.Type == "Http" ||
__authorization.Type == "OAuth2")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,25 @@ namespace Sightengine
{
public partial class SightengineClient
{


private static readonly global::Sightengine.EndPointSecurityRequirement s_CheckImageByUrlSecurityRequirement0 =
new global::Sightengine.EndPointSecurityRequirement
{
Authorizations = new global::Sightengine.EndPointAuthorizationRequirement[]
{ new global::Sightengine.EndPointAuthorizationRequirement
{
Type = "Http",
Location = "Header",
Name = "Bearer",
FriendlyName = "Bearer",
},
},
};
private static readonly global::Sightengine.EndPointSecurityRequirement[] s_CheckImageByUrlSecurityRequirements =
new global::Sightengine.EndPointSecurityRequirement[]
{ s_CheckImageByUrlSecurityRequirement0,
};
partial void PrepareCheckImageByUrlArguments(
global::System.Net.Http.HttpClient httpClient,
ref string url,
Expand Down Expand Up @@ -46,13 +65,19 @@ partial void ProcessCheckImageByUrlResponseContent(
url: ref url,
models: ref models);


var __authorizations = global::Sightengine.EndPointSecurityResolver.ResolveAuthorizations(
availableAuthorizations: Authorizations,
securityRequirements: s_CheckImageByUrlSecurityRequirements,
operationName: "CheckImageByUrlAsync");

var __pathBuilder = new global::Sightengine.PathBuilder(
path: "/check.json",
baseUri: HttpClient.BaseAddress);
__pathBuilder
.AddRequiredParameter("url", url)
.AddRequiredParameter("models", models)
;
;
var __path = __pathBuilder.ToString();
using var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
method: global::System.Net.Http.HttpMethod.Get,
Expand All @@ -62,7 +87,7 @@ partial void ProcessCheckImageByUrlResponseContent(
__httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
#endif

foreach (var __authorization in Authorizations)
foreach (var __authorization in __authorizations)
{
if (__authorization.Type == "Http" ||
__authorization.Type == "OAuth2")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,25 @@ namespace Sightengine
{
public partial class SightengineClient
{


private static readonly global::Sightengine.EndPointSecurityRequirement s_CheckTextSecurityRequirement0 =
new global::Sightengine.EndPointSecurityRequirement
{
Authorizations = new global::Sightengine.EndPointAuthorizationRequirement[]
{ new global::Sightengine.EndPointAuthorizationRequirement
{
Type = "Http",
Location = "Header",
Name = "Bearer",
FriendlyName = "Bearer",
},
},
};
private static readonly global::Sightengine.EndPointSecurityRequirement[] s_CheckTextSecurityRequirements =
new global::Sightengine.EndPointSecurityRequirement[]
{ s_CheckTextSecurityRequirement0,
};
partial void PrepareCheckTextArguments(
global::System.Net.Http.HttpClient httpClient,
global::Sightengine.CheckTextRequest request);
Expand Down Expand Up @@ -44,9 +63,15 @@ partial void ProcessCheckTextResponseContent(
httpClient: HttpClient,
request: request);


var __authorizations = global::Sightengine.EndPointSecurityResolver.ResolveAuthorizations(
availableAuthorizations: Authorizations,
securityRequirements: s_CheckTextSecurityRequirements,
operationName: "CheckTextAsync");

var __pathBuilder = new global::Sightengine.PathBuilder(
path: "/text/check.json",
baseUri: HttpClient.BaseAddress);
baseUri: HttpClient.BaseAddress);
var __path = __pathBuilder.ToString();
using var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
method: global::System.Net.Http.HttpMethod.Post,
Expand All @@ -56,7 +81,7 @@ partial void ProcessCheckTextResponseContent(
__httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
#endif

foreach (var __authorization in Authorizations)
foreach (var __authorization in __authorizations)
{
if (__authorization.Type == "Http" ||
__authorization.Type == "OAuth2")
Expand Down
Loading