diff --git a/EnvelopeGenerator.Application/Contracts/IEnvelopeReceiverService.cs b/EnvelopeGenerator.Application/Contracts/IEnvelopeReceiverService.cs index be0b07f1..15a65457 100644 --- a/EnvelopeGenerator.Application/Contracts/IEnvelopeReceiverService.cs +++ b/EnvelopeGenerator.Application/Contracts/IEnvelopeReceiverService.cs @@ -2,7 +2,6 @@ using DigitalData.Core.DTO; using EnvelopeGenerator.Application.DTOs; using EnvelopeGenerator.Domain.Entities; -using EnvelopeGenerator.Infrastructure.Contracts; namespace EnvelopeGenerator.Application.Contracts { diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/angular.json b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/angular.json index 625246f0..8b98de15 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/angular.json +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/angular.json @@ -74,7 +74,10 @@ "buildTarget": "envelope-generator-ui:build:development" } }, - "defaultConfiguration": "development" + "defaultConfiguration": "development", + "options": { + "proxyConfig": "src/proxy.conf.json" + } }, "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/app.routes.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/app.routes.ts index 3b6d346c..25dda167 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/app.routes.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/app.routes.ts @@ -1,5 +1,4 @@ import { RouterModule, Routes } from '@angular/router'; -import { LoginComponent } from './components/login/login.component'; import {EnvelopeTableComponent} from '../app/components/envelope-table/envelope-table.component' import {HomeComponent} from '../app/components/home/home.component' export const routes: Routes = [ diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/envelope-table/envelope-table.component.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/envelope-table/envelope-table.component.ts index 367e0a64..c49c908d 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/envelope-table/envelope-table.component.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/envelope-table/envelope-table.component.ts @@ -1,4 +1,6 @@ import { Component } from '@angular/core'; +import { EnvelopeReceiverService } from '../../services/envelope-receiver.service'; +import { error } from 'console'; @Component({ selector: 'app-envelope-table', @@ -8,5 +10,15 @@ import { Component } from '@angular/core'; styleUrl: './envelope-table.component.scss' }) export class EnvelopeTableComponent { - + + constructor(private erService : EnvelopeReceiverService){ + erService.getEnvelopeReceiver().subscribe({ + next: (res) => { + console.log(res) + }, + error: (error) => { + console.log(error) + } + }); + } } diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/login/login.component.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/login/login.component.ts index 1a068741..4eed30a7 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/login/login.component.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/login/login.component.ts @@ -35,10 +35,9 @@ export class LoginComponent { if (this.loginForm.valid) { this.authService.login(this.loginForm.value).subscribe({ next: () => { - this.router.navigate(['/envelope']); // Adjust to your protected route + this.router.navigate(['/envelope']); }, error: error => { - // Handle login error console.error('Login failed', error); } }); diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/auth.service.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/auth.service.ts index b49b66f7..d9496162 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/auth.service.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/auth.service.ts @@ -2,7 +2,7 @@ import { Injectable, inject } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { API_URL } from '../tokens/index'; -import { HttpClientModule } from '@angular/common/http'; + @Injectable({ providedIn: 'root' }) diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/envelope-receiver.service.spec.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/envelope-receiver.service.spec.ts new file mode 100644 index 00000000..06487e21 --- /dev/null +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/envelope-receiver.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { EnvelopeReceiverService } from './envelope-receiver.service'; + +describe('EnvelopeReceiverService', () => { + let service: EnvelopeReceiverService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(EnvelopeReceiverService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/envelope-receiver.service.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/envelope-receiver.service.ts new file mode 100644 index 00000000..8c80bcba --- /dev/null +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/services/envelope-receiver.service.ts @@ -0,0 +1,24 @@ +import { Injectable, inject } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable, catchError } from 'rxjs'; +import { API_URL } from '../tokens/index'; + +@Injectable({ + providedIn: 'root' +}) +export class EnvelopeReceiverService { + private url: string; + + constructor(private http: HttpClient) { + const api_url = inject(API_URL); + this.url = `${api_url}/envelopereceiver`; + } + + getEnvelopeReceiver(): Observable { + const headers = new HttpHeaders({ + 'Content-Type': 'application/json', + }); + + return this.http.get(this.url, { withCredentials: true , headers }); + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/index.html b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/index.html index 3ccfbf81..fffc4c2a 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/index.html +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/index.html @@ -4,7 +4,7 @@ signFlow - + diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/proxy.conf.json b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/proxy.conf.json new file mode 100644 index 00000000..e3a3fd19 --- /dev/null +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/proxy.conf.json @@ -0,0 +1,7 @@ +{ + "/api": { + "target": "https://localhost:7174", + "secure": false, + "changeOrigin": true + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/AuthController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/AuthController.cs index 66991879..0b4c8549 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/AuthController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/AuthController.cs @@ -31,6 +31,7 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers } //TODO: When a user group is created for signFlow, add a process to check if the user is in this group (like "PM_USER") + [AllowAnonymous] [HttpPost("login")] public async Task Login([FromBody] LogInDto login) { @@ -39,13 +40,13 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers bool isValid = _dirSearchService.ValidateCredentials(login.Username, login.Password); if (!isValid) - return Unauthorized(Result.Fail().Message(_localizer[Key.UserNotFound])); + return Unauthorized(); //find the user var uRes = await _userService.ReadByUsernameAsync(login.Username); if (!uRes.IsSuccess || uRes.Data is null) { - return Unauthorized(uRes); + return Forbid(); } UserReadDto user = uRes.Data; diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs deleted file mode 100644 index c4b61791..00000000 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs +++ /dev/null @@ -1,17 +0,0 @@ -using DigitalData.Core.API; -using EnvelopeGenerator.Application.Contracts; -using EnvelopeGenerator.Application.DTOs; -using EnvelopeGenerator.Domain.Entities; -using Microsoft.AspNetCore.Mvc; - -namespace EnvelopeGenerator.GeneratorAPI.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class EnvelopeController : BasicCRUDControllerBase - { - public EnvelopeController(ILogger logger, IEnvelopeService service) : base(logger, service) - { - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs index 35baa429..e8a56d0e 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs @@ -2,8 +2,6 @@ using EnvelopeGenerator.Application.Contracts; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Infrastructure; -using System.DirectoryServices.Protocols; namespace EnvelopeGenerator.GeneratorAPI.Controllers { diff --git a/EnvelopeGenerator.GeneratorAPI/EnvelopeGenerator.GeneratorAPI.csproj b/EnvelopeGenerator.GeneratorAPI/EnvelopeGenerator.GeneratorAPI.csproj index a459a23f..7617ce5a 100644 --- a/EnvelopeGenerator.GeneratorAPI/EnvelopeGenerator.GeneratorAPI.csproj +++ b/EnvelopeGenerator.GeneratorAPI/EnvelopeGenerator.GeneratorAPI.csproj @@ -45,4 +45,31 @@ + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + diff --git a/EnvelopeGenerator.GeneratorAPI/Program.cs b/EnvelopeGenerator.GeneratorAPI/Program.cs index 315077e9..43036a74 100644 --- a/EnvelopeGenerator.GeneratorAPI/Program.cs +++ b/EnvelopeGenerator.GeneratorAPI/Program.cs @@ -36,7 +36,16 @@ var connStr = config.GetConnectionString("Default") ?? throw new InvalidOperatio builder.Services.AddDbContext(options => options.UseSqlServer(connStr)); // Authentication -builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) +if (builder.Environment.IsDevelopment()) + builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) + .AddCookie(options => + { + options.Cookie.HttpOnly = true; + options.LoginPath = "/api/auth/login"; + options.LogoutPath = "/api/auth/logout"; + }); +else + builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.Cookie.HttpOnly = true; // Makes the cookie inaccessible to client-side scripts for security diff --git a/EnvelopeGenerator.Web/Controllers/Test/TestEnvelopeReceiverController.cs b/EnvelopeGenerator.Web/Controllers/Test/TestEnvelopeReceiverController.cs index c67c9fcb..653eba3b 100644 --- a/EnvelopeGenerator.Web/Controllers/Test/TestEnvelopeReceiverController.cs +++ b/EnvelopeGenerator.Web/Controllers/Test/TestEnvelopeReceiverController.cs @@ -4,12 +4,11 @@ using EnvelopeGenerator.Application.Contracts; using EnvelopeGenerator.Application.DTOs; using EnvelopeGenerator.Application; using EnvelopeGenerator.Domain.Entities; -using EnvelopeGenerator.Infrastructure.Contracts; using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.Web.Controllers.Test { - public class TestEnvelopeReceiverController : TestControllerBase + public class TestEnvelopeReceiverController : TestControllerBase { public TestEnvelopeReceiverController(ILogger logger, IEnvelopeReceiverService service) : base(logger, service) { diff --git a/EnvelopeGenerator.Web/Program.cs b/EnvelopeGenerator.Web/Program.cs index cfcf6251..ddd4d546 100644 --- a/EnvelopeGenerator.Web/Program.cs +++ b/EnvelopeGenerator.Web/Program.cs @@ -1,9 +1,6 @@ using DigitalData.UserManager.Infrastructure.Repositories; using EnvelopeGenerator.Application.Contracts; -using EnvelopeGenerator.Application.MappingProfiles; using EnvelopeGenerator.Application.Services; -using EnvelopeGenerator.Infrastructure.Contracts; -using EnvelopeGenerator.Infrastructure.Repositories; using EnvelopeGenerator.Web.Services; using Microsoft.EntityFrameworkCore; using NLog; @@ -11,7 +8,6 @@ using Quartz; using NLog.Web; using DigitalData.Core.API; using Microsoft.AspNetCore.Authentication.Cookies; -using DigitalData.UserManager.Application.MappingProfiles; using EnvelopeGenerator.Web.Models; using DigitalData.Core.DTO; using System.Text.Encodings.Web; @@ -19,7 +15,6 @@ using Ganss.Xss; using Microsoft.Extensions.Options; using DigitalData.EmailProfilerDispatcher.Application; using EnvelopeGenerator.Application; -using EnvelopeGenerator.Application.Resources; var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); logger.Info("Logging initialized!");