From 9487546fd657d31d7b486b4e800b2f2a09f6458f Mon Sep 17 00:00:00 2001 From: fede Date: Tue, 15 Oct 2024 03:30:01 -0300 Subject: [PATCH] Feat: Routing andando Signed-off-by: fede --- Aspnet/AlquilaFacil.csproj | 5 +- Aspnet/Controllers/InquilinoController.cs | 5 +- Aspnet/Controllers/LoginController.cs | 65 ++++++++++-------- Aspnet/Program.cs | 27 +++++--- Aspnet/Views/Login/ErrorPopup.cshtml | 2 +- Entidades/Dto/LoginDto.cs | 6 +- Entidades/Dto/TokenDto.cs | 6 ++ Front/.gitignore | 24 +++++++ Front/.vscode/extensions.json | 3 + Front/README.md | 47 +++++++++++++ Front/bun.lockb | Bin 0 -> 39730 bytes Front/index.html | 14 ++++ Front/package.json | 26 +++++++ Front/public/favicon.png | Bin 0 -> 41894 bytes Front/src/App.svelte | 11 +++ Front/src/Menu/page.svelte | 1 + Front/src/app.css | 79 ++++++++++++++++++++++ Front/src/assets/svelte.svg | 1 + Front/src/lib/Counter.svelte | 10 +++ Front/src/lib/NavBarLogin.svelte | 8 +++ Front/src/lib/login.svelte | 66 ++++++++++++++++++ Front/src/login/loginPage.svelte | 10 +++ Front/src/main.ts | 8 +++ Front/src/vite-env.d.ts | 2 + Front/svelte.config.js | 7 ++ Front/tsconfig.json | 21 ++++++ Front/tsconfig.node.json | 12 ++++ Front/vite.config.ts | 7 ++ Modelo/RepositorioUsuarios.cs | 14 ++-- 29 files changed, 437 insertions(+), 50 deletions(-) create mode 100644 Entidades/Dto/TokenDto.cs create mode 100644 Front/.gitignore create mode 100644 Front/.vscode/extensions.json create mode 100644 Front/README.md create mode 100755 Front/bun.lockb create mode 100644 Front/index.html create mode 100644 Front/package.json create mode 100644 Front/public/favicon.png create mode 100644 Front/src/App.svelte create mode 100644 Front/src/Menu/page.svelte create mode 100644 Front/src/app.css create mode 100644 Front/src/assets/svelte.svg create mode 100644 Front/src/lib/Counter.svelte create mode 100644 Front/src/lib/NavBarLogin.svelte create mode 100644 Front/src/lib/login.svelte create mode 100644 Front/src/login/loginPage.svelte create mode 100644 Front/src/main.ts create mode 100644 Front/src/vite-env.d.ts create mode 100644 Front/svelte.config.js create mode 100644 Front/tsconfig.json create mode 100644 Front/tsconfig.node.json create mode 100644 Front/vite.config.ts diff --git a/Aspnet/AlquilaFacil.csproj b/Aspnet/AlquilaFacil.csproj index 9f40be9..842f7c7 100644 --- a/Aspnet/AlquilaFacil.csproj +++ b/Aspnet/AlquilaFacil.csproj @@ -7,7 +7,10 @@ - + + + + diff --git a/Aspnet/Controllers/InquilinoController.cs b/Aspnet/Controllers/InquilinoController.cs index ad68fcf..c7f5391 100644 --- a/Aspnet/Controllers/InquilinoController.cs +++ b/Aspnet/Controllers/InquilinoController.cs @@ -27,7 +27,8 @@ public class InquilinoController: Controller if (inq.Dni < 0 ) return BadRequest("Dni Invalido"); - return Redirect("/Inquilino"); +// no recuerdo porque esto existe +// return Redirect("/Inquilino"); return Content($"

Inquilino {inq.Nombre} agregado exitosamente.

