Skip to content

Commit c37a5e7

Browse files
committed
update samples
1 parent 3915e02 commit c37a5e7

File tree

14 files changed

+336
-119
lines changed

14 files changed

+336
-119
lines changed

samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/src/Org.OpenAPITools/Client/Auth/OAuthAuthenticator.cs

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,22 @@ namespace Org.OpenAPITools.Client.Auth
1919
/// <summary>
2020
/// An authenticator for OAuth2 authentication flows
2121
/// </summary>
22-
public class OAuthAuthenticator : AuthenticatorBase
22+
public class OAuthAuthenticator : IAuthenticator
2323
{
24+
private TokenResponse _token;
25+
26+
public string Token
27+
{
28+
get
29+
{
30+
if (_token == null) return null;
31+
if (_token.ExpiresIn == null) return _token.AccessToken;
32+
if (_token.ExpiresAt < DateTime.Now) return null;
33+
34+
return _token.AccessToken;
35+
}
36+
}
37+
2438
readonly string _tokenUrl;
2539
readonly string _clientId;
2640
readonly string _clientSecret;
@@ -39,7 +53,7 @@ public OAuthAuthenticator(
3953
string scope,
4054
OAuthFlow? flow,
4155
JsonSerializerSettings serializerSettings,
42-
IReadableConfiguration configuration) : base("")
56+
IReadableConfiguration configuration)
4357
{
4458
_tokenUrl = tokenUrl;
4559
_clientId = clientId;
@@ -72,10 +86,10 @@ public OAuthAuthenticator(
7286
/// </summary>
7387
/// <param name="accessToken">Access token to create a parameter from.</param>
7488
/// <returns>An authentication parameter.</returns>
75-
protected override async ValueTask<Parameter> GetAuthenticationParameter(string accessToken)
89+
protected async ValueTask<Parameter> GetAuthenticationParameter()
7690
{
7791
var token = string.IsNullOrEmpty(Token) ? await GetToken().ConfigureAwait(false) : Token;
78-
return new HeaderParameter(KnownHeaders.Authorization, token);
92+
return new HeaderParameter(KnownHeaders.Authorization, token!);
7993
}
8094

8195
/// <summary>
@@ -84,31 +98,39 @@ protected override async ValueTask<Parameter> GetAuthenticationParameter(string
8498
/// <returns>An authentication token.</returns>
8599
async Task<string> GetToken()
86100
{
87-
var client = new RestClient(_tokenUrl,
88-
configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
89-
90-
var request = new RestRequest()
91-
.AddParameter("grant_type", _grantType)
92-
.AddParameter("client_id", _clientId)
93-
.AddParameter("client_secret", _clientSecret);
101+
var client = new RestClient(_tokenUrl, configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
94102

103+
var request = new RestRequest();
104+
if (!string.IsNullOrWhiteSpace(_token?.RefreshToken))
105+
{
106+
request.AddParameter("grant_type", "refresh_token")
107+
.AddParameter("refresh_token", _token!.RefreshToken);
108+
}
109+
else
110+
{
111+
request
112+
.AddParameter("grant_type", _grantType)
113+
.AddParameter("client_id", _clientId)
114+
.AddParameter("client_secret", _clientSecret);
115+
}
95116
if (!string.IsNullOrEmpty(_scope))
96117
{
97118
request.AddParameter("scope", _scope);
98119
}
99-
100-
var response = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
101-
120+
_token = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
102121
// RFC6749 - token_type is case insensitive.
103122
// RFC6750 - In Authorization header Bearer should be capitalized.
104123
// Fix the capitalization irrespective of token_type casing.
105-
switch (response.TokenType?.ToLower())
124+
switch (_token?.TokenType?.ToLower())
106125
{
107126
case "bearer":
108-
return $"Bearer {response.AccessToken}";
127+
return $"Bearer {_token.AccessToken}";
109128
default:
110-
return $"{response.TokenType} {response.AccessToken}";
129+
return $"{_token?.TokenType} {_token?.AccessToken}";
111130
}
112131
}
132+
133+
public async ValueTask Authenticate(IRestClient client, RestRequest request)
134+
=> request.AddOrUpdateParameter(await GetAuthenticationParameter().ConfigureAwait(false));
113135
}
114136
}

samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/src/Org.OpenAPITools/Client/Auth/TokenResponse.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,14 @@ class TokenResponse
1818
public string TokenType { get; set; }
1919
[JsonProperty("access_token")]
2020
public string AccessToken { get; set; }
21+
[JsonProperty("expires_in")]
22+
public int? ExpiresIn { get; set; }
23+
[JsonProperty("created")]
24+
public DateTime Created { get; set; }
25+
26+
[JsonProperty("refresh_token")]
27+
public string RefreshToken { get; set; }
28+
29+
public DateTime? ExpiresAt => ExpiresIn == null ? null : Created.AddSeconds(ExpiresIn.Value);
2130
}
2231
}

samples/client/petstore/csharp/restsharp/net4.7/Petstore/src/Org.OpenAPITools/Client/Auth/OAuthAuthenticator.cs

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,22 @@ namespace Org.OpenAPITools.Client.Auth
1919
/// <summary>
2020
/// An authenticator for OAuth2 authentication flows
2121
/// </summary>
22-
public class OAuthAuthenticator : AuthenticatorBase
22+
public class OAuthAuthenticator : IAuthenticator
2323
{
24+
private TokenResponse _token;
25+
26+
public string Token
27+
{
28+
get
29+
{
30+
if (_token == null) return null;
31+
if (_token.ExpiresIn == null) return _token.AccessToken;
32+
if (_token.ExpiresAt < DateTime.Now) return null;
33+
34+
return _token.AccessToken;
35+
}
36+
}
37+
2438
readonly string _tokenUrl;
2539
readonly string _clientId;
2640
readonly string _clientSecret;
@@ -39,7 +53,7 @@ public OAuthAuthenticator(
3953
string scope,
4054
OAuthFlow? flow,
4155
JsonSerializerSettings serializerSettings,
42-
IReadableConfiguration configuration) : base("")
56+
IReadableConfiguration configuration)
4357
{
4458
_tokenUrl = tokenUrl;
4559
_clientId = clientId;
@@ -72,10 +86,10 @@ public OAuthAuthenticator(
7286
/// </summary>
7387
/// <param name="accessToken">Access token to create a parameter from.</param>
7488
/// <returns>An authentication parameter.</returns>
75-
protected override async ValueTask<Parameter> GetAuthenticationParameter(string accessToken)
89+
protected async ValueTask<Parameter> GetAuthenticationParameter()
7690
{
7791
var token = string.IsNullOrEmpty(Token) ? await GetToken().ConfigureAwait(false) : Token;
78-
return new HeaderParameter(KnownHeaders.Authorization, token);
92+
return new HeaderParameter(KnownHeaders.Authorization, token!);
7993
}
8094

8195
/// <summary>
@@ -84,31 +98,39 @@ protected override async ValueTask<Parameter> GetAuthenticationParameter(string
8498
/// <returns>An authentication token.</returns>
8599
async Task<string> GetToken()
86100
{
87-
var client = new RestClient(_tokenUrl,
88-
configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
89-
90-
var request = new RestRequest()
91-
.AddParameter("grant_type", _grantType)
92-
.AddParameter("client_id", _clientId)
93-
.AddParameter("client_secret", _clientSecret);
101+
var client = new RestClient(_tokenUrl, configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
94102

103+
var request = new RestRequest();
104+
if (!string.IsNullOrWhiteSpace(_token?.RefreshToken))
105+
{
106+
request.AddParameter("grant_type", "refresh_token")
107+
.AddParameter("refresh_token", _token!.RefreshToken);
108+
}
109+
else
110+
{
111+
request
112+
.AddParameter("grant_type", _grantType)
113+
.AddParameter("client_id", _clientId)
114+
.AddParameter("client_secret", _clientSecret);
115+
}
95116
if (!string.IsNullOrEmpty(_scope))
96117
{
97118
request.AddParameter("scope", _scope);
98119
}
99-
100-
var response = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
101-
120+
_token = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
102121
// RFC6749 - token_type is case insensitive.
103122
// RFC6750 - In Authorization header Bearer should be capitalized.
104123
// Fix the capitalization irrespective of token_type casing.
105-
switch (response.TokenType?.ToLower())
124+
switch (_token?.TokenType?.ToLower())
106125
{
107126
case "bearer":
108-
return $"Bearer {response.AccessToken}";
127+
return $"Bearer {_token.AccessToken}";
109128
default:
110-
return $"{response.TokenType} {response.AccessToken}";
129+
return $"{_token?.TokenType} {_token?.AccessToken}";
111130
}
112131
}
132+
133+
public async ValueTask Authenticate(IRestClient client, RestRequest request)
134+
=> request.AddOrUpdateParameter(await GetAuthenticationParameter().ConfigureAwait(false));
113135
}
114136
}

samples/client/petstore/csharp/restsharp/net4.7/Petstore/src/Org.OpenAPITools/Client/Auth/TokenResponse.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,14 @@ class TokenResponse
1818
public string TokenType { get; set; }
1919
[JsonProperty("access_token")]
2020
public string AccessToken { get; set; }
21+
[JsonProperty("expires_in")]
22+
public int? ExpiresIn { get; set; }
23+
[JsonProperty("created")]
24+
public DateTime Created { get; set; }
25+
26+
[JsonProperty("refresh_token")]
27+
public string RefreshToken { get; set; }
28+
29+
public DateTime? ExpiresAt => ExpiresIn == null ? null : Created.AddSeconds(ExpiresIn.Value);
2130
}
2231
}

samples/client/petstore/csharp/restsharp/net4.8/Petstore/src/Org.OpenAPITools/Client/Auth/OAuthAuthenticator.cs

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,22 @@ namespace Org.OpenAPITools.Client.Auth
1919
/// <summary>
2020
/// An authenticator for OAuth2 authentication flows
2121
/// </summary>
22-
public class OAuthAuthenticator : AuthenticatorBase
22+
public class OAuthAuthenticator : IAuthenticator
2323
{
24+
private TokenResponse _token;
25+
26+
public string Token
27+
{
28+
get
29+
{
30+
if (_token == null) return null;
31+
if (_token.ExpiresIn == null) return _token.AccessToken;
32+
if (_token.ExpiresAt < DateTime.Now) return null;
33+
34+
return _token.AccessToken;
35+
}
36+
}
37+
2438
readonly string _tokenUrl;
2539
readonly string _clientId;
2640
readonly string _clientSecret;
@@ -39,7 +53,7 @@ public OAuthAuthenticator(
3953
string scope,
4054
OAuthFlow? flow,
4155
JsonSerializerSettings serializerSettings,
42-
IReadableConfiguration configuration) : base("")
56+
IReadableConfiguration configuration)
4357
{
4458
_tokenUrl = tokenUrl;
4559
_clientId = clientId;
@@ -72,10 +86,10 @@ public OAuthAuthenticator(
7286
/// </summary>
7387
/// <param name="accessToken">Access token to create a parameter from.</param>
7488
/// <returns>An authentication parameter.</returns>
75-
protected override async ValueTask<Parameter> GetAuthenticationParameter(string accessToken)
89+
protected async ValueTask<Parameter> GetAuthenticationParameter()
7690
{
7791
var token = string.IsNullOrEmpty(Token) ? await GetToken().ConfigureAwait(false) : Token;
78-
return new HeaderParameter(KnownHeaders.Authorization, token);
92+
return new HeaderParameter(KnownHeaders.Authorization, token!);
7993
}
8094

8195
/// <summary>
@@ -84,31 +98,39 @@ protected override async ValueTask<Parameter> GetAuthenticationParameter(string
8498
/// <returns>An authentication token.</returns>
8599
async Task<string> GetToken()
86100
{
87-
var client = new RestClient(_tokenUrl,
88-
configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
89-
90-
var request = new RestRequest()
91-
.AddParameter("grant_type", _grantType)
92-
.AddParameter("client_id", _clientId)
93-
.AddParameter("client_secret", _clientSecret);
101+
var client = new RestClient(_tokenUrl, configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
94102

103+
var request = new RestRequest();
104+
if (!string.IsNullOrWhiteSpace(_token?.RefreshToken))
105+
{
106+
request.AddParameter("grant_type", "refresh_token")
107+
.AddParameter("refresh_token", _token!.RefreshToken);
108+
}
109+
else
110+
{
111+
request
112+
.AddParameter("grant_type", _grantType)
113+
.AddParameter("client_id", _clientId)
114+
.AddParameter("client_secret", _clientSecret);
115+
}
95116
if (!string.IsNullOrEmpty(_scope))
96117
{
97118
request.AddParameter("scope", _scope);
98119
}
99-
100-
var response = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
101-
120+
_token = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
102121
// RFC6749 - token_type is case insensitive.
103122
// RFC6750 - In Authorization header Bearer should be capitalized.
104123
// Fix the capitalization irrespective of token_type casing.
105-
switch (response.TokenType?.ToLower())
124+
switch (_token?.TokenType?.ToLower())
106125
{
107126
case "bearer":
108-
return $"Bearer {response.AccessToken}";
127+
return $"Bearer {_token.AccessToken}";
109128
default:
110-
return $"{response.TokenType} {response.AccessToken}";
129+
return $"{_token?.TokenType} {_token?.AccessToken}";
111130
}
112131
}
132+
133+
public async ValueTask Authenticate(IRestClient client, RestRequest request)
134+
=> request.AddOrUpdateParameter(await GetAuthenticationParameter().ConfigureAwait(false));
113135
}
114136
}

samples/client/petstore/csharp/restsharp/net4.8/Petstore/src/Org.OpenAPITools/Client/Auth/TokenResponse.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,14 @@ class TokenResponse
1818
public string TokenType { get; set; }
1919
[JsonProperty("access_token")]
2020
public string AccessToken { get; set; }
21+
[JsonProperty("expires_in")]
22+
public int? ExpiresIn { get; set; }
23+
[JsonProperty("created")]
24+
public DateTime Created { get; set; }
25+
26+
[JsonProperty("refresh_token")]
27+
public string RefreshToken { get; set; }
28+
29+
public DateTime? ExpiresAt => ExpiresIn == null ? null : Created.AddSeconds(ExpiresIn.Value);
2130
}
2231
}

0 commit comments

Comments
 (0)