public void getTokenFromResponse_Should_Return_Token()
        {
            //arrange
            //act
            OauthToken token = AvansOauthHelper.getTokenFormUri("authentification_url=https://publicapi.avans.nl/oauth/login.php&oauth_token=oauthtoken&oauth_token_secret=oauthsecret&oauth_callback_confirmed=true");

            //assert
            Assert.Equal("oauthtoken", token.Token);
        }
        public IActionResult AvansLogin(string returnUrl)
        {
            if (String.IsNullOrEmpty(returnUrl))
            {
                return(StatusCode(400));
            }

            //get request token
            string baseUrl    = $"{this.Request.Scheme}://{this.Request.Host}";
            var    oauthToken = AvansOauthHelper.GetRequestToken(baseUrl, this.AvansOauthHelperOptions);


            //store the oauth token, secret and return url temporarily
            HttpContext.Session.SetString("oauth_token", oauthToken.Token);
            HttpContext.Session.SetString("oauth_secret", oauthToken.Secret);
            HttpContext.Session.SetString("returnUrl", returnUrl);

            //redirect to saml screen
            return(Redirect("https://publicapi.avans.nl/oauth/saml.php?oauth_token=" + oauthToken.Token));
        }
        public async Task <IActionResult> AvansCallback()
        {
            //get the token from the session
            var token = new OauthToken()
            {
                Token  = HttpContext.Session.GetString("oauth_token"),
                Secret = HttpContext.Session.GetString("oauth_secret")
            };

            var returnUrl = HttpContext.Session.GetString("returnUrl");
            var verifier  = HttpContext.Request.Query["oauth_verifier"];

            OauthToken accesToken = AvansOauthHelper.GetAccesToken(this.AvansOauthHelperOptions, token, verifier);

            //clear session of temp data
            HttpContext.Session.Remove("oauth_token");
            HttpContext.Session.Remove("oauth_secret");
            HttpContext.Session.Remove("returnUrl");

            string userInfo     = AvansOauthHelper.GetUserInfo(this.AvansOauthHelperOptions, accesToken);
            var    avansDetails = JObject.Parse(userInfo);

            var name       = (string)avansDetails["nickname"];
            var isEmployee = (string)avansDetails["employee"] == "true";
            var email      = (string)avansDetails["emails"][0];
            var username   = (string)avansDetails["accounts"]["username"];

            var info = new UserLoginInfo("Avans", "Avans", "Avans");

            ApplicationUser user = await this.GetOrCreateUser(email, username, name, info, isEmployee);

            var jwt = GenerateToken(user);

            returnUrl = returnUrl + "#/process-token?token=" + jwt;


            return(Redirect(returnUrl));
        }