Search in sources :

Example 1 with Base64Url

use of com.azure.android.core.util.Base64Url in project azure-sdk-for-android by Azure.

the class MockHttpClient method send.

@Override
public void send(HttpRequest request, CancellationToken cancellationToken, HttpCallback httpCallback) {
    HttpResponse response = null;
    try {
        final URL requestUrl = request.getUrl();
        final String requestHost = requestUrl.getHost();
        final String contentType = request.getHeaders().getValue("Content-Type");
        if ("localhost".equalsIgnoreCase(requestHost)) {
            final String requestPath = requestUrl.getPath();
            final String requestPathLower = requestPath.toLowerCase();
            if (requestPathLower.startsWith("/anything")) {
                if ("HEAD".equals(request.getHttpMethod().name())) {
                    response = new MockHttpResponse(request, 200, new byte[0]);
                } else {
                    final HttpBinJSON json = new HttpBinJSON();
                    json.url(cleanseUrl(requestUrl));
                    json.headers(toMap(request.getHeaders()));
                    response = new MockHttpResponse(request, 200, json);
                }
            } else if (requestPathLower.startsWith("/bytes/")) {
                final String byteCountString = requestPath.substring("/bytes/".length());
                final int byteCount = Integer.parseInt(byteCountString);
                HttpHeaders newHeaders = new HttpHeaders(RESPONSE_HEADERS).put("Content-Type", "application/octet-stream").put("Content-Length", Integer.toString(byteCount));
                response = new MockHttpResponse(request, 200, newHeaders, byteCount == 0 ? null : new byte[byteCount]);
            } else if (requestPathLower.startsWith("/base64urlbytes/")) {
                final String byteCountString = requestPath.substring("/base64urlbytes/".length());
                final int byteCount = Integer.parseInt(byteCountString);
                final byte[] bytes = new byte[byteCount];
                for (int i = 0; i < byteCount; ++i) {
                    bytes[i] = (byte) i;
                }
                final Base64Url base64EncodedBytes = bytes.length == 0 ? null : Base64Url.encode(bytes);
                response = new MockHttpResponse(request, 200, RESPONSE_HEADERS, base64EncodedBytes);
            } else if (requestPathLower.equals("/base64urllistofbytes")) {
                final List<String> base64EncodedBytesList = new ArrayList<>();
                for (int i = 0; i < 3; ++i) {
                    final int byteCount = (i + 1) * 10;
                    final byte[] bytes = new byte[byteCount];
                    for (int j = 0; j < byteCount; ++j) {
                        bytes[j] = (byte) j;
                    }
                    base64EncodedBytesList.add(Base64Url.encode(bytes).toString());
                }
                response = new MockHttpResponse(request, 200, RESPONSE_HEADERS, base64EncodedBytesList);
            } else if (requestPathLower.equals("/base64urllistoflistofbytes")) {
                final List<List<String>> result = new ArrayList<>();
                for (int i = 0; i < 2; ++i) {
                    final List<String> innerList = new ArrayList<>();
                    for (int j = 0; j < (i + 1) * 2; ++j) {
                        final int byteCount = (j + 1) * 5;
                        final byte[] bytes = new byte[byteCount];
                        for (int k = 0; k < byteCount; ++k) {
                            bytes[k] = (byte) k;
                        }
                        innerList.add(Base64Url.encode(bytes).toString());
                    }
                    result.add(innerList);
                }
                response = new MockHttpResponse(request, 200, RESPONSE_HEADERS, result);
            } else if (requestPathLower.equals("/base64urlmapofbytes")) {
                final Map<String, String> result = new HashMap<>();
                for (int i = 0; i < 2; ++i) {
                    final String key = Integer.toString(i);
                    final int byteCount = (i + 1) * 10;
                    final byte[] bytes = new byte[byteCount];
                    for (int j = 0; j < byteCount; ++j) {
                        bytes[j] = (byte) j;
                    }
                    result.put(key, Base64Url.encode(bytes).toString());
                }
                response = new MockHttpResponse(request, 200, RESPONSE_HEADERS, result);
            } else if (requestPathLower.equals("/datetimerfc1123")) {
                final DateTimeRfc1123 now = new DateTimeRfc1123(OffsetDateTime.ofInstant(Instant.ofEpochSecond(0), ZoneOffset.UTC));
                response = new MockHttpResponse(request, 200, RESPONSE_HEADERS, now.toString());
            } else if (requestPathLower.equals("/unixtime")) {
                response = new MockHttpResponse(request, 200, RESPONSE_HEADERS, 0);
            } else if (requestPathLower.equals("/delete")) {
                final HttpBinJSON json = new HttpBinJSON();
                json.url(cleanseUrl(requestUrl));
                json.data(createHttpBinResponseDataForRequest(request));
                response = new MockHttpResponse(request, 200, json);
            } else if (requestPathLower.equals("/get")) {
                final HttpBinJSON json = new HttpBinJSON();
                json.url(cleanseUrl(requestUrl));
                json.headers(toMap(request.getHeaders()));
                response = new MockHttpResponse(request, 200, json);
            } else if (requestPathLower.equals("/patch")) {
                final HttpBinJSON json = new HttpBinJSON();
                json.url(cleanseUrl(requestUrl));
                json.data(createHttpBinResponseDataForRequest(request));
                response = new MockHttpResponse(request, 200, json);
            } else if (requestPathLower.equals("/post")) {
                if (contentType != null && contentType.contains("x-www-form-urlencoded")) {
                    Map<String, String> parsed = bodyToMap(request);
                    final HttpBinFormDataJSON json = new HttpBinFormDataJSON();
                    HttpBinFormDataJSON.Form form = new HttpBinFormDataJSON.Form();
                    form.customerName(parsed.get("custname"));
                    form.customerEmail(parsed.get("custemail"));
                    form.customerTelephone(parsed.get("custtel"));
                    form.pizzaSize(HttpBinFormDataJSON.PizzaSize.valueOf(parsed.get("size")));
                    form.toppings(Arrays.asList(parsed.get("toppings").split(",")));
                    json.form(form);
                    response = new MockHttpResponse(request, 200, RESPONSE_HEADERS, json);
                } else {
                    final HttpBinJSON json = new HttpBinJSON();
                    json.url(cleanseUrl(requestUrl));
                    json.data(createHttpBinResponseDataForRequest(request));
                    json.headers(toMap(request.getHeaders()));
                    response = new MockHttpResponse(request, 200, json);
                }
            } else if (requestPathLower.equals("/put")) {
                final HttpBinJSON json = new HttpBinJSON();
                json.url(cleanseUrl(requestUrl));
                json.data(createHttpBinResponseDataForRequest(request));
                json.headers(toMap(request.getHeaders()));
                response = new MockHttpResponse(request, 200, RESPONSE_HEADERS, json);
            } else if (requestPathLower.startsWith("/status/")) {
                final String statusCodeString = requestPathLower.substring("/status/".length());
                final int statusCode = Integer.parseInt(statusCodeString);
                response = new MockHttpResponse(request, statusCode);
            }
        } else if ("echo.org".equalsIgnoreCase(requestHost)) {
            response = new MockHttpResponse(request, 200, new HttpHeaders(request.getHeaders()), request.getBody());
        }
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
    if (response == null) {
        response = new MockHttpResponse(request, 500);
    }
    httpCallback.onSuccess(response);
}
Also used : HttpHeaders(com.azure.android.core.http.HttpHeaders) HttpBinFormDataJSON(com.azure.android.core.test.implementation.entities.HttpBinFormDataJSON) ArrayList(java.util.ArrayList) HttpResponse(com.azure.android.core.http.HttpResponse) URL(java.net.URL) Base64Url(com.azure.android.core.util.Base64Url) DateTimeRfc1123(com.azure.android.core.util.DateTimeRfc1123) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map) HttpBinJSON(com.azure.android.core.test.implementation.entities.HttpBinJSON)

