Skip to content

Commit b38cac4

Browse files
committed
feat: Added authorization methods to client interfaces.
1 parent f24ea46 commit b38cac4

File tree

70 files changed

+659
-153
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+659
-153
lines changed

src/libs/AutoSDK.CLI/Commands/GenerateCommand.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,11 @@ private static async Task HandleAsync(
150150
Sources.ClientInterface(x),
151151
}))
152152
.Concat(data.Authorizations
153-
.Select(x => Sources.Authorization(x)))
153+
.SelectMany(x => new []
154+
{
155+
Sources.Authorization(x),
156+
Sources.AuthorizationInterface(x),
157+
}))
154158
.Concat([Sources.MainAuthorizationConstructor(data.Authorizations)])
155159
.Concat(data.AnyOfs
156160
.SelectMany(x => new []

src/libs/AutoSDK.SourceGenerators/SdkGenerator.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
6767
.SelectAndReportExceptions((x, c) => Sources.Authorization(x, c)
6868
.AsFileWithName(), context, Id)
6969
.AddSource(context);
70+
data
71+
.SelectMany(static (x, _) => x.Authorizations)
72+
.SelectAndReportExceptions((x, c) => Sources.AuthorizationInterface(x, c)
73+
.AsFileWithName(), context, Id)
74+
.AddSource(context);
7075
data
7176
.Select(static (x, _) => x.Authorizations)
7277
.SelectAndReportExceptions((x, c) => Sources.MainAuthorizationConstructor(x, c)

src/libs/AutoSDK/Sources/Sources.Authorizations.cs

Lines changed: 64 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,7 @@ public sealed partial class {authorization.Settings.ClassName}
2424
{{
2525
{authorization.Flows.Select(x => x.Type switch {
2626
nameof(OpenApiOAuthFlows.ClientCredentials) => $@"
27-
/// <summary>
28-
/// Authorize using OAuth2 authentication with client credentials.
29-
/// </summary>
30-
/// <param name=""clientId""></param>
31-
/// <param name=""clientSecret""></param>
32-
/// <param name=""scope""></param>
33-
/// <param name=""cancellationToken""></param>
27+
/// <inheritdoc/>
3428
public async global::System.Threading.Tasks.Task {authorization.MethodName}WithCredentialsAsync(
3529
string clientId,
3630
string clientSecret,
@@ -82,17 +76,7 @@ namespace {authorization.Settings.Namespace}
8276
{{
8377
public sealed partial class {authorization.Settings.ClassName}
8478
{{
85-
/// <summary>
86-
/// {(authorization.Type, authorization.Scheme.ToUpperInvariant(), authorization.In) switch
87-
{
88-
(SecuritySchemeType.Http, "BEARER", _) => "Authorize using bearer authentication.",
89-
(SecuritySchemeType.Http, "BASIC", _) => "Authorize using basic authentication.",
90-
(SecuritySchemeType.ApiKey, _, _) => "Authorize using ApiKey authentication.",
91-
_ => string.Empty,
92-
}}
93-
/// </summary>
94-
{authorization.Parameters.Select(x => $@"
95-
/// <param name=""{x}""></param>").Inject()}
79+
/// <inheritdoc/>
9680
public void {authorization.MethodName}(
9781
{authorization.Parameters.Select(x => $@"
9882
string {x},").Inject().TrimEnd(',')})
@@ -126,6 +110,68 @@ public sealed partial class {authorization.Settings.ClassName}
126110
}}".RemoveBlankLinesWhereOnlyWhitespaces();
127111
}
128112

113+
public static string GenerateAuthorizationInterface(
114+
Authorization authorization)
115+
{
116+
if (authorization.Type is SecuritySchemeType.OpenIdConnect)
117+
{
118+
return string.Empty;
119+
}
120+
if (authorization.Type is SecuritySchemeType.OAuth2)
121+
{
122+
return $@"
123+
#nullable enable
124+
125+
namespace {authorization.Settings.Namespace}
126+
{{
127+
public partial interface I{authorization.Settings.ClassName}
128+
{{
129+
{authorization.Flows.Select(x => x.Type switch {
130+
nameof(OpenApiOAuthFlows.ClientCredentials) => $@"
131+
/// <summary>
132+
/// Authorize using OAuth2 authentication with client credentials.
133+
/// </summary>
134+
/// <param name=""clientId""></param>
135+
/// <param name=""clientSecret""></param>
136+
/// <param name=""scope""></param>
137+
/// <param name=""cancellationToken""></param>
138+
public global::System.Threading.Tasks.Task {authorization.MethodName}WithCredentialsAsync(
139+
string clientId,
140+
string clientSecret,
141+
string scope,
142+
global::System.Threading.CancellationToken cancellationToken = default);
143+
",
144+
_ => string.Empty,
145+
}).Inject()}
146+
}}
147+
}}".RemoveBlankLinesWhereOnlyWhitespaces();
148+
}
149+
150+
return $@"
151+
#nullable enable
152+
153+
namespace {authorization.Settings.Namespace}
154+
{{
155+
public partial interface I{authorization.Settings.ClassName}
156+
{{
157+
/// <summary>
158+
/// {(authorization.Type, authorization.Scheme.ToUpperInvariant(), authorization.In) switch
159+
{
160+
(SecuritySchemeType.Http, "BEARER", _) => "Authorize using bearer authentication.",
161+
(SecuritySchemeType.Http, "BASIC", _) => "Authorize using basic authentication.",
162+
(SecuritySchemeType.ApiKey, _, _) => "Authorize using ApiKey authentication.",
163+
_ => string.Empty,
164+
}}
165+
/// </summary>
166+
{authorization.Parameters.Select(x => $@"
167+
/// <param name=""{x}""></param>").Inject()}
168+
public void {authorization.MethodName}(
169+
{authorization.Parameters.Select(x => $@"
170+
string {x},").Inject().TrimEnd(',')});
171+
}}
172+
}}".RemoveBlankLinesWhereOnlyWhitespaces();
173+
}
174+
129175
public static string GenerateMainAuthorizationConstructor(
130176
Authorization authorization)
131177
{

src/libs/AutoSDK/Sources/Sources.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,15 @@ public static FileWithName Authorization(
257257
Text: GenerateAuthorization(authorization));
258258
}
259259

260+
public static FileWithName AuthorizationInterface(
261+
Authorization authorization,
262+
CancellationToken cancellationToken = default)
263+
{
264+
return new FileWithName(
265+
Name: $"{authorization.Settings.Namespace}.I{authorization.Settings.ClassName}.Authorizations.{authorization.FriendlyName}.g.cs",
266+
Text: GenerateAuthorizationInterface(authorization));
267+
}
268+
260269
public static FileWithName MainAuthorizationConstructor(
261270
EquatableArray<Authorization> authorizations,
262271
CancellationToken cancellationToken = default)

src/tests/AutoSDK.SnapshotTests/Snapshots/Anthropic/NewtonsoftJson/_#G.Api.Authorizations.ApiKeyInHeader.g.verified.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ namespace G
66
{
77
public sealed partial class Api
88
{
9-
/// <summary>
10-
/// Authorize using ApiKey authentication.
11-
/// </summary>
12-
/// <param name="apiKey"></param>
9+
/// <inheritdoc/>
1310
public void AuthorizeUsingApiKeyInHeader(
1411
string apiKey)
1512
{
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//HintName: G.IApi.Authorizations.ApiKeyInHeader.g.cs
2+
3+
#nullable enable
4+
5+
namespace G
6+
{
7+
public partial interface IApi
8+
{
9+
/// <summary>
10+
/// Authorize using ApiKey authentication.
11+
/// </summary>
12+
/// <param name="apiKey"></param>
13+
public void AuthorizeUsingApiKeyInHeader(
14+
string apiKey);
15+
}
16+
}

src/tests/AutoSDK.SnapshotTests/Snapshots/Anthropic/SystemTextJson/_#G.Api.Authorizations.ApiKeyInHeader.g.verified.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ namespace G
66
{
77
public sealed partial class Api
88
{
9-
/// <summary>
10-
/// Authorize using ApiKey authentication.
11-
/// </summary>
12-
/// <param name="apiKey"></param>
9+
/// <inheritdoc/>
1310
public void AuthorizeUsingApiKeyInHeader(
1411
string apiKey)
1512
{
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//HintName: G.IApi.Authorizations.ApiKeyInHeader.g.cs
2+
3+
#nullable enable
4+
5+
namespace G
6+
{
7+
public partial interface IApi
8+
{
9+
/// <summary>
10+
/// Authorize using ApiKey authentication.
11+
/// </summary>
12+
/// <param name="apiKey"></param>
13+
public void AuthorizeUsingApiKeyInHeader(
14+
string apiKey);
15+
}
16+
}

src/tests/AutoSDK.SnapshotTests/Snapshots/AssemblyAi/NewtonsoftJson/_#G.Api.Authorizations.ApiKeyInHeader.g.verified.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ namespace G
66
{
77
public sealed partial class Api
88
{
9-
/// <summary>
10-
/// Authorize using ApiKey authentication.
11-
/// </summary>
12-
/// <param name="apiKey"></param>
9+
/// <inheritdoc/>
1310
public void AuthorizeUsingApiKeyInHeader(
1411
string apiKey)
1512
{
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//HintName: G.IApi.Authorizations.ApiKeyInHeader.g.cs
2+
3+
#nullable enable
4+
5+
namespace G
6+
{
7+
public partial interface IApi
8+
{
9+
/// <summary>
10+
/// Authorize using ApiKey authentication.
11+
/// </summary>
12+
/// <param name="apiKey"></param>
13+
public void AuthorizeUsingApiKeyInHeader(
14+
string apiKey);
15+
}
16+
}

0 commit comments

Comments
 (0)