예제 #1
0
        public IConfigurable PrepareSubscription(MailboxSession mailbox, ConnectSubscriptionProxy proxy)
        {
            ArgumentValidator.ThrowIfNull("mailbox", mailbox);
            ArgumentValidator.ThrowIfNull("proxy", proxy);
            this.InitializeConfiguration();
            LinkedInTokenInformation linkedInTokenInformation = this.ExchangeRequestTokenForAccessTokenAndSecret(proxy.RequestToken, proxy.RequestSecret, proxy.OAuthVerifier);

            proxy.Subscription.SubscriptionType            = AggregationSubscriptionType.LinkedIn;
            proxy.Subscription.SubscriptionProtocolName    = ConnectSubscription.LinkedInProtocolName;
            proxy.Subscription.SubscriptionProtocolVersion = ConnectSubscription.LinkedInProtocolVersion;
            proxy.Subscription.SubscriptionEvents          = SubscriptionEvents.WorkItemCompleted;
            proxy.SendAsCheckNeeded = false;
            proxy.ProviderGuid      = ConnectSubscription.LinkedInProviderGuid;
            proxy.MessageClass      = "IPM.Aggregation.LinkedIn";
            proxy.AssignAccessToken(linkedInTokenInformation.Token);
            proxy.AssignAccessTokenSecret(linkedInTokenInformation.Secret);
            proxy.AppId  = this.authConfig.AppId;
            proxy.UserId = this.GetUserId(proxy.RequestToken, linkedInTokenInformation.Token, linkedInTokenInformation.Secret);
            OscFolderCreateResult oscFolderCreateResult = new OscFolderCreator(mailbox).Create("LinkedIn", proxy.UserId);

            if (!oscFolderCreateResult.Created)
            {
                new OscFolderMigration(mailbox, OscContactSourcesForContactParser.Instance).Migrate(oscFolderCreateResult.FolderId);
                proxy.InitialSyncInRecoveryMode = true;
            }
            return(proxy);
        }
        public override void Delete(IConfigurable instance)
        {
            ConnectSubscriptionProxy        connectSubscriptionProxy = instance as ConnectSubscriptionProxy;
            ConnectSubscription             connectSubscription      = (ConnectSubscription)connectSubscriptionProxy.Subscription;
            AggregationSubscriptionIdentity subscriptionIdentity     = connectSubscription.SubscriptionIdentity;

            try
            {
                using (MailboxSession mailboxSession = base.OpenMailboxSession(subscriptionIdentity))
                {
                    ConnectSubscriptionCleanup connectSubscriptionCleanup = new ConnectSubscriptionCleanup(SubscriptionManager.Instance);
                    connectSubscriptionCleanup.Cleanup(mailboxSession, connectSubscription, true);
                    new PeopleConnectNotifier(mailboxSession).NotifyDisconnected(connectSubscription.Name);
                }
            }
            catch (LocalizedException ex)
            {
                CommonLoggingHelper.SyncLogSession.LogError((TSLID)1507UL, AggregationTaskUtils.Tracer, "ConnectSubscriptionDataProvider.Delete: {0} hit exception: {1}.", new object[]
                {
                    connectSubscription.Name,
                    ex
                });
                Exception ex2 = ex;
                if (!(ex is FailedDeletePeopleConnectSubscriptionException))
                {
                    ex2 = new FailedDeletePeopleConnectSubscriptionException(connectSubscription.SubscriptionType, ex);
                }
                throw ex2;
            }
        }
        private void RejectIfDifferentAccount(ConnectSubscriptionProxy proxy, string requestToken, string newAccessToken, string newAccessTokenSecret)
        {
            if (SetLinkedInSubscription.IsTestHook(requestToken))
            {
                return;
            }
            string emailAddress = new LinkedInWebClient(this.appConfig, SetLinkedInSubscription.Tracer).GetProfile(newAccessToken, newAccessTokenSecret, "email-address").EmailAddress;

            if (!string.Equals(proxy.UserId, emailAddress, StringComparison.Ordinal))
            {
                throw new CannotSwitchLinkedInAccountException();
            }
        }
        public void StampChangesOn(ConnectSubscriptionProxy proxy)
        {
            if (proxy == null)
            {
                throw new ArgumentNullException("proxy");
            }
            this.InitializeConfiguration();
            LinkedInTokenInformation linkedInTokenInformation = this.ExchangeRequestTokenForAccessTokenAndSecret(proxy.RequestToken, proxy.RequestSecret, proxy.OAuthVerifier);

            this.RejectIfDifferentAccount(proxy, proxy.RequestToken, linkedInTokenInformation.Token, linkedInTokenInformation.Secret);
            proxy.AssignAccessToken(linkedInTokenInformation.Token);
            proxy.AssignAccessTokenSecret(linkedInTokenInformation.Secret);
            proxy.AppId = this.authConfig.AppId;
        }
