summaryrefslogtreecommitdiffstats
path: root/src/server/Utilities/BasicAuthenticationAttribute.cs
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-02-14 19:02:54 +0100
committerivarlovlie <git@ivarlovlie.no>2022-02-14 19:02:54 +0100
commit1d482a4ec2cf24dbe7cc6cb02e192e1b9545f796 (patch)
tree9b0a26b7d3efeecd5ec20a6e5624857624bc53a6 /src/server/Utilities/BasicAuthenticationAttribute.cs
parentda4c22abbbf04566891976d01f5cf629857f8d0b (diff)
downloadbookmark-thing-1d482a4ec2cf24dbe7cc6cb02e192e1b9545f796.tar.xz
bookmark-thing-1d482a4ec2cf24dbe7cc6cb02e192e1b9545f796.zip
feat: Experiment with tailwind
Diffstat (limited to 'src/server/Utilities/BasicAuthenticationAttribute.cs')
-rw-r--r--src/server/Utilities/BasicAuthenticationAttribute.cs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/server/Utilities/BasicAuthenticationAttribute.cs b/src/server/Utilities/BasicAuthenticationAttribute.cs
new file mode 100644
index 0000000..81467cd
--- /dev/null
+++ b/src/server/Utilities/BasicAuthenticationAttribute.cs
@@ -0,0 +1,39 @@
+using System.Net.Http.Headers;
+using Microsoft.AspNetCore.Mvc.Filters;
+
+namespace IOL.BookmarkThing.Server.Utilities;
+
+public class BasicAuthenticationAttribute : TypeFilterAttribute
+{
+ public BasicAuthenticationAttribute(string claimPermission) : base(typeof(BasicAuthenticationFilter)) {
+ Arguments = new object[] {
+ new Claim(claimPermission, "True")
+ };
+ }
+}
+
+public class BasicAuthenticationFilter : IAuthorizationFilter
+{
+ private readonly Claim _claim;
+
+ public BasicAuthenticationFilter(Claim claim) {
+ _claim = claim;
+ }
+
+ public void OnAuthorization(AuthorizationFilterContext context) {
+ if (!context.HttpContext.Request.Headers.ContainsKey("Authorization")) return;
+ try {
+ var authHeader = AuthenticationHeaderValue.Parse(context.HttpContext.Request.Headers["Authorization"]);
+ if (authHeader.Parameter is null) {
+ context.Result = new ForbidResult(AppConstants.BASIC_AUTH_SCHEME);
+ }
+
+ var hasClaim = context.HttpContext.User.Claims.Any(c => c.Type == _claim.Type && c.Value == _claim.Value);
+ if (!hasClaim) {
+ context.Result = new ForbidResult(AppConstants.BASIC_AUTH_SCHEME);
+ }
+ } catch {
+ // ignore
+ }
+ }
+}