Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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;
 }
Пример #6
0
        /// <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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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());
        }
Пример #10
0
 /// <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));
 }
Пример #11
0
 /// <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())
 {
 }