Example 2 with Base64Url

use of com.azure.android.core.util.Base64Url in project azure-sdk-for-android by Azure.

the class HttpResponseMapper method decodeContent.

private Object decodeContent(final Object encodedContent, final Type encodedType, final Type decodeType) {
    if (decodeType == byte[].class) {
        if (encodedType == Base64Url.class) {
            return ((Base64Url) encodedContent).decodedBytes();
        }
    } else if (decodeType == OffsetDateTime.class) {
        if (encodedType == DateTimeRfc1123.class) {
            return ((DateTimeRfc1123) encodedContent).getDateTime();
        } else if (encodedType == UnixTime.class) {
            return ((UnixTime) encodedContent).getDateTime();
        }
    } else if (TypeUtil.isTypeOrSubTypeOf(decodeType, List.class)) {
        final Type decodeElementType = TypeUtil.getTypeArgument(decodeType);
        @SuppressWarnings("unchecked") final List<Object> list = (List<Object>) encodedContent;
        final int size = list.size();
        for (int i = 0; i < size; ++i) {
            final Object encodedElement = list.get(i);
            final Object decodedElement = decodeContent(encodedElement, encodedType, decodeElementType);
            if (encodedElement != decodedElement) {
                list.set(i, decodedElement);
            }
        }
        return list;
    } else if (TypeUtil.isTypeOrSubTypeOf(decodeType, Map.class)) {
        final Type decodeValueType = TypeUtil.getTypeArguments(decodeType)[1];
        @SuppressWarnings("unchecked") final Map<String, Object> map = (Map<String, Object>) encodedContent;
        final Set<Map.Entry<String, Object>> encodedEntries = map.entrySet();
        for (Map.Entry<String, Object> encodedEntry : encodedEntries) {
            final Object encodedValue = encodedEntry.getValue();
            final Object decodedValue = decodeContent(encodedValue, encodedType, decodeValueType);
            if (encodedValue != decodedValue) {
                map.put(encodedEntry.getKey(), decodedValue);
            }
        }
        return map;
    }
    return encodedContent;
}
Also used : Set(java.util.Set) BitSet(java.util.BitSet) Base64Url(com.azure.android.core.util.Base64Url) UnexpectedResponseExceptionType(com.azure.android.core.rest.annotation.UnexpectedResponseExceptionType) ReturnValueWireType(com.azure.android.core.rest.annotation.ReturnValueWireType) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) UnixTime(com.azure.android.core.util.UnixTime) OffsetDateTime(org.threeten.bp.OffsetDateTime) DateTimeRfc1123(com.azure.android.core.util.DateTimeRfc1123) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 3 with Base64Url

