113 lines
5.7 KiB
Plaintext
113 lines
5.7 KiB
Plaintext
@page "/auth/authorize"
|
|
@model DysonNetwork.Sphere.Pages.Auth.AuthorizeModel
|
|
@{
|
|
ViewData["Title"] = "Authorize Application";
|
|
}
|
|
|
|
<div class="h-full flex items-center justify-center bg-base-200 py-12 px-4 sm:px-6 lg:px-8">
|
|
<div class="card w-full max-w-md bg-base-100 shadow-xl">
|
|
<div class="card-body px-8 py-7">
|
|
<h2 class="card-title justify-center text-2xl font-bold">
|
|
Authorize Application
|
|
</h2>
|
|
@if (!string.IsNullOrEmpty(Model.AppName))
|
|
{
|
|
<div class="mt-6">
|
|
<div class="flex items-center justify-center">
|
|
@if (!string.IsNullOrEmpty(Model.AppLogo))
|
|
{
|
|
<div class="avatar">
|
|
<div class="w-12 rounded">
|
|
<img src="@Model.AppLogo" alt="@Model.AppName logo" />
|
|
</div>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="avatar avatar-placeholder">
|
|
<div class="bg-neutral text-neutral-content rounded-full w-12">
|
|
<span class="text-xl">@Model.AppName?[..1].ToUpper()</span>
|
|
</div>
|
|
</div>
|
|
}
|
|
<div class="ml-4 text-left">
|
|
<h3 class="text-lg font-medium">@Model.AppName</h3>
|
|
@if (!string.IsNullOrEmpty(Model.AppUri))
|
|
{
|
|
<a href="@Model.AppUri" class="text-sm link link-primary" target="_blank" rel="noopener noreferrer">
|
|
@Model.AppUri
|
|
</a>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
<p class="mt-6 text-sm text-center">
|
|
When you authorize this application, you consent to the following permissions:
|
|
</p>
|
|
|
|
<div class="mt-4">
|
|
<ul class="menu bg-base-200 rounded-box w-full">
|
|
@if (Model.Scope != null)
|
|
{
|
|
var scopeDescriptions = new Dictionary<string, (string Name, string Description)>
|
|
{
|
|
["openid"] = ("OpenID", "Read your basic profile information"),
|
|
["profile"] = ("Profile", "View your basic profile information"),
|
|
["email"] = ("Email", "View your email address"),
|
|
["offline_access"] = ("Offline Access", "Access your data while you're not using the application")
|
|
};
|
|
|
|
foreach (var scope in Model.Scope.Split(' ').Where(s => !string.IsNullOrWhiteSpace(s)))
|
|
{
|
|
var scopeInfo = scopeDescriptions.GetValueOrDefault(scope, (scope, scope.Replace('_', ' ')));
|
|
<li>
|
|
<a>
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-success" viewBox="0 0 20 20" fill="currentColor">
|
|
<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
|
|
</svg>
|
|
<div>
|
|
<p class="font-medium">@scopeInfo.Item1</p>
|
|
<p class="text-xs text-base-content/70">@scopeInfo.Item2</p>
|
|
</div>
|
|
</a>
|
|
</li>
|
|
}
|
|
}
|
|
</ul>
|
|
</div>
|
|
|
|
<form method="post" class="mt-8 space-y-4">
|
|
<input type="hidden" asp-for="ClientIdString" />
|
|
<input type="hidden" asp-for="ResponseType" name="response_type" />
|
|
<input type="hidden" asp-for="RedirectUri" name="redirect_uri" />
|
|
<input type="hidden" asp-for="Scope" name="scope" />
|
|
<input type="hidden" asp-for="State" name="state" />
|
|
<input type="hidden" asp-for="Nonce" name="nonce" />
|
|
<input type="hidden" asp-for="ReturnUrl" name="returnUrl" />
|
|
<input type="hidden" asp-for="CodeChallenge" value="@HttpContext.Request.Query["code_challenge"]" />
|
|
<input type="hidden" asp-for="CodeChallengeMethod" value="@HttpContext.Request.Query["code_challenge_method"]" />
|
|
<input type="hidden" asp-for="ResponseMode" value="@HttpContext.Request.Query["response_mode"]" />
|
|
|
|
<div class="card-actions justify-center flex gap-4">
|
|
<button type="submit" name="allow" value="true" class="btn btn-primary flex-1">Allow</button>
|
|
<button type="submit" name="allow" value="false" class="btn btn-ghost flex-1">Deny</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@functions {
|
|
private string GetScopeDisplayName(string scope)
|
|
{
|
|
return scope switch
|
|
{
|
|
"openid" => "View your basic profile information",
|
|
"profile" => "View your profile information (name, picture, etc.)",
|
|
"email" => "View your email address",
|
|
"offline_access" => "Access your information while you're not using the app",
|
|
_ => scope
|
|
};
|
|
}
|
|
} |