got assignment template variables and replacement working

This commit is contained in:
2023-07-27 19:51:36 -06:00
parent b03c699381
commit 7c857a3887
10 changed files with 63 additions and 81 deletions

View File

@@ -7,6 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Markdig" Version="0.31.0" />
<PackageReference Include="RestSharp" Version="108.0.3" />
<PackageReference Include="YamlDotNet" Version="13.1.1" />
</ItemGroup>

View File

@@ -15,4 +15,16 @@ public record AssignmentTemplate
return matches.Select(match => match.Groups[1].Value);
}
public static string GetHtml(AssignmentTemplate template, LocalAssignment assignment)
{
var html = Markdig.Markdown.ToHtml(template.Markdown);
foreach (KeyValuePair<string, string> entry in assignment.template_variables)
{
html = html.Replace($"%7B%7B{entry.Key}%7D%7D", entry.Value);
}
return html;
}
}

View File

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

View File

@@ -3,46 +3,33 @@ using RestSharp;
public class WebRequestor : IWebRequestor
{
private const string BaseUrl = "https://snow.instructure.com/api/v1/";
private bool tokenSet = false;
private string token;
private RestClient client;
private ICanvasTokenManagement tokenManagement { get; }
public WebRequestor(ICanvasTokenManagement tokenManagement)
public WebRequestor()
{
token =
Environment.GetEnvironmentVariable("CANVAS_TOKEN")
?? throw new Exception("CANVAS_TOKEN not in environment");
client = new RestClient(BaseUrl);
this.tokenManagement = tokenManagement;
client.AddDefaultHeader("Authorization", $"Bearer {token}");
}
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)
{
@@ -56,7 +43,6 @@ 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);
}