75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
using Landmark.OLA.Models.OnlineBanking;
|
|
using System.Security.Authentication;
|
|
using System.Xml.Linq;
|
|
|
|
namespace OnlineBankingAuth.Parsers
|
|
{
|
|
public class AuthTokenParser : IAuthTokenParser
|
|
{
|
|
|
|
public AuthTokenResponse ParseAuthTokenResponse(XElement xElement)
|
|
{
|
|
try
|
|
{
|
|
var accessToken = (string)xElement.Element("access_token");
|
|
if (String.IsNullOrEmpty(accessToken))
|
|
{
|
|
return ParseErroneousAuthTokenResponse(xElement);
|
|
}
|
|
var authToken = new AuthToken
|
|
{
|
|
|
|
DiFiid = (string)xElement.Element("di_fiid"),
|
|
DiFicustomer = (string)xElement.Element("di_ficustomer"),
|
|
DiMemberNumber = (string)xElement.Element("di_member_number"),
|
|
AccessToken = (string)xElement.Element("access_token"),
|
|
ExpiresIn = (string)xElement.Element("expires_in"),
|
|
RefreshToken = (string)xElement.Element("refresh_token"),
|
|
RefreshTokenExpiresIn = (string)xElement.Element("refresh_token_expires_in")
|
|
};
|
|
|
|
var authTokenResponse = new AuthTokenResponse
|
|
{
|
|
Token = authToken,
|
|
Status = null
|
|
};
|
|
|
|
return authTokenResponse;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new AuthenticationException($"Could not parse response from IdP vendor. {e.Message}, {e.StackTrace}");
|
|
}
|
|
|
|
}
|
|
|
|
private AuthTokenResponse ParseErroneousAuthTokenResponse(XElement xElement)
|
|
{
|
|
var messageElement = (XElement)xElement.FirstNode;
|
|
var errorElement = (XElement)xElement.FirstNode.NextNode;
|
|
|
|
var errorType = (XElement)errorElement.FirstNode;
|
|
var errorCode = (XElement)errorElement.FirstNode.NextNode;
|
|
var errorMessage = (XElement)errorElement.FirstNode.NextNode.NextNode;
|
|
|
|
var error = new AuthTokenError
|
|
{
|
|
ErrorType = errorType.Value,
|
|
ErrorCode = errorCode.Value,
|
|
ErrorMessage = errorMessage.Value
|
|
};
|
|
|
|
var authTokenStatus = new AuthTokenStatus
|
|
{
|
|
StatusMessage = messageElement.Value,
|
|
ErrorInfo = error
|
|
};
|
|
|
|
return new AuthTokenResponse
|
|
{
|
|
Status = authTokenStatus
|
|
};
|
|
}
|
|
}
|
|
}
|