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