protected virtual async Task <PublicKeyX509Certificate> GetPublicKeyAsync(CancellationToken cancelToken = default(CancellationToken))
        {
            try
            {
                var sessionConfigBuilder = new SessionConfigUrlBuilder(this.restGrammar, this.webApiGrammar);
                var taskFlow             = new GetPublicKeyTasks(sessionConfigBuilder, this.restGrammar, this.webApiGrammar, this.httpClient);

                PublicKeyX509Certificate result = await RestApiCallFlow.LoadRequestFromNetworkFlow(this.sessionConfig, taskFlow, cancelToken);

                this.publicCertifiacte = result;
            }
            catch (ObjectDisposedException)
            {
                // CancellationToken.ThrowIfCancellationRequested()
                throw;
            }
            catch (OperationCanceledException)
            {
                // CancellationToken.ThrowIfCancellationRequested()
                // and TaskCanceledException
                throw;
            }
            catch (SitecoreMobileSdkException ex)
            {
                // throw unwrapped exception as if GetPublicKeyAsync() is an atomic phase
                throw new RsaHandshakeException("[Sitecore Mobile SDK] Public key not received properly", ex.InnerException);
            }
            catch (Exception ex)
            {
                throw new RsaHandshakeException("[Sitecore Mobile SDK] Public key not received properly", ex);
            }

            return(this.publicCertifiacte);
        }
        private async Task <Stream> DownloadHashedMediaResourceAsync(IMediaResourceDownloadRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            var cryptor = await this.GetCredentialsCryptorAsync(cancelToken);

            MediaItemUrlBuilder urlBuilder = new MediaItemUrlBuilder(
                this.restGrammar,
                this.webApiGrammar,
                this.sessionConfig,
                this.mediaSettings,
                request.ItemSource);

            var    hashUrlGetterFlow = new GetMediaContentHashTask(urlBuilder, this.httpClient, cryptor);
            string hashedMediaUrl    = await RestApiCallFlow.LoadRequestFromNetworkFlow(request, hashUrlGetterFlow, cancelToken);

            try
            {
                Stream result = await this.httpClient.GetStreamAsync(hashedMediaUrl);

                return(result);
            }
            catch (Exception ex)
            {
                throw new LoadDataFromNetworkException(TaskFlowErrorMessages.NETWORK_EXCEPTION_MESSAGE, ex);
            }
        }
        public async Task <ScEntityResponse> ReadEntityAsync(IReadEntityByIdRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            IReadEntityByIdRequest requestCopy = request.DeepCopyReadEntitiesByIdRequest();

            //await this.GetPublicKeyAsync(cancelToken);
            IReadEntityByIdRequest autocompletedRequest = this.requestMerger.FillReadEntityByIdGaps(requestCopy);

            var urlBuilder = new EntityByIdUrlBuilder <IReadEntityByIdRequest>(this.restGrammar, this.sscGrammar);
            var taskFlow   = new GetEntityByIdTask(urlBuilder, this.httpClient);

            return(await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken));
        }
        public async Task <bool> AuthenticateAsync(CancellationToken cancelToken = default(CancellationToken))
        {
            var sessionUrlBuilder = new SessionConfigUrlBuilder(this.restGrammar, this.webApiGrammar);

            using (var cryptor = await this.GetCredentialsCryptorAsync(cancelToken))
            {
                var taskFlow = new AuthenticateTasks(this.restGrammar, this.webApiGrammar, sessionUrlBuilder, this.httpClient, cryptor);

                WebApiJsonStatusMessage result = await RestApiCallFlow.LoadRequestFromNetworkFlow(this.sessionConfig, taskFlow, cancelToken);

                return(result.StatusCode == 200);
            }
        }
        private async Task <Stream> DownloadPlainMediaResourceAsync(IMediaResourceDownloadRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            MediaItemUrlBuilder urlBuilder = new MediaItemUrlBuilder(
                this.restGrammar,
                this.webApiGrammar,
                this.sessionConfig,
                this.mediaSettings,
                request.ItemSource);

            var taskFlow = new GetResourceTask(urlBuilder, this.httpClient);

            return(await RestApiCallFlow.LoadResourceFromNetworkFlow(request, taskFlow, cancelToken));
        }
        public async Task <ScDeleteItemsResponse> DeleteItemAsync(IDeleteItemsByIdRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            IDeleteItemsByIdRequest requestCopy = request.DeepCopyDeleteItemRequest();

            await this.GetPublicKeyAsync(cancelToken);

            IDeleteItemsByIdRequest autocompletedRequest = this.requestMerger.FillDeleteItemByIdGaps(requestCopy);

            var urlBuilder = new DeleteItemByIdUrlBuilder(this.restGrammar, this.sscGrammar);
            var taskFlow   = new DeleteItemTasks <IDeleteItemsByIdRequest>(urlBuilder, this.httpClient);

            return(await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken));
        }
        public async Task <ScItemsResponse> ReadItemAsync(IReadItemsByPathRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            IReadItemsByPathRequest requestCopy = request.DeepCopyGetItemByPathRequest();

            await this.GetPublicKeyAsync(cancelToken);

            IReadItemsByPathRequest autocompletedRequest = this.requestMerger.FillReadItemByPathGaps(requestCopy);

            var urlBuilder = new ItemByPathUrlBuilder(this.restGrammar, this.sscGrammar);
            var taskFlow   = new GetItemsByPathTasks(urlBuilder, this.httpClient);

            return(await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken));
        }
        public async Task <ScItemsResponse> RunStoredQuerryAsync(ISitecoreStoredSearchRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            ISitecoreStoredSearchRequest requestCopy = request.DeepCopySitecoreStoredSearchRequest();

            await this.GetPublicKeyAsync(cancelToken);

            ISitecoreStoredSearchRequest autocompletedRequest = this.requestMerger.FillSitecoreStoredSearchGaps(requestCopy);

            var urlBuilder = new RunStoredQuerryUrlBuilder(this.restGrammar, this.sscGrammar);
            var taskFlow   = new RunStoredQuerryTasks(urlBuilder, this.httpClient);

            return(await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken));
        }
        public async Task <ScDeleteItemsResponse> DeleteItemAsync(IDeleteItemsByQueryRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            IDeleteItemsByQueryRequest requestCopy = request.DeepCopyDeleteItemRequest();

            using (ICredentialsHeadersCryptor cryptor = await this.GetCredentialsCryptorAsync(cancelToken))
            {
                IDeleteItemsByQueryRequest autocompletedRequest = this.requestMerger.FillDeleteItemByQueryGaps(requestCopy);

                var urlBuilder = new DeleteItemByQueryUrlBuilder(this.restGrammar, this.webApiGrammar);
                var taskFlow   = new DeleteItemTasks <IDeleteItemsByQueryRequest>(urlBuilder, this.httpClient, cryptor);

                return(await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken));
            }
        }
        public async Task <Stream> ReadRenderingHtmlAsync(IGetRenderingHtmlRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            IGetRenderingHtmlRequest requestCopy = request.DeepCopyGetRenderingHtmlRequest();

            using (ICredentialsHeadersCryptor cryptor = await this.GetCredentialsCryptorAsync(cancelToken))
            {
                IGetRenderingHtmlRequest autocompletedRequest = this.requestMerger.FillGetRenderingHtmlGaps(requestCopy);

                var urlBuilder = new RenderingHtmlUrlBuilder(this.restGrammar, this.webApiGrammar);
                var taskFlow   = new GetRenderingHtmlTasks(urlBuilder, this.httpClient, cryptor);

                return(await RestApiCallFlow.LoadResourceFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken));
            }
        }
        public async Task <ScItemsResponse> UploadMediaResourceAsync(IMediaResourceUploadRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            IMediaResourceUploadRequest requestCopy = request.DeepCopyUploadMediaRequest();

            using (ICredentialsHeadersCryptor cryptor = await this.GetCredentialsCryptorAsync(cancelToken))
            {
                IMediaResourceUploadRequest autocompletedRequest = this.requestMerger.FillUploadMediaGaps(requestCopy);

                var urlBuilder = new UploadMediaUrlBuilder(this.restGrammar, this.webApiGrammar, this.sessionConfig, this.mediaSettings);
                var taskFlow   = new UploadMediaTask(urlBuilder, this.httpClient, cryptor);

                return(await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken));
            }
        }
        protected virtual async Task <ScAuthResponse> GetPublicKeyAsync(CancellationToken cancelToken = default(CancellationToken))
        {
            ScAuthResponse response = null;

            if (this.credentials != null)
            {
                string url = SessionConfigValidator.AutocompleteInstanceUrlForcingHttps(this.Config.InstanceUrl);
                IEnumerable <Cookie> prevCookies = this.cookies.GetCookies(new Uri(url)).Cast <Cookie>();
                bool noCookies = true;

                if (prevCookies.Count() > 0)
                {
                    noCookies = this.CookiesExpired(prevCookies);
                }

                if (noCookies)
                {
                    try {
                        var sessionConfigBuilder = new SessionConfigUrlBuilder(this.restGrammar, this.sscGrammar);
                        var taskFlow             = new GetPublicKeyTasks(this.credentials, sessionConfigBuilder, this.sscGrammar, this.httpClient);

                        response = await RestApiCallFlow.LoadRequestFromNetworkFlow(this.sessionConfig, taskFlow, cancelToken);

                        IEnumerable <Cookie> newCookies = this.cookies.GetCookies(new Uri(url)).Cast <Cookie>();
                        Debug.WriteLine(newCookies.ToString());
                    } catch (ObjectDisposedException) {
                        // CancellationToken.ThrowIfCancellationRequested()
                        throw;
                    } catch (OperationCanceledException) {
                        // CancellationToken.ThrowIfCancellationRequested()
                        // and TaskCanceledException
                        throw;
                    } catch (SitecoreMobileSdkException ex) {
                        // throw unwrapped exception as if GetPublicKeyAsync() is an atomic phase
                        throw new RsaHandshakeException("[Sitecore Mobile SDK] ASPXAUTH not received properly", ex.InnerException);
                    } catch (Exception ex) {
                        throw new RsaHandshakeException("[Sitecore Mobile SDK] ASPXAUTH not received properly", ex);
                    }
                }
                else
                {
                    response = new ScAuthResponse("200");
                }
            }

            return(response);
        }
        public async Task <Stream> DownloadMediaResourceAsync(IMediaResourceDownloadRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            IMediaResourceDownloadRequest requestCopy = request.DeepCopyReadMediaRequest();

            await this.GetPublicKeyAsync(cancelToken);

            IMediaResourceDownloadRequest autocompletedRequest = this.requestMerger.FillReadMediaItemGaps(requestCopy);

            MediaItemUrlBuilder urlBuilder = new MediaItemUrlBuilder(
                this.restGrammar,
                this.sscGrammar,
                this.sessionConfig,
                this.mediaSettings,
                autocompletedRequest.ItemSource);

            var taskFlow = new GetResourceTask(urlBuilder, this.httpClient);

            return(await RestApiCallFlow.LoadResourceFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken));
        }
