summaryrefslogtreecommitdiffstats
path: root/version.properties
blob: 9ffdb5b136bee5e4a424fdd087a77fe02fa31cdb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
# Versioning variables
# Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... )
# because they are used in Jenkins, whose plug-in doesn't support

major=1
minor=3
patch=1

base_version=${major}.${minor}.${patch}

# Release must be completed with git revision # in Jenkins
release_version=${base_version}
snapshot_version=${base_version}-SNAPSHOT
e.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
/*******************************************************************************
 * ============LICENSE_START====================================================
 * * org.onap.aai
 * * ===========================================================================
 * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
 * * Copyright © 2017 Amdocs
 * * ===========================================================================
 * * Licensed under the Apache License, Version 2.0 (the "License");
 * * you may not use this file except in compliance with the License.
 * * You may obtain a copy of the License at
 * * 
 *  *      http://www.apache.org/licenses/LICENSE-2.0
 * * 
 *  * Unless required by applicable law or agreed to in writing, software
 * * distributed under the License is distributed on an "AS IS" BASIS,
 * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * * See the License for the specific language governing permissions and
 * * limitations under the License.
 * * ============LICENSE_END====================================================
 * *
 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
 * *
 ******************************************************************************/
package com.att.cadi.aaf;

import com.att.inno.env.util.Split;


public class PermEval {
	public static final char START_REGEX_CHAR = '!';
	public static final char START_INST_KEY_CHAR=':';
	public static final char ALT_START_INST_KEY_CHAR='/';
	
	public static final char LIST_SEP = ',';
	public static final String INST_KEY_REGEX = new StringBuilder().append(START_INST_KEY_CHAR).toString();
	public static final String ASTERIX = "*";
	
	/**
	 * Evaluate Instance
	 * 
	 * Instance can be more complex.  It can be a string, a Regular Expression, or a ":" separated Key 
	 * who's parts can also be a String, Regular Expression.
	 * 
	 * sInst = Server's Instance
	 * In order to prevent false matches, keys must be the same length to count as equal
	 * Changing this will break existing users, like Cassandra.  9-4-2015
	 */
	 public static boolean evalInstance(String sInst, String pInst) {
		 if(sInst==null || pInst == null) {
			 return false;
		 }
		  if(ASTERIX.equals(sInst)) {
			  return true;			// If Server's String is "*", then it accepts every Instance
		  }
		  char firstChar = pInst.charAt(0);
		  char startChar = firstChar==ALT_START_INST_KEY_CHAR?ALT_START_INST_KEY_CHAR:START_INST_KEY_CHAR;
		  switch(pInst.charAt(0)) {  						// First char
		  	case START_REGEX_CHAR:							// Evaluate as Regular Expression
		  		String pItem = pInst.substring(1);
  			    for(String sItem : Split.split(LIST_SEP,sInst)) {		// allow for "," definition in Action
  			    	return sItem.matches(pItem);
  			    }
  			 
		  	case START_INST_KEY_CHAR:						// Evaluate a special Key field, i.e.:xyz:*:!df.*
		  	case ALT_START_INST_KEY_CHAR:					// Also allow '/' as special Key Field, i.e. /xyz/*/!.*
		  		if(sInst.charAt(0)==startChar) {  // To compare key-to-key, both strings must be keys
		  			String[] skeys=Split.split(startChar,sInst);
		  			String[] pkeys=Split.split(startChar,pInst);
		  			if(skeys.length!=pkeys.length) return false;
		  			
		  			boolean pass = true;
		  			for(int i=1;pass && i<skeys.length;++i) {  				// We start at 1, because the first one, being ":" is always ""
		  				if(ASTERIX.equals(skeys[i]))continue;   			// Server data accepts all for this key spot
		  				pass = false;
		  			    for(String sItem : Split.split(LIST_SEP,skeys[i])) {		// allow for "," definition in Action
			  				if(pkeys[i].length()==0) {
			  					if(pass=sItem.length()==0) {
			  						break;  								// Both Empty, keep checking
			  					}
//			  				} else if(pkeys[i].charAt(0)==START_REGEX_CHAR) { 
//			  					if(pass=sItem.matches(pkeys[i].substring(1))) {
//			  						break;  								// Matches, keep checking
//			  					}
			  				} else if(sItem.charAt(0)==START_REGEX_CHAR) { // Check Server side when wildcarding like *
			  					if(pass=pkeys[i].matches(sItem.substring(1))) {
			  						break;  								// Matches, keep checking
			  					}
			  				} else if(skeys[i].endsWith(ASTERIX)) {
			  					if(pass=endAsterixCompare(skeys[i],pkeys[i])) {
			  						break;
			  					}
			  				} else {
			  					if(pass=sItem.equals(pkeys[i]))
			  						break;   								// Equal, keep checking
			  				}
		  			    }
		  			}
		  			return pass; 											// return whether passed all key checks
		  		}
		  		return false; 								// if first chars aren't the same, further String compare not necessary
		  	default:										// Evaluate as String Compare
  			    for(String sItem : Split.split(LIST_SEP,sInst)) {	// allow for "," separator //TODO is this only for actions?
  			    	if(sItem.endsWith(ASTERIX)) {
  			    		if(endAsterixCompare(sInst, pInst));
  			    	} else if(sItem.equals(pInst)) {
  			    		return true;
  			    	}
  			    }
  			    return false;
		  }
	 }
	 
	 private static boolean endAsterixCompare(String sInst, String pInst) {
			final int len = sInst.length()-1;
			if(pInst.length()<len) {
				return false;
			}
			for(int j=0;j<len;++j) {
				if(pInst.charAt(j)!=sInst.charAt(j)) {
					return false;
				}
			}
			return true;
	}

	/**
	  * Evaluate Action
	  * 
	  * sAction = Stored Action...
	  * pAction = Present Action... the Permission to validate against.
	  * Action is not quite as complex.  But we write it in this function so it can be consistent
	  */
	  public static boolean evalAction(String sAction,String pAction) {
		  if(ASTERIX.equals(sAction))return true;  		     // If Server's String is "*", then it accepts every Action
		  for(String sItem : Split.split(LIST_SEP,sAction)) {		 // allow for "," definition in Action
			  if (pAction.charAt(0)==START_REGEX_CHAR?       // First char
				      sItem.matches(pAction.substring(1)):   // Evaluate as Regular Expression
				      sItem.equals(pAction))                 // Evaluate as String Compare
				  		return true;
		  }		
		  return false;
	  }
	 
	  /**
	   * Split.split by Char
	   * 
	   * Note: I read the String Split.split and Pattern Split.split code, and we can do this more efficiently for a single Character
	   */

}