AutheliaMultiDomainProxy/Backend/AuthHelpers.cs

51 lines
1.9 KiB
C#
Raw Normal View History

2023-03-28 22:04:56 +02:00
using System.Web;
using Nager.PublicSuffix;
2023-03-28 22:04:56 +02:00
namespace AutheliaMultiDomainProxy.Backend;
public class AuthHelpers {
2023-05-04 01:06:04 +02:00
static DomainParser domainParser = new(new WebTldRuleProvider("https://share.zotan.services/public_suffix_list.dat"));
2023-03-28 22:04:56 +02:00
public static (bool isAuthenticated, string? user) IsAuthenticated(IRequestCookieCollection cookies) {
if (!cookies.ContainsKey(Vars.CookieName))
return (false, null);
var response = MakeUpstreamAutheliaRequest(cookies[Vars.CookieName]!);
if (!response.IsSuccessStatusCode)
return (false, null);
return response.Headers.Contains("remote-user") ? (true, response.Headers.GetValues("remote-user").First()) : (true, null);
}
private static HttpResponseMessage MakeUpstreamAutheliaRequest(string cookie) {
var client = new HttpClient();
2023-04-02 15:22:28 +02:00
client.DefaultRequestHeaders.Add("cookie", $"authelia_session={cookie}");
2023-03-28 22:47:01 +02:00
client.DefaultRequestHeaders.Add("x-forwarded-proto", "https");
client.DefaultRequestHeaders.Add("Host", $"{Vars.AutheliaSubdomain}.{Vars.UpstreamPrimaryDomain}");
2023-03-28 22:04:56 +02:00
var response = client.GetAsync($"http://127.0.0.1:9091/api/verify");
return response.Result;
}
public static HttpResponseMessage MakeUpstreamAutheliaRequest(IHeaderDictionary headers, string? cookie) {
var client = new HttpClient();
foreach (var header in headers) {
if (Vars.RequestHeaders.Contains(header.Key, StringComparer.InvariantCultureIgnoreCase))
client.DefaultRequestHeaders.Add(header.Key, (IEnumerable<string?>)header.Value);
}
client.DefaultRequestHeaders.Host = $"{headers["Host"]}.amdp.{Vars.UpstreamPrimaryDomain}";
2023-03-28 22:04:56 +02:00
if (!string.IsNullOrWhiteSpace(cookie))
2023-04-02 15:22:28 +02:00
client.DefaultRequestHeaders.Add("cookie", $"authelia_session={cookie}");
2023-03-28 22:04:56 +02:00
var response = client.GetAsync($"http://127.0.0.1:9091/api/verify");
return response.Result;
}
public static string GetRootDomain(string url) {
return domainParser.Parse(new Uri(url).Host).RegistrableDomain;
}
2023-03-28 22:04:56 +02:00
}