diff --git a/src/Services/auth/O2NextGen.Auth.Web/Services/ESenderService.cs b/src/Services/auth/O2NextGen.Auth.Web/Services/ESenderService.cs new file mode 100644 index 00000000..379dbaf0 --- /dev/null +++ b/src/Services/auth/O2NextGen.Auth.Web/Services/ESenderService.cs @@ -0,0 +1,36 @@ +using System; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Options; + +namespace O2NextGen.Auth.Web.Services +{ + public interface IESenderService + { + Task Send(string email, string subject, string htmlMessage); + } + public class ESenderService: IESenderService + { + private readonly HttpClient _httpClient; + private readonly IOptions _config; + + public ESenderService(HttpClient httpClient, IOptions config) + { + _httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient)); + _config = config ?? throw new ArgumentNullException(nameof(config)); + } + + public async Task Send(string email, string subject, string htmlMessage) + { + var model = new MailRequestViewModel() + { + Subject = subject, + To = email, + Body = htmlMessage + }; + var response = await _httpClient.PostAsJsonAsync("api/emailsender",model,CancellationToken.None); + await response.Content.ReadAsAsync(CancellationToken.None); + } + } +} \ No newline at end of file diff --git a/src/Services/auth/O2NextGen.Auth.Web/Services/MailRequestViewModel.cs b/src/Services/auth/O2NextGen.Auth.Web/Services/MailRequestViewModel.cs new file mode 100644 index 00000000..cfec78f5 --- /dev/null +++ b/src/Services/auth/O2NextGen.Auth.Web/Services/MailRequestViewModel.cs @@ -0,0 +1,11 @@ +namespace O2NextGen.Auth.Web.Services +{ + public class MailRequestViewModel + { + public long Id { get; set; } + public string From { get; set; } + public string To { get; set; } + public string Body { get; set; } + public string Subject { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/auth/O2NextGen.Auth.Web/Services/UrlsConfig.cs b/src/Services/auth/O2NextGen.Auth.Web/Services/UrlsConfig.cs new file mode 100644 index 00000000..1fe6a290 --- /dev/null +++ b/src/Services/auth/O2NextGen.Auth.Web/Services/UrlsConfig.cs @@ -0,0 +1,7 @@ +namespace O2NextGen.Auth.Web.Services +{ + public class UrlsConfig + { + public string ESenderUrl { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/auth/O2NextGen.Auth.Web/Startup.cs b/src/Services/auth/O2NextGen.Auth.Web/Startup.cs index 56f8299b..e2ce157e 100644 --- a/src/Services/auth/O2NextGen.Auth.Web/Startup.cs +++ b/src/Services/auth/O2NextGen.Auth.Web/Startup.cs @@ -1,21 +1,31 @@ -using System.Text.Encodings.Web; +using System; +using System.Text.Encodings.Web; using System.Threading.Tasks; using System.Web; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.UI.Services; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using O2NextGen.Auth.Web.Data; using O2NextGen.Auth.Web.Extensions; +using O2NextGen.Auth.Web.Services; namespace O2NextGen.Auth.Web { public class Startup { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { @@ -29,8 +39,9 @@ public void ConfigureServices(IServiceCollection services) .AddEntityFrameworkStores() .AddDefaultTokenProviders(); - + services.AddApplicationServices(Configuration); services.AddSingleton(); + } public void Configure(IApplicationBuilder app, IHostingEnvironment env) @@ -46,22 +57,44 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) app.UseRequestLocalization(v); app.UseAuthentication(); app.UseMvcWithDefaultRoute(); + } } + public static class ServiceCollectionExtensions + { + public static IServiceCollection AddApplicationServices(this IServiceCollection services,IConfiguration configuration) + { + //register delegating handlers + // services.AddTransient(); + services.AddSingleton(); + + //register http services + services + .AddHttpClient("E-Sender", client => + { + client.BaseAddress = new Uri(configuration.GetValue("urls:ESenderUrl")); + }); + + return services; + } + } internal class DummyEmailSender : IEmailSender { private readonly ILogger _logger; + private readonly IESenderService _service; - public DummyEmailSender(ILogger logger) + public DummyEmailSender(ILogger logger, IESenderService service) { _logger = logger; + _service = service; } public Task SendEmailAsync(string email, string subject, string htmlMessage) { _logger.LogWarning("EmailSender implementation is being used!!!!"); _logger.LogWarning($"htmlMessage = { HttpUtility.HtmlDecode(htmlMessage)}"); + _service.Send(email,subject,htmlMessage); return Task.CompletedTask; } } diff --git a/src/Services/auth/O2NextGen.Auth.Web/appsettings.json b/src/Services/auth/O2NextGen.Auth.Web/appsettings.json index 905fcee1..5b50742f 100644 --- a/src/Services/auth/O2NextGen.Auth.Web/appsettings.json +++ b/src/Services/auth/O2NextGen.Auth.Web/appsettings.json @@ -24,5 +24,8 @@ "Microsoft.Hosting.Lifetime": "Information" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "urls": { + "ESenderUrl": "https://e-sender" + } }