-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathContextHelper.cs
82 lines (74 loc) · 2.75 KB
/
ContextHelper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using Microsoft.AspNetCore.Http;
using System;
using System.Net;
using System.Runtime.CompilerServices;
using System.Security.Cryptography;
using System.Text;
namespace Microcosm
{
public static class ContextHelper
{
public static string EnvironmentVariableKey = "AuthKeySHA512";
public static bool AuthForm(HttpContext context)
{
if (context.Request.Method == "POST")
{
if (context.Request.Form.ContainsKey("authKey"))
{
string authKey = context.Request.Form["authKey"];
if (ContextHelper.IsAuthorized(authKey))
{
return true;
}
}
}
return false;
}
public static void Deny(HttpContext context, string path)
{
if (ContextHelper.IsAuthorizationConfigured())
{
ContextHelper.Redirect(context, path, "Auth key is invalid.");
}
else
{
ContextHelper.Redirect(context, path, $"Environment variable {ContextHelper.EnvironmentVariableKey} not found.");
}
}
public static void Redirect(HttpContext context, string path, string message)
{
message = WebUtility.UrlEncode(message);
context.Response.Redirect($"{path}?message={message}");
}
public static bool IsAuthorizationConfigured()
{
string requiredAuthKey = Environment.GetEnvironmentVariable(EnvironmentVariableKey);
return requiredAuthKey != null;
}
public static bool IsAuthorized(string authKey)
{
string requiredAuthKeyHexString = Environment.GetEnvironmentVariable(EnvironmentVariableKey);
if (requiredAuthKeyHexString != null)
{
using (SHA512 sha512 = SHA512.Create())
{
byte[] authKeyBytes = Encoding.UTF8.GetBytes(authKey);
byte[] authKeyHash = sha512.ComputeHash(authKeyBytes);
string authKeyHexString = ContextHelper.ToHexString(authKeyHash);
if (authKeyHexString == requiredAuthKeyHexString.ToLowerInvariant())
{
return true;
}
}
}
return false;
}
public static string ToHexString(byte[] bytes)
{
string hexString = BitConverter.ToString(bytes);
hexString = hexString.Replace("-", string.Empty);
hexString = hexString.ToLower();
return hexString;
}
}
}