use of com.azure.android.core.util.Base64Url in project azure-sdk-for-android by Azure.

the class HttpResponseMapper method map.

Response<?> map(HttpResponse httpResponse, JacksonSerder jacksonSerder) throws Throwable {
    if (!isExpectedStatusCode(httpResponse.getStatusCode())) {
        final HttpResponseExceptionInfo exceptionInfo = getExceptionInfo(httpResponse.getStatusCode());
        throw logger.logThrowableAsError((exceptionInfo.instantiateException(jacksonSerder, httpResponse, logger)));
    } else {
        Object headerObject = null;
        if (this.headerDecodeType != null) {
            try {
                headerObject = jacksonSerder.deserialize(httpResponse.getHeaders().toMap(), headerDecodeType);
            } catch (IOException ioe) {
                throw logger.logExceptionAsError(new HttpResponseException("HTTP response has malformed headers", httpResponse, ioe));
            }
        }
        if (isBooleanResponseForHead(httpResponse)) {
            final boolean isSuccess = (httpResponse.getStatusCode() / 100) == 2;
            httpResponse.close();
            return instantiateResponse(this.responseCtr, this.responseCtrParamCount, httpResponse.getRequest(), httpResponse, headerObject, isSuccess);
        } else if (TypeUtil.isTypeOrSubTypeOf(this.contentDecodeType, Void.class)) {
            httpResponse.close();
            return instantiateResponse(this.responseCtr, this.responseCtrParamCount, httpResponse.getRequest(), httpResponse, headerObject, null);
        } else if (TypeUtil.isTypeOrSubTypeOf(this.contentDecodeType, InputStream.class)) {
            return instantiateResponse(this.responseCtr, this.responseCtrParamCount, httpResponse.getRequest(), httpResponse, headerObject, httpResponse.getBody());
        } else if (TypeUtil.isTypeOrSubTypeOf(this.contentDecodeType, byte[].class)) {
            if (this.contentEncodedType == Base64Url.class) {
                final byte[] encodedContent = httpResponse.getBodyAsByteArray();
                final byte[] decodedContent = new Base64Url(encodedContent).decodedBytes();
                return instantiateResponse(this.responseCtr, this.responseCtrParamCount, httpResponse.getRequest(), httpResponse, headerObject, decodedContent);
            } else {
                return instantiateResponse(this.responseCtr, this.responseCtrParamCount, httpResponse.getRequest(), httpResponse, headerObject, httpResponse.getBodyAsByteArray());
            }
        } else if (this.contentEncodedType == null) {
            final Object decodedContent = deserializeHttpBody(jacksonSerder, httpResponse, this.contentDecodeType);
            return instantiateResponse(this.responseCtr, this.responseCtrParamCount, httpResponse.getRequest(), httpResponse, headerObject, decodedContent);
        } else {
            Objects.requireNonNull(this.contentEncodedType);
            if (TypeUtil.isTypeOrSubTypeOf(this.contentEncodedType, Page.class)) {
                final Type pageType = (this.contentEncodedType == Page.class) ? TypeUtil.createParameterizedType(ItemPage.class, this.contentDecodeType) : this.contentEncodedType;
                final Object decodedContent = deserializeHttpBody(jacksonSerder, httpResponse, pageType);
                return instantiateResponse(this.responseCtr, this.responseCtrParamCount, httpResponse.getRequest(), httpResponse, headerObject, decodedContent);
            } else {
                Objects.requireNonNull(this.expandedContentEncodedType);
                final Object encodedContent = deserializeHttpBody(jacksonSerder, httpResponse, this.expandedContentEncodedType);
                final Object decodedContent = decodeContent(encodedContent, this.contentEncodedType, this.contentDecodeType);
                return instantiateResponse(this.responseCtr, this.responseCtrParamCount, httpResponse.getRequest(), httpResponse, headerObject, decodedContent);
            }
        }
    }
}
Also used : UnexpectedResponseExceptionType(com.azure.android.core.rest.annotation.UnexpectedResponseExceptionType) ReturnValueWireType(com.azure.android.core.rest.annotation.ReturnValueWireType) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) ItemPage(com.azure.android.core.rest.implementation.ItemPage) HttpResponseExceptionInfo(com.azure.android.core.rest.implementation.HttpResponseExceptionInfo) HttpResponseException(com.azure.android.core.http.exception.HttpResponseException) IOException(java.io.IOException) Base64Url(com.azure.android.core.util.Base64Url)

