コード例 #1
0
        public void TestParseCorrectData()
        {
            var response = "{\"statusCode\":200,\"result\":{}}";
            WebApiJsonStatusMessage message = AuthenticateResponseParser.ParseResponse(response, CancellationToken.None);

            Assert.AreEqual(200, message.StatusCode);
        }
コード例 #2
0
        public void TestParseDeniedResponseData()
        {
            var response = "{\"statusCode\":401,\"error\":{\"message\":\"Access to site is not granted.\"}}";
            WebApiJsonStatusMessage message = AuthenticateResponseParser.ParseResponse(response, CancellationToken.None);

            Assert.AreEqual(401, message.StatusCode);
            Assert.AreEqual("Access to site is not granted.", message.Message);
        }
コード例 #3
0
        public static ScItemsResponse Parse(string responseString, CancellationToken cancelToken)
        {
            if (string.IsNullOrEmpty(responseString))
            {
                throw new ArgumentException("response cannot null or empty");
            }

            JObject response = JObject.Parse(responseString);

            int  statusCode       = ScItemsParser.ParseOrFail <int>(response, "$.statusCode");
            bool isSuccessfulCode = (200 <= statusCode) && (statusCode <= 299);

            if (!isSuccessfulCode)
            {
                var error = new WebApiJsonStatusMessage(statusCode, ParseOrFail <string>(response, "$.error.message"));
                throw new WebApiJsonErrorException(error);
            }

            int totalCount  = ParseOrFail <int>(response, "$.result.totalCount");
            int resultCount = ParseOrFail <int>(response, "$.result.resultCount");

            var responseItems = response.SelectToken("$.result.items");
            var items         = new List <ISitecoreItem>();

            foreach (JObject item in responseItems)
            {
                cancelToken.ThrowIfCancellationRequested();

                var source = ParseItemSource(item);

                var displayName = (string)item.GetValue("DisplayName");
                var hasChildren = (bool)item.GetValue("HasChildren");
                var id          = (string)item.GetValue("ID");
                var longId      = (string)item.GetValue("LongID");
                var path        = (string)item.GetValue("Path");
                var template    = (string)item.GetValue("Template");

                JObject       fieldsJSON   = (JObject)item.GetValue("Fields");
                List <IField> fields       = ScFieldsParser.ParseFieldsData(fieldsJSON, cancelToken);
                var           fieldsByName = new Dictionary <string, IField>(fields.Count);
                foreach (IField singleField in fields)
                {
                    cancelToken.ThrowIfCancellationRequested();

                    string lowercaseName = singleField.Name.ToLowerInvariant();
                    fieldsByName[lowercaseName] = singleField;
                }


                ScItem newItem = new ScItem(source, displayName, hasChildren, id, longId, path, template, fieldsByName);
                items.Add(newItem);
            }
            return(new ScItemsResponse(totalCount, resultCount, items));
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        public static ScDeleteItemsResponse ParseResponse(string response, CancellationToken token)
        {
            if (string.IsNullOrEmpty(response))
            {
                throw new ArgumentException("response shouldn't be empty or null");
            }

            token.ThrowIfCancellationRequested();

            JObject responseJObject = JObject.Parse(response);
            var     statusCode      = (int)responseJObject.SelectToken("statusCode");

            bool isSuccessfulCode = (200 <= statusCode) && (statusCode <= 299);

            if (!isSuccessfulCode)
            {
                var error = new WebApiJsonStatusMessage(statusCode, ParseOrFail <string>(responseJObject, "$.error.message"));
                throw new WebApiJsonErrorException(error);
            }

            var count = (int)responseJObject.SelectToken("$.result.count");

            var responseItems = responseJObject.SelectToken("$.result.itemIds");
            var itemsIds      = new List <string>();

            foreach (JValue itemId in responseItems)
            {
                token.ThrowIfCancellationRequested();

                string itemIdString = itemId.Value <string>();
                itemsIds.Add(itemIdString);
            }

            if (itemsIds.Count != count)
            {
                throw new ParserException("[DELETE RESPONSE] Inconsistent items count in JSON response ");
            }

            return(new ScDeleteItemsResponse(itemsIds));
        }
コード例 #6
0
        public static string Parse(string responseString, CancellationToken cancelToken)
        {
            if (string.IsNullOrEmpty(responseString))
            {
                throw new ArgumentException("response cannot null or empty");
            }

            cancelToken.ThrowIfCancellationRequested();
            JObject response = JObject.Parse(responseString);

            cancelToken.ThrowIfCancellationRequested();
            int  statusCode       = ParseOrFail <int>(response, "$.statusCode");
            bool isSuccessfulCode = (200 <= statusCode) && (statusCode <= 299);

            if (!isSuccessfulCode)
            {
                var error = new WebApiJsonStatusMessage(statusCode, ParseOrFail <string>(response, "$.error.message"));
                throw new WebApiJsonErrorException(error);
            }

            cancelToken.ThrowIfCancellationRequested();
            return(ParseOrFail <string>(response, "$.result"));
        }