JwtTokenHelper
It encodes Relativity JWT token.
using Newtonsoft.Json.Linq;
using System;
using System.Linq;
using System.Text;
namespace Relativity.DataExchange.Helpers
{
public static class JwtTokenHelper
{
private const int PayloadIndex = 1;
private const string UserIdKey = "rel_uai";
private const string InstanceIdKey = "rel_ins";
public static bool TryParse(string token, out JwtAuthToken jwtAuthToken)
{
jwtAuthToken = null;
if (!TryDecodePayloadPartFromBase64(token, out string payloadDecoded))
return false;
JObject jObject;
try {
jObject = JObject.Parse(payloadDecoded);
} catch (Exception) {
return false;
}
JToken jToken = jObject.SelectToken("rel_uai");
if (jToken == null)
return false;
JToken jToken2 = jObject.SelectToken("rel_ins");
if (jToken2 == null)
return false;
string relativityInstanceId = jToken2.Value<string>();
string relativityUserId = jToken.Value<string>();
jwtAuthToken = new JwtAuthToken(relativityInstanceId, relativityUserId);
return true;
}
private static bool TryDecodePayloadPartFromBase64(string token, out string payloadDecoded)
{
payloadDecoded = null;
if (token.IsNullOrEmpty())
return false;
string[] array = token.Split(new char[1] {
'.'
});
if (!array.Any() || array.Length != 3)
return false;
return TryDecode(token.Split(new char[1] {
'.'
})[1], out payloadDecoded);
}
private static bool TryDecode(string encoded, out string decoded)
{
decoded = null;
string text = encoded.Replace('-', '+').Replace('_', '/');
int num = Encoding.ASCII.GetBytes(text).Length * 3 % 4;
if (num != 0)
text = text.PadRight(text.Length + num, '=');
try {
decoded = Encoding.ASCII.GetString(Convert.FromBase64String(text));
} catch (Exception) {
return false;
}
return true;
}
}
}