public async Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var user = await UserManager.FindAsync(model.UserName, model.Password);

            if (user != null)
            {
                //store user domain session
                var cont        = new ApplicationDbContext();
                var currentUser = (from u in cont.Users
                                   where u.UserName.Equals(model.UserName)
                                   select u).First();

                var icont = (IIotContextBase)System.Web.HttpContext.Current.Session["iotcontext"];
                if (icont == null)
                {
                    icont = UserIotContextFactory.GetContextForUser(currentUser);
                    System.Web.HttpContext.Current.Session["iotcontext"] = icont;
                }

                var domain = icont.Domains.First(dm => dm.Id == currentUser.DomainId);        //dm.DomainName.Equals(currentUser.domainId)
                if (domain != null)
                {
                    Session["AppDomain"] = domain.DomainName;
                    await SignInAsync(user, model.RememberMe);

                    string userDomain = domain.DomainName;
                    if ((userDomain != null) && !userDomain.Equals(String.Empty))
                    {
                        return(RedirectToAction("Index", "Dashboard", new { app = userDomain }));
                    }
                    //return RedirectToLocal(returnUrl);
                }
                else
                {
                    ModelState.AddModelError("", "Invalid domain.");
                }
            }
            else
            {
                ModelState.AddModelError("", "Invalid username or password.");
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (!_authorize)
            {
                return(true);
            }

            try
            {
                bool basicAuthed = base.AuthorizeCore(httpContext);
                if (basicAuthed)
                {
                    //check domain access
                    string url           = httpContext.Request.RawUrl;
                    var    urlcomponents = url.Split('/');
                    string appdomain     = urlcomponents[1]; //first component after slash
                    if (appdomain != null)
                    {
                        string username           = httpContext.User.Identity.Name;
                        ApplicationDbContext cont = new ApplicationDbContext();
                        var user = (from u in cont.Users
                                    where u.UserName == username
                                    select u).First();

                        var icont = (IIotContextBase)System.Web.HttpContext.Current.Session["iotcontext"];
                        if (icont == null)
                        {
                            icont = UserIotContextFactory.GetContextForUser(user);
                            System.Web.HttpContext.Current.Session["iotcontext"] = icont;
                        }

                        iotDomain domain = icont.Domains.First(dm => dm.DomainName.Equals(appdomain));
                        if (domain != null)
                        {
                            if (domain.DomainName.Equals(appdomain))
                            {
                                return(true);    //user allowed to access domain
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                return(false);
            }
            return(false);
        }