/// <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> /// <param name="authentication">Authentication result interface.</param> /// <param name="passwordManager">Password Manager interface, store the password.</param> /// <param name="storageManager">Storage Manager interface.</param> /// <returns>Success or failure.</returns> public bool Initialize(string clientId, string clientSecret, string callbackUri, IAuthenticationBroker authentication, IPasswordManager passwordManager, IStorageManager storageManager) { 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, authentication, passwordManager, storageManager, LinkedInPermissions.ReadBasicProfile)); }
/// <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> /// <param name="authentication">Authentication result interface.</param> /// <param name="passwordManager">Password Manager interface, store the password.</param> /// <param name="storageManager">Storage Manager interface.</param> public LinkedInDataProvider(LinkedInOAuthTokens tokens, LinkedInPermissions requiredPermissions, IAuthenticationBroker authentication, IPasswordManager passwordManager, IStorageManager storageManager) { if (string.IsNullOrEmpty(tokens.ClientSecret)) { throw new ArgumentException("Missing client secret key"); } if (string.IsNullOrEmpty(tokens.ClientId)) { throw new ArgumentException("Missing client ID"); } if (string.IsNullOrEmpty(tokens.CallbackUri)) { throw new ArgumentException("Missing callback uri"); } if (!Enum.IsDefined(typeof(LinkedInPermissions), requiredPermissions)) { throw new ArgumentException("Error retrieving required permissions"); } Tokens = tokens; RequiredPermissions = requiredPermissions; _authentication = authentication ?? throw new ArgumentException("Invalid AuthenticationBroker"); _storageManager = storageManager ?? throw new ArgumentException("Invalid StorageManager"); _passwordManager = passwordManager ?? throw new ArgumentException("Invalid PasswordManager"); }
/// <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> /// <param name="authentication">Authentication result interface.</param> /// <param name="passwordManager">Password Manager interface, store the password.</param> /// <param name="storageManager">Storage Manager interface.</param> public LinkedInDataProvider(LinkedInOAuthTokens tokens, LinkedInPermissions requiredPermissions, IAuthenticationBroker authentication, IPasswordManager passwordManager, IStorageManager storageManager) { if (string.IsNullOrEmpty(tokens.ClientSecret)) { throw new ArgumentException("Missing client secret key"); } if (string.IsNullOrEmpty(tokens.ClientId)) { throw new ArgumentException("Missing client ID"); } if (string.IsNullOrEmpty(tokens.CallbackUri)) { throw new ArgumentException("Missing callback uri"); } // Check if its a valid combination of LinkedInPermissions if ((~(int)LinkedInPermissionsHelpers.AllPermissions & (int)requiredPermissions) != 0) { throw new ArgumentException("Error retrieving required permissions"); } Tokens = tokens; RequiredPermissions = requiredPermissions; _authentication = authentication ?? throw new ArgumentException("Invalid AuthenticationBroker"); _storageManager = storageManager ?? throw new ArgumentException("Invalid StorageManager"); _passwordManager = passwordManager ?? throw new ArgumentException("Invalid PasswordManager"); }
/// <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; _authentication = new UwpAuthenticationBroker(); _storageManager = new UwpStorageManager(); _passwordManager = new UwpPasswordManager(); }
/// <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> /// <param name="authentication">Authentication result interface.</param> /// <param name="passwordManager">Password Manager interface, store the password.</param> /// <param name="storageManager">Storage Manager interface.</param> public LinkedInDataProvider(LinkedInOAuthTokens tokens, LinkedInPermissions requiredPermissions, IAuthenticationBroker authentication, IPasswordManager passwordManager, IStorageManager storageManager) { Tokens = tokens; RequiredPermissions = requiredPermissions; _authentication = authentication; _storageManager = storageManager; _passwordManager = passwordManager; }
/// <summary> /// Initialize underlying provider with relevent token information. /// </summary> /// <param name="oAuthTokens">Token instance.</param> /// <param name="authentication">Authentication result interface.</param> /// <param name="passwordManager">Password Manager interface, store the password.</param> /// <param name="storageManager">Storage Manager interface.</param> /// <param name="requiredPermissions">Scope / permissions app requires user to sign up for.</param> /// <returns>Success or failure.</returns> public bool Initialize(LinkedInOAuthTokens oAuthTokens, IAuthenticationBroker authentication, IPasswordManager passwordManager, IStorageManager storageManager, LinkedInPermissions requiredPermissions = LinkedInPermissions.NotSet) { _oAuthTokens = oAuthTokens ?? throw new ArgumentNullException(nameof(oAuthTokens)); _authenticationBroker = authentication ?? throw new ArgumentNullException(nameof(authentication)); _storageManager = storageManager ?? throw new ArgumentNullException(nameof(storageManager)); _passwordManager = passwordManager ?? throw new ArgumentNullException(nameof(passwordManager)); _requiredPermissions = requiredPermissions; Provider.RequiredPermissions = requiredPermissions; Provider.Tokens = oAuthTokens; _isInitialized = true; return(true); }
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); var result = await _authentication.Authenticate(startUri, endUri); switch (result.ResponseStatus) { case AuthenticationResultStatus.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 AuthenticationResultStatus.ErrorHttp: Debug.WriteLine("WAB failed, message={0}", result.ResponseErrorDetail.ToString()); return(string.Empty); case AuthenticationResultStatus.UserCancel: Debug.WriteLine("WAB user aborted."); return(string.Empty); } return(string.Empty); }
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 = JObject.Parse(jsonString); return(json.GetValue("access_token").Value <string>()); } } }
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); using var jsonStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); using var jsonDoc = await JsonDocument.ParseAsync(jsonStream).ConfigureAwait(false); var value = jsonDoc.RootElement.GetProperty("access_token"); return(value.GetString()); }
/// <summary> /// Initialize underlying provider with relevent token information for Uwp. /// </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) { return(Initialize(oAuthTokens, new NetFrameworkAuthenticationBroker(), new NetFrameworkPasswordManager(), new NetFrameworkStorageManager(), requiredPermissions)); }
/// <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) : this(tokens, requiredPermissions, new NetFrameworkAuthenticationBroker(), new NetFrameworkPasswordManager(), new NetFrameworkStorageManager()) { }