예제 #1
0
 public EnqueueTokenPayload(EnqueueTokenPayload payload, string customDataKey, string customDataValue)
 {
     this.Key             = payload.Key;
     this.RelativeQuality = payload.RelativeQuality;
     this._customData     = payload._customData;
     this._customData.Add(customDataKey, customDataValue);
 }
예제 #2
0
 public EnqueueTokenPayload(EnqueueTokenPayload payload, string key)
 {
     this.Key             = key;
     this.RelativeQuality = payload.RelativeQuality;
     this._customData     = payload._customData;
 }
예제 #3
0
 public EnqueueTokenPayload(EnqueueTokenPayload payload, double relativeQuality)
 {
     this.Key             = payload.Key;
     this.RelativeQuality = relativeQuality;
     this._customData     = payload._customData;
 }
예제 #4
0
        public EnqueueTokenPayloadGenerator WithCustomData(String key, String value)
        {
            this._payload = new EnqueueTokenPayload(this._payload, key, value);

            return(this);
        }
예제 #5
0
        public EnqueueTokenPayloadGenerator WithRelativeQuality(double relativeQuality)
        {
            this._payload = new EnqueueTokenPayload(this._payload, relativeQuality);

            return(this);
        }
예제 #6
0
        public EnqueueTokenPayloadGenerator WithKey(String key)
        {
            this._payload = new EnqueueTokenPayload(this._payload, key);

            return(this);
        }
예제 #7
0
 public EnqueueTokenPayloadGenerator()
 {
     this._payload = new EnqueueTokenPayload();
 }
예제 #8
0
        public static IEnqueueToken Parse(string tokenString, string secretKey)
        {
            if (string.IsNullOrEmpty(secretKey))
            {
                throw new ArgumentException("Invalid secret key", nameof(secretKey));
            }

            if (string.IsNullOrEmpty(tokenString))
            {
                throw new ArgumentException("Invalid token", nameof(tokenString));
            }

            var tokenParts  = tokenString.Split('.');
            var headerPart  = tokenParts[0];
            var payloadPart = tokenParts[1];
            var hashPart    = tokenParts[2];

            if (string.IsNullOrEmpty(headerPart))
            {
                throw new ArgumentException("Invalid token", nameof(tokenString));
            }
            if (string.IsNullOrEmpty(hashPart))
            {
                throw new ArgumentException("Invalid token", nameof(tokenString));
            }

            var token = headerPart + "." + payloadPart;

            var expectedHash = Base64UrlEncoding.Encode(ShaHashing.GenerateHash(secretKey, token));

            if (expectedHash != hashPart)
            {
                throw new InvalidHashException();
            }

            try
            {
                var headerModel = HeaderDto.DeserializeHeader(headerPart);

                EnqueueTokenPayload payload = null;
                if (!string.IsNullOrEmpty(payloadPart))
                {
                    payload = EnqueueTokenPayload.Deserialize(payloadPart, secretKey, headerModel.TokenIdentifier);
                }

                return(new EnqueueToken(
                           headerModel.TokenIdentifier,
                           headerModel.CustomerId,
                           headerModel.EventId,
                           DateTimeOffset.FromUnixTimeMilliseconds(headerModel.Issued).DateTime,
                           headerModel.Expires.HasValue
                        ? new DateTime?(DateTimeOffset.FromUnixTimeMilliseconds(headerModel.Expires.Value).DateTime)
                        : null,
                           headerModel.IpAddress,
                           headerModel.XForwardedFor,
                           payload)
                {
                    TokenWithoutHash = token,
                    HashCode = expectedHash
                });
            }
            catch (Exception ex)
            {
                throw new TokenDeserializationException("Unable to deserialize token", ex);
            }
        }