5
5
using System . Net . Http ;
6
6
using System . Threading ;
7
7
using System . Threading . Tasks ;
8
+ using Newtonsoft . Json ;
8
9
9
10
namespace Auth0 . ManagementApi . Clients
10
11
{
@@ -35,7 +36,8 @@ public JobsClient(IManagementConnection connection, Uri baseUri, IDictionary<str
35
36
/// <returns>A <see cref="Job"/> instance containing the information about the job.</returns>
36
37
public Task < Job > GetAsync ( string id , CancellationToken cancellationToken = default )
37
38
{
38
- return Connection . GetAsync < Job > ( BuildUri ( $ "jobs/{ EncodePath ( id ) } ") , DefaultHeaders , cancellationToken : cancellationToken ) ;
39
+ return Connection . GetAsync < Job > ( BuildUri ( $ "jobs/{ EncodePath ( id ) } ") , DefaultHeaders ,
40
+ cancellationToken : cancellationToken ) ;
39
41
}
40
42
41
43
/// <summary>
@@ -52,7 +54,8 @@ public Task<Job> GetAsync(string id, CancellationToken cancellationToken = defau
52
54
/// <param name="sendCompletionEmail">Whether to send the user an email on import completion (true) or not (false).</param>
53
55
/// <param name="cancellationToken">The cancellation token to cancel operation.</param>
54
56
/// <returns>A <see cref="Job"/> instance containing the information about the job.</returns>
55
- public Task < Job > ImportUsersAsync ( string connectionId , string fileName , Stream file , bool ? upsert = null , string externalId = null , bool ? sendCompletionEmail = null , CancellationToken cancellationToken = default )
57
+ public Task < Job > ImportUsersAsync ( string connectionId , string fileName , Stream file , bool ? upsert = null ,
58
+ string externalId = null , bool ? sendCompletionEmail = null , CancellationToken cancellationToken = default )
56
59
{
57
60
if ( file == null )
58
61
throw new ArgumentNullException ( nameof ( file ) ) ;
@@ -75,7 +78,8 @@ public Task<Job> ImportUsersAsync(string connectionId, string fileName, Stream f
75
78
}
76
79
} ;
77
80
78
- return Connection . SendAsync < Job > ( HttpMethod . Post , BuildUri ( "jobs/users-imports" ) , parameters , DefaultHeaders , files : fileParameters , cancellationToken : cancellationToken ) ;
81
+ return Connection . SendAsync < Job > ( HttpMethod . Post , BuildUri ( "jobs/users-imports" ) , parameters ,
82
+ DefaultHeaders , files : fileParameters , cancellationToken : cancellationToken ) ;
79
83
}
80
84
81
85
/// <summary>
@@ -89,7 +93,8 @@ public Task<Job> ImportUsersAsync(string connectionId, string fileName, Stream f
89
93
/// <returns>A <see cref="Job"/> instance containing the information about the job.</returns>
90
94
public Task < Job > ExportUsersAsync ( UsersExportsJobRequest request , CancellationToken cancellationToken = default )
91
95
{
92
- return Connection . SendAsync < Job > ( HttpMethod . Post , BuildUri ( "jobs/users-exports" ) , request , DefaultHeaders , cancellationToken : cancellationToken ) ;
96
+ return Connection . SendAsync < Job > ( HttpMethod . Post , BuildUri ( "jobs/users-exports" ) , request , DefaultHeaders ,
97
+ cancellationToken : cancellationToken ) ;
93
98
}
94
99
95
100
/// <summary>
@@ -98,9 +103,48 @@ public Task<Job> ExportUsersAsync(UsersExportsJobRequest request, CancellationTo
98
103
/// <param name="request">The <see cref="VerifyEmailJobRequest"/> containing the information of the user whose email you want verified.</param>
99
104
/// <param name="cancellationToken">The cancellation token to cancel operation.</param>
100
105
/// <returns>A <see cref="Job"/> instance containing the information about the job.</returns>
101
- public Task < Job > SendVerificationEmailAsync ( VerifyEmailJobRequest request , CancellationToken cancellationToken = default )
106
+ public Task < Job > SendVerificationEmailAsync ( VerifyEmailJobRequest request ,
107
+ CancellationToken cancellationToken = default )
102
108
{
103
- return Connection . SendAsync < Job > ( HttpMethod . Post , BuildUri ( "jobs/verification-email" ) , request , DefaultHeaders , cancellationToken : cancellationToken ) ;
109
+ return Connection . SendAsync < Job > ( HttpMethod . Post , BuildUri ( "jobs/verification-email" ) , request ,
110
+ DefaultHeaders , cancellationToken : cancellationToken ) ;
111
+ }
112
+
113
+ /// <inheritdoc cref="IJobsClient.GetErrorDetailsAsync"/>>
114
+ public Task < JobError > GetErrorDetailsAsync ( string id , CancellationToken cancellationToken = default )
115
+ {
116
+ var rawResponse =
117
+ Connection . GetAsync < string > (
118
+ BuildUri ( $ "jobs/{ EncodePath ( id ) } /errors") , DefaultHeaders , cancellationToken : cancellationToken ) . Result ;
119
+
120
+ if ( string . IsNullOrEmpty ( rawResponse ) ) return null ;
121
+
122
+ try
123
+ {
124
+ var jobImportErrorDetails = JsonConvert . DeserializeObject < JobImportErrorDetails [ ] > ( rawResponse ) ;
125
+ if ( jobImportErrorDetails ? . Length > 0 )
126
+ {
127
+ return Task . FromResult ( new JobError
128
+ {
129
+ JobImportErrorDetails = jobImportErrorDetails
130
+ } ) ;
131
+ }
132
+ }
133
+ catch ( JsonSerializationException ex )
134
+ {
135
+ // ignoring the exception to try to serialize to JobErrorDetails.
136
+ }
137
+
138
+ var jobErrorDetails = JsonConvert . DeserializeObject < JobErrorDetails > ( rawResponse ) ;
139
+ if ( jobErrorDetails != null )
140
+ {
141
+ return Task . FromResult ( new JobError
142
+ {
143
+ JobErrorDetails = jobErrorDetails
144
+ } ) ;
145
+ }
146
+
147
+ return null ;
104
148
}
105
149
}
106
- }
150
+ }
0 commit comments