Exemple #14
0
        public async Task <UTResponse> CompleteCurrentInteractionAsync(CancellationToken cancelToken = default(CancellationToken))
        {
            if (this.InteractionNotExists())
            {
                return(new UTResponse(400, "No active interaction found", null));
            }

            ICompleteInteractionRequest request = new CompleteInteractionParameters(this.sessionConfig);

            var urlBuilder = new CompleteInteractionUrlBuilder <ICompleteInteractionRequest>(this.utGrammar);
            var taskFlow   = new CompleteInteractionTask(urlBuilder, this.httpClient);

            var response = await RestApiCallFlow.LoadRequestFromNetworkFlow(request, taskFlow, cancelToken);

            if (response.Successful)
            {
                this.sessionConfig = new UTSessionConfig(this.sessionConfig.InstanceUrl);
            }

            return(response);
        }
Exemple #15
0
        public async Task <UTResponse> TrackInteractionAsync(ITrackInteractionRequest request, CancellationToken cancelToken)
        {
            BaseValidator.CheckNullAndThrow(request, this.GetType().Name + ".request");

            ITrackInteractionRequest requestCopy = request.DeepCopyTrackInteractionRequest();

            ITrackInteractionRequest autocompletedRequest = this.requestMerger.FillTrackInteractionGaps(requestCopy);

            var urlBuilder = new TrackInteractionUrlBuilder <ITrackInteractionRequest>(this.utGrammar);
            var taskFlow   = new TrackInteractionTask(urlBuilder, this.httpClient);

            var response = await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken);

            if (response.Successful)
            {
                //@igk order matters
                this.sessionConfig = new UTSessionConfig(this.sessionConfig.InstanceUrl, response.Description);
                this.requestMerger = new UserRequestMerger(this.sessionConfig, this.defaultDeviceIdentifier);
            }

            return(response);
        }
Exemple #16
0
        public async Task <UTResponse> TrackDownloadEventAsync(ITrackDownloadRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            BaseValidator.CheckNullAndThrow(request, this.GetType().Name + ".DownloadRequest");

            ITrackDownloadRequest requestCopy = request.DeepCopyTrackDownloadRequest();

            ITrackDownloadRequest autocompletedRequest = this.requestMerger.FillTrackDownloadGaps(requestCopy);

            //FIXME: @igk
            if (this.InteractionNotExists())
            {
                return(await this.CreateInteractionAndSentEventAsync(request.Download, cancelToken));
            }

            var urlBuilder = new TrackEventUrlBuilder <ITrackDownloadRequest>(this.utGrammar);
            var taskFlow   = new TrackDownloadTask(urlBuilder, this.httpClient);

            var response = await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken);

            this.CheckResponseForValidInteraction(response);

            return(response);
        }