Files
2026-03-11 11:18:25 -05:00

85 lines
3.1 KiB
C#

using System.Text;
using System.Xml.Linq;
using Microsoft.Extensions.Options;
using Landmark.OLA.Models.OnlineBanking;
using OnlineBankingAuth.Configuration;
using OnlineBankingAuth.Parsers;
namespace OnlineBankingAuth.Services
{
public class DigitalInsightService : IDigitalInsightService
{
private readonly SecuritySettings _settings;
private readonly IAuthTokenParser _parser;
public DigitalInsightService(
IAuthTokenParser parser,
IOptions<SecuritySettings> settings)
{
_parser = parser;
_settings = settings.Value;
}
public OnlineBankingFormData PopulateOnlineBankingDataFromConfig(OnlineBankingFormData data)
{
data.Authorization = "Basic " +
Convert.ToBase64String(
Encoding.UTF8.GetBytes(
_settings.DigitalInsightConsumerKey + ":" + _settings.DigitalInsightConsumerSecret
)
);
data.DI_FIID = _settings.DigitalInsightFIID;
data.DI_TID = (Guid.NewGuid()).ToString();
return data;
}
private IEnumerable<KeyValuePair<string, string>> BuildKeyValuePair(OnlineBankingFormData data)
{
return new Dictionary<string, string>
{
{"grant_type", data.GrantType },
{"username", data.Username },
{"password", data.Password }
};
}
public async Task<AuthTokenResponse> LoginUser(OnlineBankingFormData data)
{
try
{
using (var hc = new HttpClient())
{
var formData = BuildKeyValuePair(data);
using (var content = new FormUrlEncodedContent(formData))
{
content.Headers.Clear();
content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
HttpContent httpContent = new StringContent(await content.ReadAsStringAsync(), Encoding.UTF8, "application/x-www-form-urlencoded");
var httpRequest = new HttpRequestMessage(HttpMethod.Post, _settings.DigitalInsightPostTokenURI);
httpRequest.Content = httpContent;
httpRequest.Headers.Add("Authorization", data.Authorization);
httpRequest.Headers.Add("di_fiid", data.DI_FIID);
httpRequest.Headers.Add("di_tid", data.DI_TID);
var response = hc.SendAsync(httpRequest);
var xdoc = XDocument.Parse(await response.Result.Content.ReadAsStringAsync());
var xel = XElement.Parse(xdoc.ToString());
var authTokenResponse = _parser.ParseAuthTokenResponse(xel);
return authTokenResponse;
}
}
}
catch (Exception)
{
throw;
}
}
}
}