/// <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();
        }
Esempio n. 2
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>
        /// <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);
        }
Esempio n. 4
0
        /// <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"));
                }
            }
        }