Esempio n. 1
0
        public async Task <IActionResult> Index()
        {
            // check for cached refresh token
            if (!Request.Cookies.ContainsKey("RefreshToken"))
            {
                // no cached token...check for authorization code in uri
                if (Request.Query.ContainsKey("code"))
                {
                    // authorization code on request...finish the code authorization flow
                    var token = await AuthUtil.GetTokenWithAuthorizationCode(Request.Query["code"]);

                    if (token == null)
                    {
                        return(RedirectToAction("Error", "Home", new { msg = "Error completing code authorization flow" }));
                    }
                    else
                    {
                        // save refresh token and teams access token in cookie
                        Response.Cookies.Append("RefreshToken", token.refresh_token);
                        Response.Cookies.Append("TeamsAccessToken", token.access_token);

                        // get skype token
                        HttpClient client = new HttpClient();
                        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token.access_token);
                        client.DefaultRequestHeaders.Add("Accept", "application/json");
                        var           payloadString = "";
                        StringContent payload       = new StringContent(payloadString, Encoding.UTF8, "application/json");
                        using (var resp = await client.PostAsync("https://api.teams.skype.com/beta/auth/skypetoken", payload))
                        {
                            if (resp.IsSuccessStatusCode)
                            {
                                // save skype access token in cookie
                                var json = JObject.Parse(await resp.Content.ReadAsStringAsync());
                                Response.Cookies.Append("SkypeAccessToken", json.SelectToken("tokens.skypeToken").Value <string>());
                                return(View());
                            }
                            else
                            {
                                return(RedirectToAction("Error", "Home", new { msg = "Failed to secure skype token" }));
                            }
                        }
                    }
                }
                else
                {
                    return(Redirect(AuthUtil.GetAuthorizationRedirect()));
                }
            }
            else
            {
                return(View());
            }
        }