1
1
using System ;
2
2
using System . Collections . Generic ;
3
3
using System . Linq ;
4
+ using System . Net ;
4
5
using System . Threading . Tasks ;
5
6
using RestSharp ;
6
7
using RestSharp . Authenticators ;
@@ -103,7 +104,7 @@ public Repository getRepository(string username, string repositoryName)
103
104
request . AddUrlSegment ( "name" , username ) ;
104
105
request . AddUrlSegment ( "repo" , repositoryName ) ;
105
106
106
- var repo = client . Get < Repository > ( request ) . Data ;
107
+ var repo = DoRequest < Repository > ( request ) ;
107
108
if ( repo == null )
108
109
return null ;
109
110
@@ -142,11 +143,9 @@ public User getCurrentUser()
142
143
143
144
var request = new RestRequest ( "/user" ) ;
144
145
145
- var user = client . Get < User > ( request ) ;
146
- if ( user . Data == null )
147
- throw new Exception ( "Bad Credentials" ) ;
146
+ var user = DoRequest < User > ( request , false ) ;
148
147
149
- return user . Data ;
148
+ return user ;
150
149
}
151
150
152
151
public async Task < User > GetUserAsync ( string userName )
@@ -172,11 +171,37 @@ public List<Repository> searchRepositories(string query)
172
171
var request = new RestRequest ( "/legacy/repos/search/{query}" ) ;
173
172
request . AddUrlSegment ( "query" , query ) ;
174
173
175
- var repos = client . Get < APIv2 . RepositoryListV2 > ( request ) . Data ;
174
+ var repos = DoRequest < APIv2 . RepositoryListV2 > ( request ) ;
176
175
if ( repos == null || repos . Repositories == null )
177
176
throw new Exception ( string . Format ( "Could not search for {0}" , query ) ) ;
178
177
179
178
return repos . Repositories . Select ( r => r . ToV3 ( client ) ) . ToList ( ) ;
180
179
}
180
+
181
+ private T DoRequest < T > ( IRestRequest request , bool throwOnError = true ) where T : new ( )
182
+ {
183
+ var response = client . Get < T > ( request ) ;
184
+ if ( response . IsSuccessful )
185
+ {
186
+ return response . Data ;
187
+ }
188
+
189
+ if ( ! throwOnError )
190
+ {
191
+ return default ;
192
+ }
193
+
194
+ if ( response . StatusCode == HttpStatusCode . Unauthorized )
195
+ {
196
+ if ( client . Authenticator == null )
197
+ {
198
+ throw new UnauthorizedAccessException ( "Please configure a GitHub authentication token." ) ;
199
+ }
200
+
201
+ throw new UnauthorizedAccessException ( "The GitHub authentication token provided is not valid." ) ;
202
+ }
203
+
204
+ throw new Exception ( response . StatusDescription ) ;
205
+ }
181
206
}
182
207
}
0 commit comments