コード例 #1
0
        public static UserTokenInfo CheckTokenInfo(string tokenGuid)
        {
            var token = Guid.Parse(string.Concat(tokenGuid.ToCharArray().Where(x => x != 8203)));

            if (!Tokens.TryGetValue(token, out var userInfo))
            {
                userInfo = UserTokenInfoLogic.Get(token);

                if (userInfo == null)
                {
                    throw new AuthenticationException("Token not found.");
                }

                Tokens.AddOrUpdate(token, userInfo);
            }

            userInfo.TokenEndDateTime = UserTokenInfoLogic.Get(token).TokenEndDateTime;

            try
            {
                if (userInfo.TokenEndDateTime >= DateTime.Now)
                {
                    return(userInfo);
                }

                if (Tokens.TryRemove(token, out userInfo))
                {
                    UserTokenInfoLogic.Delete(token); // delete token

                    throw new TimeoutException("Authentication token expired.");
                }
            }
            catch (TimeoutException)
            {
                throw;
            }
            catch (Exception)
            {
                throw new AuthenticationException("Token not found.");
            }

            return(userInfo);
        }
コード例 #2
0
        private static List <Models.Users.TokenResult> GetUserTokenGuid(string username, string password, string departmentCode)
        {
            using (var db = new DataAccess.CaraxEntitiy())
            {
                var userDepartments = db.UserDepartments.Where(q => q.Username == username && q.DepartmentCode == departmentCode).ToList();

                if (!userDepartments.Any())
                {
                    throw new AuthenticationException();
                }

                var userId = userDepartments.First().UserId;

                var user = db.Users.FirstOrDefault(q => q.Id == userId);

                if (!user.IsActive)
                {
                    throw new AuthenticationException("This user is not active.");
                }
                // checkpassword
                if (!password.GetSHA512(user.PasswordSalt).SequenceEqual(user.PasswordHash))
                {
                    throw new AuthenticationException();
                }

                var departments = db.Departments.ToList();

                var tokens = new List <TokenResult>();

                var dbTokens = UserTokenInfoLogic.GetTokens(userId, username);

                var dateTime = DateTime.Now;

                foreach (var info in dbTokens)
                {
                    info.TokenEndDateTime = dateTime.AddDays(7);
                    Tokens.AddOrUpdate(info.TokenGuid, info);
                    var departmentFirst = departments.FirstOrDefault(x => x.Code == info.DepartmentCode);
                    tokens.Add(new TokenResult {
                        DepartmentCode = info.DepartmentCode, DepartmentName = departmentFirst?.Name, Token = info.TokenGuid
                    });
                }

                Task.Factory.StartNew(() =>
                {
                    foreach (var info in dbTokens)
                    {
                        UserTokenInfoLogic.Update(info.TokenGuid, info.TokenEndDateTime);
                    }
                });

                var userDepartmentWithByUser = UserDepartmentLogic.GetListByUser(userId);
                if (userDepartmentWithByUser.Count > dbTokens.Count)
                {
                    foreach (var department in userDepartmentWithByUser.Where(x => dbTokens.All(y => y.DepartmentCode != x.DepartmentCode)))
                    {
                        var departmentFirst = departments.FirstOrDefault(x => x.Code == department.DepartmentCode);

                        // set token
                        var tokenGuid = Guid.NewGuid();
                        var tokenInfo = new Models.Users.UserTokenInfo(tokenGuid, user.Id, user.Username, department.DepartmentCode, user.UserLevel, user.EMail, dateTime, dateTime.AddDays(7), user.CompanyCode);

                        // add to db
                        UserTokenInfoLogic.Create(tokenInfo);
                        Models.Tokens.Token tk = new Token
                        {
                            CompanyCode      = tokenInfo.CompanyCode,
                            CreateDateTime   = tokenInfo.CreatedDateTime,
                            DepartmentCode   = tokenInfo.DepartmentCode,
                            TokenEndDateTime = tokenInfo.TokenEndDateTime,
                            TokenGuid        = tokenInfo.TokenGuid,
                            UserId           = tokenInfo.UserId,
                            Username         = tokenInfo.Username
                        };
                        db.Tokens.Add(tk);
                        db.SaveChanges();

                        // add yo dictionary
                        Tokens.AddOrUpdate(tokenGuid, tokenInfo);

                        tokens.Add(new TokenResult {
                            DepartmentCode = department.DepartmentCode, DepartmentName = departmentFirst?.Name, Token = tokenGuid
                        });
                    }
                }

                return(tokens);
            }
        }