Skip to content

Commit 3c8b32d

Browse files
author
Bryan Aldrich
committed
update samples
1 parent fdce935 commit 3c8b32d

File tree

14 files changed

+329
-105
lines changed

14 files changed

+329
-105
lines changed

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

Lines changed: 38 additions & 15 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>
@@ -87,28 +101,37 @@ async Task<string> GetToken()
87101
var client = new RestClient(_tokenUrl,
88102
configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
89103

90-
var request = new RestRequest()
91-
.AddParameter("grant_type", _grantType)
92-
.AddParameter("client_id", _clientId)
93-
.AddParameter("client_secret", _clientSecret);
94-
104+
var request = new RestRequest();
105+
if (!string.IsNullOrWhiteSpace(_token?.RefreshToken))
106+
{
107+
request.AddParameter("grant_type", "refresh_token")
108+
.AddParameter("refresh_token", _token!.RefreshToken);
109+
}
110+
else
111+
{
112+
request
113+
.AddParameter("grant_type", _grantType)
114+
.AddParameter("client_id", _clientId)
115+
.AddParameter("client_secret", _clientSecret);
116+
}
95117
if (!string.IsNullOrEmpty(_scope))
96118
{
97119
request.AddParameter("scope", _scope);
98120
}
99-
100-
var response = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
101-
121+
_token = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
102122
// RFC6749 - token_type is case insensitive.
103123
// RFC6750 - In Authorization header Bearer should be capitalized.
104124
// Fix the capitalization irrespective of token_type casing.
105-
switch (response.TokenType?.ToLower())
125+
switch (_token?.TokenType?.ToLower())
106126
{
107127
case "bearer":
108-
return $"Bearer {response.AccessToken}";
128+
return $"Bearer {_token.AccessToken}";
109129
default:
110-
return $"{response.TokenType} {response.AccessToken}";
130+
return $"{_token?.TokenType} {_token?.AccessToken}";
111131
}
112132
}
133+
134+
public async ValueTask Authenticate(IRestClient client, RestRequest request)
135+
=> request.AddOrUpdateParameter(await GetAuthenticationParameter().ConfigureAwait(false));
113136
}
114137
}

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: 38 additions & 15 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>
@@ -87,28 +101,37 @@ async Task<string> GetToken()
87101
var client = new RestClient(_tokenUrl,
88102
configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
89103

90-
var request = new RestRequest()
91-
.AddParameter("grant_type", _grantType)
92-
.AddParameter("client_id", _clientId)
93-
.AddParameter("client_secret", _clientSecret);
94-
104+
var request = new RestRequest();
105+
if (!string.IsNullOrWhiteSpace(_token?.RefreshToken))
106+
{
107+
request.AddParameter("grant_type", "refresh_token")
108+
.AddParameter("refresh_token", _token!.RefreshToken);
109+
}
110+
else
111+
{
112+
request
113+
.AddParameter("grant_type", _grantType)
114+
.AddParameter("client_id", _clientId)
115+
.AddParameter("client_secret", _clientSecret);
116+
}
95117
if (!string.IsNullOrEmpty(_scope))
96118
{
97119
request.AddParameter("scope", _scope);
98120
}
99-
100-
var response = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
101-
121+
_token = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
102122
// RFC6749 - token_type is case insensitive.
103123
// RFC6750 - In Authorization header Bearer should be capitalized.
104124
// Fix the capitalization irrespective of token_type casing.
105-
switch (response.TokenType?.ToLower())
125+
switch (_token?.TokenType?.ToLower())
106126
{
107127
case "bearer":
108-
return $"Bearer {response.AccessToken}";
128+
return $"Bearer {_token.AccessToken}";
109129
default:
110-
return $"{response.TokenType} {response.AccessToken}";
130+
return $"{_token?.TokenType} {_token?.AccessToken}";
111131
}
112132
}
133+
134+
public async ValueTask Authenticate(IRestClient client, RestRequest request)
135+
=> request.AddOrUpdateParameter(await GetAuthenticationParameter().ConfigureAwait(false));
113136
}
114137
}

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: 38 additions & 15 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>
@@ -87,28 +101,37 @@ async Task<string> GetToken()
87101
var client = new RestClient(_tokenUrl,
88102
configureSerialization: serializerConfig => serializerConfig.UseSerializer(() => new CustomJsonCodec(_serializerSettings, _configuration)));
89103

90-
var request = new RestRequest()
91-
.AddParameter("grant_type", _grantType)
92-
.AddParameter("client_id", _clientId)
93-
.AddParameter("client_secret", _clientSecret);
94-
104+
var request = new RestRequest();
105+
if (!string.IsNullOrWhiteSpace(_token?.RefreshToken))
106+
{
107+
request.AddParameter("grant_type", "refresh_token")
108+
.AddParameter("refresh_token", _token!.RefreshToken);
109+
}
110+
else
111+
{
112+
request
113+
.AddParameter("grant_type", _grantType)
114+
.AddParameter("client_id", _clientId)
115+
.AddParameter("client_secret", _clientSecret);
116+
}
95117
if (!string.IsNullOrEmpty(_scope))
96118
{
97119
request.AddParameter("scope", _scope);
98120
}
99-
100-
var response = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
101-
121+
_token = await client.PostAsync<TokenResponse>(request).ConfigureAwait(false);
102122
// RFC6749 - token_type is case insensitive.
103123
// RFC6750 - In Authorization header Bearer should be capitalized.
104124
// Fix the capitalization irrespective of token_type casing.
105-
switch (response.TokenType?.ToLower())
125+
switch (_token?.TokenType?.ToLower())
106126
{
107127
case "bearer":
108-
return $"Bearer {response.AccessToken}";
128+
return $"Bearer {_token.AccessToken}";
109129
default:
110-
return $"{response.TokenType} {response.AccessToken}";
130+
return $"{_token?.TokenType} {_token?.AccessToken}";
111131
}
112132
}
133+
134+
public async ValueTask Authenticate(IRestClient client, RestRequest request)
135+
=> request.AddOrUpdateParameter(await GetAuthenticationParameter().ConfigureAwait(false));
113136
}
114137
}

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)