Skip to content

Commit f128121

Browse files
committed
Moved comment http logic to Extensions
1 parent 9c387e7 commit f128121

File tree

4 files changed

+104
-115
lines changed

4 files changed

+104
-115
lines changed

FirebaseAdmin/FirebaseAdmin/Auth/AuthHttpUtils.cs

Lines changed: 0 additions & 89 deletions
This file was deleted.

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseUserManager.cs

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,27 @@ internal static FirebaseUserManager Create(FirebaseApp app)
7171
return new FirebaseUserManager(args);
7272
}
7373

74+
internal static FirebaseAuthException HandleHttpError(HttpRequestException exception)
75+
{
76+
var temp = exception.ToFirebaseException();
77+
return new FirebaseAuthException(
78+
temp.ErrorCode,
79+
temp.Message,
80+
inner: temp.InnerException,
81+
response: temp.HttpResponse);
82+
}
83+
84+
internal static FirebaseAuthException HandleParseError(
85+
Exception e, HttpResponseMessage response)
86+
{
87+
throw new FirebaseAuthException(
88+
ErrorCode.Unknown,
89+
"Error while parsing Auth service response.",
90+
AuthErrorCode.UnexpectedResponse,
91+
e,
92+
response);
93+
}
94+
7495
/// <summary>
7596
/// Gets the user data corresponding to the given user ID.
7697
/// </summary>
@@ -256,15 +277,15 @@ private async Task<UserRecord> GetUserAsync(
256277
return new UserRecord(result.Users[0]);
257278
}
258279