Aggregations

Base64Url (com.azure.android.core.util.Base64Url)3 ReturnValueWireType (com.azure.android.core.rest.annotation.ReturnValueWireType)2 UnexpectedResponseExceptionType (com.azure.android.core.rest.annotation.UnexpectedResponseExceptionType)2 DateTimeRfc1123 (com.azure.android.core.util.DateTimeRfc1123)2 ParameterizedType (java.lang.reflect.ParameterizedType)2 Type (java.lang.reflect.Type)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 List (java.util.List)2 Map (java.util.Map)2 HttpHeaders (com.azure.android.core.http.HttpHeaders)1 HttpResponse (com.azure.android.core.http.HttpResponse)1 HttpResponseException (com.azure.android.core.http.exception.HttpResponseException)1 HttpResponseExceptionInfo (com.azure.android.core.rest.implementation.HttpResponseExceptionInfo)1 ItemPage (com.azure.android.core.rest.implementation.ItemPage)1 HttpBinFormDataJSON (com.azure.android.core.test.implementation.entities.HttpBinFormDataJSON)1 HttpBinJSON (com.azure.android.core.test.implementation.entities.HttpBinJSON)1 UnixTime (com.azure.android.core.util.UnixTime)1 IOException (java.io.IOException)1 URL (java.net.URL)1