First commit
This commit is contained in:
104
Redirects.cs
Normal file
104
Redirects.cs
Normal file
@@ -0,0 +1,104 @@
|
||||
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
class Redirect
|
||||
{
|
||||
|
||||
private static Dictionary<string,IRedirect> redirects = new Dictionary<string, IRedirect>
|
||||
{
|
||||
// CrossLang Shell
|
||||
{"crosslang-shell",Std("https://downloads.tesses.net/ShellPackage.crvm")},
|
||||
|
||||
// TessesFramework
|
||||
{"tessesframework",Std("https://git.tesses.org/tesses50/tessesframework")},
|
||||
{"tf-tools-aarch64-linux",TF("tessesframework-tools-aarch64-linux-musl.tar.gz")},
|
||||
{"tf-tools-aarch64-macos",TF("tessesframework-tools-aarch64-macos-none.tar.gz")},
|
||||
{"tf-tools-aarch64-windows",TF("tessesframework-tools-aarch64-windows-gnu.zip")},
|
||||
{"tf-tools-arm-linux",TF("tessesframework-tools-arm-linux-musleabi.tar.gz")},
|
||||
{"tf-tools-powerpc-linux",TF("tessesframework-tools-powerpc-linux-musleabihf.tar.gz")},
|
||||
{"tf-tools-riscv64-linux",TF("tessesframework-tools-riscv64-linux-musl.tar.gz")},
|
||||
{"tf-tools-x86-linux",TF("tessesframework-tools-x86-linux-musl.tar.gz")},
|
||||
{"tf-tools-x86-windows",TF("tessesframework-tools-x86-windows-gnu.zip")},
|
||||
{"tf-tools-x86_64-linux",TF("tessesframework-tools-x86_64-linux-musl.tar.gz")},
|
||||
{"tf-tools-x86_64-macos",TF("tessesframework-tools-x86_64-macos-none.tar.gz")},
|
||||
{"tf-tools-x86_64-windows",TF("tessesframework-tools-x86_64-windows-gnu.zip")},
|
||||
|
||||
|
||||
};
|
||||
|
||||
private static IRedirect Std(string url)
|
||||
{
|
||||
return new StdRedirect(url);
|
||||
}
|
||||
private static IRedirect Gitea(string giteaServer, string giteaProject, string file, bool prerelease = false)
|
||||
{
|
||||
return new GiteaReleaseRedirect(giteaServer,giteaProject,file,prerelease);
|
||||
}
|
||||
private static IRedirect TF(string filename)
|
||||
{
|
||||
return Gitea(
|
||||
"https://git.tesses.org/",
|
||||
"tesses50/tessesframework",
|
||||
filename,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
public static async Task<string?> HandleRedirectAsync(string redir)
|
||||
{
|
||||
if(redirects.ContainsKey(redir))
|
||||
return await redirects[redir].RedirectAsync();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
interface IRedirect
|
||||
{
|
||||
public Task<string?> RedirectAsync();
|
||||
}
|
||||
|
||||
public class StdRedirect(string url) : IRedirect
|
||||
{
|
||||
public async Task<string?> RedirectAsync()
|
||||
{
|
||||
return await Task.FromResult(url);
|
||||
}
|
||||
}
|
||||
public class GiteaReleaseRedirect(string giteaServer, string giteaProject, string file, bool prerelease = false) : IRedirect
|
||||
{
|
||||
private static HttpClient client =new HttpClient();
|
||||
public async Task<string?> RedirectAsync()
|
||||
{
|
||||
// https://git.tesseslanguage.com/api/v1/repos/tesses50/crosslang/releases?pre-release=true&limit=1
|
||||
var resp = await client.GetFromJsonAsync<List<_release>>($"{giteaServer.TrimEnd('/')}/api/v1/repos/{System.Web.HttpUtility.UrlPathEncode(giteaProject)}/releases?pre-release={(prerelease ? "true":"false")}&limit=1");
|
||||
if(resp is not null)
|
||||
{
|
||||
var resp2 = resp.FirstOrDefault();
|
||||
if(resp2 is not null)
|
||||
{
|
||||
foreach(var item in resp2.Assets)
|
||||
{
|
||||
if(item.Name == file)
|
||||
return item.Url;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private class _release
|
||||
{
|
||||
[JsonPropertyName("assets")]
|
||||
public List<_asset> Assets {get;set;}=new List<_asset>();
|
||||
|
||||
|
||||
public class _asset
|
||||
{
|
||||
[JsonPropertyName("name")]
|
||||
public string Name {get;set;}="";
|
||||
|
||||
[JsonPropertyName("browser_download_url")]
|
||||
public string Url {get;set;}="";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user