", "text/html"); } @@ -38,4 +39,4 @@ public class InquilinoController: Controller public IActionResult FormAdd(){ return View(); } -} \ No newline at end of file +} diff --git a/Aspnet/Controllers/LoginController.cs b/Aspnet/Controllers/LoginController.cs index ea9c3d9..4ba34a8 100644 --- a/Aspnet/Controllers/LoginController.cs +++ b/Aspnet/Controllers/LoginController.cs @@ -1,30 +1,41 @@ +using Entidades.Dto; +using Modelo; +using Microsoft.AspNetCore.Mvc; +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; +using System.Text; +using Microsoft.IdentityModel.Tokens; +namespace AlquilaFacil.Controllers; - using Entidades.Dto; - using Modelo; - using Microsoft.AspNetCore.Mvc; - namespace AlquilaFacil.Controllers; +[ApiController] +public class LoginController: ControllerBase +{ + [HttpPost("api/login")] + public IActionResult Login([FromBody] LoginDto loginDto) { + + if (loginDto.Email == String.Empty || loginDto.Contraseña == String.Empty) return Unauthorized(new {message = "Los Datos no llegaron correctamente o faltan"}); + + var usuario = RepositorioUsuarios.Singleton.CheckUsuario(loginDto); + if (usuario == null) return Unauthorized(new {message = "El usuario no existe o la contraseña es incorrecta"}); - public class LoginController: Controller - { - public IActionResult Index(){ - return View(); - } + string tokenString = GenerarToken(loginDto); + return Ok( new {Token = tokenString, Redirect = "/Menu"}); + } - [HttpPost("api/login")] - public IActionResult Login([FromForm] LoginDto loginDto) { - - var usuario = RepositorioUsuarios.Singleton.CheckUsuario(loginDto); - if (usuario == null){ - return Content(errorAlert); - } - else { - Response.Headers["HX-Redirect"] = "/Home"; - return Ok(); - } - } - - private const string errorAlert = @" - "; - } \ No newline at end of file + + private string GenerarToken(LoginDto loginDto){ + var tokenHandler = new JwtSecurityTokenHandler(); + var key = Encoding.ASCII.GetBytes("ffb2cdc15d472e41a5b626e294c45020"); + var tokenDescriptor = new SecurityTokenDescriptor + { + Subject = new ClaimsIdentity(new Claim[] + { + new Claim(ClaimTypes.Name, loginDto.Email) + }), + Expires = DateTime.UtcNow.AddHours(1), + SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) + }; + var token = tokenHandler.CreateToken(tokenDescriptor); + return tokenHandler.WriteToken(token); + } +} diff --git a/Aspnet/Program.cs b/Aspnet/Program.cs index 0bfdf53..f08a8c6 100644 --- a/Aspnet/Program.cs +++ b/Aspnet/Program.cs @@ -1,30 +1,41 @@ + var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); -builder.Services.AddControllersWithViews(); +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +builder.Services.AddCors(options => + { + options.AddPolicy("AllowSvelteApp", + builder => + { + builder.WithOrigins("*") + .AllowAnyHeader() + .AllowAnyMethod(); + }); + }); var app = builder.Build(); // Configure the HTTP request pipeline. -if (!app.Environment.IsDevelopment()) +if (app.Environment.IsDevelopment()) { - app.UseExceptionHandler("/Home/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); + app.UseSwagger(); + app.UseSwaggerUI(); } -app.UseHttpsRedirection(); -app.UseStaticFiles(); - app.UseRouting(); +app.UseAuthentication(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Login}/{action=Index}/{id?}"); +app.UseCors("AllowSvelteApp"); app.UseEndpoints(endpoints => { // Mapea los controladores a las rutas predeterminadas. diff --git a/Aspnet/Views/Login/ErrorPopup.cshtml b/Aspnet/Views/Login/ErrorPopup.cshtml index 58d7d87..0a591f6 100644 --- a/Aspnet/Views/Login/ErrorPopup.cshtml +++ b/Aspnet/Views/Login/ErrorPopup.cshtml @@ -1,5 +1,5 @@ @model Entidades.Dto.LoginDto; diff --git a/Entidades/Dto/LoginDto.cs b/Entidades/Dto/LoginDto.cs index a276135..17f707c 100644 --- a/Entidades/Dto/LoginDto.cs +++ b/Entidades/Dto/LoginDto.cs @@ -5,6 +5,6 @@ namespace Entidades.Dto; [NotMapped] public class LoginDto { - public string Usuario {get; set;} = string.Empty; - public string Contrasena {get; set;} = string.Empty; -} \ No newline at end of file + public string Email {get; set;} = string.Empty; + public string Contraseña {get; set;} = string.Empty; +} diff --git a/Entidades/Dto/TokenDto.cs b/Entidades/Dto/TokenDto.cs new file mode 100644 index 0000000..e23f2e4 --- /dev/null +++ b/Entidades/Dto/TokenDto.cs @@ -0,0 +1,6 @@ +namespace Entidades.Dto; + +public class TokenDto{ + public string Token {get; set;} = String.Empty; + public string Redirect { get; set; } = String.Empty; +} diff --git a/Front/.gitignore b/Front/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/Front/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Front/.vscode/extensions.json b/Front/.vscode/extensions.json new file mode 100644 index 0000000..bdef820 --- /dev/null +++ b/Front/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["svelte.svelte-vscode"] +} diff --git a/Front/README.md b/Front/README.md new file mode 100644 index 0000000..e6cd94f --- /dev/null +++ b/Front/README.md @@ -0,0 +1,47 @@ +# Svelte + TS + Vite + +This template should help get you started developing with Svelte and TypeScript in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). + +## Need an official Svelte framework? + +Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. + +## Technical considerations + +**Why use this over SvelteKit?** + +- It brings its own routing solution which might not be preferable for some users. +- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. + +This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. + +Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. + +**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** + +Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. + +**Why include `.vscode/extensions.json`?** + +Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. + +**Why enable `allowJs` in the TS template?** + +While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant. + +**Why is HMR not preserving my local component state?** + +HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr). + +If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. + +```ts +// store.ts +// An extremely simple external store +import { writable } from 'svelte/store' +export default writable(0) +``` diff --git a/Front/bun.lockb b/Front/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..f4cbd759d6c29fcb0072a4a2934d40ba7d72e79a GIT binary patch literal 39730 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 X7B~)QOD_ + + + + + + + AlquilaFacil + + +
+ + + diff --git a/Front/package.json b/Front/package.json new file mode 100644 index 0000000..f7518bb --- /dev/null +++ b/Front/package.json @@ -0,0 +1,26 @@ +{ + "name": "front", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.json && tsc -p tsconfig.node.json" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.1.2", + "@tsconfig/svelte": "^5.0.4", + "svelte": "^4.2.19", + "svelte-check": "^4.0.4", + "tslib": "^2.7.0", + "typescript": "^5.5.3", + "vite": "^5.4.8" + }, + "dependencies": { + "@sveltejs/kit": "^2.7.1", + "@sveltestrap/sveltestrap": "^6.2.7", + "svelte-routing": "^2.13.0" + } +} diff --git a/Front/public/favicon.png b/Front/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2d027c0720b47f197fe7896eb6a8d9c1fb025c GIT binary patch literal 41894 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 literal 0 HcmV?d00001 diff --git a/Front/src/App.svelte b/Front/src/App.svelte new file mode 100644 index 0000000..52b77ea --- /dev/null +++ b/Front/src/App.svelte @@ -0,0 +1,11 @@ + + + + + + + diff --git a/Front/src/Menu/page.svelte b/Front/src/Menu/page.svelte new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Front/src/Menu/page.svelte @@ -0,0 +1 @@ + diff --git a/Front/src/app.css b/Front/src/app.css new file mode 100644 index 0000000..617f5e9 --- /dev/null +++ b/Front/src/app.css @@ -0,0 +1,79 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/Front/src/assets/svelte.svg b/Front/src/assets/svelte.svg new file mode 100644 index 0000000..c5e0848 --- /dev/null +++ b/Front/src/assets/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Front/src/lib/Counter.svelte b/Front/src/lib/Counter.svelte new file mode 100644 index 0000000..979b4df --- /dev/null +++ b/Front/src/lib/Counter.svelte @@ -0,0 +1,10 @@ + + + diff --git a/Front/src/lib/NavBarLogin.svelte b/Front/src/lib/NavBarLogin.svelte new file mode 100644 index 0000000..0da5cc3 --- /dev/null +++ b/Front/src/lib/NavBarLogin.svelte @@ -0,0 +1,8 @@ + + + + + AlquilaFacil + diff --git a/Front/src/lib/login.svelte b/Front/src/lib/login.svelte new file mode 100644 index 0000000..ae625cd --- /dev/null +++ b/Front/src/lib/login.svelte @@ -0,0 +1,66 @@ + + + + + Iniciar Sesión + + +
+ + + + + + + + + +
+{#if errorMessage} + +{/if} +
+
diff --git a/Front/src/login/loginPage.svelte b/Front/src/login/loginPage.svelte new file mode 100644 index 0000000..56e4174 --- /dev/null +++ b/Front/src/login/loginPage.svelte @@ -0,0 +1,10 @@ + + + +
+
+ +
diff --git a/Front/src/main.ts b/Front/src/main.ts new file mode 100644 index 0000000..2619336 --- /dev/null +++ b/Front/src/main.ts @@ -0,0 +1,8 @@ +//import './app.css' +import App from './App.svelte' + +const app = new App({ + target: document.getElementById('app')!, +}) + +export default app diff --git a/Front/src/vite-env.d.ts b/Front/src/vite-env.d.ts new file mode 100644 index 0000000..4078e74 --- /dev/null +++ b/Front/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/Front/svelte.config.js b/Front/svelte.config.js new file mode 100644 index 0000000..b0683fd --- /dev/null +++ b/Front/svelte.config.js @@ -0,0 +1,7 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), +} diff --git a/Front/tsconfig.json b/Front/tsconfig.json new file mode 100644 index 0000000..df56300 --- /dev/null +++ b/Front/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "resolveJsonModule": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable checkJs if you'd like to use dynamic types in JS. + * Note that setting allowJs false does not prevent the use + * of JS in `.svelte` files. + */ + "allowJs": true, + "checkJs": true, + "isolatedModules": true, + "moduleDetection": "force" + }, + "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/Front/tsconfig.node.json b/Front/tsconfig.node.json new file mode 100644 index 0000000..6c2d870 --- /dev/null +++ b/Front/tsconfig.node.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "noEmit": true + }, + "include": ["vite.config.ts"] +} diff --git a/Front/vite.config.ts b/Front/vite.config.ts new file mode 100644 index 0000000..d701969 --- /dev/null +++ b/Front/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [svelte()], +}) diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index cc1f5c6..0aa74fe 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -1,9 +1,7 @@ using System.Collections.ObjectModel; -using System.Runtime.Intrinsics.Arm; using System.Security.Cryptography; using System.Text; using Entidades.Dto; -using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; namespace Modelo; @@ -12,15 +10,15 @@ public class RepositorioUsuarios: RepositorioBase public static RepositorioUsuarios Singleton = new(); public Usuario? CheckUsuario(LoginDto logindto) { - byte[] Contraseña = HacerHash(logindto.Contrasena); + byte[] Contraseña = HacerHash(logindto.Contraseña); - bool usu = Context.Inquilinos.Any(x=>x.Email == logindto.Usuario && x.Contrasena == Contraseña); + bool usu = Context.Inquilinos.Any(x=>x.Email == logindto.Email && x.Contrasena == Contraseña); if (usu){ - return Context.Inquilinos.FirstOrDefault(x=>x.Email == logindto.Usuario); + return Context.Inquilinos.FirstOrDefault(x=>x.Email == logindto.Email); } - usu = Context.Propietarios.Any(x=>x.Email == logindto.Usuario && x.Contrasena == Contraseña); + usu = Context.Propietarios.Any(x=>x.Email == logindto.Email && x.Contrasena == Contraseña); if (usu){ - return Context.Propietarios.FirstOrDefault(x=>x.Email == logindto.Usuario); + return Context.Propietarios.FirstOrDefault(x=>x.Email == logindto.Email); } return null; } @@ -34,4 +32,4 @@ public class RepositorioUsuarios: RepositorioBase return Encoding.UTF8.GetBytes(BitConverter.ToString(buf).Replace("-","").ToLower()); } -} \ No newline at end of file +}