public Task<bool> ChangeConnectionAsync(CrunchAuthorisationParameters crunchAuthorisationParameters) { return Task.Factory.StartNew( () => { var consumer = CreateConsumer(crunchAuthorisationParameters); string requestToken; var userAuthorisationUri = consumer.RequestUserAuthorization(new Dictionary<string, string>(), new Dictionary<string, string>(), out requestToken); var verifierTask = _requestTokenVerifier.Verify(userAuthorisationUri); // wait synchronously for the result. We're already on a background thread, so we won't block the UI var verifier = verifierTask.Result; if (verifier != null) { var result = consumer.ProcessUserAuthorization(requestToken, verifier); StoreParametersAndAccessToken(crunchAuthorisationParameters, result.AccessToken); RaiseConnectionStatucChanged(EventArgs.Empty); return true; } else { return false; } }); }
private void StoreParametersAndAccessToken(CrunchAuthorisationParameters crunchAuthorisationParameters, string accessToken) { Settings.Default.AccessTokenEndpoint = crunchAuthorisationParameters.AccessTokenEndpoint; Settings.Default.RequestTokenEndpoint = crunchAuthorisationParameters.RequestTokenEndpoint; Settings.Default.UserAuthorizationEndpoint = crunchAuthorisationParameters.UserAuthorizationEndpoint; Settings.Default.ConsumerKey = crunchAuthorisationParameters.ConsumerKey; Settings.Default.SharedSecret = crunchAuthorisationParameters.SharedSecret.EncryptAndEncodeAsBase64(); Settings.Default.AccessToken = accessToken.EncryptAndEncodeAsBase64(); Settings.Default.Save(); }
private static DesktopConsumer CreateConsumer(CrunchAuthorisationParameters crunchAuthorisationParameters) { var tokenManager = new InMemoryTokenManager(crunchAuthorisationParameters.ConsumerKey, crunchAuthorisationParameters.SharedSecret); var serviceProviderDescription = CreateServiceProviderDescription(crunchAuthorisationParameters); var consumer = new DesktopConsumer(serviceProviderDescription, tokenManager); return consumer; }
private static ServiceProviderDescription CreateServiceProviderDescription(CrunchAuthorisationParameters crunchAuthorisationParameters) { return new ServiceProviderDescription() { ProtocolVersion = ProtocolVersion.V10a, RequestTokenEndpoint = new MessageReceivingEndpoint(crunchAuthorisationParameters.RequestTokenEndpoint, HttpDeliveryMethods.PostRequest |HttpDeliveryMethods.AuthorizationHeaderRequest), AccessTokenEndpoint = new MessageReceivingEndpoint(crunchAuthorisationParameters.AccessTokenEndpoint, HttpDeliveryMethods.PostRequest |HttpDeliveryMethods.AuthorizationHeaderRequest), UserAuthorizationEndpoint = new MessageReceivingEndpoint(crunchAuthorisationParameters.UserAuthorizationEndpoint, HttpDeliveryMethods.PostRequest |HttpDeliveryMethods.AuthorizationHeaderRequest), TamperProtectionElements = new ITamperProtectionChannelBindingElement[] {new HmacSha1SigningBindingElement()}, }; }
public CrunchAuthorisationParameters GetCurrentAuthorisationParameters() { var crunchAuthorisationParameters = new CrunchAuthorisationParameters( sharedSecret: Settings.Default.SharedSecret.IsNullOrWhiteSpace() ? "": Settings.Default.SharedSecret.DecryptBase64EncodedString(), accessTokenEndpoint: Settings.Default.AccessTokenEndpoint, consumerKey: Settings.Default.ConsumerKey, requestTokenEndpoint: Settings.Default.RequestTokenEndpoint, userAuthorizationEndpoint: Settings.Default.UserAuthorizationEndpoint ); return crunchAuthorisationParameters; }