예제 #5
0
 public void InitializeFolderAndNotifyApps(MailboxSession mailbox, ConnectSubscriptionProxy subscription)
 {
     if (mailbox == null)
     {
         throw new ArgumentNullException("mailbox");
     }
     if (subscription == null)
     {
         throw new ArgumentNullException("subscription");
     }
     if (NewLinkedInSubscription.IsTestHook(subscription.RequestToken))
     {
         return;
     }
     new OscSyncLockCreator(mailbox).Create("LinkedIn", subscription.UserId);
     new PeopleConnectNotifier(mailbox).NotifyConnected(WellKnownNetworkNames.LinkedIn);
 }
예제 #6
0
        public IConfigurable PrepareSubscription(MailboxSession mailbox, ConnectSubscriptionProxy proxy)
        {
            ArgumentValidator.ThrowIfNull("proxy", proxy);
            NewFacebookSubscription.Tracer.TraceFunction((long)this.GetHashCode(), "Entering NewFacebookSubscription.PrepareSubscription. Mailbox {0}.", new object[]
            {
                mailbox.Identity
            });
            this.InitializeConfiguration(proxy.AppAuthorizationCode, proxy.RedirectUri);
            string text;
            string userId;

            if (NewFacebookSubscription.IsTestHook(proxy.AppAuthorizationCode))
            {
                text   = "***TEST_ACCESS_TOKEN***";
                userId = "***TEST_USER_ID***";
            }
            else
            {
                text   = new FacebookAuthenticator(this.config).ExchangeAppAuthorizationCodeForAccessToken(proxy.AppAuthorizationCode);
                userId = NewFacebookSubscription.GetUserId(text);
                if (!CachedPeopleConnectApplicationConfig.Instance.ReadFacebook().SkipContactUpload)
                {
                    NewFacebookSubscription.UploadContacts(mailbox, text);
                }
                else
                {
                    NewFacebookSubscription.Tracer.TraceWarning <string>((long)this.GetHashCode(), "Skipping contact upload for new subscription in Mailbox {0}.", mailbox.Identity.ToString());
                }
            }
            proxy.Subscription.SubscriptionType            = AggregationSubscriptionType.Facebook;
            proxy.Subscription.SubscriptionProtocolName    = ConnectSubscription.FacebookProtocolName;
            proxy.Subscription.SubscriptionProtocolVersion = ConnectSubscription.FacebookProtocolVersion;
            proxy.Subscription.SubscriptionEvents          = SubscriptionEvents.WorkItemCompleted;
            proxy.SendAsCheckNeeded = false;
            proxy.ProviderGuid      = ConnectSubscription.FacebookProviderGuid;
            proxy.MessageClass      = "IPM.Aggregation.Facebook";
            proxy.AssignAccessToken(text);
            proxy.AppId  = this.config.AppId;
            proxy.UserId = userId;
            NewFacebookSubscription.Tracer.TraceFunction((long)this.GetHashCode(), "Leaving NewFacebookSubscription.PrepareSubscription. Mailbox {0}.", new object[]
            {
                mailbox.Identity
            });
            return(proxy);
        }
예제 #7
0
 public void InitializeFolderAndNotifyApps(MailboxSession mailbox, ConnectSubscriptionProxy subscription)
 {
     if (mailbox == null)
     {
         throw new ArgumentNullException("mailbox");
     }
     if (subscription == null)
     {
         throw new ArgumentNullException("subscription");
     }
     if (NewFacebookSubscription.IsTestHook(subscription.AppAuthorizationCode))
     {
         return;
     }
     new OscFolderCreator(mailbox).Create("Facebook", subscription.UserId);
     new OscSyncLockCreator(mailbox).Create("Facebook", subscription.UserId);
     new PeopleConnectNotifier(mailbox).NotifyConnected(WellKnownNetworkNames.Facebook);
 }
예제 #8
0
        public void StampChangesOn(ConnectSubscriptionProxy proxy)
        {
            if (proxy == null)
            {
                throw new ArgumentNullException("proxy");
            }
            this.InitializeConfiguration(proxy.RedirectUri);
            string text;
            string userId;

            if (SetFacebookSubscription.IsTestHook(proxy.AppAuthorizationCode))
            {
                text   = "***TEST_SET_ACCESS_TOKEN***";
                userId = "***TEST_SET_USER_ID***";
            }
            else
            {
                text   = new FacebookAuthenticator(this.config).ExchangeAppAuthorizationCodeForAccessToken(proxy.AppAuthorizationCode);
                userId = SetFacebookSubscription.GetUserId(text);
            }
            proxy.AssignAccessToken(text);
            proxy.AppId  = this.config.AppId;
            proxy.UserId = userId;
        }