Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
// Copyright (c) Microsoft Corporation.
// All rights reserved.
//
// This code is licensed under the MIT License.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files(the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
package com.microsoft.aad.adal4j;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSocketFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.Proxy;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
import com.nimbusds.oauth2.sdk.ParseException;
import com.nimbusds.oauth2.sdk.http.CommonContentTypes;
import com.nimbusds.oauth2.sdk.http.HTTPRequest;
import com.nimbusds.oauth2.sdk.http.HTTPResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class AdalOAuthRequest extends HTTPRequest {
private final Map extraHeaderParams;
private final Logger log = LoggerFactory.getLogger(AdalOAuthRequest.class);
private final Proxy proxy;
private final SSLSocketFactory sslSocketFactory;
/**
*
* @param method
* @param url
*/
AdalOAuthRequest(final Method method, final URL url,
final Map extraHeaderParams, final Proxy proxy,
final SSLSocketFactory sslSocketFactory) {
super(method, url);
this.extraHeaderParams = extraHeaderParams;
this.proxy = proxy;
this.sslSocketFactory = sslSocketFactory;
}
Map getReadOnlyExtraHeaderParameters() {
return Collections.unmodifiableMap(this.extraHeaderParams);
}
/**
*
*/
@Override
public HTTPResponse send() throws IOException {
final HttpsURLConnection conn = HttpHelper.openConnection(this.getURL(),
this.proxy, this.sslSocketFactory);
this.configureHeaderAndExecuteOAuthCall(conn);
final String out = this.processAndReadResponse(conn);
HttpHelper.verifyReturnedCorrelationId(log, conn,
this.extraHeaderParams
.get(ClientDataHttpHeaders.CORRELATION_ID_HEADER_NAME));
return createResponse(conn, out);
}
HTTPResponse createResponse(final HttpURLConnection conn, final String out)
throws IOException {
final HTTPResponse response = new HTTPResponse(conn.getResponseCode());
final String location = conn.getHeaderField("Location");
if (!StringHelper.isBlank(location)) {
try {
response.setLocation(new URI(location));
} catch (URISyntaxException e) {
throw new IOException("Invalid location URI " + location, e);
}
}
try {
response.setContentType(conn.getContentType());
}
catch (final ParseException e) {
throw new IOException("Couldn't parse Content-Type header: "
+ e.getMessage(), e);
}
response.setCacheControl(conn.getHeaderField("Cache-Control"));
response.setPragma(conn.getHeaderField("Pragma"));
response.setWWWAuthenticate(conn.getHeaderField("WWW-Authenticate"));
if (!StringHelper.isBlank(out)) {
response.setContent(out);
}
return response;
}
void configureHeaderAndExecuteOAuthCall(final HttpsURLConnection conn)
throws IOException {
if (this.getAuthorization() != null) {
conn.setRequestProperty("Authorization", this.getAuthorization());
}
Map params = new java.util.HashMap<>();
if (this.extraHeaderParams != null && !this.extraHeaderParams.isEmpty()) {
for (java.util.Map.Entry entry : this.extraHeaderParams
.entrySet()) {
if (entry.getValue() == null || entry.getValue().isEmpty()) {
continue;
}
params.put(entry.getKey(), entry.getValue());
}
}
HttpHelper.configureAdditionalHeaders(conn, params);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type",
CommonContentTypes.APPLICATION_URLENCODED.toString());
if (this.getQuery() != null) {
try(final OutputStreamWriter writer = new OutputStreamWriter(
conn.getOutputStream())) {
writer.write(getQuery());
writer.flush();
}
}
}
String processAndReadResponse(final HttpURLConnection conn)
throws IOException {
Reader inReader = null;
final int responseCode = conn.getResponseCode();
if (responseCode == 200) {
inReader = new InputStreamReader(conn.getInputStream());
}
else {
InputStream stream = conn.getErrorStream();
if (stream == null && responseCode == 404) {
stream = conn.getInputStream();
}
if (stream == null) {
stream = conn.getInputStream();
}
inReader = new InputStreamReader(stream);
}
final BufferedReader reader = new BufferedReader(inReader);
final char[] buffer = new char[256];
final StringBuilder out = new StringBuilder();
try {
for (;;) {
final int rsz = reader.read(buffer, 0, buffer.length);
if (rsz < 0) {
break;
}
out.append(buffer, 0, rsz);
}
}
finally {
reader.close();
}
return out.toString();
}
}