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)); }
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); }
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); }
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); }