🗑️ Drop the usage of casbin ♻️ Refactor the permission service ♻️ Refactor the flow of creating an account 🧱 Email infra structure
148 lines
4.0 KiB
Plaintext
148 lines
4.0 KiB
Plaintext
@page "/auth/captcha"
|
|
@model DysonNetwork.Sphere.Pages.CheckpointPage
|
|
|
|
@{
|
|
Layout = null;
|
|
|
|
var cfg = ViewData.Model.Configuration;
|
|
var provider = cfg.GetSection("Captcha")["Provider"]?.ToLower();
|
|
var apiKey = cfg.GetSection("Captcha")["ApiKey"];
|
|
}
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
<title>Solar Network Captcha</title>
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=Roboto+Mono&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
<style>
|
|
body {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
height: 100vh;
|
|
background-color: #2d2d2d;
|
|
font-family: "Roboto Mono", monospace;
|
|
color: #c9d1d9;
|
|
}
|
|
|
|
.parent {
|
|
padding: 20px;
|
|
max-width: 480px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
h2 {
|
|
font-size: 18px;
|
|
font-weight: 300;
|
|
color: #ffffff;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
.footer {
|
|
margin-top: 20px;
|
|
font-size: 11px;
|
|
opacity: 0.6;
|
|
}
|
|
|
|
.footer-product {
|
|
font-size: 12px;
|
|
font-weight: bold;
|
|
margin-bottom: 5px;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.g-recaptcha {
|
|
display: inline-block; /* Adjust as needed */
|
|
}
|
|
</style>
|
|
@switch (provider)
|
|
{
|
|
case "recaptcha":
|
|
<script src="https://www.recaptcha.net/recaptcha/api.js" async defer></script>
|
|
break;
|
|
case "cloudflare":
|
|
<script
|
|
src="https://challenges.cloudflare.com/turnstile/v0/api.js"
|
|
async
|
|
defer
|
|
></script>
|
|
break;
|
|
}
|
|
</head>
|
|
<body>
|
|
<div class="parent">
|
|
<div class="container">
|
|
<h1>reCaptcha</h1>
|
|
@switch (provider)
|
|
{
|
|
case "cloudflare":
|
|
<div
|
|
class="cf-turnstile"
|
|
data-sitekey="@apiKey"
|
|
data-callback="onSuccess"
|
|
></div>
|
|
break;
|
|
case "recaptcha":
|
|
<div
|
|
class="g-recaptcha"
|
|
data-sitekey="@apiKey"
|
|
data-callback="onSuccess"
|
|
></div>
|
|
break;
|
|
default:
|
|
<p style="color: yellow;">Captcha provider not configured correctly.</p>
|
|
break;
|
|
}
|
|
</div>
|
|
<div class="footer">
|
|
<div class="footer-product">Solar Network Anti-Robot</div>
|
|
<a
|
|
href="https://solsynth.dev"
|
|
style="color: #c9d1d9; text-decoration: none"
|
|
>Solsynth LLC</a>
|
|
© @DateTime.Now.Year<br/>
|
|
Powered by
|
|
@switch (provider)
|
|
{
|
|
case "cloudflare":
|
|
<a href="https://www.cloudflare.com/turnstile/" style="color: #c9d1d9"
|
|
>Cloudflare Turnstile</a>
|
|
break;
|
|
case "recaptcha":
|
|
<a href="https://www.google.com/recaptcha/" style="color: #c9d1d9"
|
|
>Google reCaptcha</a>
|
|
break;
|
|
default:
|
|
<span>Nothing</span>
|
|
break;
|
|
}
|
|
<br/>
|
|
Hosted by
|
|
<a
|
|
href="https://github.com/Solsynth/DysonNetwork"
|
|
style="color: #c9d1d9"
|
|
>DysonNetwork.Sphere</a>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
function getQueryParam(name) {
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
return urlParams.get(name);
|
|
}
|
|
|
|
function onSuccess(token) {
|
|
window.parent.postMessage("captcha_tk=" + token, "*");
|
|
const redirectUri = getQueryParam("redirect_uri");
|
|
if (redirectUri) {
|
|
window.location.href = `${redirectUri}?captcha_tk=${encodeURIComponent(token)}`;
|
|
}
|
|
}
|
|
</script>
|
|
</body>
|
|
</html> |