✨ Web version login
This commit is contained in:
78
DysonNetwork.Sphere/Pages/Account/Profile.cshtml
Normal file
78
DysonNetwork.Sphere/Pages/Account/Profile.cshtml
Normal file
@ -0,0 +1,78 @@
|
||||
@page "/web/account/profile"
|
||||
@model DysonNetwork.Sphere.Pages.Account.ProfileModel
|
||||
@{
|
||||
ViewData["Title"] = "Profile";
|
||||
}
|
||||
|
||||
<div class="min-h-screen flex items-center justify-center bg-gray-100 dark:bg-gray-900 py-12">
|
||||
<div class="bg-white dark:bg-gray-800 p-8 rounded-lg shadow-md w-full max-w-2xl">
|
||||
<h1 class="text-3xl font-bold text-center text-gray-900 dark:text-white mb-8">User Profile</h1>
|
||||
|
||||
@if (Model.Account != null)
|
||||
{
|
||||
<div class="mb-6">
|
||||
<h2 class="text-2xl font-semibold text-gray-800 dark:text-gray-200 mb-4">Account Information</h2>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2"><strong>Username:</strong> @Model.Account.Name</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2"><strong>Nickname:</strong> @Model.Account.Nick</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2"><strong>Language:</strong> @Model.Account.Language</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2">
|
||||
<strong>Activated:</strong> @Model.Account.ActivatedAt?.ToString("yyyy-MM-dd HH:mm", System.Globalization.CultureInfo.InvariantCulture)
|
||||
</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2"><strong>Superuser:</strong> @Model.Account.IsSuperuser
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mb-6">
|
||||
<h2 class="text-2xl font-semibold text-gray-800 dark:text-gray-200 mb-4">Profile Details</h2>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2">
|
||||
<strong>Name:</strong> @Model.Account.Profile.FirstName @Model.Account.Profile.MiddleName @Model.Account.Profile.LastName
|
||||
</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2"><strong>Bio:</strong> @Model.Account.Profile.Bio</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2"><strong>Gender:</strong> @Model.Account.Profile.Gender
|
||||
</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2">
|
||||
<strong>Location:</strong> @Model.Account.Profile.Location</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2">
|
||||
<strong>Birthday:</strong> @Model.Account.Profile.Birthday?.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture)
|
||||
</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2">
|
||||
<strong>Experience:</strong> @Model.Account.Profile.Experience</p>
|
||||
<p class="text-gray-700 dark:text-gray-300 mb-2"><strong>Level:</strong> @Model.Account.Profile.Level
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mb-6">
|
||||
<h2 class="text-2xl font-semibold text-gray-800 dark:text-gray-200 mb-4">Access Token</h2>
|
||||
<div class="flex items-center">
|
||||
<input type="text" id="accessToken" value="@Model.AccessToken" readonly
|
||||
class="form-input flex-grow rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring focus:ring-blue-500 focus:ring-opacity-50 dark:bg-gray-700 dark:border-gray-600 dark:text-white"/>
|
||||
<button onclick="copyAccessToken()"
|
||||
class="ml-4 bg-blue-600 text-white py-2 px-4 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50">
|
||||
Copy
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form method="post" asp-page-handler="Logout" class="text-center">
|
||||
<button type="submit"
|
||||
class="bg-red-600 text-white py-2 px-4 rounded-md hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-opacity-50">
|
||||
Logout
|
||||
</button>
|
||||
</form>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p class="text-red-500 text-center">User profile not found. Please log in.</p>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function copyAccessToken() {
|
||||
var copyText = document.getElementById("accessToken");
|
||||
copyText.select();
|
||||
copyText.setSelectionRange(0, 99999); /* For mobile devices */
|
||||
document.execCommand("copy");
|
||||
alert("Access Token copied to clipboard!");
|
||||
}
|
||||
</script>
|
28
DysonNetwork.Sphere/Pages/Account/Profile.cshtml.cs
Normal file
28
DysonNetwork.Sphere/Pages/Account/Profile.cshtml.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using DysonNetwork.Sphere.Auth;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace DysonNetwork.Sphere.Pages.Account;
|
||||
|
||||
public class ProfileModel : PageModel
|
||||
{
|
||||
public DysonNetwork.Sphere.Account.Account? Account { get; set; }
|
||||
public string? AccessToken { get; set; }
|
||||
|
||||
public Task<IActionResult> OnGetAsync()
|
||||
{
|
||||
if (HttpContext.Items["CurrentUser"] is not Sphere.Account.Account currentUser)
|
||||
return Task.FromResult<IActionResult>(RedirectToPage("/Auth/Login"));
|
||||
|
||||
Account = currentUser;
|
||||
AccessToken = Request.Cookies.TryGetValue(AuthConstants.CookieTokenName, out var value) ? value : null;
|
||||
|
||||
return Task.FromResult<IActionResult>(Page());
|
||||
}
|
||||
|
||||
public IActionResult OnPostLogout()
|
||||
{
|
||||
HttpContext.Response.Cookies.Delete(AuthConstants.CookieTokenName);
|
||||
return RedirectToPage("/Auth/Login");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user