/// <summary> /// Initializes a new instance of the <see cref="LinkedInDataProvider"/> class. /// Constructor. /// </summary> /// <param name="tokens">OAuth tokens for request.</param> /// <param name="requiredPermissions">Required permissions for the session.</param> public LinkedInDataProvider(LinkedInOAuthTokens tokens, LinkedInPermissions requiredPermissions) { Tokens = tokens; RequiredPermissions = requiredPermissions; _vault = new PasswordVault(); }
/// <summary> /// Initialize underlying provider with relevent token information. /// </summary> /// <param name="clientId">Client Id.</param> /// <param name="clientSecret">Client secret.</param> /// <param name="callbackUri">Callback URI. Has to match callback URI defined at www.linkedin.com/developer/apps/ (can be arbitrary).</param> /// <returns>Success or failure.</returns> public bool Initialize(string clientId, string clientSecret, string callbackUri) { if (string.IsNullOrEmpty(clientId)) { throw new ArgumentNullException(nameof(clientId)); } if (string.IsNullOrEmpty(clientSecret)) { throw new ArgumentNullException(nameof(clientSecret)); } if (string.IsNullOrEmpty(callbackUri)) { throw new ArgumentNullException(nameof(callbackUri)); } var oAuthTokens = new LinkedInOAuthTokens { ClientId = clientId, ClientSecret = clientSecret, CallbackUri = callbackUri }; return(Initialize(oAuthTokens, LinkedInPermissions.ReadBasicProfile)); }
private async Task <string> GetAuthorizeCodeAsync(LinkedInOAuthTokens tokens, LinkedInPermissions permissions) { string scopes = ConvertPermissionsToEncodedScopeString(permissions); var url = $"{_oAuthBaseUrl}authorization?response_type=code" + "&client_id=" + tokens.ClientId + "&state=STATE" + "&redirect_uri=" + Uri.EscapeDataString(tokens.CallbackUri) + "&" + scopes; var startUri = new Uri(url); var endUri = new Uri(tokens.CallbackUri); WebAuthenticationResult result = await WebAuthenticationBroker.AuthenticateAsync( WebAuthenticationOptions.None, startUri, endUri); switch (result.ResponseStatus) { case WebAuthenticationStatus.Success: { var response = result.ResponseData; IDictionary <string, string> dictionary = new Dictionary <string, string>(); var split = response.Split('?'); foreach (var keyValue in split[split.Length - 1].Split('&')) { var keyValueSplit = keyValue.Split('='); if (keyValueSplit.Length == 2) { dictionary.Add(keyValueSplit[0], keyValueSplit[1]); } } return(dictionary["code"]); } case WebAuthenticationStatus.ErrorHttp: Debug.WriteLine("WAB failed, message={0}", result.ResponseErrorDetail.ToString()); return(string.Empty); case WebAuthenticationStatus.UserCancel: Debug.WriteLine("WAB user aborted."); return(string.Empty); } return(string.Empty); }
/// <summary> /// Initialize underlying provider with relevent token information. /// </summary> /// <param name="oAuthTokens">Token instance.</param> /// <param name="requiredPermissions">Scope / permissions app requires user to sign up for.</param> /// <returns>Success or failure.</returns> public bool Initialize(LinkedInOAuthTokens oAuthTokens, LinkedInPermissions requiredPermissions = LinkedInPermissions.NotSet) { if (oAuthTokens == null) { throw new ArgumentNullException(nameof(oAuthTokens)); } this._oAuthTokens = oAuthTokens; this._requiredPermissions = requiredPermissions; Provider.RequiredPermissions = requiredPermissions; Provider.Tokens = oAuthTokens; _isInitialized = true; return(true); }
private async Task <string> GetAccessTokenAsync(LinkedInOAuthTokens tokens, string authorizeCode) { var url = $"{_oAuthBaseUrl}accessToken?grant_type=authorization_code" + "&code=" + authorizeCode + "&redirect_uri=" + Uri.EscapeDataString(tokens.CallbackUri) + "&client_id=" + tokens.ClientId + "&client_secret=" + tokens.ClientSecret; using (var request = new HttpRequestMessage(HttpMethod.Post, new Uri(url))) { using (var response = await client.SendAsync(request).ConfigureAwait(false)) { var jsonString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var json = JsonObject.Parse(jsonString); return(json.GetNamedString("access_token")); } } }