MapProperties.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.utils.properties;
- import java.io.File;
- import java.io.Reader;
- import java.io.StringReader;
- import java.security.MessageDigest;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Properties;
- import org.apache.commons.lang.StringUtils;
- import org.openspcoop2.utils.LoggerWrapperFactory;
- import org.openspcoop2.utils.SortedMap;
- import org.openspcoop2.utils.Utilities;
- import org.openspcoop2.utils.UtilsException;
- import org.openspcoop2.utils.io.Base64Utilities;
- import org.openspcoop2.utils.resources.Charset;
- import org.openspcoop2.utils.resources.FileSystemUtilities;
- import org.slf4j.Logger;
- /**
- * MapProperties
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class MapProperties {
- public static final String FILE_NAME = "govway.map.properties";
-
- public static final String ENV_PREFIX = "env.";
- public static final String JAVA_PREFIX = "java.";
-
- public static final String OBFUSCATED_ENV_KEYS = "obfuscated.env.keys";
- public static final String OBFUSCATED_JAVA_KEYS = "obfuscated.java.keys";
-
- public static final String OBFUSCATED_MODE = "obfuscated.mode";
- public static final String OBFUSCATED_MODE_NON_INIZIALIZZATO = "not initialized";
- public static final String OBFUSCATED_MODE_NONE = "none";
- public static final String OBFUSCATED_MODE_DIGEST = "digest";
- public static final String OBFUSCATED_MODE_STATIC = "static";
-
- public static final String OBFUSCATED_DIGEST = "obfuscated.digest";
- public static final String OBFUSCATED_DIGEST_DEFAULT = "SHA-256";
-
- public static final String OBFUSCATED_STATIC = "obfuscated.static";
- public static final String OBFUSCATED_STATIC_DEFAULT = "******";
-
-
-
-
- /** Logger utilizzato per errori eventuali. */
- protected Logger log = null;
- /* ******** F I E L D S P R I V A T I ******** */
- /** Reader delle proprieta' impostate nel file 'govway.map.properties' */
- protected PropertiesReader reader;
- protected String content;
- /** Copia Statica */
- private static MapProperties mapProperties = null;
- /** Variabili impostate */
- protected SortedMap<String> envMap = new SortedMap<>();
- protected SortedMap<String> javaMap = new SortedMap<>();
- public SortedMap<String> getEnvMap() {
- return this.envMap;
- }
- public SortedMap<String> getJavaMap() {
- return this.javaMap;
- }
-
- /* ******** C O S T R U T T O R E ******** */
- /**
- * Viene chiamato in causa per istanziare il properties reader
- *
- *
- */
- /**private MapProperties(Logger log, boolean throwNotFound) throws UtilsException {
- init(log, FILE_NAME, throwNotFound);
- }*/
- protected MapProperties(Logger log, String fileName, boolean throwNotFound) throws UtilsException {
- init(log, fileName, throwNotFound);
- }
- protected void init(Logger log, String fileName, boolean throwNotFound) throws UtilsException {
- if(log==null) {
- this.log = LoggerWrapperFactory.getLogger(MapProperties.class);
- }
- else {
- this.log = log;
- }
-
- /* ---- Lettura del cammino del file di configurazione ---- */
- Properties propertiesReader = readProperties(fileName);
-
- if(propertiesReader!=null) {
- this.reader = new PropertiesReader(propertiesReader, true);
- }
- else if(throwNotFound){
- throw new UtilsException("Config '"+fileName+"' not found");
- }
-
- }
- private Properties readProperties(String fileName) throws UtilsException {
- File fCheck = new File(fileName);
- if(fCheck.exists()) {
- if(!fCheck.canRead()) {
- throw new UtilsException("File '"+fCheck.getAbsolutePath()+"' cannot read");
- }
- try{
- this.content = FileSystemUtilities.readFile(fCheck);
- }catch(Exception e) {
- throw new UtilsException("File '"+fCheck.getAbsolutePath()+"' read failed: "+e.getMessage(),e);
- }
- }
- else {
- String uri = fileName;
- if(!fileName.startsWith("/")) {
- uri = "/" + fileName;
- }
- try(java.io.InputStream properties = MapProperties.class.getResourceAsStream(uri)){
- if(properties!=null) {
- this.content = Utilities.getAsString(properties, Charset.UTF_8.getValue());
- }
- }catch(Exception e) {
- throw new UtilsException("Uri '"+uri+"' access failed: "+e.getMessage(),e);
- }
- }
-
- Properties props = null;
- if(this.content!=null) {
- props = new Properties();
- try(Reader properties = new StringReader(this.content)){
- props.load(properties);
- }catch(Exception e) {
- throw new UtilsException("Config '"+fileName+"' access failed: "+e.getMessage(),e);
- }
- }
-
- return props;
- }
- /**
- * Il Metodo si occupa di inizializzare il propertiesReader
- *
- *
- */
- public static boolean initialize(Logger log, String fileName, boolean throwNotFound){
- try {
- MapProperties.mapProperties = new MapProperties(log, fileName, throwNotFound);
- return true;
- }
- catch(Exception e) {
- return false;
- }
- }
-
- /**
- * Ritorna l'istanza di questa classe
- *
- * @return Istanza di MapProperties
- *
- */
- public static MapProperties getInstance(){
- // spotbugs warning 'SING_SINGLETON_GETTER_NOT_SYNCHRONIZED': l'istanza viene creata allo startup
- if (MapProperties.mapProperties == null) {
- synchronized (MapProperties.class) {
- if (MapProperties.mapProperties == null) {
- return null;
- }
- }
- }
- return MapProperties.mapProperties;
- }
-
-
- public void initEnvironment() throws UtilsException {
- if(this.content!=null) {
- SortedMap<String> convertTextToProperties = PropertiesUtilities.convertTextToSortedMap(this.content, false);
- if(convertTextToProperties!=null && !convertTextToProperties.isEmpty()) {
- List<String> keys = convertTextToProperties.keys();
- if(keys!=null && !keys.isEmpty()) {
- for (String key : keys) {
- loadPropertyInEnvironment(key);
- }
- }
- }
- }
- }
-
- public void loadPropertyInEnvironment(String key) throws UtilsException {
- if(key.startsWith(ENV_PREFIX) && key.length()>ENV_PREFIX.length()) {
- String envKey = key.substring(ENV_PREFIX.length());
- String value = this.reader.getValue_convertEnvProperties(key);
- setEnvProperty(envKey, value);
- }
- else if(key.startsWith(JAVA_PREFIX) && key.length()>JAVA_PREFIX.length()) {
- String envKey = key.substring(JAVA_PREFIX.length());
- String value = this.reader.getValue_convertEnvProperties(key);
- setJavaProperty(envKey, value);
- }
- }
- protected void setJavaProperty(String envKey, String value) throws UtilsException {
- if(value!=null) {
- System.setProperty(envKey, value);
-
- // per preservare l'ordine
- if(this.javaMap.containsKey(envKey)) {
- this.javaMap.remove(envKey);
- }
- this.javaMap.put(envKey, value);
- /**System.out.println("---- JAVAP ["+envKey+"]=["+value+"]");*/
- }
- }
-
- protected void setEnvProperty(String envKey, String value) throws UtilsException {
- if(value!=null) {
- Utilities.setEnvProperty(envKey, value);
-
- // per preservare l'ordine
- if(this.envMap.containsKey(envKey)) {
- this.envMap.remove(envKey);
- }
- this.envMap.put(envKey, value);
- /**System.out.println("---- ENVP ["+envKey+"]=["+value+"]");*/
- }
- }
-
- public List<String> getObfuscatedEnvKeys() throws UtilsException{
- return getObfuscatedKeys(OBFUSCATED_ENV_KEYS);
- }
- public List<String> getObfuscatedJavaKeys() throws UtilsException{
- return getObfuscatedKeys(OBFUSCATED_JAVA_KEYS);
- }
- private List<String> getObfuscatedKeys(String pName) throws UtilsException{
- List<String> l = new ArrayList<>();
- if(this.reader==null) {
- return l; // non inizializzato
- }
- if(isObfuscatedModeEnabled()) {
- String value = this.reader.getValue_convertEnvProperties(pName);
- if(value!=null && StringUtils.isNotEmpty(value.trim())) {
- value = value.trim();
- if(value.contains(",")) {
- fillObfuscatedKeys(value, l);
- }
- else {
- l.add(value);
- }
- }
- }
- return l;
- }
- private void fillObfuscatedKeys(String value, List<String> l) {
- String [] tmp = value.split(",");
- if(tmp!=null && tmp.length>0) {
- for (String t : tmp) {
- if(t!=null && StringUtils.isNotEmpty(t.trim())) {
- l.add(t);
- }
- }
- }
- }
-
- public boolean isObfuscatedModeEnabled() throws UtilsException {
- if(this.reader==null) {
- return false; // non inizializzato
- }
- String value = this.reader.getValue_convertEnvProperties(OBFUSCATED_MODE);
- if(value!=null && StringUtils.isNotEmpty(value.trim())) {
- value = value.trim();
- if(OBFUSCATED_MODE_DIGEST.equals(value) || (OBFUSCATED_MODE_STATIC.equals(value))) {
- return true;
- }
- else if(OBFUSCATED_MODE_NONE.equals(value)) {
- return false;
- }
- else {
- throw new UtilsException("["+OBFUSCATED_MODE+"] unknown mode '"+value+"'");
- }
- }
- else {
- return true; // default
- }
- }
-
- public String getObfuscateModeDescription() throws UtilsException {
- if(this.reader==null) {
- return OBFUSCATED_MODE_NON_INIZIALIZZATO; // non inizializzato
- }
- String obfuscateMode = OBFUSCATED_MODE_NONE;
- if(this.isObfuscatedModeStatic()) {
- obfuscateMode = OBFUSCATED_MODE_STATIC+" ("+this.getObfuscatedModeStaticValue()+")";
- }
- else if(this.isObfuscatedModeDigest()) {
- obfuscateMode = OBFUSCATED_MODE_DIGEST+" ("+this.getObfuscatedModeDigestAlgo()+")";
- }
- return obfuscateMode;
- }
-
- public boolean isObfuscatedModeStatic() throws UtilsException {
- return getObfuscatedModeStaticValue()!=null;
- }
- public String getObfuscatedModeStaticValue() throws UtilsException {
- if(this.reader==null) {
- return null; // non inizializzato
- }
- String value = this.reader.getValue_convertEnvProperties(OBFUSCATED_MODE);
- if(value!=null && StringUtils.isNotEmpty(value.trim())) {
- value = value.trim();
- if(OBFUSCATED_MODE_STATIC.equals(value)) {
- String s = this.reader.getValue_convertEnvProperties(OBFUSCATED_STATIC);
- if(s!=null && StringUtils.isNotEmpty(s.trim())) {
- return s.trim();
- }
- else {
- return OBFUSCATED_STATIC_DEFAULT; // default
- }
- }
- else if(OBFUSCATED_MODE_DIGEST.equals(value) || (OBFUSCATED_MODE_NONE.equals(value))) {
- return null;
- }
- else {
- throw new UtilsException("["+OBFUSCATED_MODE+"] unknown property value '"+value+"'");
- }
- }
- else {
- return null;
- }
- }
-
- public boolean isObfuscatedModeDigest() throws UtilsException {
- return getObfuscatedModeDigestAlgo()!=null;
- }
- public String getObfuscatedModeDigestAlgo() throws UtilsException {
- if(this.reader==null) {
- return null; // non inizializzato
- }
- String value = this.reader.getValue_convertEnvProperties(OBFUSCATED_MODE);
- if(value!=null && StringUtils.isNotEmpty(value.trim())) {
- value = value.trim();
- if(OBFUSCATED_MODE_DIGEST.equals(value)) {
- String s = this.reader.getValue_convertEnvProperties(OBFUSCATED_DIGEST);
- if(s!=null && StringUtils.isNotEmpty(s.trim())) {
- return s.trim();
- }
- else {
- return OBFUSCATED_DIGEST_DEFAULT; // default
- }
- }
- else if(OBFUSCATED_MODE_STATIC.equals(value) || (OBFUSCATED_MODE_NONE.equals(value))) {
- return null;
- }
- else {
- throw new UtilsException("["+OBFUSCATED_MODE+"] unknown property value '"+value+"'");
- }
- }
- else {
- return OBFUSCATED_DIGEST_DEFAULT; // default
- }
- }
- protected boolean obfuscate(boolean java, String key) {
- if(java || key!=null) {
- // parametri forniti nel caso venga re-implementato il metodo
- }
- return true;
- }
-
- public String obfuscateJavaProperty(String key, String value) throws UtilsException {
- return obfuscate(true, key, value);
- }
- public String obfuscateEnvProperty(String key, String value) throws UtilsException {
- return obfuscate(false, key, value);
- }
- protected String obfuscate(boolean java, String key, String value) throws UtilsException {
- if(!this.obfuscate(java, key)) {
- return value;
- }
- if(!isObfuscatedModeEnabled() || value==null || StringUtils.isEmpty(value)) {
- return value;
- }
- if(this.isObfuscatedModeStatic()) {
- return this.getObfuscatedModeStaticValue();
- }
- else if(this.isObfuscatedModeDigest()) {
- try {
- return Base64Utilities.encodeAsString(MessageDigest.getInstance(this.getObfuscatedModeDigestAlgo()).digest(value.getBytes()));
- }catch(Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
- }
- else {
- throw new UtilsException("["+OBFUSCATED_MODE+"] unsupported mode");
- }
- }
-
- public static String obfuscateByDigest(String value) throws UtilsException {
- try {
- return Base64Utilities.encodeAsString(MessageDigest.getInstance(OBFUSCATED_DIGEST_DEFAULT).digest(value.getBytes()));
- }catch(Exception e) {
- throw new UtilsException(e.getMessage(),e);
- }
- }
- }