use of org.wso2.transport.http.netty.config.Parameter in project ballerina by ballerina-lang.
the class CreateHttpClient method populateSenderConfigurationOptions.
private void populateSenderConfigurationOptions(SenderConfiguration senderConfiguration, Struct clientEndpointConfig) {
ProxyServerConfiguration proxyServerConfiguration = null;
boolean followRedirect = false;
int maxRedirectCount = DEFAULT_MAX_REDIRECT_COUNT;
Struct followRedirects = clientEndpointConfig.getStructField(HttpConstants.FOLLOW_REDIRECT_STRUCT_REFERENCE);
if (followRedirects != null) {
followRedirect = followRedirects.getBooleanField(HttpConstants.FOLLOW_REDIRECT_ENABLED);
maxRedirectCount = (int) followRedirects.getIntField(HttpConstants.FOLLOW_REDIRECT_MAXCOUNT);
}
Struct secureSocket = null;
Value[] targetServices = clientEndpointConfig.getArrayField(HttpConstants.TARGET_SERVICES);
for (Value targetService : targetServices) {
secureSocket = targetService.getStructValue().getStructField(HttpConstants.ENDPOINT_CONFIG_SECURE_SOCKET);
if (secureSocket != null) {
Struct trustStore = secureSocket.getStructField(HttpConstants.ENDPOINT_CONFIG_TRUST_STORE);
Struct keyStore = secureSocket.getStructField(HttpConstants.ENDPOINT_CONFIG_KEY_STORE);
Struct protocols = secureSocket.getStructField(HttpConstants.ENDPOINT_CONFIG_PROTOCOLS);
Struct validateCert = secureSocket.getStructField(HttpConstants.ENDPOINT_CONFIG_VALIDATE_CERT);
List<Parameter> clientParams = new ArrayList<>();
if (trustStore != null) {
String trustStoreFile = trustStore.getStringField(HttpConstants.FILE_PATH);
if (StringUtils.isNotBlank(trustStoreFile)) {
senderConfiguration.setTrustStoreFile(trustStoreFile);
}
String trustStorePassword = trustStore.getStringField(HttpConstants.PASSWORD);
if (StringUtils.isNotBlank(trustStorePassword)) {
senderConfiguration.setTrustStorePass(trustStorePassword);
}
}
if (keyStore != null) {
String keyStoreFile = keyStore.getStringField(HttpConstants.FILE_PATH);
if (StringUtils.isNotBlank(keyStoreFile)) {
senderConfiguration.setKeyStoreFile(keyStoreFile);
}
String keyStorePassword = keyStore.getStringField(HttpConstants.PASSWORD);
if (StringUtils.isNotBlank(keyStorePassword)) {
senderConfiguration.setKeyStorePassword(keyStorePassword);
}
}
if (protocols != null) {
String sslEnabledProtocols = protocols.getStringField(HttpConstants.ENABLED_PROTOCOLS);
if (StringUtils.isNotBlank(sslEnabledProtocols)) {
Parameter clientProtocols = new Parameter(HttpConstants.SSL_ENABLED_PROTOCOLS, sslEnabledProtocols);
clientParams.add(clientProtocols);
}
String sslProtocol = protocols.getStringField(HttpConstants.PROTOCOL_VERSION);
if (StringUtils.isNotBlank(sslProtocol)) {
senderConfiguration.setSSLProtocol(sslProtocol);
}
}
if (validateCert != null) {
boolean validateCertEnabled = validateCert.getBooleanField(HttpConstants.ENABLE);
int cacheSize = (int) validateCert.getIntField(HttpConstants.SSL_CONFIG_CACHE_SIZE);
int cacheValidityPeriod = (int) validateCert.getIntField(HttpConstants.SSL_CONFIG_CACHE_VALIDITY_PERIOD);
senderConfiguration.setValidateCertEnabled(validateCertEnabled);
if (cacheValidityPeriod != 0) {
senderConfiguration.setCacheValidityPeriod(cacheValidityPeriod);
}
if (cacheSize != 0) {
senderConfiguration.setCacheSize(cacheSize);
}
}
boolean hostNameVerificationEnabled = secureSocket.getBooleanField(HttpConstants.SSL_CONFIG_HOST_NAME_VERIFICATION_ENABLED);
senderConfiguration.setHostNameVerificationEnabled(hostNameVerificationEnabled);
String ciphers = secureSocket.getStringField(HttpConstants.SSL_CONFIG_CIPHERS);
if (StringUtils.isNotBlank(ciphers)) {
Parameter clientCiphers = new Parameter(HttpConstants.CIPHERS, ciphers);
clientParams.add(clientCiphers);
}
String enableSessionCreation = String.valueOf(secureSocket.getBooleanField(HttpConstants.SSL_CONFIG_ENABLE_SESSION_CREATION));
Parameter clientEnableSessionCreation = new Parameter(HttpConstants.SSL_CONFIG_ENABLE_SESSION_CREATION, enableSessionCreation);
clientParams.add(clientEnableSessionCreation);
if (!clientParams.isEmpty()) {
senderConfiguration.setParameters(clientParams);
}
}
}
Struct proxy = clientEndpointConfig.getStructField(HttpConstants.PROXY_STRUCT_REFERENCE);
if (proxy != null) {
String proxyHost = proxy.getStringField(HttpConstants.PROXY_HOST);
int proxyPort = (int) proxy.getIntField(HttpConstants.PROXY_PORT);
String proxyUserName = proxy.getStringField(HttpConstants.PROXY_USERNAME);
String proxyPassword = proxy.getStringField(HttpConstants.PROXY_PASSWORD);
try {
proxyServerConfiguration = new ProxyServerConfiguration(proxyHost, proxyPort);
} catch (UnknownHostException e) {
throw new BallerinaConnectorException("Failed to resolve host" + proxyHost, e);
}
if (!proxyUserName.isEmpty()) {
proxyServerConfiguration.setProxyUsername(proxyUserName);
}
if (!proxyPassword.isEmpty()) {
proxyServerConfiguration.setProxyPassword(proxyPassword);
}
senderConfiguration.setProxyServerConfiguration(proxyServerConfiguration);
}
senderConfiguration.setFollowRedirect(followRedirect);
senderConfiguration.setMaxRedirectCount(maxRedirectCount);
// For the moment we don't have to pass it down to transport as we only support
// chunking. Once we start supporting gzip, deflate, etc, we need to parse down the config.
String transferEncoding = clientEndpointConfig.getEnumField(HttpConstants.CLIENT_EP_TRNASFER_ENCODING);
if (transferEncoding != null && !HttpConstants.ANN_CONFIG_ATTR_CHUNKING.equalsIgnoreCase(transferEncoding)) {
throw new BallerinaConnectorException("Unsupported configuration found for Transfer-Encoding : " + transferEncoding);
}
String chunking = clientEndpointConfig.getEnumField(HttpConstants.CLIENT_EP_CHUNKING);
senderConfiguration.setChunkingConfig(HttpUtil.getChunkConfig(chunking));
long endpointTimeout = clientEndpointConfig.getIntField(HttpConstants.CLIENT_EP_ENDPOINT_TIMEOUT);
if (endpointTimeout < 0 || !isInteger(endpointTimeout)) {
throw new BallerinaConnectorException("invalid idle timeout: " + endpointTimeout);
}
senderConfiguration.setSocketIdleTimeout((int) endpointTimeout);
boolean isKeepAlive = clientEndpointConfig.getBooleanField(HttpConstants.CLIENT_EP_IS_KEEP_ALIVE);
senderConfiguration.setKeepAlive(isKeepAlive);
String httpVersion = clientEndpointConfig.getStringField(HttpConstants.CLIENT_EP_HTTP_VERSION);
if (httpVersion != null) {
senderConfiguration.setHttpVersion(httpVersion);
}
String forwardedExtension = clientEndpointConfig.getStringField(HttpConstants.CLIENT_EP_FORWARDED);
senderConfiguration.setForwardedExtensionConfig(HttpUtil.getForwardedExtensionConfig(forwardedExtension));
}
use of org.wso2.transport.http.netty.config.Parameter in project ballerina by ballerina-lang.
the class InitEndpoint method setSslConfig.
private ListenerConfiguration setSslConfig(Struct sslConfig, ListenerConfiguration listenerConfiguration) {
listenerConfiguration.setScheme(HttpConstants.PROTOCOL_HTTPS);
Struct trustStore = sslConfig.getStructField(HttpConstants.ENDPOINT_CONFIG_TRUST_STORE);
Struct keyStore = sslConfig.getStructField(HttpConstants.ENDPOINT_CONFIG_KEY_STORE);
Struct protocols = sslConfig.getStructField(HttpConstants.ENDPOINT_CONFIG_PROTOCOLS);
Struct validateCert = sslConfig.getStructField(HttpConstants.ENDPOINT_CONFIG_VALIDATE_CERT);
if (keyStore != null) {
String keyStoreFile = keyStore.getStringField(HttpConstants.FILE_PATH);
String keyStorePassword = keyStore.getStringField(HttpConstants.PASSWORD);
if (StringUtils.isBlank(keyStoreFile)) {
// TODO get from language pack, and add location
throw new BallerinaConnectorException("Keystore location must be provided for secure connection");
}
if (StringUtils.isBlank(keyStorePassword)) {
// TODO get from language pack, and add location
throw new BallerinaConnectorException("Keystore password value must be provided for secure connection");
}
listenerConfiguration.setKeyStoreFile(keyStoreFile);
listenerConfiguration.setKeyStorePass(keyStorePassword);
}
String sslVerifyClient = sslConfig.getStringField(HttpConstants.SSL_CONFIG_SSL_VERIFY_CLIENT);
listenerConfiguration.setVerifyClient(sslVerifyClient);
if (trustStore != null) {
String trustStoreFile = trustStore.getStringField(HttpConstants.FILE_PATH);
String trustStorePassword = trustStore.getStringField(HttpConstants.PASSWORD);
if (StringUtils.isBlank(trustStoreFile) && StringUtils.isNotBlank(sslVerifyClient)) {
// TODO get from language pack, and add location
throw new BallerinaException("Truststore location must be provided to enable Mutual SSL");
}
if (StringUtils.isBlank(trustStorePassword) && StringUtils.isNotBlank(sslVerifyClient)) {
// TODO get from language pack, and add location
throw new BallerinaException("Truststore password value must be provided to enable Mutual SSL");
}
listenerConfiguration.setTrustStoreFile(trustStoreFile);
listenerConfiguration.setTrustStorePass(trustStorePassword);
}
List<Parameter> serverParamList = new ArrayList<>();
Parameter serverParameters;
if (protocols != null) {
String sslEnabledProtocols = protocols.getStringField(HttpConstants.ENABLED_PROTOCOLS);
String sslProtocol = protocols.getStringField(HttpConstants.PROTOCOL_VERSION);
if (StringUtils.isNotBlank(sslEnabledProtocols)) {
serverParameters = new Parameter(HttpConstants.ANN_CONFIG_ATTR_SSL_ENABLED_PROTOCOLS, sslEnabledProtocols);
serverParamList.add(serverParameters);
}
if (StringUtils.isNotBlank(sslProtocol)) {
listenerConfiguration.setSSLProtocol(sslProtocol);
}
}
String cipher = sslConfig.getStringField(HttpConstants.SSL_CONFIG_CIPHERS);
if (StringUtils.isNotBlank(cipher)) {
serverParameters = new Parameter(HttpConstants.ANN_CONFIG_ATTR_CIPHERS, cipher);
serverParamList.add(serverParameters);
}
if (validateCert != null) {
boolean validateCertificateEnabled = validateCert.getBooleanField(HttpConstants.ENABLE);
long cacheSize = validateCert.getIntField(HttpConstants.SSL_CONFIG_CACHE_SIZE);
long cacheValidationPeriod = validateCert.getIntField(HttpConstants.SSL_CONFIG_CACHE_VALIDITY_PERIOD);
listenerConfiguration.setValidateCertEnabled(validateCertificateEnabled);
if (validateCertificateEnabled) {
if (cacheSize != 0) {
listenerConfiguration.setCacheSize(Math.toIntExact(cacheSize));
}
if (cacheValidationPeriod != 0) {
listenerConfiguration.setCacheValidityPeriod(Math.toIntExact(cacheValidationPeriod));
}
}
}
listenerConfiguration.setTLSStoreType(HttpConstants.PKCS_STORE_TYPE);
String serverEnableSessionCreation = String.valueOf(sslConfig.getBooleanField(HttpConstants.SSL_CONFIG_ENABLE_SESSION_CREATION));
Parameter enableSessionCreationParam = new Parameter(HttpConstants.SSL_CONFIG_ENABLE_SESSION_CREATION, serverEnableSessionCreation);
serverParamList.add(enableSessionCreationParam);
if (!serverParamList.isEmpty()) {
listenerConfiguration.setParameters(serverParamList);
}
listenerConfiguration.setId(HttpUtil.getListenerInterface(listenerConfiguration.getHost(), listenerConfiguration.getPort()));
return listenerConfiguration;
}
use of org.wso2.transport.http.netty.config.Parameter in project ballerina by ballerina-lang.
the class UriMatrixParametersMatchTest method testErrorReportInURI.
@Test
public void testErrorReportInURI() {
// encoded URI
String path = "/hello/t2/john;age;color=white/foo;a=5;b=10";
HTTPTestRequest cMsg = MessageUtils.generateHTTPMessage(path, "GET");
HTTPCarbonMessage response = Services.invokeNew(application, TEST_EP, cMsg);
Assert.assertNotNull(response, "Response message not found");
Assert.assertEquals(response.getProperty(HttpConstants.HTTP_STATUS_CODE), 500, "Response code mismatch");
// checking the exception message
String errorMessage = StringUtils.getStringFromInputStream(new HttpMessageDataStreamer(response).getInputStream());
Assert.assertNotNull(errorMessage, "Message body null");
Assert.assertTrue(errorMessage.contains("found non-matrix parameter"), "Expected error not found.");
}
use of org.wso2.transport.http.netty.config.Parameter in project charon by wso2.
the class GroupResourceManager method create.
/*
* Create group in the service provider given the submitted payload that contains the SCIM group
* resource, format and the handler to usermanager.
*
* @param scimObjectString - Payload of HTTP request, which contains the SCIM object.
* @param usermanager
* @param attributes
* @param excludeAttributes
* @return
*/
@Override
public SCIMResponse create(String scimObjectString, UserManager userManager, String attributes, String excludeAttributes) {
JSONEncoder encoder = null;
JSONDecoder decoder = null;
try {
// obtain the json encoder
encoder = getEncoder();
// obtain the json decoder
decoder = getDecoder();
// returns core-group schema
SCIMResourceTypeSchema schema = SCIMResourceSchemaManager.getInstance().getGroupResourceSchema();
// get the URIs of required attributes which must be given a value
Map<String, Boolean> requiredAttributes = ResourceManagerUtil.getOnlyRequiredAttributesURIs((SCIMResourceTypeSchema) CopyUtil.deepCopy(schema), attributes, excludeAttributes);
// decode the SCIM group object, encoded in the submitted payload.
Group group = (Group) decoder.decodeResource(scimObjectString, schema, new Group());
// validate decoded group
ServerSideValidator.validateCreatedSCIMObject(group, SCIMSchemaDefinitions.SCIM_GROUP_SCHEMA);
// handover the SCIM User object to the group usermanager provided by the SP.
Group createdGroup;
// need to send back the newly created group in the response payload
createdGroup = ((UserManager) userManager).createGroup(group, requiredAttributes);
// encode the newly created SCIM group object and add id attribute to Location header.
String encodedGroup;
Map<String, String> httpHeaders = new HashMap<String, String>();
if (createdGroup != null) {
encodedGroup = encoder.encodeSCIMObject(createdGroup);
// add location header
httpHeaders.put(SCIMConstants.LOCATION_HEADER, getResourceEndpointURL(SCIMConstants.GROUP_ENDPOINT) + "/" + createdGroup.getId());
httpHeaders.put(SCIMConstants.CONTENT_TYPE_HEADER, SCIMConstants.APPLICATION_JSON);
} else {
String message = "Newly created Group resource is null..";
throw new InternalErrorException(message);
}
// put the uri of the Group object in the response header parameter.
return new SCIMResponse(ResponseCodeConstants.CODE_CREATED, encodedGroup, httpHeaders);
} catch (InternalErrorException e) {
return encodeSCIMException(e);
} catch (BadRequestException e) {
return encodeSCIMException(e);
} catch (ConflictException e) {
return encodeSCIMException(e);
} catch (CharonException e) {
return encodeSCIMException(e);
} catch (NotFoundException e) {
return encodeSCIMException(e);
} catch (NotImplementedException e) {
return encodeSCIMException(e);
}
}
use of org.wso2.transport.http.netty.config.Parameter in project charon by wso2.
the class GroupResourceManager method updateWithPUT.
/*
* method which corresponds to HTTP PUT - delete the group
* @param existingId
* @param scimObjectString
* @param usermanager
* @param attributes
* @param excludeAttributes
* @return
*/
@Override
public SCIMResponse updateWithPUT(String existingId, String scimObjectString, UserManager userManager, String attributes, String excludeAttributes) {
// needs to validate the incoming object. eg: id can not be set by the consumer.
JSONEncoder encoder = null;
JSONDecoder decoder = null;
try {
// obtain the json encoder
encoder = getEncoder();
// obtain the json decoder.
decoder = getDecoder();
SCIMResourceTypeSchema schema = SCIMResourceSchemaManager.getInstance().getGroupResourceSchema();
// get the URIs of required attributes which must be given a value
Map<String, Boolean> requiredAttributes = ResourceManagerUtil.getOnlyRequiredAttributesURIs((SCIMResourceTypeSchema) CopyUtil.deepCopy(schema), attributes, excludeAttributes);
// decode the SCIM User object, encoded in the submitted payload.
Group group = (Group) decoder.decodeResource(scimObjectString, schema, new Group());
Group updatedGroup = null;
if (userManager != null) {
// retrieve the old object
Group oldGroup = userManager.getGroup(existingId, ResourceManagerUtil.getAllAttributeURIs(schema));
if (oldGroup != null) {
Group newGroup = (Group) ServerSideValidator.validateUpdatedSCIMObject(oldGroup, group, schema);
updatedGroup = userManager.updateGroup(oldGroup, newGroup, requiredAttributes);
} else {
String error = "No user exists with the given id: " + existingId;
throw new NotFoundException(error);
}
} else {
String error = "Provided user manager handler is null.";
throw new InternalErrorException(error);
}
// encode the newly created SCIM user object and add id attribute to Location header.
String encodedGroup;
Map<String, String> httpHeaders = new HashMap<String, String>();
if (updatedGroup != null) {
// create a deep copy of the user object since we are going to change it.
Group copiedGroup = (Group) CopyUtil.deepCopy(updatedGroup);
// need to remove password before returning
ServerSideValidator.validateReturnedAttributes(copiedGroup, attributes, excludeAttributes);
encodedGroup = encoder.encodeSCIMObject(copiedGroup);
// add location header
httpHeaders.put(SCIMConstants.LOCATION_HEADER, getResourceEndpointURL(SCIMConstants.GROUP_ENDPOINT) + "/" + updatedGroup.getId());
httpHeaders.put(SCIMConstants.CONTENT_TYPE_HEADER, SCIMConstants.APPLICATION_JSON);
} else {
String error = "Updated Group resource is null.";
throw new InternalErrorException(error);
}
// put the uri of the User object in the response header parameter.
return new SCIMResponse(ResponseCodeConstants.CODE_OK, encodedGroup, httpHeaders);
} catch (NotFoundException e) {
return encodeSCIMException(e);
} catch (BadRequestException e) {
return encodeSCIMException(e);
} catch (CharonException e) {
return encodeSCIMException(e);
} catch (InternalErrorException e) {
return encodeSCIMException(e);
} catch (NotImplementedException e) {
return encodeSCIMException(e);
}
}
Aggregations