public static bool CheckToken(string userName, string tokenValue, string ipAddress, string method, bool refreshToken, out HTTPCheckRoles role)
 {
     role = 0;
     ExpireAllTokensForUser(userName);
     CriticalResultsEntityManager manager = new CriticalResultsEntityManager();
     TokenEntity[] tokens = manager.GetTokensForUser(userName);
     foreach (TokenEntity token in tokens)
     {
         if (token.Token == new Guid(tokenValue) && token.Ipv4 == ipAddress)
         {
             if (refreshToken)
                 token.UpdatedTime = DateTime.Now;
             manager.SaveChanges();
             foreach (RoleEntity re in token.User.Roles)
             {
                 object r = Enum.Parse(typeof(HTTPCheckRoles), re.Name, true);
                 if (r != null)
                 {
                     role |= (HTTPCheckRoles)r;
                 }
             }
             return true;
         }
     }
     return false;
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            WindowsUser = Request.LogonUserIdentity.Name;
            string queryString = string.Format("it.Type='AuthExt' AND it.Key='{0}' AND it.Value='{1}'", AuthExtName, WindowsUser);
            CriticalResults.CriticalResultsEntityManager manager = new CriticalResultsEntityManager();
            CriticalResults.UserEntryEntity [] entries = manager.QueryUserEntryEntities(queryString, null, null);

            string userHostAddress = Utilities.GetIP4Address();

            if (entries.Count() == 1)
            {
                if (entries.First().User.Enabled == true)
                {
                    UserName = entries.First().User.UserName;
                    Session["UserName"] = UserName;
                    CriticalResults.TokenEntity[] currentTokens = manager.GetTokensForUser(UserName);
                    foreach (CriticalResults.TokenEntity t in currentTokens)
                    {
                        if (t.Ipv4 == userHostAddress)
                        {
                            TokenGuid = t.Token.ToString();
                            Session["Token"] = TokenGuid.ToString();
                        }
                    }
                    if (TokenGuid == "")
                    {

                        CriticalResults.TokenEntity token = manager.CreateToken(entries.First().User, userHostAddress);
                        TokenGuid = token.Token.ToString();
                        Session["Token"] = TokenGuid.ToString();
                    }
                    Response.AddHeader("REFRESH", "5;URL=ResultList.aspx");

                }
                else
                {
                    PageMessage = "The ANCR account associated with this Windows Login " + WindowsUser + " is disabled.  Please contact your System Administrator.";
                    message.InnerText = PageMessage;
                }

            }
            else if(entries.Count() > 1)
            {
                PageMessage = "Multiple ANCR accounts resolved to this Windows User.  Until this is resolved you may not login with your Windows User Account.  Please contact your System Administrator.";
                message.InnerText = PageMessage;
            }
            else
            {
                PageMessage = "No ANCR account can be found for " + WindowsUser + ".  Please contact your System Administrator.";
                message.InnerText = PageMessage;
            }
        }
        public static bool Authenticate(string authKey, string authValue, string userName, string userIP, TraceSource _Trace, out string outUserName, out string tokenString, out string message)
        {
            outUserName="";
            tokenString = "";
            CriticalResults.CriticalResultsEntityManager manager = new CriticalResultsEntityManager();
            bool hasPassword = false;
            string queryString = string.Format("it.Type='AuthExt' AND it.Key='{0}' AND it.Value='{1}'", authKey, authValue);
            // if userName is specified then we go from ANCR and authValue is password, overwise authValue is username of already authenticated user
            if (userName != null)
            {
                hasPassword = true;
                UserEntity user = manager.GetUser(userName);
                if (user == null)
                {
                    message = "Invalid username or password.";
                    return false;
                }
                queryString = string.Format("it.Type='AuthExt' AND it.Key='{0}' AND it.Value='{1}' AND it.User.Id={2}", authKey, authValue, user.Id);
            }

            CriticalResults.UserEntryEntity[] entries = manager.QueryUserEntryEntities(queryString, null, null);
            if (entries.Count() == 1)
            {
                UserEntity user=entries.First().User;
                if (!hasPassword)
                {
                    _Trace.TraceEvent(TraceEventType.Information, 0, "Lookup for username \"{0}\" mapped to \"{1}\".", authValue, user.UserName);
                }
                if (user.Enabled == true)
                {
                    outUserName = user.UserName;
                    CriticalResults.TokenEntity[] currentTokens = manager.GetTokensForUser(user.UserName);
                    foreach (CriticalResults.TokenEntity t in currentTokens)
                    {
                        if (t.Ipv4 == userIP)
                        {
                            t.UpdatedTime = DateTime.Now;
                            manager.SaveChanges();
                            tokenString = t.Token.ToString();
                            message = "";
                            return true;
                        }
                    }
                    CriticalResults.TokenEntity token = manager.CreateToken(user, userIP);
                    tokenString = token.Token.ToString();
                    message = "";
                    return true;
                }
                else
                {
                    _Trace.TraceEvent(TraceEventType.Warning, 0, "Found user \"{0}\" mapped to \"{1}\".  ANCR Account disabled.", authValue, user.UserName);
                    message = "Your account is disabled. Please contact your System Administrator.";
                    return false;
                }
            }
            else
            {
                if (entries.Count() > 1)
                {
                    _Trace.TraceEvent(TraceEventType.Warning, 0, "Found multiple users \"{0}\" (Count: {1})", authValue, entries.Count());
                    message = "Multiple ANCR users found for your username, until this is resolved you may not login with your credentials.  Please contact your System Administrator.";
                }
                else
                {
                    if (hasPassword)
                    {
                        _Trace.TraceEvent(TraceEventType.Warning, 0, "Invalid username or password \"{0}\"", userName);
                        message = "Invalid username or password.";
                    }
                    else
                    {
                        _Trace.TraceEvent(TraceEventType.Warning, 0, "No ANCR account found for  \"{0}\"", authValue);
                        message = "No ANCR user is found for your credentials. Please contact your System Administrator.";
                    }
                }
                return false;
            }
        }