// GET: Sso
        public ActionResult Callback()
        {
            // Create a callback model with all the relevant information
            var callback = new SsoCallbackModel {
                SsoCode = Request.Params["code"],
                State   = Request.Params["state"] ?? "add"
            };

            var token        = Esi.Auth.GetTokenComposite(callback.SsoCode, TokenAuthenticationType.VerifyAuthCode);
            var tokenWrapper = new DbTokenWrapper(token);

            callback.TokenUuid = tokenWrapper.Uuid;
            TokenCache.Add(tokenWrapper);

            var status = callback.State;

            switch (status)
            {
            case "add":
                return(RedirectToAction("AddTokenToDb", callback));

            case "signup":
                return(RedirectToAction("SignUpStepComplete", callback));

            case "signin":
                return(RedirectToAction("SignIn", callback));

            default:
                return(RedirectToAction("AddTokenToDb", callback));
            }
        }
        public async Task <ActionResult> AddTokenToDb(SsoCallbackModel callback)
        {
            var context = new AppDbContext();
            var token   = TokenCache.FirstOrDefault(t => t.Uuid == callback.TokenUuid);

            context.Tokens.Add(token);
            await context.SaveChangesAsync();

            TokenCache.Remove(token);
            return(View(callback));
        }
        public ActionResult SignUpStepComplete(SsoCallbackModel callback)
        {
            ViewBag.CallBack = callback;
            var token = TokenCache.FirstOrDefault(t => t.Uuid == callback.TokenUuid);

            var entity = new UserEntity {
                MainCharacter = token?.CharacterId ?? 0
            };

            return(View(entity));
        }