F1 - Autentcacion - Completa

This commit is contained in:
2026-08-10 15:54:42 -03:00
commit dd7f5b3bf6
245 changed files with 81985 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
@model vita_asistente.ViewModels.LoginViewModel
@{
ViewData["Title"] = "Iniciar Sesión";
}
<h2>@ViewData["Title"]</h2>
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
<h4>Inicia sesión con tu cuenta.</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Password" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<div class="checkbox">
<input asp-for="RememberMe" />
<label asp-for="RememberMe"></label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-primary">Iniciar sesión</button>
</div>
</div>
<p>
<a asp-action="Register">Registrarse como nuevo usuario</a>
</p>
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
}
+87
View File
@@ -0,0 +1,87 @@
@model vita_asistente.ViewModels.RegisterViewModel
@{
ViewData["Title"] = "Registro de Usuario";
}
<h2>@ViewData["Title"]</h2>
<form asp-controller="Account" asp-action="Register" method="post" class="form-horizontal">
<h4>Crear una nueva cuenta.</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Nombre" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Nombre" class="form-control" />
<span asp-validation-for="Nombre" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Apellido" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Apellido" class="form-control" />
<span asp-validation-for="Apellido" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Documento" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Documento" class="form-control" />
<span asp-validation-for="Documento" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Direccion" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Direccion" class="form-control" />
<span asp-validation-for="Direccion" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Telefono" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Telefono" class="form-control" />
<span asp-validation-for="Telefono" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Password" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="ConfirmPassword" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="ConfirmPassword" class="form-control" />
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-primary">Registrar</button>
</div>
</div>
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
}
+8
View File
@@ -0,0 +1,8 @@
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
+6
View File
@@ -0,0 +1,6 @@
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p>Use this page to detail your site's privacy policy.</p>
+19
View File
@@ -0,0 +1,19 @@
@using Microsoft.AspNetCore.Identity
@model IEnumerable<IdentityRole>
<h1>Roles</h1>
<p><a asp-action="Create" class="btn btn-primary">Crear nuevo rol</a></p>
<table class="table">
<thead><tr><th>Nombre</th><th>Acciones</th></tr></thead>
<tbody>
@foreach (var role in Model)
{
<tr>
<td>@role.Name</td>
<td>
<a asp-action="Delete" asp-route-id="@role.Id" class="btn btn-danger btn-sm">Eliminar</a>
</td>
</tr>
}
</tbody>
</table>
+25
View File
@@ -0,0 +1,25 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
+75
View File
@@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - vita_asistente</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/vita_asistente.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">vita_asistente</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
@if (User.IsInRole("Admin"))
{
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="adminDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Administración
</a>
<ul class="dropdown-menu" aria-labelledby="adminDropdown">
<li><a class="dropdown-item" asp-controller="Usuarios" asp-action="Index">Usuarios</a></li>
<li><a class="dropdown-item" asp-controller="Roles" asp-action="Index">Roles</a></li>
</ul>
</li>
}
<ul class="navbar-nav ms-auto">
@if (User.Identity.IsAuthenticated)
{
<li class="nav-item">
<span class="navbar-text">Hola, @User.Identity.Name!</span>
</li>
<li class="nav-item">
<form asp-controller="Account" asp-action="Logout" method="post" class="form-inline">
<button type="submit" class="nav-link btn btn-link text-dark">Cerrar sesión</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Account" asp-action="Register">Registrarse</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Account" asp-action="Login">Iniciar sesión</a>
</li>
}
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2026 - vita_asistente - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
+48
View File
@@ -0,0 +1,48 @@
/* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
for details on configuring this project to bundle and minify static web assets. */
a.navbar-brand {
white-space: normal;
text-align: center;
word-break: break-all;
}
a {
color: #0077cc;
}
.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.border-top {
border-top: 1px solid #e5e5e5;
}
.border-bottom {
border-bottom: 1px solid #e5e5e5;
}
.box-shadow {
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
}
button.accept-policy {
font-size: 1rem;
line-height: inherit;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
white-space: nowrap;
line-height: 60px;
}
@@ -0,0 +1,2 @@
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
+47
View File
@@ -0,0 +1,47 @@
@model ApplicationUser
<h1>Crear Usuario</h1>
<hr />
<div class="row">
<div class="col-md-6">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Nombre" class="control-label"></label>
<input asp-for="Nombre" class="form-control" />
<span asp-validation-for="Nombre" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Apellido" class="control-label"></label>
<input asp-for="Apellido" class="form-control" />
<span asp-validation-for="Apellido" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Documento" class="control-label"></label>
<input asp-for="Documento" class="form-control" />
<span asp-validation-for="Documento" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Direccion" class="control-label"></label>
<input asp-for="Direccion" class="form-control" />
<span asp-validation-for="Direccion" class="text-danger"></span>
</div>
<div class="form-group">
<label for="password" class="control-label">Contraseña</label>
<input name="password" class="form-control" type="password" />
<span asp-validation-for="PasswordHash" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Crear" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Volver a la lista</a>
</div>
+22
View File
@@ -0,0 +1,22 @@
@model ApplicationUser
<h1>Eliminar Usuario</h1>
<h3>¿Está seguro de eliminar este usuario?</h3>
<div>
<hr />
<dl class="row">
<dt class="col-sm-2">Nombre</dt>
<dd class="col-sm-10">@Model.Nombre</dd>
<dt class="col-sm-2">Apellido</dt>
<dd class="col-sm-10">@Model.Apellido</dd>
<dt class="col-sm-2">Email</dt>
<dd class="col-sm-10">@Model.Email</dd>
<dt class="col-sm-2">Documento</dt>
<dd class="col-sm-10">@Model.Documento</dd>
</dl>
<form asp-action="Delete">
<input type="hidden" asp-for="Id" />
<input type="submit" value="Eliminar" class="btn btn-danger" />
<a asp-action="Index" class="btn btn-secondary">Cancelar</a>
</form>
</div>
+47
View File
@@ -0,0 +1,47 @@
@model ApplicationUser
<h1>Crear Usuario</h1>
<hr />
<div class="row">
<div class="col-md-6">
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Nombre" class="control-label"></label>
<input asp-for="Nombre" class="form-control" />
<span asp-validation-for="Nombre" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Apellido" class="control-label"></label>
<input asp-for="Apellido" class="form-control" />
<span asp-validation-for="Apellido" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Documento" class="control-label"></label>
<input asp-for="Documento" class="form-control" />
<span asp-validation-for="Documento" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Direccion" class="control-label"></label>
<input asp-for="Direccion" class="form-control" />
<span asp-validation-for="Direccion" class="text-danger"></span>
</div>
<div class="form-group">
<label for="password" class="control-label">Contraseña</label>
<input name="password" class="form-control" type="password" />
<span asp-validation-for="PasswordHash" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Crear" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Volver a la lista</a>
</div>
+43
View File
@@ -0,0 +1,43 @@
@using Microsoft.AspNetCore.Identity
@inject UserManager<ApplicationUser> UserManager
@model IEnumerable<ApplicationUser>
<h1>Usuarios</h1>
<p>
<a asp-action="Create" class="btn btn-primary">Crear nuevo usuario</a>
</p>
<table class="table table-striped">
<thead>
<tr>
<th>Nombre</th>
<th>Apellido</th>
<th>Email</th>
<th>Documento</th>
<th>Roles</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
@foreach (var usuario in Model)
{
<tr>
<td>@usuario.Nombre</td>
<td>@usuario.Apellido</td>
<td>@usuario.Email</td>
<td>@usuario.Documento</td>
<td>
@{
var roles = await UserManager.GetRolesAsync(usuario);
@string.Join(", ", roles)
}
</td>
<td>
<a asp-action="Details" asp-route-id="@usuario.Id" class="btn btn-info btn-sm">Detalles</a>
<a asp-action="Edit" asp-route-id="@usuario.Id" class="btn btn-warning btn-sm">Editar</a>
<a asp-action="Delete" asp-route-id="@usuario.Id" class="btn btn-danger btn-sm">Eliminar</a>
<a asp-action="ManageRoles" asp-route-id="@usuario.Id" class="btn btn-secondary btn-sm">Roles</a>
</td>
</tr>
}
</tbody>
</table>
+21
View File
@@ -0,0 +1,21 @@
@using vita_asistente.Controllers
@model ManageRolesViewModel
<h1>Gestionar roles de @Model.UsuarioNombre</h1>
<hr />
<form asp-action="ManageRoles" method="post">
<input type="hidden" asp-for="UsuarioId" />
<div class="form-group">
@foreach (var role in Model.RolesDisponibles)
{
<div class="form-check">
<input class="form-check-input" type="checkbox" name="RolesDisponibles[@Model.RolesDisponibles.IndexOf(role)].IsSelected" value="true" @(role.IsSelected ? "checked" : "") />
<input type="hidden" name="RolesDisponibles[@Model.RolesDisponibles.IndexOf(role)].RoleId" value="@role.RoleId" />
<input type="hidden" name="RolesDisponibles[@Model.RolesDisponibles.IndexOf(role)].RoleName" value="@role.RoleName" />
<label class="form-check-label">@role.RoleName</label>
</div>
}
</div>
<button type="submit" class="btn btn-primary">Guardar</button>
<a asp-action="Index" class="btn btn-secondary">Cancelar</a>
</form>
+3
View File
@@ -0,0 +1,3 @@
@using vita_asistente
@using vita_asistente.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+3
View File
@@ -0,0 +1,3 @@
@{
Layout = "_Layout";
}