moved access token to browser based

This commit is contained in:
2023-07-26 22:10:10 -06:00
parent 87fc062dfb
commit b03e81caf1
12 changed files with 118 additions and 240 deletions

View File

@@ -0,0 +1,5 @@
public interface ICanvasTokenManagement
{
Task<string?> GetCanvasToken();
Task SaveCanvasToken(string token);
}

View File

@@ -3,32 +3,46 @@ using RestSharp;
public class WebRequestor : IWebRequestor
{
private const string BaseUrl = "https://snow.instructure.com/api/v1/";
private string token;
private bool tokenSet = false;
private RestClient client;
public WebRequestor()
private ICanvasTokenManagement tokenManagement { get; }
public WebRequestor(ICanvasTokenManagement tokenManagement)
{
token =
Environment.GetEnvironmentVariable("CANVAS_TOKEN")
?? throw new Exception("CANVAS_TOKEN not in environment");
client = new RestClient(BaseUrl);
client.AddDefaultHeader("Authorization", $"Bearer {token}");
this.tokenManagement = tokenManagement;
}
private async Task EnsureCanvasTokenSet()
{
if (tokenSet)
return;
var newToken = await tokenManagement.GetCanvasToken();
if(newToken == null)
throw new Exception("cannot request canvas, no token in storage");
client.AddDefaultHeader("Authorization", $"Bearer {newToken}");
tokenSet = true;
}
public async Task<(T[]?, RestResponse)> GetManyAsync<T>(RestRequest request)
{
await EnsureCanvasTokenSet();
var response = await client.ExecuteGetAsync(request);
return (Deserialize<T[]>(response), response);
}
public async Task<(T?, RestResponse)> GetAsync<T>(RestRequest request)
{
await EnsureCanvasTokenSet();
var response = await client.ExecuteGetAsync(request);
return (Deserialize<T>(response), response);
}
public async Task<RestResponse> PostAsync(RestRequest request)
{
await EnsureCanvasTokenSet();
var response = await client.ExecutePostAsync(request);
if (!response.IsSuccessful)
{
@@ -42,6 +56,7 @@ public class WebRequestor : IWebRequestor
public async Task<(T?, RestResponse)> PostAsync<T>(RestRequest request)
{
await EnsureCanvasTokenSet();
var response = await client.ExecutePostAsync(request);
return (Deserialize<T>(response), response);
}