HttpStore.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.security.keystore;
- import java.io.Serializable;
- import org.openspcoop2.security.SecurityException;
- import org.openspcoop2.utils.transport.http.HttpOptions;
- import org.openspcoop2.utils.transport.http.HttpResponse;
- import org.openspcoop2.utils.transport.http.HttpUtilities;
- /**
- * HttpStore
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class HttpStore implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- private byte[] storeBytes;
- private String endpoint;
- private Boolean trustAll = null;
- private MerlinTruststore trustStoreSsl = null;
- private CRLCertstore crlTrustStoreSsl = null;
- private int connectionTimeout = HttpUtilities.HTTP_CONNECTION_TIMEOUT;
- private int readTimeout = HttpUtilities.HTTP_READ_CONNECTION_TIMEOUT;
- private HttpOptions [] options;
-
- @Override
- public String toString() {
- StringBuilder bf = new StringBuilder();
- bf.append("HttpStore (").append(this.endpoint).append(")");
- if(this.trustAll!=null) {
- bf.append(" ").append(this.trustAll);
- }
- if(this.trustStoreSsl!=null) {
- bf.append(" ").append(this.trustStoreSsl.toString());
- }
- if(this.crlTrustStoreSsl!=null) {
- bf.append(" ").append(this.crlTrustStoreSsl.getWrappedCRLCertStore()!=null ? this.crlTrustStoreSsl.getWrappedCRLCertStore().toString() : this.crlTrustStoreSsl.toString());
- }
- if(this.options!=null && this.options.length>0) {
- for (HttpOptions httpOptions : this.options) {
- bf.append(" ").append(httpOptions.toString());
- }
- }
- return bf.toString();
- }
-
- public HttpStore(String endpoint,
- HttpOptions ... options) throws SecurityException{
- this(endpoint,
- null, null,
- null, null,
- options);
- }
- public HttpStore(String endpoint,
- Integer connectionTimeout, Integer readTimeout,
- HttpOptions ... options) throws SecurityException{
- this(endpoint,
- connectionTimeout, readTimeout,
- null, null,
- options);
- }
- public HttpStore(String endpoint,
- Integer connectionTimeout, Integer readTimeout,
- MerlinTruststore trustStoreSsl,
- HttpOptions ... options) throws SecurityException{
- this(endpoint,
- connectionTimeout, readTimeout,
- trustStoreSsl, null,
- options);
- }
- public HttpStore(String endpoint,
- MerlinTruststore trustStoreSsl,
- HttpOptions ... options) throws SecurityException{
- this(endpoint,
- null, null,
- trustStoreSsl, null,
- options);
- }
- public HttpStore(String endpoint,
- MerlinTruststore trustStoreSsl, CRLCertstore crlTrustStoreSsl,
- HttpOptions ... options) throws SecurityException{
- this(endpoint,
- null, null,
- trustStoreSsl, crlTrustStoreSsl,
- options);
- }
- public HttpStore(String endpoint,
- Integer connectionTimeout, Integer readTimeout,
- MerlinTruststore trustStoreSsl, CRLCertstore crlTrustStoreSsl,
- HttpOptions ... options) throws SecurityException{
- this(endpoint,
- connectionTimeout, readTimeout,
- null,
- trustStoreSsl, crlTrustStoreSsl,
- options);
- }
- public HttpStore(String endpoint,
- Boolean trustAll,
- HttpOptions ... options) throws SecurityException{
- this(endpoint,
- null, null,
- trustAll,
- null, null,
- options);
- }
- public HttpStore(String endpoint,
- Integer connectionTimeout, Integer readTimeout,
- Boolean trustAll,
- HttpOptions ... options) throws SecurityException{
- this(endpoint,
- connectionTimeout, readTimeout,
- trustAll,
- null, null,
- options);
- }
-
- private HttpStore(String endpoint,
- Integer connectionTimeout, Integer readTimeout,
- Boolean trustAll,
- MerlinTruststore trustStoreSsl, CRLCertstore crlTrustStoreSsl,
- HttpOptions ... options) throws SecurityException{
-
- this.endpoint = endpoint;
- if(connectionTimeout!=null) {
- this.connectionTimeout = connectionTimeout.intValue();
- }
- if(readTimeout!=null) {
- this.readTimeout = readTimeout.intValue();
- }
- this.trustAll = trustAll;
- this.trustStoreSsl = trustStoreSsl;
- this.crlTrustStoreSsl = crlTrustStoreSsl;
-
- this.options = options;
-
- try{
- if(endpoint==null){
- throw new SecurityException("Endpoint per lo Store non indicato");
- }
-
- HttpResponse httpResponse = null;
- if(
- (
- this.endpoint.startsWith("https:") &&
- this.trustStoreSsl==null &&
- (this.trustAll==null || !this.trustAll.booleanValue())
- )
- ||
- this.endpoint.startsWith("http:") ) {
- httpResponse = HttpUtilities.getHTTPResponse(this.endpoint,this.readTimeout, this.connectionTimeout, this.options);
- }
- else if(this.trustAll!=null) {
- httpResponse = HttpUtilities.getHTTPSResponse_trustAllCerts(this.endpoint, this.readTimeout, this.connectionTimeout, this.options);
- }
- else {
- httpResponse = HttpUtilities.getHTTPSResponse(this.endpoint, this.readTimeout, this.connectionTimeout,
- this.trustStoreSsl.getTrustStore().getKeystore(),
- this.crlTrustStoreSsl!=null ? this.crlTrustStoreSsl.getCertStore() : null,
- this.options);
- }
- if(httpResponse==null || httpResponse.getContent()==null) {
- throw new SecurityException("Store '"+this.endpoint+"' unavailable");
- }
- if(httpResponse.getResultHTTPOperation()!=200) {
- throw new SecurityException("Retrieve store '"+this.endpoint+"' failed (returnCode:"+httpResponse.getResultHTTPOperation()+")");
- }
- this.storeBytes = httpResponse.getContent();
- }catch(Exception e){
- throw new SecurityException(e.getMessage(),e);
- }
-
- }
-
- public byte[] getStoreBytes() {
- return this.storeBytes;
- }
- }