Skip to content

Commit

Permalink
feat: Added authorization methods to client interfaces.
Browse files Browse the repository at this point in the history
  • Loading branch information
HavenDV committed Nov 27, 2024
1 parent f24ea46 commit b38cac4
Show file tree
Hide file tree
Showing 70 changed files with 659 additions and 153 deletions.
6 changes: 5 additions & 1 deletion src/libs/AutoSDK.CLI/Commands/GenerateCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,11 @@ private static async Task HandleAsync(
Sources.ClientInterface(x),
}))
.Concat(data.Authorizations
.Select(x => Sources.Authorization(x)))
.SelectMany(x => new []
{
Sources.Authorization(x),
Sources.AuthorizationInterface(x),
}))
.Concat([Sources.MainAuthorizationConstructor(data.Authorizations)])
.Concat(data.AnyOfs
.SelectMany(x => new []
Expand Down
5 changes: 5 additions & 0 deletions src/libs/AutoSDK.SourceGenerators/SdkGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
.SelectAndReportExceptions((x, c) => Sources.Authorization(x, c)
.AsFileWithName(), context, Id)
.AddSource(context);
data
.SelectMany(static (x, _) => x.Authorizations)
.SelectAndReportExceptions((x, c) => Sources.AuthorizationInterface(x, c)
.AsFileWithName(), context, Id)
.AddSource(context);
data
.Select(static (x, _) => x.Authorizations)
.SelectAndReportExceptions((x, c) => Sources.MainAuthorizationConstructor(x, c)
Expand Down
82 changes: 64 additions & 18 deletions src/libs/AutoSDK/Sources/Sources.Authorizations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,7 @@ public sealed partial class {authorization.Settings.ClassName}
{{
{authorization.Flows.Select(x => x.Type switch {
nameof(OpenApiOAuthFlows.ClientCredentials) => $@"
/// <summary>
/// Authorize using OAuth2 authentication with client credentials.
/// </summary>
/// <param name=""clientId""></param>
/// <param name=""clientSecret""></param>
/// <param name=""scope""></param>
/// <param name=""cancellationToken""></param>
/// <inheritdoc/>
public async global::System.Threading.Tasks.Task {authorization.MethodName}WithCredentialsAsync(
string clientId,
string clientSecret,
Expand Down Expand Up @@ -82,17 +76,7 @@ namespace {authorization.Settings.Namespace}
{{
public sealed partial class {authorization.Settings.ClassName}
{{
/// <summary>
/// {(authorization.Type, authorization.Scheme.ToUpperInvariant(), authorization.In) switch
{
(SecuritySchemeType.Http, "BEARER", _) => "Authorize using bearer authentication.",
(SecuritySchemeType.Http, "BASIC", _) => "Authorize using basic authentication.",
(SecuritySchemeType.ApiKey, _, _) => "Authorize using ApiKey authentication.",
_ => string.Empty,
}}
/// </summary>
{authorization.Parameters.Select(x => $@"
/// <param name=""{x}""></param>").Inject()}
/// <inheritdoc/>
public void {authorization.MethodName}(
{authorization.Parameters.Select(x => $@"
string {x},").Inject().TrimEnd(',')})
Expand Down Expand Up @@ -126,6 +110,68 @@ public sealed partial class {authorization.Settings.ClassName}
}}".RemoveBlankLinesWhereOnlyWhitespaces();
}

public static string GenerateAuthorizationInterface(
Authorization authorization)
{
if (authorization.Type is SecuritySchemeType.OpenIdConnect)
{
return string.Empty;
}
if (authorization.Type is SecuritySchemeType.OAuth2)
{
return $@"
#nullable enable
namespace {authorization.Settings.Namespace}
{{
public partial interface I{authorization.Settings.ClassName}
{{
{authorization.Flows.Select(x => x.Type switch {
nameof(OpenApiOAuthFlows.ClientCredentials) => $@"
/// <summary>
/// Authorize using OAuth2 authentication with client credentials.
/// </summary>
/// <param name=""clientId""></param>
/// <param name=""clientSecret""></param>
/// <param name=""scope""></param>
/// <param name=""cancellationToken""></param>
public global::System.Threading.Tasks.Task {authorization.MethodName}WithCredentialsAsync(
string clientId,
string clientSecret,
string scope,
global::System.Threading.CancellationToken cancellationToken = default);
",
_ => string.Empty,
}).Inject()}
}}
}}".RemoveBlankLinesWhereOnlyWhitespaces();
}

return $@"
#nullable enable
namespace {authorization.Settings.Namespace}
{{
public partial interface I{authorization.Settings.ClassName}
{{
/// <summary>
/// {(authorization.Type, authorization.Scheme.ToUpperInvariant(), authorization.In) switch
{
(SecuritySchemeType.Http, "BEARER", _) => "Authorize using bearer authentication.",
(SecuritySchemeType.Http, "BASIC", _) => "Authorize using basic authentication.",
(SecuritySchemeType.ApiKey, _, _) => "Authorize using ApiKey authentication.",
_ => string.Empty,
}}
/// </summary>
{authorization.Parameters.Select(x => $@"
/// <param name=""{x}""></param>").Inject()}
public void {authorization.MethodName}(
{authorization.Parameters.Select(x => $@"
string {x},").Inject().TrimEnd(',')});
}}
}}".RemoveBlankLinesWhereOnlyWhitespaces();
}

public static string GenerateMainAuthorizationConstructor(
Authorization authorization)
{
Expand Down
9 changes: 9 additions & 0 deletions src/libs/AutoSDK/Sources/Sources.cs
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,15 @@ public static FileWithName Authorization(
Text: GenerateAuthorization(authorization));
}

public static FileWithName AuthorizationInterface(
Authorization authorization,
CancellationToken cancellationToken = default)
{
return new FileWithName(
Name: $"{authorization.Settings.Namespace}.I{authorization.Settings.ClassName}.Authorizations.{authorization.FriendlyName}.g.cs",
Text: GenerateAuthorizationInterface(authorization));
}

public static FileWithName MainAuthorizationConstructor(
EquatableArray<Authorization> authorizations,
CancellationToken cancellationToken = default)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using ApiKey authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingApiKeyInHeader(
string apiKey)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//HintName: G.IApi.Authorizations.ApiKeyInHeader.g.cs

#nullable enable

namespace G
{
public partial interface IApi
{
/// <summary>
/// Authorize using ApiKey authentication.
/// </summary>
/// <param name="apiKey"></param>
public void AuthorizeUsingApiKeyInHeader(
string apiKey);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using ApiKey authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingApiKeyInHeader(
string apiKey)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//HintName: G.IApi.Authorizations.ApiKeyInHeader.g.cs

#nullable enable

namespace G
{
public partial interface IApi
{
/// <summary>
/// Authorize using ApiKey authentication.
/// </summary>
/// <param name="apiKey"></param>
public void AuthorizeUsingApiKeyInHeader(
string apiKey);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using ApiKey authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingApiKeyInHeader(
string apiKey)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//HintName: G.IApi.Authorizations.ApiKeyInHeader.g.cs

#nullable enable

namespace G
{
public partial interface IApi
{
/// <summary>
/// Authorize using ApiKey authentication.
/// </summary>
/// <param name="apiKey"></param>
public void AuthorizeUsingApiKeyInHeader(
string apiKey);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using ApiKey authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingApiKeyInHeader(
string apiKey)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//HintName: G.IApi.Authorizations.ApiKeyInHeader.g.cs

#nullable enable

namespace G
{
public partial interface IApi
{
/// <summary>
/// Authorize using ApiKey authentication.
/// </summary>
/// <param name="apiKey"></param>
public void AuthorizeUsingApiKeyInHeader(
string apiKey);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingBearer(
string apiKey)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//HintName: G.IApi.Authorizations.Bearer.g.cs

#nullable enable

namespace G
{
public partial interface IApi
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
public void AuthorizeUsingBearer(
string apiKey);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingBearer(
string apiKey)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//HintName: G.IApi.Authorizations.Bearer.g.cs

#nullable enable

namespace G
{
public partial interface IApi
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
public void AuthorizeUsingBearer(
string apiKey);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingBearer(
string apiKey)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//HintName: G.IApi.Authorizations.Bearer.g.cs

#nullable enable

namespace G
{
public partial interface IApi
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
public void AuthorizeUsingBearer(
string apiKey);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingBearer(
string apiKey)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//HintName: G.IApi.Authorizations.Bearer.g.cs

#nullable enable

namespace G
{
public partial interface IApi
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
public void AuthorizeUsingBearer(
string apiKey);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ namespace G
{
public sealed partial class Api
{
/// <summary>
/// Authorize using bearer authentication.
/// </summary>
/// <param name="apiKey"></param>
/// <inheritdoc/>
public void AuthorizeUsingBearer(
string apiKey)
{
Expand Down
Loading

0 comments on commit b38cac4

Please sign in to comment.