Beispiel #1
0
        public async Task <ActionResult> Connect(string code = null, string state = null, string error = null)
        {
            if (!string.IsNullOrEmpty(error))
            {
                return(View("ConnectError", error));
            }

            if (string.IsNullOrWhiteSpace(code) || string.IsNullOrEmpty(state))
            {
                return(View("ConnectError", (object)"Неверные параметры: отсутствует `code` или `state`"));
            }

            string returnUrl;

            try
            {
                returnUrl = OAuth.DecryptState(state);
            }
            catch (Exception e)
            {
                log.Error($"Can't decode `state`: {e.Message}", e);
                return(View("ConnectError", (object)"Не смог расшифровать state"));
            }

            var userId = User.Identity.GetUserId();
            var client = CreateStepikApiClientFromCode(code);
            await client.RetrieveAccessTokenFromAuthorizationCode();

            await stepikRepo.SaveAccessToken(userId, client.AccessToken);

            return(Redirect(this.FixRedirectUrl(returnUrl)));
        }