Skip to content

Commit 8b0e5ce

Browse files
committed
Add private methods for API requests
1 parent de8a584 commit 8b0e5ce

3 files changed

Lines changed: 50 additions & 70 deletions

File tree

WebUntisAPI.Client/WebUntisClient.Messages.cs

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,8 @@ public partial class WebUntisClient
2424
/// <exception cref="HttpRequestException">Thrown when an error happened while the http request</exception>
2525
public async Task<int> GetUnreadMessagesCountAsync(CancellationToken ct = default)
2626
{
27-
// Check for disposing
28-
if (_disposedValue)
29-
throw new ObjectDisposedException(GetType().FullName);
30-
31-
// Check if you logged in
32-
if (!LoggedIn)
33-
throw new UnauthorizedAccessException("You're not logged in");
34-
35-
HttpRequestMessage request = new HttpRequestMessage()
36-
{
37-
Method = HttpMethod.Get,
38-
RequestUri = new Uri(ServerUrl + "/WebUntis/api/rest/view/v1/messages/status")
39-
};
40-
SetRequestHeader(request.Headers, true);
41-
42-
HttpResponseMessage response = await _client.SendAsync(request, ct);
43-
44-
// Check cancellation token
45-
if (ct.IsCancellationRequested)
46-
return default;
47-
48-
// Verify response
49-
if (response.StatusCode != HttpStatusCode.OK)
50-
throw new HttpRequestException($"There was an error while the http request (Code: {response.StatusCode}).");
51-
52-
return JObject.Parse(await response.Content.ReadAsStringAsync()).Value<int>("unreadMessagesCount");
27+
string responseString = await MakeAPIGetRequestAsync("/WebUntis/api/rest/view/v1/messages/status", ct);
28+
return JObject.Parse(responseString).Value<int>("unreadMessagesCount");
5329
}
5430

