85 lines
3.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|