gehgassi_backend/gehGassi.Core/Services/EmailValidationService.cs

104 lines
3.6 KiB
C#

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Text.Json;
using gehGassi.Core.Interfaces;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Options;
namespace gehGassi.Core.Services
{
/// <summary>
/// Schnittsellenbeschreibung für einen Service der die Validierung von E-Mail Adressen ermöglicht
/// </summary>
public class EmailValidationService : IEmailValidationService
{
private readonly IDistributedCache _memoryCache;
private readonly IWebHostEnvironment _hostingEnvironment;
private readonly IOptions<EmailValidationOptions> _emailValidationOptions;
/// <summary>
/// Erstellt eine Instanz
/// </summary>
/// <param name="memoryCache">Instanz eines IDistributedCache</param>
/// <param name="hostingEnvironment">Instanz eines IWebHostEnvironment</param>
/// <param name="emailValidationOptions">Instanz eines EmailValidationOptions</param>
public EmailValidationService(IDistributedCache memoryCache, IWebHostEnvironment hostingEnvironment, IOptions<EmailValidationOptions> emailValidationOptions)
{
_memoryCache = memoryCache;
_hostingEnvironment = hostingEnvironment;
_emailValidationOptions = emailValidationOptions;
Init();
}
/// <summary>
/// Initialisiert den Service
/// </summary>
private void Init()
{
var path = Path.Combine(_hostingEnvironment.WebRootPath, _emailValidationOptions.Value.File);
if (File.Exists(path))
{
var fakeMailList = new List<string>();
var allDomains = File.ReadAllLines(path, Encoding.Default);
fakeMailList.AddRange(allDomains);
//_memoryCache.Set("FakeMails", fakeMailList);
_memoryCache.SetString("FakeMails", JsonSerializer.Serialize(fakeMailList));
}
}
/// <summary>
/// Gibt zurück ob es sich bei der E-Mail Adresse um eine Wegwerfadresse handelt
/// </summary>
/// <param name="emailAddress">E-Mail Adresse die geprüft werden soll</param>
/// <returns>true wenn Wegwerf-Email, false sonst</returns>
public bool IsDisposable(string emailAddress)
{
if (string.IsNullOrWhiteSpace(emailAddress))
return false;
var fakeMailList = new List<string>();
var json = _memoryCache.GetString("FakeMails");
if (string.IsNullOrWhiteSpace(json))
{
Init();
fakeMailList = JsonSerializer.Deserialize<List<string>>(_memoryCache.GetString("FakeMails"));
}
else
{
fakeMailList = JsonSerializer.Deserialize<List<string>>(json);
}
if (fakeMailList != null && fakeMailList.Any())
{
var mailAddress = new MailAddress(emailAddress);
return fakeMailList?.FirstOrDefault(c => c == mailAddress.Host.ToLower()) != null;
}
return false;
}
}
/// <summary>
/// Einstellungen für den Email-Valiiderungs-Service
/// </summary>
public class EmailValidationOptions
{
/// <summary>
/// Erstellt eine Instanz
/// </summary>
public EmailValidationOptions()
{
}
/// <summary>
/// Datei die verwendet werden soll
/// </summary>
public string File { get; set; }
}
}