AutorizzazioneUtilities.java

/*
 * GovWay - A customizable API Gateway 
 * https://govway.org
 * 
 * Copyright (c) 2005-2024 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.web.ctrlstat.core;

import java.util.ArrayList;
import java.util.List;

import org.openspcoop2.core.config.constants.StatoFunzionalita;
import org.openspcoop2.core.config.constants.TipoAutorizzazione;
import org.openspcoop2.core.registry.constants.RuoloTipologia;

/**
 * AutorizzazioneUtilities
 * 
 * @author Andrea Poli (apoli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 * 
 */
public class AutorizzazioneUtilities {

	public static final String STATO_ABILITATO = StatoFunzionalita.ABILITATO.getValue();
	public static final String STATO_DISABILITATO = StatoFunzionalita.DISABILITATO.getValue();
	public static final String STATO_XACML_POLICY = "xacml-Policy";
	public static List<String> getStati(){
		List<String> l = new ArrayList<>();
		l.add(STATO_DISABILITATO);
		l.add(STATO_ABILITATO);
		l.add(STATO_XACML_POLICY);
		return l;
	}
	public static String convertToStato(String autorizzazione){
		return convertToStato(TipoAutorizzazione.toEnumConstant(autorizzazione));
	}
	public static String convertToStato(TipoAutorizzazione autorizzazione){
		if(TipoAutorizzazione.isXacmlPolicyRequired(autorizzazione)){
			return STATO_XACML_POLICY;
		}
		else if(TipoAutorizzazione.DISABILITATO.equals(autorizzazione)){
			return STATO_DISABILITATO;
		}
		else if(TipoAutorizzazione.TOKEN.equals(autorizzazione)){
			return STATO_ABILITATO;
		}
		else{
			return STATO_ABILITATO;
		}
	}
	
	public static RuoloTipologia convertToRuoloTipologia(String autorizzazione){
		return convertToRuoloTipologia(TipoAutorizzazione.toEnumConstant(autorizzazione));
	}
	public static RuoloTipologia convertToRuoloTipologia(TipoAutorizzazione autorizzazione){
		if(autorizzazione==null){
			return RuoloTipologia.QUALSIASI;
		}
		switch (autorizzazione) {
		case AUTHENTICATED_EXTERNAL_ROLES:
		case EXTERNAL_ROLES:
		case EXTERNAL_XACML_POLICY:
			return RuoloTipologia.ESTERNO;
		case AUTHENTICATED_INTERNAL_ROLES:
		case INTERNAL_ROLES:
		case INTERNAL_XACML_POLICY:
			return RuoloTipologia.INTERNO;
		case AUTHENTICATED_ROLES:
		case ROLES:
		case XACML_POLICY:
			return RuoloTipologia.QUALSIASI;
		default:
			return RuoloTipologia.QUALSIASI;
		}
		
	}
	public static TipoAutorizzazione convertToTipoAutorizzazione(String stato,boolean authenticated,boolean roles,
			boolean tokenAuthenticated, boolean tokenRoles,
			boolean scopes,String autorizzazione_tokenOptions,
			RuoloTipologia tipologia){
		if(STATO_DISABILITATO.equals(stato)){
			return TipoAutorizzazione.DISABILITATO;
		}
		else if(STATO_XACML_POLICY.equals(stato)){
			switch (tipologia) {
			case ESTERNO:
				return TipoAutorizzazione.EXTERNAL_XACML_POLICY;
			case INTERNO:
				return TipoAutorizzazione.INTERNAL_XACML_POLICY;
			case QUALSIASI:
				return TipoAutorizzazione.XACML_POLICY;
			}
		}
		else {
			if(roles){
				switch (tipologia) {
				case ESTERNO:
					if(authenticated){
						return TipoAutorizzazione.AUTHENTICATED_EXTERNAL_ROLES;
					}
					else{
						return TipoAutorizzazione.EXTERNAL_ROLES;
					}
				case INTERNO:
					if(authenticated){
						return TipoAutorizzazione.AUTHENTICATED_INTERNAL_ROLES;
					}
					else{
						return TipoAutorizzazione.INTERNAL_ROLES;
					}
				case QUALSIASI:
					if(authenticated){
						return TipoAutorizzazione.AUTHENTICATED_ROLES;
					}
					else{
						return TipoAutorizzazione.ROLES;
					}
				}
			}
			else if(authenticated){
				return TipoAutorizzazione.AUTHENTICATED;
			}
			else if(tokenAuthenticated || tokenRoles || scopes || (autorizzazione_tokenOptions!=null && !"".equals(autorizzazione_tokenOptions))) {
				return TipoAutorizzazione.TOKEN;
			}
		}
		return TipoAutorizzazione.DISABILITATO; // ??
	}
	public static String convertToTipoAutorizzazioneAsString(String stato,boolean authenticated,boolean roles,
			boolean tokenAuthenticated, boolean tokenRoles,
			boolean scopes,String autorizzazione_tokenOptions, 
			RuoloTipologia tipologia){
		return convertToTipoAutorizzazione(stato, authenticated, roles, 
				tokenAuthenticated, tokenRoles,
				scopes, autorizzazione_tokenOptions, 
				tipologia).getValue();
	}
	
}