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 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> BuildKeyValuePair(OnlineBankingFormData data) { return new Dictionary { {"grant_type", data.GrantType }, {"username", data.Username }, {"password", data.Password } }; } public async Task 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; } } } }