public static PersonaAuthorizer FromUri(Uri uri)
        {
            var personaAssertion = URIUtils.GetQueryParameter(uri, QueryParameter);

            if (personaAssertion != null && !StringEx.IsNullOrWhiteSpace(personaAssertion))
            {
                var email      = RegisterAssertion(personaAssertion);
                var authorizer = new PersonaAuthorizer(email);
                return(authorizer);
            }

            return(null);
        }
Beispiel #2
0
        public static FacebookAuthorizer FromUri(Uri uri)
        {
            var facebookAccessToken = URIUtils.GetQueryParameter(uri, QueryParameter);

            if (facebookAccessToken != null && !StringEx.IsNullOrWhiteSpace(facebookAccessToken))
            {
                var email                  = URIUtils.GetQueryParameter(uri, QueryParameterEmail);
                var authorizer             = new FacebookAuthorizer(email);
                Uri remoteWithQueryRemoved = null;

                try {
                    remoteWithQueryRemoved = new UriBuilder(uri.Scheme, uri.Host, uri.Port, uri.AbsolutePath).Uri;
                } catch (UriFormatException e) {
                    throw Misc.CreateExceptionAndLog(Log.To.Sync, e, Tag,
                                                     "Invalid URI format for remote endpoint");
                }

                RegisterAccessToken(facebookAccessToken, email, remoteWithQueryRemoved);
                return(authorizer);
            }

            return(null);
        }
Beispiel #3
0
        /// <summary>Private Constructor</summary>
        protected Replication(Database db, Uri remote, bool continuous, IHttpClientFactory clientFactory, TaskFactory workExecutor, CancellationTokenSource tokenSource = null)
        {
            LocalDatabase           = db;
            Continuous              = continuous;
            WorkExecutor            = workExecutor;
            CancellationTokenSource = tokenSource ?? new CancellationTokenSource();
            RemoteUrl      = remote;
            Status         = ReplicationStatus.Stopped;
            online         = true;
            RequestHeaders = new Dictionary <String, Object>();

            if (RemoteUrl.GetQuery() != null && !RemoteUrl.GetQuery().IsEmpty())
            {
                var uri = new Uri(remote.ToString());
                var personaAssertion = URIUtils.GetQueryParameter(uri, PersonaAuthorizer.QueryParameter);

                if (personaAssertion != null && !personaAssertion.IsEmpty())
                {
                    var email      = PersonaAuthorizer.RegisterAssertion(personaAssertion);
                    var authorizer = new PersonaAuthorizer(email);
                    Authorizer = authorizer;
                }

                var facebookAccessToken = URIUtils.GetQueryParameter(uri, FacebookAuthorizer.QueryParameter);

                if (facebookAccessToken != null && !facebookAccessToken.IsEmpty())
                {
                    var email                  = URIUtils.GetQueryParameter(uri, FacebookAuthorizer.QueryParameterEmail);
                    var authorizer             = new FacebookAuthorizer(email);
                    Uri remoteWithQueryRemoved = null;

                    try
                    {
                        remoteWithQueryRemoved = new UriBuilder(remote.Scheme, remote.GetHost(), remote.Port, remote.AbsolutePath).Uri;
                    }
                    catch (UriFormatException e)
                    {
                        throw new ArgumentException("Invalid URI format.", "remote", e);
                    }

                    FacebookAuthorizer.RegisterAccessToken(facebookAccessToken, email, remoteWithQueryRemoved.ToString());

                    Authorizer = authorizer;
                }
                // we need to remove the query from the URL, since it will cause problems when
                // communicating with sync gw / couchdb
                try
                {
                    RemoteUrl = new UriBuilder(remote.Scheme, remote.GetHost(), remote.Port, remote.AbsolutePath).Uri;
                }
                catch (UriFormatException e)
                {
                    throw new ArgumentException("Invalid URI format.", "remote", e);
                }
            }

            Batcher = new Batcher <RevisionInternal>(workExecutor, InboxCapacity, ProcessorDelay,
                                                     inbox =>
            {
                Log.V(Database.Tag, "*** " + this + ": BEGIN processInbox (" + inbox.Count + " sequences)");
                ProcessInbox(new RevisionList(inbox));
                Log.V(Database.Tag, "*** " + this.ToString() + ": END processInbox (lastSequence=" + LastSequence);
                UpdateActive();
            }, CancellationTokenSource);

            this.clientFactory = clientFactory ?? CouchbaseLiteHttpClientFactory.Instance;
        }