5531
/// <summary>
@@ -62,9 +38,9 @@ public async Task<int> GetUnreadMessagesCountAsync(CancellationToken ct = defaul
6238
/// <exception cref="HttpRequestException">Thrown when an error happened while the http request</exception>
6339
public async Task<MessagePermissions> GetMessagePermissionsAsync(CancellationToken ct = default)
6440
{
65-
// Check for disposing
66-
if (_disposedValue)
67-
throw new ObjectDisposedException(GetType().FullName);
41+
string responseString = await MakeAPIGetRequestAsync("/WebUntis/api/rest/view/v1/messages/permissions", ct);
42+
return JsonConvert.DeserializeObject<MessagePermissions>(responseString);
43+
}
6844

6945
// Check if you logged in
7046
if (!LoggedIn)

WebUntisAPI.Client/WebUntisClient.Teaching.cs

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -105,34 +105,10 @@ public async Task<Department[]> GetDepartmentsAsync(string id = "getDepartments"
105105
/// <exception cref="HttpRequestException">Thrown when an error happend while the http request</exception>
106106
public async Task<News> GetNewsFeedAsync(DateTime date, CancellationToken ct = default)
107107
{
108-
// Check for disposing
109-
if (_disposedValue)
110-
throw new ObjectDisposedException(GetType().FullName);
111-
112-
// Check if you logged in
113-
if (!LoggedIn)
114-
throw new UnauthorizedAccessException("You're not logged in");
115-
116108
date.ToWebUntisTimeFormat(out string dateString, out _);
109+
string responseString = await MakeAPIGetRequestAsync("/WebUntis/api/public/news/newsWidgetData?date=" + dateString, ct);
117110

118-
HttpRequestMessage request = new HttpRequestMessage()
119-
{
120-
Method = HttpMethod.Get,
121-
RequestUri = new Uri(ServerUrl + "/WebUntis/api/public/news/newsWidgetData?date=" + dateString)
122-
};
123-
SetRequestHeader(request.Headers);
124-
125-
HttpResponseMessage response = await _client.SendAsync(request, ct);
126-
127-
// Check cancellation token
128-
if (ct.IsCancellationRequested)
129-
return default;
130-
131-
// Verify response
132-
if (response.StatusCode != HttpStatusCode.OK)
133-
throw new HttpRequestException($"There was an error while the http request (Code: {response.StatusCode}).");
134-
135-
JToken data = JObject.Parse(await response.Content.ReadAsStringAsync()).GetValue("data");
111+
JToken data = JObject.Parse(responseString).GetValue("data");
136112
return data.ToObject<News>();
137113
}
138114
}

WebUntisAPI.Client/WebUntisClient.cs

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ public async Task LogoutAsync(string id = "Logout", CancellationToken ct = defau
229229
Params = new object()
230230
};
231231
StringContent requestContent = new StringContent(JsonConvert.SerializeObject(requestModel), Encoding.UTF8, "application/json");
232-
SetRequestHeader(requestContent.Headers);
232+
requestContent.Headers.Add("JSESSIONID", _sessonId);
233233

234234
// Send request
235235
_ = await _client.PostAsync(ServerUrl + "/WebUntis/jsonrpc.do", requestContent, ct);
@@ -291,7 +291,7 @@ private async Task<TResult> MakeJSONRPCRequestAsync<TRequest, TResult>(string id
291291
Params = requestParams
292292
};
293293
StringContent requestContent = new StringContent(JsonConvert.SerializeObject(requestModel), Encoding.UTF8, "application/json");
294-
SetRequestHeader(requestContent.Headers);
294+
requestContent.Headers.Add("JSESSIONID", _sessonId);
295295

296296
// Send request
297297
HttpResponseMessage response = await _client.PostAsync(ServerUrl + requestUrl, requestContent, ct);
@@ -322,6 +322,46 @@ private async Task<TResult> MakeJSONRPCRequestAsync<TRequest, TResult>(string id
322322
return responseModel.Result;
323323
}
324324

325+
/// <summary>
326+
/// Make a GET request to the API
327+
/// </summary>
328+
/// <param name="requestUrl">Url to request</param>
329+
/// <param name="ct">Cnacellation token</param>
330+
/// <returns>The returned content</returns>
331+
/// <exception cref="ObjectDisposedException">Thrown when the instance was disposed</exception>
332+
/// <exception cref="UnauthorizedAccessException">Thrown when the client isn't logged in</exception>
333+
/// <exception cref="HttpRequestException">Thrown when an error happend while the http request</exception>
334+
private async Task<string> MakeAPIGetRequestAsync(string requestUrl, CancellationToken ct)
335+
{
336+
// Check for disposing
337+
if (_disposedValue)
338+
throw new ObjectDisposedException(GetType().FullName);
339+
340+
// Check if you logged in
341+
if (!LoggedIn)
342+
throw new UnauthorizedAccessException("You're not logged in");
343+
344+
HttpRequestMessage request = new HttpRequestMessage()
345+
{
346+
Method = HttpMethod.Get,
347+
RequestUri = new Uri(ServerUrl + requestUrl)
348+
};
349+
request.Headers.Add("JSESSIONID", _sessonId);
350+
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _bearerToken);
351+
352+
HttpResponseMessage response = await _client.SendAsync(request, ct);
353+
354+
// Check cancellation token
355+
if (ct.IsCancellationRequested)
356+
return default;
357+
358+
// Verify response
359+
if (response.StatusCode != HttpStatusCode.OK)
360+
throw new HttpRequestException($"There was an error while the http request (Code: {response.StatusCode}).");
361+
362+
return await response.Content.ReadAsStringAsync();
363+
}
364+
325365
/// <summary>
326366
/// Get the bearer auth token for the api authentication
327367
/// </summary>
@@ -335,7 +375,7 @@ private async Task<string> GetBearerTokenAsync(CancellationToken ct)
335375
Method = HttpMethod.Get,
336376
RequestUri = new Uri(ServerUrl + "/WebUntis/api/token/new")
337377
};
338-
SetRequestHeader(request.Headers);
378+
request.Headers.Add("JSESSIONID", _sessonId);
339379

340380
HttpResponseMessage response = await _client.SendAsync(request, ct);
341381

@@ -351,18 +391,6 @@ private async Task<string> GetBearerTokenAsync(CancellationToken ct)
351391
return await response.Content.ReadAsStringAsync();
352392
}
353393

354-
/// <summary>
355-
/// Add the default headers to a WebUntis API request
356-
/// </summary>
357-
/// <param name="headers">The headers object to add</param>
358-
/// <param name="setBearer"><see langword="true"/> if the auth header should be set</param>
359-
private void SetRequestHeader(HttpHeaders headers, bool setBearer = false)
360-
{
361-
headers.Add("JSESSIONID", _sessonId);
362-
if (setBearer)
363-
(headers as HttpRequestHeaders).Authorization = new AuthenticationHeaderValue("Bearer", _bearerToken);
364-
}
365-
366394
#region IDisposable
367395
private bool _disposedValue;
368396

0 commit comments

Comments
 (0)