コード例 #1
0
        public string Encode(OwnerToken token)
        {
            var ownerTypeBys  = NetBitConverter.GetBytes(token.OwnerType);
            var ownerIdBys    = NetBitConverter.GetBytes(token.OwnerId);
            var expireTimeBys = GetBytes(token.ExpireTime);


            var lstLen  = 1 + ownerTypeBys.Length + ownerIdBys.Length + expireTimeBys.Length;
            var mdatLst = new List <byte>(lstLen);

            mdatLst.Add(CurrentVersion);
            mdatLst.AddRange(ownerTypeBys);
            mdatLst.AddRange(ownerIdBys);
            mdatLst.AddRange(expireTimeBys);
            var mdatBys = mdatLst.ToArray();

            //签名
            var signBys = ArrayUtil.Addition(_appSecretBytes, mdatBys);
            var hashBys = Sha1(signBys);

            //编码成字符串
            var encBys = ArrayUtil.Addition(hashBys, mdatBys);

            return(_urlDataCodec.Encode(encBys));
        }
コード例 #2
0
ファイル: ReservedValue.cs プロジェクト: ckurt/Its.Cqrs
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = 0;
         hashCode = (hashCode * 397) ^ (OwnerToken?.GetHashCode() ?? 0);
         hashCode = (hashCode * 397) ^ (Value?.GetHashCode() ?? 0);
         hashCode = (hashCode * 397) ^ (ConfirmationToken?.GetHashCode() ?? 0);
         hashCode = (hashCode * 397) ^ (Scope?.GetHashCode() ?? 0);
         hashCode = (hashCode * 397) ^ (Expiration?.GetHashCode() ?? 0);
         return(hashCode);
     }
 }
コード例 #3
0
 public static bool TryDecode(this IOwnerTokenCodec codec, string tokenStr, out OwnerToken token)
 {
     try
     {
         token = codec.Decode(tokenStr);
         return(true);
     }
     catch
     {
         token = null;
         return(false);
     }
 }
コード例 #4
0
ファイル: ReservedValue.cs プロジェクト: yuanfeiw/Its.Cqrs
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = 0;
         hashCode = (hashCode * 397) ^ (OwnerToken != null ? OwnerToken.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Value != null ? Value.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (ConfirmationToken != null ? ConfirmationToken.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Scope != null ? Scope.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Expiration.HasValue ? Expiration.GetHashCode() : 0);
         return(hashCode);
     }
 }
コード例 #5
0
 public bool TryDecode(IOwnerTokenCodec codec, string tokenStr, out OwnerToken token)
 {
     try
     {
         token = codec.Decode(tokenStr);
         return(true);
     }
     catch (Exception ex)
     {
         token = null;
         _logger.LogTrace(ex.ToString());
         return(false);
     }
 }
コード例 #6
0
 private bool DecodeAndCheckOwnerToken <TData>(string ownerTokenStr, out OwnerToken oToken, out DataResult <TData> errorResult) where TData : class
 {
     errorResult = null;
     if (!_ownerTokenCodec.TryDecode(ownerTokenStr, out oToken))
     {
         errorResult = new DataResult <TData>(ResultErrorCodes.ArgumentBad, "bad ownerToken");
         return(false);
     }
     if (oToken.IsExpired)
     {
         errorResult = new DataResult <TData>(100, "ownerToken expired");
         return(false);
     }
     return(true);
 }
コード例 #7
0
        public string GenerateOwnerTokenString(int ownerType, int ownerId, TimeSpan validTime)
        {
            if (validTime.TotalSeconds < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(validTime));
            }

            var oToken = new OwnerToken
            {
                OwnerType  = ownerType,
                OwnerId    = ownerId,
                ExpireTime = DateTime.Now.Add(validTime)
            };

            return(_ownerTokenCodec.Encode(oToken));
        }
コード例 #8
0
        public Task<Token> AcquireAsync()
        {
            OwnerToken nextOwner = new OwnerToken();
            Task<Token> task = nextOwner.Task;
            lock (this.nextOwners)
            {
                if (this.owner == null)
                {
                    this.owner = nextOwner;
                    nextOwner.Complete();
                }
                else
                {
                    this.nextOwners.Enqueue(nextOwner);
                }
            }

            return task;
        }
コード例 #9
0
        public async Task <IActionResult> Default()
        {
            var hcFac = RequestService.GetRequiredService <IHttpClientFactory>();
            var hc    = hcFac.CreateClient();
            var str   = await hc.GetStreamAsync("http://baidu.com/");

            var ownerTokenCodec = RequestService.GetRequiredService <IOwnerTokenCodec>();

            var oToken = new OwnerToken()
            {
                OwnerId    = 1,
                OwnerType  = 2,
                ExpireTime = DateTime.Now.AddDays(1)
            };
            var oTokenStr = ownerTokenCodec.Encode(oToken);
            var oToken2   = ownerTokenCodec.Decode(oTokenStr);

            return(Content(DateTime.Now.ToString(CultureInfo.InvariantCulture)));
        }
コード例 #10
0
        public Task <Token> AcquireAsync()
        {
            OwnerToken   nextOwner = new OwnerToken();
            Task <Token> task      = nextOwner.Task;

            lock (this.nextOwners)
            {
                if (this.owner == null)
                {
                    this.owner = nextOwner;
                    nextOwner.Complete();
                }
                else
                {
                    this.nextOwners.Enqueue(nextOwner);
                }
            }

            return(task);
        }
コード例 #11
0
        public void Release(Token token)
        {
            OwnerToken nextOwner = null;
            lock (this.nextOwners)
            {
                if (this.owner != token)
                {
                    throw new InvalidOperationException("The token is not valid.");
                }

                this.owner = null;
                if (this.nextOwners.Count > 0)
                {
                    nextOwner = this.nextOwners.Dequeue();
                    this.owner = nextOwner;
                }
            }

            if (nextOwner != null)
            {
                nextOwner.Complete();
            }
        }
コード例 #12
0
        public void Release(Token token)
        {
            OwnerToken nextOwner = null;

            lock (this.nextOwners)
            {
                if (this.owner != token)
                {
                    throw new InvalidOperationException("The token is not valid.");
                }

                this.owner = null;
                if (this.nextOwners.Count > 0)
                {
                    nextOwner  = this.nextOwners.Dequeue();
                    this.owner = nextOwner;
                }
            }

            if (nextOwner != null)
            {
                nextOwner.Complete();
            }
        }