/// <summary> /// Call back function, where your app will get Access Token /// </summary> /// <param name="model"></param> /// <returns></returns> public ActionResult Callback(Project model) { try { // if the Code from the Request URL is null, [when the User has pressed Deny button], will redirecct to sign in page string code1 = Request.QueryString["code"]; if (code1 == null) { return(Redirect("../Home/SignIn")); } else { string code = Request.QueryString["code"]; string redirectUrl = RedirectUri; //System.Configuration.ConfigurationManager.AppSettings["RedirectUri"]; string clientId = ClientSecret; //System.Configuration.ConfigurationManager.AppSettings["ClientSecret"]; // create the request to Post the Data to get access token string accessRequestBody = GenerateRequestPostData(clientId, code, redirectUrl); //Get Access Token accessDetails = GetAccessToken(accessRequestBody); //Get User profile [ Based on your Scope selection] ProfileDetails Profile = GetProfile(accessDetails); Session["User"] = Profile.displayName; //Get account list associated with logged in user Accounts.AccountList accountList = GetAccounts(Profile.id, accessDetails); model.accessToken = accessDetails.access_token; model.refreshToken = accessDetails.refresh_token; model.accountsForDropdown = new List <string>(); if (accountList.count > 0) { foreach (var account in accountList.value) { model.accountsForDropdown.Add(account.accountName); } model.accountsForDropdown.Sort(); } return(View(model)); } } catch (Exception ex) { return(View()); } }
/// <summary> /// Get Account associalted with the logged in user /// </summary> /// <param name="MemberID"></param> /// <param name="Details"></param> /// <returns></returns> public Accounts.AccountList GetAccounts(string MemberID, AccessDetails Details) { if (Session["PAT"] != null) { Details.access_token = Session["PAT"].ToString(); } Accounts.AccountList Accounts = new Accounts.AccountList(); var client = new HttpClient(); string requestContent = "https://app.vssps.visualstudio.com/_apis/Accounts?memberId=" + MemberID + "&api-version=3.2-preview"; var request = new HttpRequestMessage(HttpMethod.Get, requestContent); request.Headers.Add("Authorization", "Bearer " + Details.access_token); try { var response = client.SendAsync(request).Result; if (response.StatusCode == HttpStatusCode.NonAuthoritativeInformation) { Details = Refresh_AccessToken(Details.refresh_token); return(GetAccounts(MemberID, Details)); } else if (response.IsSuccessStatusCode) { string result = response.Content.ReadAsStringAsync().Result; Accounts = JsonConvert.DeserializeObject <Accounts.AccountList>(result); } else { var errorMessage = response.Content.ReadAsStringAsync(); Accounts = null; } } catch (Exception ex) { return(Accounts); } return(Accounts); }