LoginHelper
Defines helper methods for authentication in Relativity
using kCura.WinEDDS.Service;
using kCura.WinEDDS.Service.Replacement;
using Relativity.DataExchange;
using Relativity.Logging;
using System;
using System.Globalization;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
namespace kCura.WinEDDS.Api
{
public class LoginHelper
{
public static NetworkCredential LoginUsernamePassword(string username, string password, CookieContainer cookieContainer, IRunningContext runningContext, Func<string> correlationIdFunc)
{
return LoginUsernamePassword(username, password, cookieContainer, AppSettings.Instance.WebApiServiceUrl, runningContext, correlationIdFunc);
}
public static NetworkCredential LoginUsernamePassword(string username, string password, CookieContainer cookieContainer, string webServiceUrl, IRunningContext runningContext, Func<string> correlationIdFunc)
{
return LoginUsernamePassword(username, password, cookieContainer, AppSettings.Instance.WebApiServiceUrl, CancellationToken.None, runningContext, new NullLogger(), correlationIdFunc);
}
public static NetworkCredential LoginUsernamePassword(string username, string password, CookieContainer cookieContainer, string webServiceUrl, CancellationToken token, IRunningContext runningContext, ILog logger, Func<string> correlationIdFunc)
{
if (cookieContainer == null)
throw new ArgumentException("cookieContainer");
if (string.IsNullOrEmpty(webServiceUrl))
throw new ArgumentException("webServiceUrl");
if (logger == null)
throw new ArgumentException("logger");
webServiceUrl = AppSettings.Instance.ValidateUriFormat(webServiceUrl);
NetworkCredential networkCredential = new NetworkCredential(username, password);
using (IUserManager userManager = ManagerFactory.CreateUserManager(networkCredential, cookieContainer, webServiceUrl, correlationIdFunc)) {
if (!userManager.Login(username, password))
return null;
}
using (IRelativityManager relativityManager = ManagerFactory.CreateRelativityManager(networkCredential, cookieContainer, correlationIdFunc, null)) {
Initialize(relativityManager, webServiceUrl, networkCredential, cookieContainer, correlationIdFunc);
ValidateVersionCompatibility(networkCredential, cookieContainer, webServiceUrl, token, runningContext, logger, correlationIdFunc);
return networkCredential;
}
}
public static void ValidateVersionCompatibility(NetworkCredential credential, CookieContainer cookieContainer, string webServiceUrl, CancellationToken token, IRunningContext runningContext, ILog logger, Func<string> correlationIdFunc)
{
if (credential == null)
throw new ArgumentException("credential");
if (cookieContainer == null)
throw new ArgumentException("cookieContainer");
if (string.IsNullOrEmpty(webServiceUrl))
throw new ArgumentException("webServiceUrl");
if (logger == null)
throw new ArgumentException("logger");
webServiceUrl = AppSettings.Instance.ValidateUriFormat(webServiceUrl);
ValidateVersionCompatibilityAsync(new RelativityInstanceInfo {
Credentials = credential,
CookieContainer = cookieContainer,
WebApiServiceUrl = new Uri(webServiceUrl)
}, token, runningContext, logger, correlationIdFunc).GetAwaiter().GetResult();
}
internal static Task ValidateVersionCompatibilityAsync(RelativityInstanceInfo instanceInfo, CancellationToken token, IRunningContext runningContext, ILog logger, Func<string> correlationIdFunc)
{
return ((IImportExportCompatibilityCheck)new ImportExportCompatibilityCheck(instanceInfo, ManagerFactory.CreateApplicationVersionService(instanceInfo, AppSettings.Instance, logger, correlationIdFunc), runningContext, logger)).ValidateAsync(token);
}
private static void Initialize(IRelativityManager relativityManager, string webServiceUrl, NetworkCredential credentials, CookieContainer cookieContainer, Func<string> correlationIdFunc)
{
CultureInfo cultureInfo = new CultureInfo(CultureInfo.CurrentCulture.LCID, true);
cultureInfo.NumberFormat.CurrencySymbol = relativityManager.RetrieveCurrencySymbol();
Thread.CurrentThread.CurrentCulture = cultureInfo;
using (IUserManager userManager = ManagerFactory.CreateUserManager(credentials, cookieContainer, webServiceUrl, correlationIdFunc))
Settings.AuthenticationToken = userManager.GenerateDistributedAuthenticationToken(true);
}
}
}