259-
private async Task<AuthHttpUtils.ParsedResponseInfo<TResult>> PostAndDeserializeAsync<TResult>(
280+
private async Task<Extensions.ParsedResponseInfo<TResult>> PostAndDeserializeAsync<TResult>(
260281
string path, object body, CancellationToken cancellationToken)
261282
{
262283
var response = await this.PostAsync(path, body, cancellationToken)
263284
.ConfigureAwait(false);
264-
return response.SafeDeserialize<TResult>();
285+
return response.SafeDeserialize<TResult>(HandleParseError);
265286
}
266287

267-
private async Task<AuthHttpUtils.ResponseInfo> PostAsync(
288+
private async Task<Extensions.ResponseInfo> PostAsync(
268289
string path, object body, CancellationToken cancellationToken)
269290
{
270291
var request = new HttpRequestMessage()
@@ -276,25 +297,15 @@ private async Task<UserRecord> GetUserAsync(
276297
return await this.SendAsync(request, cancellationToken).ConfigureAwait(false);
277298
}
278299

279-
private async Task<AuthHttpUtils.ResponseInfo> SendAsync(
300+
private async Task<Extensions.ResponseInfo> SendAsync(
280301
HttpRequestMessage request, CancellationToken cancellationToken)
281302
{
282-
var response = await this.httpClient.SendAndReadAsync(request, cancellationToken);
303+
var response = await this.httpClient.SendAndReadAsync(
304+
request, cancellationToken, HandleHttpError);
283305
this.errorHandler.ThrowIfError(response.HttpResponse, response.Body);
284306
return response;
285307
}
286308

287-
private FirebaseAuthException ToFirebaseAuthException(
288-
HttpRequestException exception)
289-
{
290-
var temp = exception.ToFirebaseException();
291-
return new FirebaseAuthException(
292-
temp.ErrorCode,
293-
temp.Message,
294-
inner: temp.InnerException,
295-
response: temp.HttpResponse);
296-
}
297-
298309
/// <summary>
299310
/// Represents a query that can be executed against the Firebase Auth service to retrieve user records.
300311
/// A query mainly consists of a <see cref="UserQuery.Field"/> and a <see cref="UserQuery.Value"/> (e.g.

FirebaseAdmin/FirebaseAdmin/Auth/ListUsersRequest.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,26 @@ public HttpRequestMessage CreateRequest(bool? overrideGZipEnabled = null)
7070
};
7171
}
7272

73-
public Task<Stream> ExecuteAsStreamAsync()
73+
public async Task<Stream> ExecuteAsStreamAsync()
7474
{
75-
return this.ExecuteAsStreamAsync(default);
75+
return await this.ExecuteAsStreamAsync(default).ConfigureAwait(false);
7676
}
7777

78-
public Task<Stream> ExecuteAsStreamAsync(CancellationToken cancellationToken)
78+
public async Task<Stream> ExecuteAsStreamAsync(CancellationToken cancellationToken)
7979
{
80-
var response = this.SendAsync(this.CreateRequest(), cancellationToken);
81-
return response.Result.HttpResponse.Content.ReadAsStreamAsync();
80+
var response = await this.httpClient.SendAsync(this.CreateRequest(), cancellationToken)
81+
.ConfigureAwait(false);
82+
return await response.Content.ReadAsStreamAsync().ConfigureAwait(false);
8283
}
8384

8485
public Stream ExecuteAsStream()
8586
{
8687
return this.ExecuteAsStreamAsync().Result;
8788
}
8889

89-
public Task<ExportedUserRecords> ExecuteAsync()
90+
public async Task<ExportedUserRecords> ExecuteAsync()
9091
{
91-
return this.ExecuteAsync(default);
92+
return await this.ExecuteAsync(default).ConfigureAwait(false);
9293
}
9394

9495
public async Task<ExportedUserRecords> ExecuteAsync(CancellationToken cancellationToken)
@@ -174,13 +175,15 @@ private async Task<DownloadAccountResponse> SendAndDeserializeAsync(
174175
{
175176
var response = await this.SendAsync(request, cancellationToken)
176177
.ConfigureAwait(false);
177-
return response.SafeDeserialize<DownloadAccountResponse>().Result;
178+
return response.SafeDeserialize<DownloadAccountResponse>(
179+
FirebaseUserManager.HandleParseError).Result;
178180
}
179181

180-
private async Task<AuthHttpUtils.ResponseInfo> SendAsync(
182+
private async Task<Extensions.ResponseInfo> SendAsync(
181183
HttpRequestMessage request, CancellationToken cancellationToken)
182184
{
183-
var response = await this.httpClient.SendAndReadAsync(request, cancellationToken)
185+
var response = await this.httpClient.SendAndReadAsync(
186+
request, cancellationToken, FirebaseUserManager.HandleHttpError)
184187
.ConfigureAwait(false);
185188
this.errorHandler.ThrowIfError(response.HttpResponse, response.Body);
186189
return response;

FirebaseAdmin/FirebaseAdmin/Extensions.cs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ internal static class Extensions
4242
SocketError.NetworkUnreachable,
4343
};
4444

45+
internal delegate FirebaseException HttpErrorHandlerFunc(HttpRequestException e);
46+
47+
internal delegate FirebaseException ParseErrorHandlerFunc(
48+
Exception e, HttpResponseMessage response);
49+
4550
/// <summary>
4651
/// Extracts and returns the underlying <see cref="ServiceAccountCredential"/> from a
4752
/// <see cref="GoogleCredential"/>. Returns null if the <c>GoogleCredential</c> is not
@@ -187,5 +192,64 @@ public static FirebaseException ToFirebaseException(this HttpRequestException ex
187192

188193
return new FirebaseException(code, $"{message}: {exception.Message}", exception);
189194
}
195+
196+
internal static async Task<ResponseInfo> SendAndReadAsync(
197+
this ConfigurableHttpClient httpClient,
198+
HttpRequestMessage request,
199+
CancellationToken cancellationToken,
200+
HttpErrorHandlerFunc func = null)
201+
{
202+
try
203+
{
204+
var response = await httpClient.SendAsync(request, cancellationToken)
205+
.ConfigureAwait(false);
206+
var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
207+
208+
return new ResponseInfo()
209+
{
210+
HttpResponse = response,
211+
Body = json,
212+
};
213+
}
214+
catch (HttpRequestException e)
215+
{
216+
if (func == null)
217+
{
218+
throw e.ToFirebaseException();
219+
}
220+
221+
throw func(e);
222+
}
223+
}
224+
225+
internal class ResponseInfo
226+
{
227+
internal HttpResponseMessage HttpResponse { get; set; }
228+
229+
internal string Body { get; set; }
230+
231+
internal ParsedResponseInfo<TResult> SafeDeserialize<TResult>(ParseErrorHandlerFunc func)
232+
{
233+
try
234+
{
235+
var parsed = NewtonsoftJsonSerializer.Instance.Deserialize<TResult>(this.Body);
236+
return new ParsedResponseInfo<TResult>()
237+
{
238+
Result = parsed,
239+
HttpResponse = this.HttpResponse,
240+
Body = this.Body,
241+
};
242+
}
243+
catch (Exception e)
244+
{
245+
throw func(e, this.HttpResponse);
246+
}
247+
}
248+
}
249+
250+
internal class ParsedResponseInfo<T> : ResponseInfo
251+
{
252+
internal T Result { get; set; }
253+
}
190254
}
191255
}

0 commit comments

Comments
 (0)