BYOKUtilities.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.core.byok;
- import org.openspcoop2.core.constants.CostantiDB;
- /**
- * BYOKUtilities
- *
- * @author Andrea Poli (poli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class BYOKUtilities {
-
- private BYOKUtilities() {}
- public static boolean isWrappedValue(byte[] s) {
- if(s==null) {
- return false;
- }
- return isWrappedValue(new String(s));
- }
- public static boolean isWrappedValue(String s) {
- if(s!=null && s.startsWith(CostantiDB.ENC_PREFIX) && s.contains(".")) {
- int indexOf = s.indexOf(".");
- if(indexOf>0 && indexOf<s.length()) {
- String header = s.substring(0, indexOf);
- return header.endsWith(CostantiDB.ENC_PREFIX);
- }
- }
- return false;
- }
-
- public static String newPrefixWrappedValue(String policy) {
- return CostantiDB.ENC_PREFIX + policy + CostantiDB.ENC_PREFIX + ".";
- }
-
- public static byte[] deletePrefixWrappedValue(byte[] s) {
- if(s!=null && BYOKUtilities.isWrappedValue(s)) {
- byte[] newS = BYOKUtilities.deletePrefixWrappedValueEngine(s);
- // controllo 2 volte perchè l'operazione encrypt tramite 'remote' aggiunge 2 prefissi
- // non serve, eventualmente il servizio jmx supporta questo caso
- /**if(BYOKUtilities.isWrappedValue(newS)) {
- newS = BYOKUtilities.deletePrefixWrappedValueEngine(newS);
- }*/
- if(newS.length>0) {
- return newS;
- }
- }
- return s;
- }
- private static byte[] deletePrefixWrappedValueEngine(byte[] s) {
- String prefix = BYOKUtilities.extractPrefixWrappedValue(s);
- if(prefix==null) {
- return s;
- }
- if(!prefix.endsWith(".")) {
- prefix = prefix + ".";
- }
- if(s.length>prefix.getBytes().length) {
- byte[] newArchive = new byte[s.length - prefix.getBytes().length];
- System.arraycopy(s, prefix.getBytes().length, newArchive, 0, newArchive.length);
- return newArchive;
- }
- return s;
- }
-
- public static String deletePrefixWrappedValue(String s) {
- if(s!=null && BYOKUtilities.isWrappedValue(s)) {
- String newS = BYOKUtilities.deletePrefixWrappedValueEngine(s);
- // controllo 2 volte perchè l'operazione encrypt tramite 'remote' aggiunge 2 prefissi
- // non serve, eventualmente il servizio jmx supporta questo caso
- /**if(newS!=null && BYOKUtilities.isWrappedValue(newS)) {
- newS = BYOKUtilities.deletePrefixWrappedValueEngine(newS);
- }*/
- if(newS!=null && newS.length()>0) {
- return newS;
- }
- }
- return s;
- }
- public static String deletePrefixWrappedValueEngine(String s) {
- String prefix = BYOKUtilities.extractPrefixWrappedValue(s);
- if(prefix==null) {
- return s;
- }
- if(!prefix.endsWith(".")) {
- prefix = prefix + ".";
- }
- if(s.length()>prefix.length()) {
- return s.substring(prefix.length());
- }
- return s;
- }
-
- public static String extractPrefixWrappedValue(byte[] s) {
- if(s==null) {
- return null;
- }
- return extractPrefixWrappedValue(new String(s));
- }
- public static String extractPrefixWrappedValue(String s) {
- if(s!=null && s.startsWith(CostantiDB.ENC_PREFIX) && s.contains(".")) {
- int indexOf = s.indexOf(".");
- if(indexOf>0 && indexOf<s.length()) {
- return s.substring(0, indexOf);
- }
- }
- return null;
- }
- public static String getPolicy(String s) {
- String header = extractPrefixWrappedValue(s);
- if(header!=null && header.endsWith(CostantiDB.ENC_PREFIX)) {
- return header.substring(CostantiDB.ENC_PREFIX.length(), header.length()-CostantiDB.ENC_PREFIX.length());
- }
- return null;
- }
-
- public static String getRawWrappedValue(String s) {
- if(s!=null && s.startsWith(CostantiDB.ENC_PREFIX) && s.contains(".")) {
- int indexOf = s.indexOf(".");
- if(indexOf>0 && indexOf<s.length()) {
- String header = s.substring(0, indexOf);
- if(header.endsWith(CostantiDB.ENC_PREFIX) && s.length()>(header.length()+1)) {
- return s.substring(header.length()+1); // +1 per il punto
- }
- }
- }
- return null;
- }
- }