initial check in
This commit is contained in:
		
							
								
								
									
										1
									
								
								java/mon-middleware/.idea/.name
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								java/mon-middleware/.idea/.name
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					mon-middleware
 | 
				
			||||||
							
								
								
									
										33
									
								
								java/mon-middleware/.idea/compiler.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								java/mon-middleware/.idea/compiler.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="CompilerConfiguration">
 | 
				
			||||||
 | 
					    <option name="DEFAULT_COMPILER" value="Javac" />
 | 
				
			||||||
 | 
					    <resourceExtensions />
 | 
				
			||||||
 | 
					    <wildcardResourcePatterns>
 | 
				
			||||||
 | 
					      <entry name="!?*.java" />
 | 
				
			||||||
 | 
					      <entry name="!?*.form" />
 | 
				
			||||||
 | 
					      <entry name="!?*.class" />
 | 
				
			||||||
 | 
					      <entry name="!?*.groovy" />
 | 
				
			||||||
 | 
					      <entry name="!?*.scala" />
 | 
				
			||||||
 | 
					      <entry name="!?*.flex" />
 | 
				
			||||||
 | 
					      <entry name="!?*.kt" />
 | 
				
			||||||
 | 
					      <entry name="!?*.clj" />
 | 
				
			||||||
 | 
					    </wildcardResourcePatterns>
 | 
				
			||||||
 | 
					    <annotationProcessing>
 | 
				
			||||||
 | 
					      <profile default="true" name="Default" enabled="false">
 | 
				
			||||||
 | 
					        <processorPath useClasspath="true" />
 | 
				
			||||||
 | 
					      </profile>
 | 
				
			||||||
 | 
					      <profile default="false" name="Maven default annotation processors profile" enabled="true">
 | 
				
			||||||
 | 
					        <sourceOutputDir name="target/generated-sources/annotations" />
 | 
				
			||||||
 | 
					        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
 | 
				
			||||||
 | 
					        <outputRelativeToContentRoot value="true" />
 | 
				
			||||||
 | 
					        <processorPath useClasspath="true" />
 | 
				
			||||||
 | 
					        <module name="mon-middleware" />
 | 
				
			||||||
 | 
					      </profile>
 | 
				
			||||||
 | 
					    </annotationProcessing>
 | 
				
			||||||
 | 
					    <bytecodeTargetLevel>
 | 
				
			||||||
 | 
					      <module name="mon-middleware" target="1.7" />
 | 
				
			||||||
 | 
					    </bytecodeTargetLevel>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								java/mon-middleware/.idea/copyright/profiles_settings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								java/mon-middleware/.idea/copyright/profiles_settings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					<component name="CopyrightManager">
 | 
				
			||||||
 | 
					  <settings default="" />
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										7
									
								
								java/mon-middleware/.idea/encodings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								java/mon-middleware/.idea/encodings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false">
 | 
				
			||||||
 | 
					    <file url="file://$PROJECT_DIR$" charset="UTF-8" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										14
									
								
								java/mon-middleware/.idea/inspectionProfiles/Project_Default.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								java/mon-middleware/.idea/inspectionProfiles/Project_Default.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					<component name="InspectionProjectProfileManager">
 | 
				
			||||||
 | 
					  <profile version="1.0" is_locked="false">
 | 
				
			||||||
 | 
					    <option name="myName" value="Project Default" />
 | 
				
			||||||
 | 
					    <option name="myLocal" value="false" />
 | 
				
			||||||
 | 
					    <inspection_tool class="LoggerInitializedWithForeignClass" enabled="false" level="WARNING" enabled_by_default="false">
 | 
				
			||||||
 | 
					      <option name="loggerClassName" value="org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger" />
 | 
				
			||||||
 | 
					      <option name="loggerFactoryMethodName" value="getLogger,getLogger,getLog,getLogger" />
 | 
				
			||||||
 | 
					    </inspection_tool>
 | 
				
			||||||
 | 
					    <inspection_tool class="SerializableHasSerialVersionUIDField" enabled="true" level="WARNING" enabled_by_default="true">
 | 
				
			||||||
 | 
					      <option name="ignoreAnonymousInnerClasses" value="false" />
 | 
				
			||||||
 | 
					      <option name="superClassString" value="" />
 | 
				
			||||||
 | 
					    </inspection_tool>
 | 
				
			||||||
 | 
					  </profile>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										7
									
								
								java/mon-middleware/.idea/inspectionProfiles/profiles_settings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								java/mon-middleware/.idea/inspectionProfiles/profiles_settings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<component name="InspectionProjectProfileManager">
 | 
				
			||||||
 | 
					  <settings>
 | 
				
			||||||
 | 
					    <option name="PROJECT_PROFILE" value="Project Default" />
 | 
				
			||||||
 | 
					    <option name="USE_PROJECT_PROFILE" value="true" />
 | 
				
			||||||
 | 
					    <version value="1.0" />
 | 
				
			||||||
 | 
					  </settings>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: aopalliance:aopalliance:1.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/aopalliance/aopalliance/1.0/aopalliance-1.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/aopalliance/aopalliance/1.0/aopalliance-1.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: ch.qos.logback:logback-classic:1.1.1">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.1.1/logback-classic-1.1.1.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.1.1/logback-classic-1.1.1-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.1.1/logback-classic-1.1.1-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: ch.qos.logback:logback-core:1.1.1">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.1.1/logback-core-1.1.1.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.1.1/logback-core-1.1.1-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.1.1/logback-core-1.1.1-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_beust_jcommander_1_27.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_beust_jcommander_1_27.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.beust:jcommander:1.27">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.27/jcommander-1.27.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.27/jcommander-1.27-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.27/jcommander-1.27-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_codahale_metrics_metrics_core_3_0_2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_codahale_metrics_metrics_core_3_0_2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.codahale.metrics:metrics-core:3.0.2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/codahale/metrics/metrics-core/3.0.2/metrics-core-3.0.2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/codahale/metrics/metrics-core/3.0.2/metrics-core-3.0.2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/codahale/metrics/metrics-core/3.0.2/metrics-core-3.0.2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.3.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.fasterxml.jackson.core:jackson-core:2.3.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.3.0/jackson-core-2.3.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.3.0/jackson-core-2.3.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.3.0/jackson-core-2.3.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.3.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.3.0/jackson-databind-2.3.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.3.0/jackson-databind-2.3.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.3.0/jackson-databind-2.3.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.3.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.3.0/jackson-dataformat-yaml-2.3.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.3.0/jackson-dataformat-yaml-2.3.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.3.0/jackson-dataformat-yaml-2.3.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-joda:2.3.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-joda/2.3.0/jackson-datatype-joda-2.3.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-joda/2.3.0/jackson-datatype-joda-2.3.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-joda/2.3.0/jackson-datatype-joda-2.3.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_google_code_findbugs_jsr305_2_0_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_google_code_findbugs_jsr305_2_0_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.google.code.findbugs:jsr305:2.0.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/2.0.0/jsr305-2.0.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/2.0.0/jsr305-2.0.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/2.0.0/jsr305-2.0.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_google_code_gson_gson_2_2_4.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_google_code_gson_gson_2_2_4.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.google.code.gson:gson:2.2.4">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.2.4/gson-2.2.4-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.2.4/gson-2.2.4-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_google_guava_guava_17_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_google_guava_guava_17_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.google.guava:guava:17.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/17.0/guava-17.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/17.0/guava-17.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/17.0/guava-17.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_google_inject_guice_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_google_inject_guice_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.google.inject:guice:3.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/inject/guice/3.0/guice-3.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/inject/guice/3.0/guice-3.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/google/inject/guice/3.0/guice-3.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_h2database_h2_1_3_175.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_h2database_h2_1_3_175.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.h2database:h2:1.3.175">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.3.175/h2-1.3.175.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.3.175/h2-1.3.175-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/h2database/h2/1.3.175/h2-1.3.175-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_hpcloud_mon_testing_1_0_0_SNAPSHOT.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_hpcloud_mon_testing_1_0_0_SNAPSHOT.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.hpcloud:mon-testing:1.0.0-SNAPSHOT">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/hpcloud/mon-testing/1.0.0-SNAPSHOT/mon-testing-1.0.0-SNAPSHOT.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/hpcloud/mon-testing/1.0.0-SNAPSHOT/mon-testing-1.0.0-SNAPSHOT-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/hpcloud/mon-testing/1.0.0-SNAPSHOT/mon-testing-1.0.0-SNAPSHOT-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_hpcloud_mon_util_1_0_0_SNAPSHOT.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__com_hpcloud_mon_util_1_0_0_SNAPSHOT.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: com.hpcloud:mon-util:1.0.0-SNAPSHOT">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/hpcloud/mon-util/1.0.0-SNAPSHOT/mon-util-1.0.0-SNAPSHOT.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/hpcloud/mon-util/1.0.0-SNAPSHOT/mon-util-1.0.0-SNAPSHOT-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/com/hpcloud/mon-util/1.0.0-SNAPSHOT/mon-util-1.0.0-SNAPSHOT-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__commons_codec_commons_codec_1_6.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__commons_codec_commons_codec_1_6.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: commons-codec:commons-codec:1.6">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.6/commons-codec-1.6.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.6/commons-codec-1.6-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.6/commons-codec-1.6-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__commons_lang_commons_lang_2_5.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__commons_lang_commons_lang_2_5.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: commons-lang:commons-lang:2.5">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.5/commons-lang-2.5.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.5/commons-lang-2.5-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.5/commons-lang-2.5-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: commons-logging:commons-logging:1.1.1">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: commons-pool:commons-pool:1.6">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-pool/commons-pool/1.6/commons-pool-1.6.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-pool/commons-pool/1.6/commons-pool-1.6-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/commons-pool/commons-pool/1.6/commons-pool-1.6-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__javax_inject_javax_inject_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__javax_inject_javax_inject_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: javax.inject:javax.inject:1">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/inject/javax.inject/1/javax.inject-1-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__javax_servlet_servlet_api_2_5.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__javax_servlet_servlet_api_2_5.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: javax.servlet:servlet-api:2.5">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/servlet/servlet-api/2.5/servlet-api-2.5-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/servlet/servlet-api/2.5/servlet-api-2.5-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: javax.validation:validation-api:1.0.0.GA">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__joda_time_joda_time_2_3.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__joda_time_joda_time_2_3.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: joda-time:joda-time:2.3">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/joda-time/joda-time/2.3/joda-time-2.3.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/joda-time/joda-time/2.3/joda-time-2.3-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/joda-time/joda-time/2.3/joda-time-2.3-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__junit_junit_4_10.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__junit_junit_4_10.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: junit:junit:4.10">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.apache.commons:commons-collections4:4.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.0/commons-collections4-4.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.0/commons-collections4-4.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.0/commons-collections4-4.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.apache.httpcomponents:httpclient:4.2.1">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.2.1/httpclient-4.2.1.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.2.1/httpclient-4.2.1-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.2.1/httpclient-4.2.1-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_2_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_2_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.apache.httpcomponents:httpcore:4.2.1">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.2.1/httpcore-4.2.1.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.2.1/httpcore-4.2.1-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.2.1/httpcore-4.2.1-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_apache_thrift_libthrift_0_9_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_apache_thrift_libthrift_0_9_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.apache.thrift:libthrift:0.9.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/thrift/libthrift/0.9.0/libthrift-0.9.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/thrift/libthrift/0.9.0/libthrift-0.9.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/apache/thrift/libthrift/0.9.0/libthrift-0.9.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_beanshell_bsh_2_0b4.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_beanshell_bsh_2_0b4.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.beanshell:bsh:2.0b4">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_continuation_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_continuation_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-continuation:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-continuation/7.0.0.M2/jetty-continuation-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-continuation/7.0.0.M2/jetty-continuation-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-continuation/7.0.0.M2/jetty-continuation-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-http:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-http/7.0.0.M2/jetty-http-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-http/7.0.0.M2/jetty-http-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-http/7.0.0.M2/jetty-http-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-io:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-io/7.0.0.M2/jetty-io-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-io/7.0.0.M2/jetty-io-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-io/7.0.0.M2/jetty-io-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_security_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_security_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-security:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-security/7.0.0.M2/jetty-security-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-security/7.0.0.M2/jetty-security-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-security/7.0.0.M2/jetty-security-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_server_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_server_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-server:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-server/7.0.0.M2/jetty-server-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-server/7.0.0.M2/jetty-server-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-server/7.0.0.M2/jetty-server-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_servlet_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_servlet_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-servlet:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-servlet/7.0.0.M2/jetty-servlet-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-servlet/7.0.0.M2/jetty-servlet-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-servlet/7.0.0.M2/jetty-servlet-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_servlet_tester_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_servlet_tester_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-servlet-tester:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-servlet-tester/7.0.0.M2/jetty-servlet-tester-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-servlet-tester/7.0.0.M2/jetty-servlet-tester-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-servlet-tester/7.0.0.M2/jetty-servlet-tester-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-util:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-util/7.0.0.M2/jetty-util-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-util/7.0.0.M2/jetty-util-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-util/7.0.0.M2/jetty-util-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_webapp_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_webapp_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-webapp:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-webapp/7.0.0.M2/jetty-webapp-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-webapp/7.0.0.M2/jetty-webapp-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-webapp/7.0.0.M2/jetty-webapp-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_xml_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_eclipse_jetty_jetty_xml_7_0_0_M2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.eclipse.jetty:jetty-xml:7.0.0.M2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-xml/7.0.0.M2/jetty-xml-7.0.0.M2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-xml/7.0.0.M2/jetty-xml-7.0.0.M2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-xml/7.0.0.M2/jetty-xml-7.0.0.M2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.hamcrest:hamcrest-core:1.1">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_hibernate_hibernate_validator_4_3_0_Final.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_hibernate_hibernate_validator_4_3_0_Final.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.hibernate:hibernate-validator:4.3.0.Final">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-validator/4.3.0.Final/hibernate-validator-4.3.0.Final.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-validator/4.3.0.Final/hibernate-validator-4.3.0.Final-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/hibernate/hibernate-validator/4.3.0.Final/hibernate-validator-4.3.0.Final-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_0_CR2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_0_CR2.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.jboss.logging:jboss-logging:3.1.0.CR2">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.1.0.CR2/jboss-logging-3.1.0.CR2.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.1.0.CR2/jboss-logging-3.1.0.CR2-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.1.0.CR2/jboss-logging-3.1.0.CR2-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_jodah_concurrentunit_0_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_jodah_concurrentunit_0_3_0.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.jodah:concurrentunit:0.3.0">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/jodah/concurrentunit/0.3.0/concurrentunit-0.3.0.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/jodah/concurrentunit/0.3.0/concurrentunit-0.3.0-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/jodah/concurrentunit/0.3.0/concurrentunit-0.3.0-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_mockito_mockito_all_1_9_5.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_mockito_mockito_all_1_9_5.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.mockito:mockito-all:1.9.5">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-all/1.9.5/mockito-all-1.9.5.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-all/1.9.5/mockito-all-1.9.5-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-all/1.9.5/mockito-all-1.9.5-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_slf4j_slf4j_api_1_5_8.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_slf4j_slf4j_api_1_5_8.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.slf4j:slf4j-api:1.5.8">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_testng_testng_6_8_7.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_testng_testng_6_8_7.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.testng:testng:6.8.7">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.8.7/testng-6.8.7.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.8.7/testng-6.8.7-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.8.7/testng-6.8.7-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_yaml_snakeyaml_1_12.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								java/mon-middleware/.idea/libraries/Maven__org_yaml_snakeyaml_1_12.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<component name="libraryTable">
 | 
				
			||||||
 | 
					  <library name="Maven: org.yaml:snakeyaml:1.12">
 | 
				
			||||||
 | 
					    <CLASSES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.12/snakeyaml-1.12.jar!/" />
 | 
				
			||||||
 | 
					    </CLASSES>
 | 
				
			||||||
 | 
					    <JAVADOC>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.12/snakeyaml-1.12-javadoc.jar!/" />
 | 
				
			||||||
 | 
					    </JAVADOC>
 | 
				
			||||||
 | 
					    <SOURCES>
 | 
				
			||||||
 | 
					      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.12/snakeyaml-1.12-sources.jar!/" />
 | 
				
			||||||
 | 
					    </SOURCES>
 | 
				
			||||||
 | 
					  </library>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										33
									
								
								java/mon-middleware/.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								java/mon-middleware/.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="EntryPointsManager">
 | 
				
			||||||
 | 
					    <entry_points version="2.0" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="MavenProjectsManager">
 | 
				
			||||||
 | 
					    <option name="originalFiles">
 | 
				
			||||||
 | 
					      <list>
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/pom.xml" />
 | 
				
			||||||
 | 
					      </list>
 | 
				
			||||||
 | 
					    </option>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
 | 
				
			||||||
 | 
					    <output url="file://$PROJECT_DIR$/out" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="masterDetails">
 | 
				
			||||||
 | 
					    <states>
 | 
				
			||||||
 | 
					      <state key="ProjectJDKs.UI">
 | 
				
			||||||
 | 
					        <settings>
 | 
				
			||||||
 | 
					          <last-edited>1.7</last-edited>
 | 
				
			||||||
 | 
					          <splitter-proportions>
 | 
				
			||||||
 | 
					            <option name="proportions">
 | 
				
			||||||
 | 
					              <list>
 | 
				
			||||||
 | 
					                <option value="0.2" />
 | 
				
			||||||
 | 
					              </list>
 | 
				
			||||||
 | 
					            </option>
 | 
				
			||||||
 | 
					          </splitter-proportions>
 | 
				
			||||||
 | 
					        </settings>
 | 
				
			||||||
 | 
					      </state>
 | 
				
			||||||
 | 
					    </states>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										9
									
								
								java/mon-middleware/.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								java/mon-middleware/.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="ProjectModuleManager">
 | 
				
			||||||
 | 
					    <modules>
 | 
				
			||||||
 | 
					      <module fileurl="file://$PROJECT_DIR$/mon-middleware.iml" filepath="$PROJECT_DIR$/mon-middleware.iml" />
 | 
				
			||||||
 | 
					    </modules>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										5
									
								
								java/mon-middleware/.idea/scopes/scope_settings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								java/mon-middleware/.idea/scopes/scope_settings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					<component name="DependencyValidationManager">
 | 
				
			||||||
 | 
					  <state>
 | 
				
			||||||
 | 
					    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
 | 
				
			||||||
 | 
					  </state>
 | 
				
			||||||
 | 
					</component>
 | 
				
			||||||
							
								
								
									
										7
									
								
								java/mon-middleware/.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								java/mon-middleware/.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="VcsDirectoryMappings">
 | 
				
			||||||
 | 
					    <mapping directory="" vcs="" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										682
									
								
								java/mon-middleware/.idea/workspace.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										682
									
								
								java/mon-middleware/.idea/workspace.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,682 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="ChangeListManager">
 | 
				
			||||||
 | 
					    <list default="true" id="a5076df4-d3aa-4df3-8298-5d367ebe7288" name="Default" comment="" />
 | 
				
			||||||
 | 
					    <ignored path="mon-middleware.iws" />
 | 
				
			||||||
 | 
					    <ignored path=".idea/workspace.xml" />
 | 
				
			||||||
 | 
					    <option name="TRACKING_ENABLED" value="true" />
 | 
				
			||||||
 | 
					    <option name="SHOW_DIALOG" value="false" />
 | 
				
			||||||
 | 
					    <option name="HIGHLIGHT_CONFLICTS" value="true" />
 | 
				
			||||||
 | 
					    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
 | 
				
			||||||
 | 
					    <option name="LAST_RESOLUTION" value="IGNORE" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
 | 
				
			||||||
 | 
					  <component name="CreatePatchCommitExecutor">
 | 
				
			||||||
 | 
					    <option name="PATCH_PATH" value="" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="DaemonCodeAnalyzer">
 | 
				
			||||||
 | 
					    <disable_hints />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="DebuggerManager">
 | 
				
			||||||
 | 
					    <breakpoint_any converted="true">
 | 
				
			||||||
 | 
					      <breakpoint>
 | 
				
			||||||
 | 
					        <option name="NOTIFY_CAUGHT" value="true" />
 | 
				
			||||||
 | 
					        <option name="NOTIFY_UNCAUGHT" value="true" />
 | 
				
			||||||
 | 
					        <option name="ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="LOG_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="LOG_EXPRESSION_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="REMOVE_AFTER_HIT" value="false" />
 | 
				
			||||||
 | 
					        <option name="SUSPEND_POLICY" value="SuspendAll" />
 | 
				
			||||||
 | 
					        <option name="SUSPEND" value="true" />
 | 
				
			||||||
 | 
					        <option name="COUNT_FILTER_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="COUNT_FILTER" value="0" />
 | 
				
			||||||
 | 
					        <option name="CONDITION_ENABLED" value="true" />
 | 
				
			||||||
 | 
					        <option name="CLASS_FILTERS_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="CONDITION" value="" />
 | 
				
			||||||
 | 
					        <option name="LOG_MESSAGE" value="" />
 | 
				
			||||||
 | 
					      </breakpoint>
 | 
				
			||||||
 | 
					      <breakpoint>
 | 
				
			||||||
 | 
					        <option name="NOTIFY_CAUGHT" value="true" />
 | 
				
			||||||
 | 
					        <option name="NOTIFY_UNCAUGHT" value="true" />
 | 
				
			||||||
 | 
					        <option name="ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="LOG_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="LOG_EXPRESSION_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="REMOVE_AFTER_HIT" value="false" />
 | 
				
			||||||
 | 
					        <option name="SUSPEND_POLICY" value="SuspendAll" />
 | 
				
			||||||
 | 
					        <option name="SUSPEND" value="true" />
 | 
				
			||||||
 | 
					        <option name="COUNT_FILTER_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="COUNT_FILTER" value="0" />
 | 
				
			||||||
 | 
					        <option name="CONDITION_ENABLED" value="true" />
 | 
				
			||||||
 | 
					        <option name="CLASS_FILTERS_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
 | 
				
			||||||
 | 
					        <option name="CONDITION" value="" />
 | 
				
			||||||
 | 
					        <option name="LOG_MESSAGE" value="" />
 | 
				
			||||||
 | 
					      </breakpoint>
 | 
				
			||||||
 | 
					    </breakpoint_any>
 | 
				
			||||||
 | 
					    <breakpoint_rules converted="true" />
 | 
				
			||||||
 | 
					    <ui_properties converted="true" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
 | 
				
			||||||
 | 
					  <component name="FavoritesManager">
 | 
				
			||||||
 | 
					    <favorites_list name="mon-middleware" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="FileEditorManager">
 | 
				
			||||||
 | 
					    <leaf>
 | 
				
			||||||
 | 
					      <file leaf-file-name="Config.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/Config.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="3795">
 | 
				
			||||||
 | 
					              <caret line="12" column="13" selection-start-line="12" selection-start-column="13" selection-end-line="12" selection-end-column="13" />
 | 
				
			||||||
 | 
					              <folding>
 | 
				
			||||||
 | 
					                <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					              </folding>
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="CatalogV3.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/CatalogV3.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="465">
 | 
				
			||||||
 | 
					              <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
 | 
				
			||||||
 | 
					              <folding />
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="AuthException.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthException.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="330">
 | 
				
			||||||
 | 
					              <caret line="8" column="16" selection-start-line="8" selection-start-column="16" selection-end-line="8" selection-end-column="16" />
 | 
				
			||||||
 | 
					              <folding />
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="TokenExceptionHandler.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/TokenExceptionHandler.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="947" max-vertical-offset="1680">
 | 
				
			||||||
 | 
					              <caret line="90" column="28" selection-start-line="0" selection-start-column="0" selection-end-line="106" selection-end-column="0" />
 | 
				
			||||||
 | 
					              <folding>
 | 
				
			||||||
 | 
					                <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					              </folding>
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="TokenCache.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/TokenCache.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="1" max-vertical-offset="1020">
 | 
				
			||||||
 | 
					              <caret line="22" column="21" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
 | 
				
			||||||
 | 
					              <folding>
 | 
				
			||||||
 | 
					                <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					              </folding>
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="AuthConstants.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthConstants.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="2829" max-vertical-offset="3585">
 | 
				
			||||||
 | 
					              <caret line="45" column="76" selection-start-line="45" selection-start-column="53" selection-end-line="45" selection-end-column="53" />
 | 
				
			||||||
 | 
					              <folding />
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="AuthConnectionException.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthConnectionException.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="300">
 | 
				
			||||||
 | 
					              <caret line="9" column="44" selection-start-line="9" selection-start-column="44" selection-end-line="9" selection-end-column="44" />
 | 
				
			||||||
 | 
					              <folding />
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="AuthClient.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthClient.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="390">
 | 
				
			||||||
 | 
					              <caret line="20" column="20" selection-start-line="20" selection-start-column="0" selection-end-line="20" selection-end-column="0" />
 | 
				
			||||||
 | 
					              <folding />
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="UnavailableException.java" pinned="false" current="true" current-in-tab="true">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/UnavailableException.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.26603" vertical-offset="0" max-vertical-offset="733">
 | 
				
			||||||
 | 
					              <caret line="17" column="80" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="0" />
 | 
				
			||||||
 | 
					              <folding />
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					      <file leaf-file-name="AuthClientFactory.java" pinned="false" current="false" current-in-tab="false">
 | 
				
			||||||
 | 
					        <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthClientFactory.java">
 | 
				
			||||||
 | 
					          <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					            <state vertical-scroll-proportion="0.0" vertical-offset="1194" max-vertical-offset="1950">
 | 
				
			||||||
 | 
					              <caret line="27" column="69" selection-start-line="27" selection-start-column="69" selection-end-line="27" selection-end-column="69" />
 | 
				
			||||||
 | 
					              <folding />
 | 
				
			||||||
 | 
					            </state>
 | 
				
			||||||
 | 
					          </provider>
 | 
				
			||||||
 | 
					        </entry>
 | 
				
			||||||
 | 
					      </file>
 | 
				
			||||||
 | 
					    </leaf>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="FindManager">
 | 
				
			||||||
 | 
					    <FindUsagesManager>
 | 
				
			||||||
 | 
					      <setting name="OPEN_NEW_TAB" value="true" />
 | 
				
			||||||
 | 
					    </FindUsagesManager>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="GradleLocalSettings">
 | 
				
			||||||
 | 
					    <option name="modificationStamps">
 | 
				
			||||||
 | 
					      <map>
 | 
				
			||||||
 | 
					        <entry key="$PROJECT_DIR$/../../../../kafka" value="1392410561000" />
 | 
				
			||||||
 | 
					      </map>
 | 
				
			||||||
 | 
					    </option>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="IdeDocumentHistory">
 | 
				
			||||||
 | 
					    <option name="changedFiles">
 | 
				
			||||||
 | 
					      <list>
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthClient.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthClientFactory.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthConstants.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/CatalogV3.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/Config.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/FilterUtils.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/HttpClientFactory.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/HttpClientPoolFactory.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/SignatureExceptionHandler.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/TokenCache.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/TokenExceptionHandler.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthConnectionException.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthException.java" />
 | 
				
			||||||
 | 
					        <option value="$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/UnavailableException.java" />
 | 
				
			||||||
 | 
					      </list>
 | 
				
			||||||
 | 
					    </option>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ProjectFrameBounds">
 | 
				
			||||||
 | 
					    <option name="y" value="22" />
 | 
				
			||||||
 | 
					    <option name="width" value="1440" />
 | 
				
			||||||
 | 
					    <option name="height" value="874" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ProjectInspectionProfilesVisibleTreeState">
 | 
				
			||||||
 | 
					    <entry key="Project Default">
 | 
				
			||||||
 | 
					      <profile-state>
 | 
				
			||||||
 | 
					        <expanded-state>
 | 
				
			||||||
 | 
					          <State>
 | 
				
			||||||
 | 
					            <id />
 | 
				
			||||||
 | 
					          </State>
 | 
				
			||||||
 | 
					          <State>
 | 
				
			||||||
 | 
					            <id>Serialization issues</id>
 | 
				
			||||||
 | 
					          </State>
 | 
				
			||||||
 | 
					        </expanded-state>
 | 
				
			||||||
 | 
					        <selected-state>
 | 
				
			||||||
 | 
					          <State>
 | 
				
			||||||
 | 
					            <id>SerializableHasSerialVersionUIDField</id>
 | 
				
			||||||
 | 
					          </State>
 | 
				
			||||||
 | 
					        </selected-state>
 | 
				
			||||||
 | 
					      </profile-state>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
 | 
				
			||||||
 | 
					    <OptionsSetting value="true" id="Add" />
 | 
				
			||||||
 | 
					    <OptionsSetting value="true" id="Remove" />
 | 
				
			||||||
 | 
					    <OptionsSetting value="true" id="Checkout" />
 | 
				
			||||||
 | 
					    <OptionsSetting value="true" id="Update" />
 | 
				
			||||||
 | 
					    <OptionsSetting value="true" id="Status" />
 | 
				
			||||||
 | 
					    <OptionsSetting value="true" id="Edit" />
 | 
				
			||||||
 | 
					    <ConfirmationsSetting value="0" id="Add" />
 | 
				
			||||||
 | 
					    <ConfirmationsSetting value="0" id="Remove" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ProjectReloadState">
 | 
				
			||||||
 | 
					    <option name="STATE" value="0" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ProjectView">
 | 
				
			||||||
 | 
					    <navigator currentView="ProjectPane" proportions="" version="1">
 | 
				
			||||||
 | 
					      <flattenPackages />
 | 
				
			||||||
 | 
					      <showMembers />
 | 
				
			||||||
 | 
					      <showModules />
 | 
				
			||||||
 | 
					      <showLibraryContents />
 | 
				
			||||||
 | 
					      <hideEmptyPackages />
 | 
				
			||||||
 | 
					      <abbreviatePackageNames />
 | 
				
			||||||
 | 
					      <autoscrollToSource />
 | 
				
			||||||
 | 
					      <autoscrollFromSource />
 | 
				
			||||||
 | 
					      <sortByType />
 | 
				
			||||||
 | 
					    </navigator>
 | 
				
			||||||
 | 
					    <panes>
 | 
				
			||||||
 | 
					      <pane id="Scope" />
 | 
				
			||||||
 | 
					      <pane id="ProjectPane">
 | 
				
			||||||
 | 
					        <subPane>
 | 
				
			||||||
 | 
					          <PATH>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="mon-middleware" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					          </PATH>
 | 
				
			||||||
 | 
					          <PATH>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="mon-middleware" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="mon-middleware" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.android.tools.idea.gradle.projectView.AndroidPsiDirectoryNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					          </PATH>
 | 
				
			||||||
 | 
					          <PATH>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="mon-middleware" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="mon-middleware" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.android.tools.idea.gradle.projectView.AndroidPsiDirectoryNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="src" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.android.tools.idea.gradle.projectView.AndroidPsiDirectoryNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="main" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.android.tools.idea.gradle.projectView.AndroidPsiDirectoryNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="java" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.android.tools.idea.gradle.projectView.AndroidPsiDirectoryNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					            <PATH_ELEMENT>
 | 
				
			||||||
 | 
					              <option name="myItemId" value="middleware" />
 | 
				
			||||||
 | 
					              <option name="myItemType" value="com.android.tools.idea.gradle.projectView.AndroidPsiDirectoryNode" />
 | 
				
			||||||
 | 
					            </PATH_ELEMENT>
 | 
				
			||||||
 | 
					          </PATH>
 | 
				
			||||||
 | 
					        </subPane>
 | 
				
			||||||
 | 
					      </pane>
 | 
				
			||||||
 | 
					      <pane id="PackagesPane" />
 | 
				
			||||||
 | 
					    </panes>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="PropertiesComponent">
 | 
				
			||||||
 | 
					    <property name="GoToFile.includeJavaFiles" value="false" />
 | 
				
			||||||
 | 
					    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
 | 
				
			||||||
 | 
					    <property name="MemberChooser.sorted" value="false" />
 | 
				
			||||||
 | 
					    <property name="MemberChooser.showClasses" value="true" />
 | 
				
			||||||
 | 
					    <property name="GoToClass.includeLibraries" value="false" />
 | 
				
			||||||
 | 
					    <property name="MemberChooser.copyJavadoc" value="false" />
 | 
				
			||||||
 | 
					    <property name="LayoutCode.rearrangeEntriesJava" value="false" />
 | 
				
			||||||
 | 
					    <property name="options.lastSelected" value="Errors" />
 | 
				
			||||||
 | 
					    <property name="options.splitter.main.proportions" value="0.3" />
 | 
				
			||||||
 | 
					    <property name="options.splitter.details.proportions" value="0.2" />
 | 
				
			||||||
 | 
					    <property name="options.searchVisible" value="true" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="RunManager">
 | 
				
			||||||
 | 
					    <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
 | 
				
			||||||
 | 
					      <module name="" />
 | 
				
			||||||
 | 
					      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m" />
 | 
				
			||||||
 | 
					      <option name="PROGRAM_PARAMETERS" />
 | 
				
			||||||
 | 
					      <method />
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					    <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests">
 | 
				
			||||||
 | 
					      <module name="" />
 | 
				
			||||||
 | 
					      <option name="TESTING_TYPE" value="0" />
 | 
				
			||||||
 | 
					      <option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
 | 
				
			||||||
 | 
					      <option name="METHOD_NAME" value="" />
 | 
				
			||||||
 | 
					      <option name="CLASS_NAME" value="" />
 | 
				
			||||||
 | 
					      <option name="PACKAGE_NAME" value="" />
 | 
				
			||||||
 | 
					      <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
 | 
				
			||||||
 | 
					      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
 | 
				
			||||||
 | 
					      <option name="PREFERRED_AVD" value="" />
 | 
				
			||||||
 | 
					      <option name="USE_COMMAND_LINE" value="true" />
 | 
				
			||||||
 | 
					      <option name="COMMAND_LINE" value="" />
 | 
				
			||||||
 | 
					      <option name="WIPE_USER_DATA" value="false" />
 | 
				
			||||||
 | 
					      <option name="DISABLE_BOOT_ANIMATION" value="false" />
 | 
				
			||||||
 | 
					      <option name="NETWORK_SPEED" value="full" />
 | 
				
			||||||
 | 
					      <option name="NETWORK_LATENCY" value="none" />
 | 
				
			||||||
 | 
					      <option name="CLEAR_LOGCAT" value="false" />
 | 
				
			||||||
 | 
					      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
 | 
				
			||||||
 | 
					      <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" />
 | 
				
			||||||
 | 
					      <method />
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					    <configuration default="true" type="Remote" factoryName="Remote">
 | 
				
			||||||
 | 
					      <option name="USE_SOCKET_TRANSPORT" value="true" />
 | 
				
			||||||
 | 
					      <option name="SERVER_MODE" value="false" />
 | 
				
			||||||
 | 
					      <option name="SHMEM_ADDRESS" value="javadebug" />
 | 
				
			||||||
 | 
					      <option name="HOST" value="localhost" />
 | 
				
			||||||
 | 
					      <option name="PORT" value="5005" />
 | 
				
			||||||
 | 
					      <method />
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					    <configuration default="true" type="TestNG" factoryName="TestNG">
 | 
				
			||||||
 | 
					      <module name="" />
 | 
				
			||||||
 | 
					      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
 | 
				
			||||||
 | 
					      <option name="ALTERNATIVE_JRE_PATH" />
 | 
				
			||||||
 | 
					      <option name="SUITE_NAME" />
 | 
				
			||||||
 | 
					      <option name="PACKAGE_NAME" />
 | 
				
			||||||
 | 
					      <option name="MAIN_CLASS_NAME" />
 | 
				
			||||||
 | 
					      <option name="METHOD_NAME" />
 | 
				
			||||||
 | 
					      <option name="GROUP_NAME" />
 | 
				
			||||||
 | 
					      <option name="TEST_OBJECT" value="CLASS" />
 | 
				
			||||||
 | 
					      <option name="VM_PARAMETERS" value="-ea" />
 | 
				
			||||||
 | 
					      <option name="PARAMETERS" />
 | 
				
			||||||
 | 
					      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
 | 
				
			||||||
 | 
					      <option name="OUTPUT_DIRECTORY" />
 | 
				
			||||||
 | 
					      <option name="ANNOTATION_TYPE" />
 | 
				
			||||||
 | 
					      <option name="ENV_VARIABLES" />
 | 
				
			||||||
 | 
					      <option name="PASS_PARENT_ENVS" value="true" />
 | 
				
			||||||
 | 
					      <option name="TEST_SEARCH_SCOPE">
 | 
				
			||||||
 | 
					        <value defaultName="moduleWithDependencies" />
 | 
				
			||||||
 | 
					      </option>
 | 
				
			||||||
 | 
					      <option name="USE_DEFAULT_REPORTERS" value="false" />
 | 
				
			||||||
 | 
					      <option name="PROPERTIES_FILE" />
 | 
				
			||||||
 | 
					      <envs />
 | 
				
			||||||
 | 
					      <properties />
 | 
				
			||||||
 | 
					      <listeners />
 | 
				
			||||||
 | 
					      <method />
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					    <configuration default="true" type="Applet" factoryName="Applet">
 | 
				
			||||||
 | 
					      <module name="" />
 | 
				
			||||||
 | 
					      <option name="MAIN_CLASS_NAME" />
 | 
				
			||||||
 | 
					      <option name="HTML_FILE_NAME" />
 | 
				
			||||||
 | 
					      <option name="HTML_USED" value="false" />
 | 
				
			||||||
 | 
					      <option name="WIDTH" value="400" />
 | 
				
			||||||
 | 
					      <option name="HEIGHT" value="300" />
 | 
				
			||||||
 | 
					      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
 | 
				
			||||||
 | 
					      <option name="VM_PARAMETERS" />
 | 
				
			||||||
 | 
					      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
 | 
				
			||||||
 | 
					      <option name="ALTERNATIVE_JRE_PATH" />
 | 
				
			||||||
 | 
					      <method />
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					    <configuration default="true" type="Application" factoryName="Application">
 | 
				
			||||||
 | 
					      <option name="MAIN_CLASS_NAME" />
 | 
				
			||||||
 | 
					      <option name="VM_PARAMETERS" />
 | 
				
			||||||
 | 
					      <option name="PROGRAM_PARAMETERS" />
 | 
				
			||||||
 | 
					      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
 | 
				
			||||||
 | 
					      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
 | 
				
			||||||
 | 
					      <option name="ALTERNATIVE_JRE_PATH" />
 | 
				
			||||||
 | 
					      <option name="ENABLE_SWING_INSPECTOR" value="false" />
 | 
				
			||||||
 | 
					      <option name="ENV_VARIABLES" />
 | 
				
			||||||
 | 
					      <option name="PASS_PARENT_ENVS" value="true" />
 | 
				
			||||||
 | 
					      <module name="" />
 | 
				
			||||||
 | 
					      <envs />
 | 
				
			||||||
 | 
					      <method />
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					    <configuration default="true" type="JUnit" factoryName="JUnit">
 | 
				
			||||||
 | 
					      <module name="" />
 | 
				
			||||||
 | 
					      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
 | 
				
			||||||
 | 
					      <option name="ALTERNATIVE_JRE_PATH" />
 | 
				
			||||||
 | 
					      <option name="PACKAGE_NAME" />
 | 
				
			||||||
 | 
					      <option name="MAIN_CLASS_NAME" />
 | 
				
			||||||
 | 
					      <option name="METHOD_NAME" />
 | 
				
			||||||
 | 
					      <option name="TEST_OBJECT" value="class" />
 | 
				
			||||||
 | 
					      <option name="VM_PARAMETERS" value="-ea" />
 | 
				
			||||||
 | 
					      <option name="PARAMETERS" />
 | 
				
			||||||
 | 
					      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
 | 
				
			||||||
 | 
					      <option name="ENV_VARIABLES" />
 | 
				
			||||||
 | 
					      <option name="PASS_PARENT_ENVS" value="true" />
 | 
				
			||||||
 | 
					      <option name="TEST_SEARCH_SCOPE">
 | 
				
			||||||
 | 
					        <value defaultName="moduleWithDependencies" />
 | 
				
			||||||
 | 
					      </option>
 | 
				
			||||||
 | 
					      <envs />
 | 
				
			||||||
 | 
					      <patterns />
 | 
				
			||||||
 | 
					      <method />
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					    <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application">
 | 
				
			||||||
 | 
					      <module name="" />
 | 
				
			||||||
 | 
					      <option name="ACTIVITY_CLASS" value="" />
 | 
				
			||||||
 | 
					      <option name="MODE" value="default_activity" />
 | 
				
			||||||
 | 
					      <option name="DEPLOY" value="true" />
 | 
				
			||||||
 | 
					      <option name="ARTIFACT_NAME" value="" />
 | 
				
			||||||
 | 
					      <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
 | 
				
			||||||
 | 
					      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
 | 
				
			||||||
 | 
					      <option name="PREFERRED_AVD" value="" />
 | 
				
			||||||
 | 
					      <option name="USE_COMMAND_LINE" value="true" />
 | 
				
			||||||
 | 
					      <option name="COMMAND_LINE" value="" />
 | 
				
			||||||
 | 
					      <option name="WIPE_USER_DATA" value="false" />
 | 
				
			||||||
 | 
					      <option name="DISABLE_BOOT_ANIMATION" value="false" />
 | 
				
			||||||
 | 
					      <option name="NETWORK_SPEED" value="full" />
 | 
				
			||||||
 | 
					      <option name="NETWORK_LATENCY" value="none" />
 | 
				
			||||||
 | 
					      <option name="CLEAR_LOGCAT" value="false" />
 | 
				
			||||||
 | 
					      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
 | 
				
			||||||
 | 
					      <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" />
 | 
				
			||||||
 | 
					      <method />
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					    <list size="0" />
 | 
				
			||||||
 | 
					    <configuration name="<template>" type="WebApp" default="true" selected="false">
 | 
				
			||||||
 | 
					      <Host>localhost</Host>
 | 
				
			||||||
 | 
					      <Port>5050</Port>
 | 
				
			||||||
 | 
					    </configuration>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ShelveChangesManager" show_recycled="false" />
 | 
				
			||||||
 | 
					  <component name="TaskManager">
 | 
				
			||||||
 | 
					    <task active="true" id="Default" summary="Default task">
 | 
				
			||||||
 | 
					      <changelist id="a5076df4-d3aa-4df3-8298-5d367ebe7288" name="Default" comment="" />
 | 
				
			||||||
 | 
					      <created>1403761977800</created>
 | 
				
			||||||
 | 
					      <updated>1403761977800</updated>
 | 
				
			||||||
 | 
					    </task>
 | 
				
			||||||
 | 
					    <servers />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="ToolWindowManager">
 | 
				
			||||||
 | 
					    <frame x="0" y="22" width="1440" height="874" extended-state="0" />
 | 
				
			||||||
 | 
					    <editor active="true" />
 | 
				
			||||||
 | 
					    <layout>
 | 
				
			||||||
 | 
					      <window_info id="Palette	" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24964234" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
 | 
				
			||||||
 | 
					      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
 | 
				
			||||||
 | 
					      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
 | 
				
			||||||
 | 
					    </layout>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="Vcs.Log.UiProperties">
 | 
				
			||||||
 | 
					    <option name="RECENTLY_FILTERED_USER_GROUPS">
 | 
				
			||||||
 | 
					      <collection />
 | 
				
			||||||
 | 
					    </option>
 | 
				
			||||||
 | 
					    <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
 | 
				
			||||||
 | 
					      <collection />
 | 
				
			||||||
 | 
					    </option>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="VcsContentAnnotationSettings">
 | 
				
			||||||
 | 
					    <option name="myLimit" value="2678400000" />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="VcsManagerConfiguration">
 | 
				
			||||||
 | 
					    <option name="myTodoPanelSettings">
 | 
				
			||||||
 | 
					      <TodoPanelSettings />
 | 
				
			||||||
 | 
					    </option>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="XDebuggerManager">
 | 
				
			||||||
 | 
					    <breakpoint-manager />
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					  <component name="editorHistoryManager">
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/SignatureBuilderException.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="255">
 | 
				
			||||||
 | 
					          <caret line="2" column="13" selection-start-line="2" selection-start-column="13" selection-end-line="2" selection-end-column="13" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/TokenAuth.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="139" max-vertical-offset="1965">
 | 
				
			||||||
 | 
					          <caret line="40" column="13" selection-start-line="40" selection-start-column="13" selection-end-line="40" selection-end-column="13" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/SignatureExceptionHandler.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="542" max-vertical-offset="1275">
 | 
				
			||||||
 | 
					          <caret line="72" column="92" selection-start-line="72" selection-start-column="4" selection-end-line="72" selection-end-column="4" />
 | 
				
			||||||
 | 
					          <folding>
 | 
				
			||||||
 | 
					            <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					          </folding>
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/HttpPoolCleaner.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="900">
 | 
				
			||||||
 | 
					          <caret line="12" column="13" selection-start-line="12" selection-start-column="13" selection-end-line="12" selection-end-column="13" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/HttpClientPoolFactory.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="1307" max-vertical-offset="2040">
 | 
				
			||||||
 | 
					          <caret line="30" column="66" selection-start-line="30" selection-start-column="49" selection-end-line="30" selection-end-column="49" />
 | 
				
			||||||
 | 
					          <folding>
 | 
				
			||||||
 | 
					            <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					            <element signature="e#2840#2841#0" expanded="true" />
 | 
				
			||||||
 | 
					            <element signature="e#2888#2889#0" expanded="true" />
 | 
				
			||||||
 | 
					            <element signature="e#2962#2963#0" expanded="true" />
 | 
				
			||||||
 | 
					            <element signature="e#3002#3003#0" expanded="true" />
 | 
				
			||||||
 | 
					          </folding>
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/HttpClientFactory.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="525">
 | 
				
			||||||
 | 
					          <caret line="20" column="64" selection-start-line="20" selection-start-column="45" selection-end-line="20" selection-end-column="45" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/HttpAuthClient.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="4245">
 | 
				
			||||||
 | 
					          <caret line="31" column="13" selection-start-line="31" selection-start-column="13" selection-end-line="31" selection-end-column="13" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/FilterUtils.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="349" max-vertical-offset="4005">
 | 
				
			||||||
 | 
					          <caret line="39" column="13" selection-start-line="39" selection-start-column="13" selection-end-line="39" selection-end-column="13" />
 | 
				
			||||||
 | 
					          <folding>
 | 
				
			||||||
 | 
					            <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					          </folding>
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/ExceptionHandlerUtil.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="600">
 | 
				
			||||||
 | 
					          <caret line="2" column="13" selection-start-line="2" selection-start-column="13" selection-end-line="2" selection-end-column="13" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/Config.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="3795">
 | 
				
			||||||
 | 
					          <caret line="12" column="13" selection-start-line="12" selection-start-column="13" selection-end-line="12" selection-end-column="13" />
 | 
				
			||||||
 | 
					          <folding>
 | 
				
			||||||
 | 
					            <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					          </folding>
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/CatalogV3.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="465">
 | 
				
			||||||
 | 
					          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthConstants.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="2829" max-vertical-offset="3585">
 | 
				
			||||||
 | 
					          <caret line="45" column="76" selection-start-line="45" selection-start-column="53" selection-end-line="45" selection-end-column="53" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthClient.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="390">
 | 
				
			||||||
 | 
					          <caret line="20" column="20" selection-start-line="20" selection-start-column="0" selection-end-line="20" selection-end-column="0" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthClientFactory.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="1194" max-vertical-offset="1950">
 | 
				
			||||||
 | 
					          <caret line="27" column="69" selection-start-line="27" selection-start-column="69" selection-end-line="27" selection-end-column="69" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthConnectionException.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="300">
 | 
				
			||||||
 | 
					          <caret line="9" column="44" selection-start-line="9" selection-start-column="44" selection-end-line="9" selection-end-column="44" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/AuthException.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="330">
 | 
				
			||||||
 | 
					          <caret line="8" column="16" selection-start-line="8" selection-start-column="16" selection-end-line="8" selection-end-column="16" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/TokenCache.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="1" max-vertical-offset="1020">
 | 
				
			||||||
 | 
					          <caret line="22" column="21" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
 | 
				
			||||||
 | 
					          <folding>
 | 
				
			||||||
 | 
					            <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					          </folding>
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/TokenExceptionHandler.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.0" vertical-offset="947" max-vertical-offset="1680">
 | 
				
			||||||
 | 
					          <caret line="90" column="28" selection-start-line="0" selection-start-column="0" selection-end-line="106" selection-end-column="0" />
 | 
				
			||||||
 | 
					          <folding>
 | 
				
			||||||
 | 
					            <element signature="imports" expanded="true" />
 | 
				
			||||||
 | 
					          </folding>
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					    <entry file="file://$PROJECT_DIR$/src/main/java/com/hpcloud/middleware/UnavailableException.java">
 | 
				
			||||||
 | 
					      <provider selected="true" editor-type-id="text-editor">
 | 
				
			||||||
 | 
					        <state vertical-scroll-proportion="0.26603" vertical-offset="0" max-vertical-offset="733">
 | 
				
			||||||
 | 
					          <caret line="17" column="80" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="0" />
 | 
				
			||||||
 | 
					          <folding />
 | 
				
			||||||
 | 
					        </state>
 | 
				
			||||||
 | 
					      </provider>
 | 
				
			||||||
 | 
					    </entry>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										103
									
								
								java/mon-middleware/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								java/mon-middleware/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
				
			|||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
					  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
 | 
					  <modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
 | 
					  <parent>
 | 
				
			||||||
 | 
					    <groupId>com.hpcloud</groupId>
 | 
				
			||||||
 | 
					    <artifactId>mon-common</artifactId>
 | 
				
			||||||
 | 
					    <version>${computedVersion}</version>
 | 
				
			||||||
 | 
					  </parent>
 | 
				
			||||||
 | 
					  <artifactId>mon-middleware</artifactId>
 | 
				
			||||||
 | 
					  <packaging>jar</packaging>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <properties>
 | 
				
			||||||
 | 
					  </properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <dependencies>
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					      <groupId>com.google.guava</groupId>
 | 
				
			||||||
 | 
					      <artifactId>guava</artifactId>
 | 
				
			||||||
 | 
					      <version>17.0</version>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					      <groupId>org.apache.httpcomponents</groupId>
 | 
				
			||||||
 | 
					      <artifactId>httpclient</artifactId>
 | 
				
			||||||
 | 
					      <version>4.2.1</version>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					      <groupId>com.google.code.gson</groupId>
 | 
				
			||||||
 | 
					      <artifactId>gson</artifactId>
 | 
				
			||||||
 | 
					      <version>2.2.4</version>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					      <groupId>commons-pool</groupId>
 | 
				
			||||||
 | 
					      <artifactId>commons-pool</artifactId>
 | 
				
			||||||
 | 
					      <version>1.6</version>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					  <groupId>org.apache.thrift</groupId>
 | 
				
			||||||
 | 
					  <artifactId>libthrift</artifactId>
 | 
				
			||||||
 | 
					  <version>0.9.0</version>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					   <dependency>
 | 
				
			||||||
 | 
					      <groupId>org.apache.commons</groupId>
 | 
				
			||||||
 | 
					      <artifactId>commons-collections4</artifactId>
 | 
				
			||||||
 | 
					      <version>4.0</version>
 | 
				
			||||||
 | 
					   </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <dependency>
 | 
				
			||||||
 | 
					     <groupId>org.eclipse.jetty</groupId>
 | 
				
			||||||
 | 
					     <artifactId>jetty-servlet-tester</artifactId>
 | 
				
			||||||
 | 
					     <version>7.0.0.M2</version>
 | 
				
			||||||
 | 
					     <scope>test</scope>
 | 
				
			||||||
 | 
					   </dependency>
 | 
				
			||||||
 | 
					   <dependency>
 | 
				
			||||||
 | 
					     <groupId>javax.servlet</groupId>
 | 
				
			||||||
 | 
					     <artifactId>servlet-api</artifactId>
 | 
				
			||||||
 | 
					     <scope>provided</scope>
 | 
				
			||||||
 | 
					     <version>2.5</version>
 | 
				
			||||||
 | 
					   </dependency>
 | 
				
			||||||
 | 
					   <!-- Test dependencies -->
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					      <groupId>com.hpcloud</groupId>
 | 
				
			||||||
 | 
					      <artifactId>mon-testing</artifactId>
 | 
				
			||||||
 | 
					      <version>${project.version}</version>
 | 
				
			||||||
 | 
					      <scope>test</scope>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					    <dependency>
 | 
				
			||||||
 | 
					      <groupId>com.hpcloud</groupId>
 | 
				
			||||||
 | 
					      <artifactId>mon-util</artifactId>
 | 
				
			||||||
 | 
					      <version>${project.version}</version>
 | 
				
			||||||
 | 
					      <scope>test</scope>
 | 
				
			||||||
 | 
					    </dependency>
 | 
				
			||||||
 | 
					  </dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <repositories>
 | 
				
			||||||
 | 
					    <repository>
 | 
				
			||||||
 | 
					      <id>clojars.org</id>
 | 
				
			||||||
 | 
					      <url>http://clojars.org/repo</url>
 | 
				
			||||||
 | 
					    </repository>
 | 
				
			||||||
 | 
					  </repositories>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <build>
 | 
				
			||||||
 | 
					        <plugins>
 | 
				
			||||||
 | 
					            <plugin>
 | 
				
			||||||
 | 
					                <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
 | 
					                <artifactId>maven-jar-plugin</artifactId>
 | 
				
			||||||
 | 
					                <version>2.4</version>
 | 
				
			||||||
 | 
					                <executions>
 | 
				
			||||||
 | 
					                    <execution>
 | 
				
			||||||
 | 
					                        <goals>
 | 
				
			||||||
 | 
					                            <goal>test-jar</goal>
 | 
				
			||||||
 | 
					                        </goals>
 | 
				
			||||||
 | 
					                    </execution>
 | 
				
			||||||
 | 
					                </executions>
 | 
				
			||||||
 | 
					            </plugin>
 | 
				
			||||||
 | 
					        </plugins>
 | 
				
			||||||
 | 
					    </build>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.http.client.ClientProtocolException;
 | 
				
			||||||
 | 
					import org.apache.thrift.TException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A client that can communicate to an authentication server for authentication.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author liemmn
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public interface AuthClient {
 | 
				
			||||||
 | 
					  public Object validateTokenForServiceEndpointV2(String token,
 | 
				
			||||||
 | 
					    String serviceIds, String endpointIds, boolean includeCatalog)
 | 
				
			||||||
 | 
					    throws TException, ClientProtocolException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public Object validateTokenForServiceEndpointV3(String token,
 | 
				
			||||||
 | 
					    Map<String, String> inputParams) throws TException, ClientProtocolException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,124 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.commons.pool.impl.GenericObjectPool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A factory for building {@link AuthClient}s.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author liemmn
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public abstract class AuthClientFactory {
 | 
				
			||||||
 | 
					  private static AuthClientFactory instance = null;
 | 
				
			||||||
 | 
					  protected static GenericObjectPool pool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Build a AuthClientFactory. Singleton.
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param host                          Auth host
 | 
				
			||||||
 | 
					   * @param port                          Auth port
 | 
				
			||||||
 | 
					   * @param timeout                       Auth connection timeout
 | 
				
			||||||
 | 
					   * @param clientAuth                    2-way SSL (if false, 1-way SSL is used)
 | 
				
			||||||
 | 
					   * @param keyStore                      Keystore
 | 
				
			||||||
 | 
					   * @param keyPass                       Keystore password
 | 
				
			||||||
 | 
					   * @param trustStore                    Truststore
 | 
				
			||||||
 | 
					   * @param trustPass                     Truststore password
 | 
				
			||||||
 | 
					   * @param maxActive                     Maximum number of objects that can be allocated by the pool
 | 
				
			||||||
 | 
					   *                                      (checked out to clients, or idle awaiting checkout) at a given
 | 
				
			||||||
 | 
					   *                                      time. When non-positive, there is no limit to the number of
 | 
				
			||||||
 | 
					   *                                      objects that can be managed by the pool at one time. When
 | 
				
			||||||
 | 
					   *                                      maxActive is reached, the pool is said to be exhausted. The
 | 
				
			||||||
 | 
					   *                                      default setting for this parameter is 8.
 | 
				
			||||||
 | 
					   * @param maxIdle                       Maximum number of objects that can sit idle in the pool at any
 | 
				
			||||||
 | 
					   *                                      time. When negative, there is no limit to the number of
 | 
				
			||||||
 | 
					   *                                      objects that may be idle at one time. The default setting for
 | 
				
			||||||
 | 
					   *                                      this parameter is 8.
 | 
				
			||||||
 | 
					   * @param timeBetweenEvictionRunsMillis How long the eviction thread should sleep before "runs" of
 | 
				
			||||||
 | 
					   *                                      examining idle objects. When non-positive, no eviction thread
 | 
				
			||||||
 | 
					   *                                      will be launched. The default setting for this parameter is -1
 | 
				
			||||||
 | 
					   *                                      (i.e., idle object eviction is disabled by default).
 | 
				
			||||||
 | 
					   * @param minEvictableIdleTimeMillis    Minimum amount of time that an object may sit idle in the pool
 | 
				
			||||||
 | 
					   *                                      before it is eligible for eviction due to idle time. When
 | 
				
			||||||
 | 
					   *                                      non-positive, no object will be dropped from the pool due to
 | 
				
			||||||
 | 
					   *                                      idle time alone. This setting has no effect unless
 | 
				
			||||||
 | 
					   *                                      timeBetweenEvictionRunsMillis > 0. The default setting for
 | 
				
			||||||
 | 
					   *                                      this parameter is 30 minutes.
 | 
				
			||||||
 | 
					   * @param adminToken                    Admin token for use with vanilla Keystone.
 | 
				
			||||||
 | 
					   * @return AuthClientFactory singleton.
 | 
				
			||||||
 | 
					   * @throws Exception
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static synchronized AuthClientFactory build(String host, int port,
 | 
				
			||||||
 | 
					    int timeout, boolean clientAuth, String keyStore, String keyPass,
 | 
				
			||||||
 | 
					    String trustStore, String trustPass, int maxActive, int maxIdle,
 | 
				
			||||||
 | 
					    long timeBetweenEvictionRunsMillis,
 | 
				
			||||||
 | 
					    long minEvictableIdleTimeMillis, String adminToken)
 | 
				
			||||||
 | 
					    throws Exception {
 | 
				
			||||||
 | 
					    if (instance == null) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      instance = new HttpClientFactory(host, port, timeout,
 | 
				
			||||||
 | 
					        clientAuth, keyStore, keyPass, trustStore, trustPass,
 | 
				
			||||||
 | 
					        adminToken, maxActive, timeBetweenEvictionRunsMillis,
 | 
				
			||||||
 | 
					        minEvictableIdleTimeMillis);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Pool tweaking
 | 
				
			||||||
 | 
					      pool.setMaxActive(maxActive);
 | 
				
			||||||
 | 
					      pool.setMaxIdle(maxIdle);
 | 
				
			||||||
 | 
					      pool.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
 | 
				
			||||||
 | 
					      pool.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return instance;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Get a client. Don't forget to {@link #recycleClient(Client)} after you
 | 
				
			||||||
 | 
					   * are done using it, successfully or not.
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @return Client
 | 
				
			||||||
 | 
					   * @throws Exception
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public AuthClient getClient() {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      return (AuthClient) pool.borrowObject();
 | 
				
			||||||
 | 
					    } catch (Exception e) {
 | 
				
			||||||
 | 
					      throw new AuthConnectionException("Failed to get a client " + e.getMessage(), e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Recycle the client for next usage.
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param client Client to recycle
 | 
				
			||||||
 | 
					   * @throws Exception
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public void recycle(AuthClient client) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      pool.returnObject(client);
 | 
				
			||||||
 | 
					    } catch (Exception e) {
 | 
				
			||||||
 | 
					      throw new AuthConnectionException("Failed to recycle client", e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Call this if the client is unusable (i.e., exception).
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
 | 
					   * @param client Client to discard.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public void discard(AuthClient client) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      pool.invalidateObject(client);
 | 
				
			||||||
 | 
					    } catch (Exception e) {
 | 
				
			||||||
 | 
					      System.out.println("AuthConnection problem destorying");
 | 
				
			||||||
 | 
					      throw new AuthConnectionException("Failed to destroy client", e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Shut down this factory.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public void shutdown() {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      pool.close();
 | 
				
			||||||
 | 
					    } catch (Exception e) {
 | 
				
			||||||
 | 
					      throw new AuthConnectionException("Failed to close client pool", e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * An exception to indicate any connection issue.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author liemmn
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class AuthConnectionException extends RuntimeException {
 | 
				
			||||||
 | 
					  private static final long serialVersionUID = 4318025130590973448L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public AuthConnectionException(String msg) {
 | 
				
			||||||
 | 
					    super(msg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  public AuthConnectionException(String msg, Exception e) {
 | 
				
			||||||
 | 
					    super(msg, e);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,234 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface AuthConstants {
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * 'Confirmed' or 'Invalid'
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static enum IdentityStatus {
 | 
				
			||||||
 | 
					    Confirmed, Invalid
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // =============================== TOKEN ===================================
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Credential (token) header
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String TOKEN = "X-AUTH-TOKEN";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth status parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_IDENTITY_STATUS = "X-IDENTITY-STATUS";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth user Id parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_USER_ID = "X-USER-ID";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth user name parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_USER_NAME = "X-USER-NAME";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth user roles parameter, comma-separated roles
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_ROLES = "X-ROLES";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * json encoded keystone service catalog
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_SERVICE_CATALOG = "X-SERVICE-CATALOG";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Service Ids initialization parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String SERVICE_IDS = "ServiceIds";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Endpoint Ids initialization parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String ENDPOINT_IDS = "EndpointIds";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Keystone admin token for use in vanilla Keystone
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String ADMIN_TOKEN = "AdminToken";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // ============================ CONNECTION =================================
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth server initialization parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String SERVER_VIP = "ServerVIP";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth server port: 9543 for Thrift, 35357 for HTTP.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String SERVER_PORT = "ServerPort";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * connection timeout initialization parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String CONN_TIMEOUT = "ConnTimeout";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * 2-way SSL initialization parameter: True or False
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String CONN_SSL_CLIENT_AUTH = "ConnSSLClientAuth";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * SSL keystore initialization parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String KEYSTORE = "Keystore";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * SSL keystore password initialization parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String KEYSTORE_PASS = "KeystorePass";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * SSL truststore initialization parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String TRUSTSTORE = "Truststore";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * SSL truststore password initialization parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String TRUSTSTORE_PASS = "TruststorePass";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // ============================== POOLING ==================================
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Maximum number of objects that can be allocated by the pool (checked out
 | 
				
			||||||
 | 
					   * to clients, or idle awaiting checkout) at a given time. When
 | 
				
			||||||
 | 
					   * non-positive, there is no limit to the number of objects that can be
 | 
				
			||||||
 | 
					   * managed by the pool at one time. When maxActive is reached, the pool is
 | 
				
			||||||
 | 
					   * said to be exhausted. The default setting for this parameter is 8.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String CONN_POOL_MAX_ACTIVE = "ConnPoolMaxActive";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Maximum number of objects that can sit idle in the pool at any time. When
 | 
				
			||||||
 | 
					   * negative, there is no limit to the number of objects that may be idle at
 | 
				
			||||||
 | 
					   * one time. The default setting for this parameter is 8.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String CONN_POOL_MAX_IDLE = "ConnPoolMaxIdle";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * How long the eviction thread should sleep before "runs" of examining idle
 | 
				
			||||||
 | 
					   * objects. When non-positive, no eviction thread will be launched. The
 | 
				
			||||||
 | 
					   * default setting for this parameter is -1 (i.e., idle object eviction is
 | 
				
			||||||
 | 
					   * disabled by default).
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String CONN_POOL_EVICT_PERIOD = "ConnPoolEvictPeriod";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Minimum amount of time that an object may sit idle in the pool before it
 | 
				
			||||||
 | 
					   * is eligible for eviction due to idle time. When non-positive, no object
 | 
				
			||||||
 | 
					   * will be dropped from the pool due to idle time alone. This setting has no
 | 
				
			||||||
 | 
					   * effect unless ConnPoolEvictPeriod > 0. The default setting for this
 | 
				
			||||||
 | 
					   * parameter is 30 minutes.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String CONN_POOL_MIN_IDLE_TIME = "ConnPoolMinIdleTime";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // ============================== CACHING ==================================
 | 
				
			||||||
 | 
					  public static final String TIME_TO_CACHE_TOKEN = "TimeToCacheToken";
 | 
				
			||||||
 | 
					  public static final String MAX_TOKEN_CACHE_SIZE = "MaxTokenCacheSize";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Number of connection timeout retries *
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String CONN_TIMEOUT_RETRIES = "ConnRetryTimes";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Number of connection timeout retries *
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String PAUSE_BETWEEN_RETRIES = "ConnRetryInterval";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Authentication decision is forwarded to next filter *
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String DELAY_AUTH_DECISION = "DelayAuthDecision";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static final String SIGNATURE_METHOD = "HmacSHA1";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Version of CS to authenticate the credentials *
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_VERSION = "AuthVersion";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Include Service Catalog as part of Authentication Response *
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String INCLUDE_SERVICE_CATALOG = "IncludeServiceCatalog";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Identity service managed unique identifier, string. Only present if this
 | 
				
			||||||
 | 
					   * is a project-scoped v3 token, or a tenant-scoped v2 token.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_PROJECT_ID = "X-PROJECT-ID";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Project name, unique within owning domain, string. Only present if this
 | 
				
			||||||
 | 
					   * is a project-scoped v3 token, or a tenant-scoped v2 token.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_PROJECT_NAME = "X-PROJECT-NAME";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Identity service managed unique identifier of owning domain of project,
 | 
				
			||||||
 | 
					   * string. Only present if this is a project-scoped v3 token. If this
 | 
				
			||||||
 | 
					   * variable is set, this indicates that the PROJECT_NAME can only be assumed
 | 
				
			||||||
 | 
					   * to be unique within this domain.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_PROJECT_DOMAIN_ID = "X-PROJECT-DOMAIN-ID";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Name of owning domain of project, string. Only present if this is a
 | 
				
			||||||
 | 
					   * project-scoped v3 token. If this variable is set, this indicates that the
 | 
				
			||||||
 | 
					   * PROJECT_NAME can only be assumed to be unique within this domain.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_PROJECT_DOMAIN_NAME = "X-PROJECT-DOMAIN-NAME";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Identity service managed unique identifier of owning domain of user,
 | 
				
			||||||
 | 
					   * string. If this variable is set, this indicates that the USER_NAME can
 | 
				
			||||||
 | 
					   * only be assumed to be unique within this domain.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_USER_DOMAIN_ID = "X-USER-DOMAIN-ID";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Name of owning domain of user, string. If this variable is set, this
 | 
				
			||||||
 | 
					   * indicates that the USER_NAME can only be assumed to be unique within this
 | 
				
			||||||
 | 
					   * domain.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_USER_DOMAIN_NAME = "X-USER-DOMAIN-NAME";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Identity service managed unique identifier, string. Only present if this
 | 
				
			||||||
 | 
					   * is a domain-scoped v3 token.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_DOMAIN_ID = "X-DOMAIN-ID";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Unique domain name, string. Only present if this is a domain-scoped v3
 | 
				
			||||||
 | 
					   * token.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_DOMAIN_NAME = "X-DOMAIN-NAME";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static final String AUTH_HP_IDM_ROLES = "X-HP-IDM-Non-Tenant-Roles";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static final String REMOTE_HOST = "RemoteHost";
 | 
				
			||||||
 | 
					  public static final String REMOTE_ADDR = "RemoteAddress";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Depracated Headers.
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth user roles parameter, comma-separated roles
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_ROLE = "X-ROLE";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth tenant Id parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_TENANT_ID = "X-TENANT-ID";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth tenant name parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_TENANT_NAME = "X-TENANT-NAME";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Auth tenant name parameter
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_TENANT = "X-TENANT";
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * *Deprecated* in favor of HTTP_X_USER_ID and HTTP_X_USER_NAME User name,
 | 
				
			||||||
 | 
					   * unique within owning domain, string
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public static final String AUTH_USER = "X-USER";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static final String AUTH_SUBJECT_TOKEN = "X-Subject-Token";
 | 
				
			||||||
 | 
					  public static final String ADMIN_USER = "AdminUser";
 | 
				
			||||||
 | 
					  public static final String ADMIN_PASSWORD = "AdminPassword";
 | 
				
			||||||
 | 
					  public static final String ADMIN_AUTH_METHOD = "AdminAuthMethod";
 | 
				
			||||||
 | 
					  public static final String ADMIN_ACCESS_KEY = "AdminAccessKey";
 | 
				
			||||||
 | 
					  public static final String ADMIN_SECRET_KEY = "AdminSecretKey";
 | 
				
			||||||
 | 
					  public static final String ADMIN_PROJECT_ID = "AdminProjectId";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * An exception to indicate any authentication error.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author liemmn
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class AuthException extends RuntimeException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final long serialVersionUID = 5860956829821067827L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public AuthException(String msg) {
 | 
				
			||||||
 | 
							super(msg);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public AuthException(String msg, Exception e) {
 | 
				
			||||||
 | 
							super(msg, e);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class CatalogV3 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public String getId() {
 | 
				
			||||||
 | 
					    return id;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public void setId(String id) {
 | 
				
			||||||
 | 
					    this.id = id;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public String getType() {
 | 
				
			||||||
 | 
					    return type;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public void setType(String type) {
 | 
				
			||||||
 | 
					    this.type = type;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public List getEndPoints() {
 | 
				
			||||||
 | 
					    return endPoints;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public void setEndPoints(List endPoints) {
 | 
				
			||||||
 | 
					    this.endPoints = endPoints;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  String id;
 | 
				
			||||||
 | 
					  String type;
 | 
				
			||||||
 | 
					  List endPoints;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,281 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.servlet.FilterConfig;
 | 
				
			||||||
 | 
					import javax.servlet.ServletContext;
 | 
				
			||||||
 | 
					import javax.servlet.ServletException;
 | 
				
			||||||
 | 
					import javax.servlet.ServletRequest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Config implements AuthConstants {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Thee faithful logger
 | 
				
			||||||
 | 
					  private static final Logger logger = LoggerFactory
 | 
				
			||||||
 | 
					    .getLogger(Config.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final Config instance = new Config();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final String PASSWORD = "password";
 | 
				
			||||||
 | 
					  private static final String ACCESS_KEY = "accesskey";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Application wide init param -- ServletContext
 | 
				
			||||||
 | 
					  private ServletContext context = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private TokenCache<String, String> client = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Auth client factory
 | 
				
			||||||
 | 
					  private AuthClientFactory factory = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // The service IDs that this filter serves
 | 
				
			||||||
 | 
					  private String serviceIds;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // The optional endpoint IDs that this filter serves
 | 
				
			||||||
 | 
					  private String endpointIds;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //the time to cache token
 | 
				
			||||||
 | 
					  private long timeToCacheToken;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // flag to set if auth decision can be delegated to next filter
 | 
				
			||||||
 | 
					  private boolean delayAuthDecision;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // retries and pauseTime configuration for retry logic
 | 
				
			||||||
 | 
					  private int retries;
 | 
				
			||||||
 | 
					  private int pauseTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // configuration to authenticate against CS api
 | 
				
			||||||
 | 
					  private String authVersion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // flag to include catalog in the response
 | 
				
			||||||
 | 
					  private boolean includeCatalog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // configuration for admin authentication method to be used for 2-way SSL
 | 
				
			||||||
 | 
					  private String adminAuthMethod;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // configuration for admin default project
 | 
				
			||||||
 | 
					  private String adminProjectId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // flag to indicate if the filter is already intialized with required parameters
 | 
				
			||||||
 | 
					  private volatile boolean initialized = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //context is not getting properly filed so will use FilterConfig
 | 
				
			||||||
 | 
					  private FilterConfig filterConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private Config() {
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static Config getInstance() {
 | 
				
			||||||
 | 
					    return instance;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public synchronized void initialize(FilterConfig config, ServletRequest req, Map<String, String> map) throws ServletException {
 | 
				
			||||||
 | 
					    this.context = config.getServletContext();
 | 
				
			||||||
 | 
					    this.filterConfig = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      // Initialize serviceIds...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      serviceIds = filterConfig.getInitParameter(SERVICE_IDS);
 | 
				
			||||||
 | 
					      // Initialize endpointIds...
 | 
				
			||||||
 | 
					      endpointIds = filterConfig.getInitParameter(ENDPOINT_IDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Initialize auth server connection parameters...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      String host = filterConfig.getInitParameter(SERVER_VIP);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      int port = Integer.parseInt(filterConfig.getInitParameter(SERVER_PORT));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // HP Keystone Server only supports authentication against
 | 
				
			||||||
 | 
					      // V3.0 api
 | 
				
			||||||
 | 
					      authVersion = getValue(AUTH_VERSION, "v3.0");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if ((serviceIds == null || serviceIds.isEmpty())
 | 
				
			||||||
 | 
					        && (endpointIds == null || endpointIds.isEmpty())
 | 
				
			||||||
 | 
					        && authVersion.equalsIgnoreCase("v2.0")) {
 | 
				
			||||||
 | 
					        throw new Throwable("Need to specify " + SERVICE_IDS);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Initialize Certificates
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      String keyStore = filterConfig.getInitParameter(KEYSTORE);
 | 
				
			||||||
 | 
					      String keyPass = filterConfig.getInitParameter(KEYSTORE_PASS);
 | 
				
			||||||
 | 
					      String trustStore = filterConfig.getInitParameter(TRUSTSTORE);
 | 
				
			||||||
 | 
					      String trustPass = filterConfig.getInitParameter(TRUSTSTORE_PASS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      String adminToken = getValue(ADMIN_TOKEN, "");
 | 
				
			||||||
 | 
					      int timeout = getValue(CONN_TIMEOUT, 0);
 | 
				
			||||||
 | 
					      boolean clientAuth = getValue(CONN_SSL_CLIENT_AUTH, true);
 | 
				
			||||||
 | 
					      int maxActive = getValue(CONN_POOL_MAX_ACTIVE, 3);
 | 
				
			||||||
 | 
					      int maxIdle = getValue(CONN_POOL_MAX_IDLE, 3);
 | 
				
			||||||
 | 
					      long evictPeriod = getValue(CONN_POOL_EVICT_PERIOD, 60000L);
 | 
				
			||||||
 | 
					      long minIdleTime = getValue(CONN_POOL_MIN_IDLE_TIME, 90000L);
 | 
				
			||||||
 | 
					      retries = getValue(CONN_TIMEOUT_RETRIES, 3);
 | 
				
			||||||
 | 
					      pauseTime = getValue(PAUSE_BETWEEN_RETRIES, 100);
 | 
				
			||||||
 | 
					      delayAuthDecision = getValue(DELAY_AUTH_DECISION, false);
 | 
				
			||||||
 | 
					      includeCatalog = getValue(INCLUDE_SERVICE_CATALOG, true);
 | 
				
			||||||
 | 
					      adminAuthMethod = getValue(ADMIN_AUTH_METHOD, "");
 | 
				
			||||||
 | 
					      adminProjectId = getValue(ADMIN_PROJECT_ID, "");
 | 
				
			||||||
 | 
					      timeToCacheToken = getValue(TIME_TO_CACHE_TOKEN, 600);
 | 
				
			||||||
 | 
					      long maxTokenCacheTime = getValue(MAX_TOKEN_CACHE_SIZE, 1048576);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      this.factory = AuthClientFactory.build(host, port, timeout,
 | 
				
			||||||
 | 
					        clientAuth, null, null, trustStore, trustPass,
 | 
				
			||||||
 | 
					        maxActive, maxIdle, evictPeriod, minIdleTime, adminToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      verifyRequiredParamsForAuthMethod();
 | 
				
			||||||
 | 
					      this.client = new TokenCache<>(timeToCacheToken, timeToCacheToken, map);
 | 
				
			||||||
 | 
					      logger.info("Auth host (2-way SSL: " + clientAuth + "): " + host);
 | 
				
			||||||
 | 
					      logger.info("Read Servlet Initialization Parameters ");
 | 
				
			||||||
 | 
					      initialized = true;
 | 
				
			||||||
 | 
					    } catch (Throwable t) {
 | 
				
			||||||
 | 
					      logger.error("Failed to read Servlet Initialization Parameters ",
 | 
				
			||||||
 | 
					        t.getMessage());
 | 
				
			||||||
 | 
					      throw new ServletException(
 | 
				
			||||||
 | 
					        "Failed to read Servlet Initialization Parameters :: "
 | 
				
			||||||
 | 
					          + t.getMessage(), t);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public boolean isInitialized() {
 | 
				
			||||||
 | 
					    return initialized;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getAdminProject() {
 | 
				
			||||||
 | 
					    return adminProjectId;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getAdminAccessKey() {
 | 
				
			||||||
 | 
					    if (context.getAttribute(ADMIN_ACCESS_KEY) != null) {
 | 
				
			||||||
 | 
					      return (String) context.getAttribute(ADMIN_ACCESS_KEY);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return getValue(ADMIN_ACCESS_KEY, "");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getAdminSecretKey() {
 | 
				
			||||||
 | 
					    if (context.getAttribute(ADMIN_SECRET_KEY) != null) {
 | 
				
			||||||
 | 
					      return (String) context.getAttribute(ADMIN_SECRET_KEY);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return getValue(ADMIN_SECRET_KEY, "");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getAdminToken() {
 | 
				
			||||||
 | 
					    return getValue(ADMIN_TOKEN, "");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getAdminAuthMethod() {
 | 
				
			||||||
 | 
					    return adminAuthMethod;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getAdminUser() {
 | 
				
			||||||
 | 
					    if (context.getAttribute(ADMIN_USER) != null) {
 | 
				
			||||||
 | 
					      return (String) context.getAttribute(ADMIN_USER);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return getValue(ADMIN_USER, "");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getAdminPassword() {
 | 
				
			||||||
 | 
					    if (context.getAttribute(ADMIN_PASSWORD) != null) {
 | 
				
			||||||
 | 
					      String password = (String) context.getAttribute(ADMIN_PASSWORD);
 | 
				
			||||||
 | 
					      return password;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return getValue(ADMIN_PASSWORD, "");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected boolean isIncludeCatalog() {
 | 
				
			||||||
 | 
					    return includeCatalog;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getAuthVersion() {
 | 
				
			||||||
 | 
					    return authVersion;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected ServletContext getConfig() {
 | 
				
			||||||
 | 
					    return context;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected TokenCache<String, String> getClient() {
 | 
				
			||||||
 | 
					    return client;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected AuthClientFactory getFactory() {
 | 
				
			||||||
 | 
					    return factory;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getServiceIds() {
 | 
				
			||||||
 | 
					    return serviceIds;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected String getEndpointIds() {
 | 
				
			||||||
 | 
					    return endpointIds;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected boolean isDelayAuthDecision() {
 | 
				
			||||||
 | 
					    return delayAuthDecision;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected int getRetries() {
 | 
				
			||||||
 | 
					    return retries;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected int getPauseTime() {
 | 
				
			||||||
 | 
					    return pauseTime;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public long getTimeToCacheToken() {
 | 
				
			||||||
 | 
					    return timeToCacheToken;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public void setTimeToCacheToken(long timeToCachedToken) {
 | 
				
			||||||
 | 
					    this.timeToCacheToken = timeToCachedToken;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public void setClient(TokenCache<String, String> client) {
 | 
				
			||||||
 | 
					    this.client = client;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private <T> T getValue(String paramName, T defaultValue) {
 | 
				
			||||||
 | 
					    Class type = defaultValue.getClass();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String initparamValue = filterConfig.getInitParameter(paramName);
 | 
				
			||||||
 | 
					    if (initparamValue != null && !initparamValue.isEmpty()) {
 | 
				
			||||||
 | 
					      if (type.equals(Integer.class)) {
 | 
				
			||||||
 | 
					        int paramValue = Integer.parseInt(initparamValue);
 | 
				
			||||||
 | 
					        return (T) type.cast(paramValue);
 | 
				
			||||||
 | 
					      } else if (type.equals(Long.class)) {
 | 
				
			||||||
 | 
					        long paramValue = Long.parseLong(initparamValue);
 | 
				
			||||||
 | 
					        return (T) type.cast(paramValue);
 | 
				
			||||||
 | 
					      } else if (type.equals(Boolean.class)) {
 | 
				
			||||||
 | 
					        boolean paramValue = Boolean.parseBoolean(initparamValue);
 | 
				
			||||||
 | 
					        return (T) type.cast(paramValue);
 | 
				
			||||||
 | 
					      } else if (type.equals(String.class)) {
 | 
				
			||||||
 | 
					        return (T) type.cast(initparamValue);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return defaultValue;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private void verifyRequiredParamsForAuthMethod() {
 | 
				
			||||||
 | 
					    if (adminAuthMethod.equalsIgnoreCase(PASSWORD)) {
 | 
				
			||||||
 | 
					      if (getAdminUser().isEmpty() || getAdminPassword().isEmpty()) {
 | 
				
			||||||
 | 
					        String msg = String
 | 
				
			||||||
 | 
					          .format("admin user and password must be specified if admin auth method is %s",
 | 
				
			||||||
 | 
					            adminAuthMethod);
 | 
				
			||||||
 | 
					        throw new AuthException(msg);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } else if (adminAuthMethod.equalsIgnoreCase(ACCESS_KEY)) {
 | 
				
			||||||
 | 
					      if (getAdminAccessKey().isEmpty() || getAdminSecretKey().isEmpty()) {
 | 
				
			||||||
 | 
					        String msg = String
 | 
				
			||||||
 | 
					          .format("admin access and secret key must be specified if admin auth method is %s",
 | 
				
			||||||
 | 
					            adminAuthMethod);
 | 
				
			||||||
 | 
					        throw new AuthException(msg);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class ExceptionHandlerUtil {
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public final static String SERVICE_UNAVAILABLE = "Service Unavailable";
 | 
				
			||||||
 | 
						public final static String UNAUTHORIZED_TOKEN = "Unauthorized Token";
 | 
				
			||||||
 | 
						public final static String INTERNAL_SERVER_ERROR = "Internal Server Error";
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private ExceptionHandlerUtil() {	
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static String getStatusText(int errorCode) {
 | 
				
			||||||
 | 
							if (errorCode == 401) {
 | 
				
			||||||
 | 
								return UNAUTHORIZED_TOKEN;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (errorCode == 503) {
 | 
				
			||||||
 | 
								return SERVICE_UNAVAILABLE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (errorCode == 500) {
 | 
				
			||||||
 | 
								return INTERNAL_SERVER_ERROR;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return "Unknown Error";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static TokenExceptionHandler lookUpTokenException(Exception ex) {
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								return TokenExceptionHandler.valueOf(ex.getClass().getSimpleName());
 | 
				
			||||||
 | 
							} catch (IllegalArgumentException iae) {
 | 
				
			||||||
 | 
								return TokenExceptionHandler.valueOf("ResourceException");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,261 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_IDENTITY_STATUS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_ROLES;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_TENANT_NAME;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_USER_ID;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_DOMAIN_ID;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_DOMAIN_NAME;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_PROJECT_ID;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_PROJECT_NAME;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_TENANT_ID;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_USER_NAME;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.IdentityStatus;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_PROJECT_DOMAIN_ID;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_PROJECT_DOMAIN_NAME;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_USER_DOMAIN_ID;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_USER_DOMAIN_NAME;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_HP_IDM_ROLES;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_SERVICE_CATALOG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.lang.reflect.Modifier;
 | 
				
			||||||
 | 
					import java.util.Iterator;
 | 
				
			||||||
 | 
					import javax.servlet.ServletRequest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.gson.Gson;
 | 
				
			||||||
 | 
					import com.google.gson.GsonBuilder;
 | 
				
			||||||
 | 
					import com.google.gson.JsonArray;
 | 
				
			||||||
 | 
					import com.google.gson.JsonElement;
 | 
				
			||||||
 | 
					import com.google.gson.JsonNull;
 | 
				
			||||||
 | 
					import com.google.gson.JsonObject;
 | 
				
			||||||
 | 
					import com.google.gson.JsonParser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class FilterUtils {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private FilterUtils() {
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final Config appConfig = Config.getInstance();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final Gson gson = new GsonBuilder()
 | 
				
			||||||
 | 
					    .excludeFieldsWithModifiers(Modifier.PRIVATE, Modifier.FINAL)
 | 
				
			||||||
 | 
					    .create();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Thee faithful logger
 | 
				
			||||||
 | 
					  private static final Logger logger = LoggerFactory
 | 
				
			||||||
 | 
					    .getLogger(FilterUtils.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static void destroyFilter() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TokenCache<String, String> client = appConfig.getClient();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (client != null)
 | 
				
			||||||
 | 
					      appConfig.setClient(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AuthClientFactory factory = appConfig.getFactory();
 | 
				
			||||||
 | 
					    // Shutdown factory
 | 
				
			||||||
 | 
					    if (factory != null) {
 | 
				
			||||||
 | 
					      factory.shutdown();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static ServletRequest wrapRequestFromHttpResponse(
 | 
				
			||||||
 | 
					    ServletRequest req, String data) {
 | 
				
			||||||
 | 
					    if (appConfig.getAuthVersion().equalsIgnoreCase("v2.0")) {
 | 
				
			||||||
 | 
					      wrapRequestFromHttpV2Response(req, data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      wrapRequestFromHttpV3Response(req, data);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return req;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static void wrapRequestFromHttpV3Response(ServletRequest req,
 | 
				
			||||||
 | 
					    String data) {
 | 
				
			||||||
 | 
					    StringBuilder tenants = new StringBuilder();
 | 
				
			||||||
 | 
					    StringBuilder nonTenants = new StringBuilder();
 | 
				
			||||||
 | 
					    JsonParser jp = new JsonParser();
 | 
				
			||||||
 | 
					    JsonObject token = jp.parse(data).getAsJsonObject().get("token")
 | 
				
			||||||
 | 
					      .getAsJsonObject();
 | 
				
			||||||
 | 
					    // Domain Scoped Token
 | 
				
			||||||
 | 
					    if (token.get("domain") != null) {
 | 
				
			||||||
 | 
					      JsonObject domain = token.get("domain").getAsJsonObject();
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_DOMAIN_ID, domain.get("id").getAsString());
 | 
				
			||||||
 | 
					      if (domain.get("name") != null) {
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_DOMAIN_NAME, domain.get("name")
 | 
				
			||||||
 | 
					          .getAsString());
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // Project Scoped Token
 | 
				
			||||||
 | 
					    if (token.get("project") != null) {
 | 
				
			||||||
 | 
					      JsonObject project = token.get("project").getAsJsonObject();
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_PROJECT_ID, project.get("id").getAsString());
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_PROJECT_NAME, project.get("name")
 | 
				
			||||||
 | 
					        .getAsString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      JsonObject projectDomain = project.get("domain").getAsJsonObject();
 | 
				
			||||||
 | 
					      // special case where the value of id is null and the
 | 
				
			||||||
 | 
					      // projectDomain.get("id") != null
 | 
				
			||||||
 | 
					      if (!projectDomain.get("id").equals(new JsonNull())) {
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_PROJECT_DOMAIN_ID, projectDomain
 | 
				
			||||||
 | 
					          .get("id").getAsString());
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (projectDomain.get("name") != null) {
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_PROJECT_DOMAIN_NAME,
 | 
				
			||||||
 | 
					          projectDomain.get("name"));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // User info
 | 
				
			||||||
 | 
					    if (token.get("user") != null) {
 | 
				
			||||||
 | 
					      JsonObject user = token.get("user").getAsJsonObject();
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_USER_ID, user.get("id").getAsString());
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_USER_NAME, user.get("name").getAsString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      JsonObject userDomain = user.get("domain").getAsJsonObject();
 | 
				
			||||||
 | 
					      if (userDomain.get("id") != null) {
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_USER_DOMAIN_ID, userDomain.get("id")
 | 
				
			||||||
 | 
					          .getAsString());
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (userDomain.get("name") != null) {
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_USER_DOMAIN_NAME, userDomain.get("name")
 | 
				
			||||||
 | 
					          .getAsString());
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // Roles
 | 
				
			||||||
 | 
					    JsonArray roles = token.getAsJsonArray("roles");
 | 
				
			||||||
 | 
					    if (roles != null) {
 | 
				
			||||||
 | 
					      Iterator<JsonElement> it = roles.iterator();
 | 
				
			||||||
 | 
					      StringBuilder roleBuilder = new StringBuilder();
 | 
				
			||||||
 | 
					      while (it.hasNext()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Changed to meet my purposes
 | 
				
			||||||
 | 
					        JsonObject role = it.next().getAsJsonObject();
 | 
				
			||||||
 | 
					        String currentRole = role.get("name").getAsString();
 | 
				
			||||||
 | 
					        roleBuilder.append(currentRole).append(",");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      //My changes to meet my needs
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_ROLES, roleBuilder.toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    String tenantRoles = (tenants.length() > 0) ? tenants.substring(1)
 | 
				
			||||||
 | 
					      : tenants.toString();
 | 
				
			||||||
 | 
					    String nonTenantRoles = (nonTenants.length() > 0) ? nonTenants
 | 
				
			||||||
 | 
					      .substring(1) : nonTenants.toString();
 | 
				
			||||||
 | 
					    if (!tenantRoles.equals("")) {
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_ROLES, tenantRoles);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!nonTenantRoles.equals("")) {
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_HP_IDM_ROLES, nonTenantRoles);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // Catalog
 | 
				
			||||||
 | 
					    if (token.get("catalog") != null && appConfig.isIncludeCatalog()) {
 | 
				
			||||||
 | 
					      JsonArray catalog = token.get("catalog").getAsJsonArray();
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_SERVICE_CATALOG, catalog.toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static void wrapRequestFromHttpV2Response(ServletRequest req,
 | 
				
			||||||
 | 
					    String data) {
 | 
				
			||||||
 | 
					    StringBuilder tenants = new StringBuilder();
 | 
				
			||||||
 | 
					    StringBuilder nonTenants = new StringBuilder();
 | 
				
			||||||
 | 
					    JsonParser jp = new JsonParser();
 | 
				
			||||||
 | 
					    JsonObject access = jp.parse(data).getAsJsonObject().get("access")
 | 
				
			||||||
 | 
					      .getAsJsonObject();
 | 
				
			||||||
 | 
					    JsonObject token = access.get("token").getAsJsonObject();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Tenant info
 | 
				
			||||||
 | 
					    if (token.get("tenant") != null) {
 | 
				
			||||||
 | 
					      JsonObject tenant = token.get("tenant").getAsJsonObject();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      String id = tenant.get("id").getAsString();
 | 
				
			||||||
 | 
					      String name = tenant.get("name").getAsString();
 | 
				
			||||||
 | 
					      if (id != null)
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_TENANT_ID, id);
 | 
				
			||||||
 | 
					      if (name != null)
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_TENANT_NAME, name);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // User info
 | 
				
			||||||
 | 
					    if (access.get("user") != null) {
 | 
				
			||||||
 | 
					      JsonObject user = access.get("user").getAsJsonObject();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      String userId = user.get("id").getAsString();
 | 
				
			||||||
 | 
					      String username = user.get("name").getAsString();
 | 
				
			||||||
 | 
					      if (userId != null)
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_USER_ID, userId);
 | 
				
			||||||
 | 
					      if (username != null)
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_USER_NAME, username);
 | 
				
			||||||
 | 
					      // Roles
 | 
				
			||||||
 | 
					      JsonArray roles = user.getAsJsonArray("roles");
 | 
				
			||||||
 | 
					      if (roles != null) {
 | 
				
			||||||
 | 
					        Iterator<JsonElement> it = roles.iterator();
 | 
				
			||||||
 | 
					        while (it.hasNext()) {
 | 
				
			||||||
 | 
					          JsonObject role = it.next().getAsJsonObject();
 | 
				
			||||||
 | 
					          if (role.get("tenantId") != null) {
 | 
				
			||||||
 | 
					            tenants.append(",");
 | 
				
			||||||
 | 
					            tenants.append(role.get("name").getAsString());
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            nonTenants.append(",");
 | 
				
			||||||
 | 
					            nonTenants.append(role.get("name").getAsString());
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      String tenantRoles = (tenants.length() > 0) ? tenants.substring(1)
 | 
				
			||||||
 | 
					        : tenants.toString();
 | 
				
			||||||
 | 
					      if (!tenantRoles.equals("")) {
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_ROLES, tenantRoles);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      String nonTenantRoles = (nonTenants.length() > 0) ? nonTenants
 | 
				
			||||||
 | 
					        .substring(1) : nonTenants.toString();
 | 
				
			||||||
 | 
					      if (!nonTenantRoles.equals("")) {
 | 
				
			||||||
 | 
					        req.setAttribute(AUTH_HP_IDM_ROLES, nonTenantRoles);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // Service catalog
 | 
				
			||||||
 | 
					    if (access.get("serviceCatalog") != null
 | 
				
			||||||
 | 
					      && appConfig.isIncludeCatalog()) {
 | 
				
			||||||
 | 
					      JsonArray serviceCatalog = access.get("serviceCatalog")
 | 
				
			||||||
 | 
					        .getAsJsonArray();
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_SERVICE_CATALOG, serviceCatalog.toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static ServletRequest wrapRequest(ServletRequest req, Object data) {
 | 
				
			||||||
 | 
					    if (data == null) {
 | 
				
			||||||
 | 
					      req.setAttribute(AUTH_IDENTITY_STATUS,
 | 
				
			||||||
 | 
					        IdentityStatus.Invalid.toString());
 | 
				
			||||||
 | 
					      logger.debug("Failed Authentication. Setting identity status header to Invalid");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    req.setAttribute(AUTH_IDENTITY_STATUS,
 | 
				
			||||||
 | 
					      IdentityStatus.Confirmed.toString());
 | 
				
			||||||
 | 
					    if (data instanceof String) {
 | 
				
			||||||
 | 
					      wrapRequestFromHttpResponse(req, ((String) data));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return req;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Insert token into cache
 | 
				
			||||||
 | 
					  public static void cacheToken(String token, Object auth) {
 | 
				
			||||||
 | 
					    appConfig.getClient().put(token, (String) auth);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Get token from cache
 | 
				
			||||||
 | 
					  public static Object getCachedToken(String token) throws IOException {
 | 
				
			||||||
 | 
					    return appConfig.getClient().getToken(token);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public static void pause(long pauseTime) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      Thread.currentThread().sleep(pauseTime);
 | 
				
			||||||
 | 
					    } catch (InterruptedException e) {
 | 
				
			||||||
 | 
					      logger.debug("Thread is interrupted while sleeping before "
 | 
				
			||||||
 | 
					        + pauseTime + " seconds. ");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,304 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.TOKEN;
 | 
				
			||||||
 | 
					import static com.hpcloud.middleware.AuthConstants.AUTH_SUBJECT_TOKEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.BufferedReader;
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.io.InputStream;
 | 
				
			||||||
 | 
					import java.io.InputStreamReader;
 | 
				
			||||||
 | 
					import java.io.UnsupportedEncodingException;
 | 
				
			||||||
 | 
					import java.net.ConnectException;
 | 
				
			||||||
 | 
					import java.net.URI;
 | 
				
			||||||
 | 
					import java.text.ParseException;
 | 
				
			||||||
 | 
					import java.text.SimpleDateFormat;
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.TimeZone;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.http.Header;
 | 
				
			||||||
 | 
					import org.apache.http.HttpEntity;
 | 
				
			||||||
 | 
					import org.apache.http.HttpResponse;
 | 
				
			||||||
 | 
					import org.apache.http.client.ClientProtocolException;
 | 
				
			||||||
 | 
					import org.apache.http.client.HttpClient;
 | 
				
			||||||
 | 
					import org.apache.http.client.methods.HttpGet;
 | 
				
			||||||
 | 
					import org.apache.http.client.methods.HttpPost;
 | 
				
			||||||
 | 
					import org.apache.http.entity.StringEntity;
 | 
				
			||||||
 | 
					import org.apache.http.message.BasicHeader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.gson.JsonObject;
 | 
				
			||||||
 | 
					import com.google.gson.JsonParser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class HttpAuthClient implements AuthClient {
 | 
				
			||||||
 | 
						private static final String ACCESSKEY = "accesskey";
 | 
				
			||||||
 | 
						private static final String PASSWORD = "password";
 | 
				
			||||||
 | 
						private static final String SERVICE_IDS_PARAM = "serviceIds";
 | 
				
			||||||
 | 
						private static final String ENDPOINT_IDS_PARAM = "endpointIds";
 | 
				
			||||||
 | 
						private static final int DELTA_TIME_IN_SEC = 30;
 | 
				
			||||||
 | 
						private static SimpleDateFormat expiryFormat;
 | 
				
			||||||
 | 
						static {
 | 
				
			||||||
 | 
							expiryFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmmmmm'Z'");
 | 
				
			||||||
 | 
							expiryFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						private final Config appConfig = Config.getInstance();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private HttpClient client;
 | 
				
			||||||
 | 
						private String adminToken;
 | 
				
			||||||
 | 
						private String adminTokenExpiry;
 | 
				
			||||||
 | 
						private URI uri;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public HttpAuthClient(HttpClient client, URI uri) {
 | 
				
			||||||
 | 
							this.client = client;
 | 
				
			||||||
 | 
					    this.uri = uri;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Object validateTokenForServiceEndpointV2(String token,
 | 
				
			||||||
 | 
								String serviceIds, String endpointIds, boolean includeCatalog)
 | 
				
			||||||
 | 
								throws ClientProtocolException {
 | 
				
			||||||
 | 
							String newUri = uri.toString() + "/v2.0/tokens/" + token;
 | 
				
			||||||
 | 
							return verifyUUIDToken(token, newUri, null, serviceIds, endpointIds);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Object validateTokenForServiceEndpointV3(String token,
 | 
				
			||||||
 | 
								Map<String, String> inputParams) throws ClientProtocolException {
 | 
				
			||||||
 | 
							String newUri = uri.toString() + "/v3/auth/tokens/";
 | 
				
			||||||
 | 
							Header[] header = new Header[1];
 | 
				
			||||||
 | 
							header[0] = new BasicHeader(AUTH_SUBJECT_TOKEN, token);
 | 
				
			||||||
 | 
							String serviceIds = null;
 | 
				
			||||||
 | 
							String endpointIds = null;
 | 
				
			||||||
 | 
							if (inputParams.containsKey(SERVICE_IDS_PARAM))
 | 
				
			||||||
 | 
								serviceIds = inputParams.get(SERVICE_IDS_PARAM);
 | 
				
			||||||
 | 
							if (inputParams.containsKey(ENDPOINT_IDS_PARAM))
 | 
				
			||||||
 | 
								endpointIds = inputParams.get(ENDPOINT_IDS_PARAM);
 | 
				
			||||||
 | 
							return verifyUUIDToken(token, newUri, header, serviceIds, endpointIds);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private Object verifyUUIDToken(String token, String newUri,
 | 
				
			||||||
 | 
								Header[] header, String serviceIds, String endpointIds)
 | 
				
			||||||
 | 
								throws ClientProtocolException {
 | 
				
			||||||
 | 
							HttpResponse response = sendGet(newUri, header, serviceIds, endpointIds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    HttpEntity entity = response.getEntity();
 | 
				
			||||||
 | 
					    int code = response.getStatusLine().getStatusCode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      InputStream instream = null;
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        if (code == 404) {
 | 
				
			||||||
 | 
					          instream = entity.getContent();
 | 
				
			||||||
 | 
					          instream.close();
 | 
				
			||||||
 | 
					          throw new AuthException("Authorization failed for token: " + token);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (code != 200) {
 | 
				
			||||||
 | 
					          adminToken = null;
 | 
				
			||||||
 | 
					          instream = entity.getContent();
 | 
				
			||||||
 | 
					          instream.close();
 | 
				
			||||||
 | 
					          String reasonPhrase = response.getStatusLine().getReasonPhrase();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          throw new AuthException("Failed to validate via HTTP " + code
 | 
				
			||||||
 | 
					            + " " + reasonPhrase);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } catch(IOException e) {
 | 
				
			||||||
 | 
					        throw new ClientProtocolException(
 | 
				
			||||||
 | 
					          "IO Exception: problem closing stream ", e);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return parseResponse(response);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private HttpResponse sendPost(String uri, StringEntity body)
 | 
				
			||||||
 | 
								throws ClientProtocolException {
 | 
				
			||||||
 | 
							HttpResponse response = null;
 | 
				
			||||||
 | 
							HttpPost post = new HttpPost(uri);
 | 
				
			||||||
 | 
							post.setHeader("Accept", "application/json");
 | 
				
			||||||
 | 
							post.setHeader("Content-Type", "application/json");
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								post.setEntity(body);
 | 
				
			||||||
 | 
								response = client.execute(post);
 | 
				
			||||||
 | 
					      int code = response.getStatusLine().getStatusCode();
 | 
				
			||||||
 | 
								if (!(code == 201 || code == 200 || code == 203)) {
 | 
				
			||||||
 | 
									adminToken = null;
 | 
				
			||||||
 | 
									throw new AuthException(
 | 
				
			||||||
 | 
											"Failed to authenticate admin credentials " + code
 | 
				
			||||||
 | 
													+ response.getStatusLine().getReasonPhrase());
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} catch (IOException e) {
 | 
				
			||||||
 | 
								post.abort();
 | 
				
			||||||
 | 
					      throw new ClientProtocolException(
 | 
				
			||||||
 | 
					        "IO Exception during POST request ", e);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return response;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private HttpResponse sendGet(String newUri, Header[] headers,
 | 
				
			||||||
 | 
								String serviceIds, String endpointIds)
 | 
				
			||||||
 | 
								throws ClientProtocolException {
 | 
				
			||||||
 | 
							HttpResponse response = null;
 | 
				
			||||||
 | 
							HttpGet get = null;
 | 
				
			||||||
 | 
							boolean hasServiceIds = false;
 | 
				
			||||||
 | 
							if (serviceIds != null && !serviceIds.isEmpty()) {
 | 
				
			||||||
 | 
								newUri += "?HP-IDM-serviceId=" + serviceIds;
 | 
				
			||||||
 | 
								hasServiceIds = true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (endpointIds != null && !endpointIds.isEmpty()) {
 | 
				
			||||||
 | 
								newUri += hasServiceIds ? "&HP-IDM-endpointTemplateId="
 | 
				
			||||||
 | 
										+ endpointIds : "?HP-IDM-endpointTemplateId=" + endpointIds;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							get = new HttpGet(newUri);
 | 
				
			||||||
 | 
							get.setHeader("Accept", "application/json");
 | 
				
			||||||
 | 
							get.setHeader("Content-Type", "application/json");
 | 
				
			||||||
 | 
							if (headers != null) {
 | 
				
			||||||
 | 
								for (Header header : headers) {
 | 
				
			||||||
 | 
									get.setHeader(header);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(!appConfig.getAdminToken().isEmpty()) {
 | 
				
			||||||
 | 
					      get.setHeader(new BasicHeader(TOKEN, appConfig.getAdminToken()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (!appConfig.getAdminAuthMethod().isEmpty()) {
 | 
				
			||||||
 | 
					      get.setHeader(new BasicHeader(TOKEN, getAdminToken()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								response = client.execute(get);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}catch(ConnectException c) {
 | 
				
			||||||
 | 
					      get.abort();
 | 
				
			||||||
 | 
					      throw new UnavailableException(c.getMessage());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    catch (IOException e) {
 | 
				
			||||||
 | 
								get.abort();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      throw new ClientProtocolException(
 | 
				
			||||||
 | 
										"IO Exception during GET request ", e);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					    return response;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private String parseResponse(HttpResponse response) {
 | 
				
			||||||
 | 
							StringBuffer json = new StringBuffer();
 | 
				
			||||||
 | 
					    HttpEntity entity = response.getEntity();
 | 
				
			||||||
 | 
							if (entity != null) {
 | 
				
			||||||
 | 
					      InputStream instream;
 | 
				
			||||||
 | 
								try {
 | 
				
			||||||
 | 
					        instream = entity.getContent();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									BufferedReader reader = new BufferedReader(
 | 
				
			||||||
 | 
											new InputStreamReader(instream));
 | 
				
			||||||
 | 
									String line = reader.readLine();
 | 
				
			||||||
 | 
									while (line != null) {
 | 
				
			||||||
 | 
										json.append(line);
 | 
				
			||||||
 | 
										line = reader.readLine();
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					        instream.close();
 | 
				
			||||||
 | 
					        reader.close();
 | 
				
			||||||
 | 
								} catch (Exception e) {
 | 
				
			||||||
 | 
									throw new AuthException("Failed to parse Http Response ", e);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return json.toString();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private String getAdminToken() throws ClientProtocolException {
 | 
				
			||||||
 | 
							HttpResponse response;
 | 
				
			||||||
 | 
							String json;
 | 
				
			||||||
 | 
							JsonParser jp = new JsonParser();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (adminTokenExpiry != null) {
 | 
				
			||||||
 | 
								if (isExpired(adminTokenExpiry)) {
 | 
				
			||||||
 | 
									adminToken = null;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (adminToken == null) {
 | 
				
			||||||
 | 
								if (appConfig.getAuthVersion().equalsIgnoreCase("v2.0")) {
 | 
				
			||||||
 | 
									StringEntity params = getUnscopedV2AdminTokenRequest();
 | 
				
			||||||
 | 
									String authUri = uri + "/v2.0/tokens";
 | 
				
			||||||
 | 
									response = sendPost(authUri, params);
 | 
				
			||||||
 | 
									json = parseResponse(response);
 | 
				
			||||||
 | 
									JsonObject access = jp.parse(json).getAsJsonObject()
 | 
				
			||||||
 | 
											.get("access").getAsJsonObject();
 | 
				
			||||||
 | 
									JsonObject token = access.get("token").getAsJsonObject();
 | 
				
			||||||
 | 
									adminToken = token.get("id").getAsString();
 | 
				
			||||||
 | 
									adminTokenExpiry = token.get("expires").getAsString();
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
					          StringEntity params = getUnscopedV3AdminTokenRequest();
 | 
				
			||||||
 | 
									String authUri = uri + "/v3/auth/tokens";
 | 
				
			||||||
 | 
									response = sendPost(authUri, params);
 | 
				
			||||||
 | 
									adminToken = response.getFirstHeader(AUTH_SUBJECT_TOKEN)
 | 
				
			||||||
 | 
											.getValue();
 | 
				
			||||||
 | 
									json = parseResponse(response);
 | 
				
			||||||
 | 
									JsonObject token = jp.parse(json).getAsJsonObject()
 | 
				
			||||||
 | 
											.get("token").getAsJsonObject();
 | 
				
			||||||
 | 
									adminTokenExpiry = token.get("expires_at").getAsString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return adminToken;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private StringEntity getUnscopedV2AdminTokenRequest() {
 | 
				
			||||||
 | 
							StringBuffer bfr = new StringBuffer();
 | 
				
			||||||
 | 
							if (appConfig.getAdminAuthMethod().equalsIgnoreCase(PASSWORD)) {
 | 
				
			||||||
 | 
								bfr.append("{\"auth\": {\"passwordCredentials\": {\"username\": \"");
 | 
				
			||||||
 | 
								bfr.append(appConfig.getAdminUser());
 | 
				
			||||||
 | 
								bfr.append("\",\"password\": \"");
 | 
				
			||||||
 | 
								bfr.append(appConfig.getAdminPassword());
 | 
				
			||||||
 | 
								if (appConfig.getAdminProject() != null && !appConfig.getAdminProject().isEmpty()) {
 | 
				
			||||||
 | 
									bfr.append("\"}, \"tenantId\": \"");
 | 
				
			||||||
 | 
									bfr.append(appConfig.getAdminProject());
 | 
				
			||||||
 | 
									bfr.append("\"}}");
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									bfr.append("\"}}}");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								try {
 | 
				
			||||||
 | 
									return new StringEntity(bfr.toString());
 | 
				
			||||||
 | 
								} catch (UnsupportedEncodingException e) {
 | 
				
			||||||
 | 
									throw new AuthException("Invalid V2 authentication request "
 | 
				
			||||||
 | 
											+ e);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								String msg = String.format("Admin auth method %s not supported",appConfig.getAdminAuthMethod());
 | 
				
			||||||
 | 
								throw new AuthException(msg);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private StringEntity getUnscopedV3AdminTokenRequest() {
 | 
				
			||||||
 | 
							StringBuffer bfr = new StringBuffer();
 | 
				
			||||||
 | 
							if (appConfig.getAdminAuthMethod().equalsIgnoreCase(PASSWORD)) {
 | 
				
			||||||
 | 
								bfr.append("{\"auth\": {\"identity\": {\"methods\": [\"password\"],\"password\": {\"user\": {\"name\": \"");
 | 
				
			||||||
 | 
								bfr.append(appConfig.getAdminUser());
 | 
				
			||||||
 | 
								bfr.append("\",\"password\": \"");
 | 
				
			||||||
 | 
								bfr.append(appConfig.getAdminPassword());
 | 
				
			||||||
 | 
					      bfr.append("\",\"domain\": {\"id\": \"default\"");
 | 
				
			||||||
 | 
					      bfr.append("}}}}}}");
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								String msg = String.format("Admin auth method %s not supported",appConfig.getAdminAuthMethod());
 | 
				
			||||||
 | 
								throw new AuthException(msg);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								return new StringEntity(bfr.toString());
 | 
				
			||||||
 | 
							} catch (UnsupportedEncodingException e) {
 | 
				
			||||||
 | 
								throw new AuthException("Invalid V3 authentication request " + e);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private boolean isExpired(String expires) {
 | 
				
			||||||
 | 
							Date tokenExpiryDate = null;
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								tokenExpiryDate = expiryFormat.parse(expires);
 | 
				
			||||||
 | 
							} catch (ParseException e) {
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Date current = new Date();
 | 
				
			||||||
 | 
							return tokenExpiryDate.getTime() < (current.getTime() + DELTA_TIME_IN_SEC * 1000);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void reset() {	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.commons.pool.impl.GenericObjectPool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * An HTTP factory.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author liemmn
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class HttpClientFactory extends AuthClientFactory {
 | 
				
			||||||
 | 
					  private HttpClientPoolFactory clientPool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  HttpClientFactory(String host, int port, int timeout, boolean clientAuth,
 | 
				
			||||||
 | 
					    String keyStore, String keyPass, String trustStore,
 | 
				
			||||||
 | 
					    String trustPass, String adminToken, int maxActive,
 | 
				
			||||||
 | 
					    long timeBetweenEvictionRunsMillis, long minEvictableIdleTimeMillis) {
 | 
				
			||||||
 | 
					    clientPool = new HttpClientPoolFactory(host, port, timeout, clientAuth,
 | 
				
			||||||
 | 
					      keyStore, keyPass, trustStore, trustPass, adminToken,
 | 
				
			||||||
 | 
					      maxActive, timeBetweenEvictionRunsMillis,
 | 
				
			||||||
 | 
					      minEvictableIdleTimeMillis);
 | 
				
			||||||
 | 
					    pool = new GenericObjectPool(clientPool);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @Override
 | 
				
			||||||
 | 
					  public void shutdown() {
 | 
				
			||||||
 | 
					    clientPool.shutDown();
 | 
				
			||||||
 | 
					    super.shutdown();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,130 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.io.FileInputStream;
 | 
				
			||||||
 | 
					import java.net.URI;
 | 
				
			||||||
 | 
					import java.security.KeyStore;
 | 
				
			||||||
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.commons.pool.BasePoolableObjectFactory;
 | 
				
			||||||
 | 
					import org.apache.http.client.HttpClient;
 | 
				
			||||||
 | 
					import org.apache.http.conn.scheme.PlainSocketFactory;
 | 
				
			||||||
 | 
					import org.apache.http.conn.scheme.Scheme;
 | 
				
			||||||
 | 
					import org.apache.http.conn.scheme.SchemeRegistry;
 | 
				
			||||||
 | 
					import org.apache.http.conn.ssl.SSLSocketFactory;
 | 
				
			||||||
 | 
					import org.apache.http.impl.client.DefaultHttpClient;
 | 
				
			||||||
 | 
					import org.apache.http.impl.conn.PoolingClientConnectionManager;
 | 
				
			||||||
 | 
					import org.apache.http.params.BasicHttpParams;
 | 
				
			||||||
 | 
					import org.apache.http.params.CoreConnectionPNames;
 | 
				
			||||||
 | 
					import org.apache.http.params.HttpParams;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A Http request pool factory. Based on Apache Commons Pool.  Singleton.
 | 
				
			||||||
 | 
					 * Note that the Apache HttpClient maintains its own connection pool and
 | 
				
			||||||
 | 
					 * does not participate in Apache Commons pool' lifecycle other than creating
 | 
				
			||||||
 | 
					 * HTTPRequests.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author liemmn
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class HttpClientPoolFactory extends BasePoolableObjectFactory {
 | 
				
			||||||
 | 
					  private URI uri;
 | 
				
			||||||
 | 
					  private PoolingClientConnectionManager connMgr;
 | 
				
			||||||
 | 
					  private HttpPoolCleaner cleaner;
 | 
				
			||||||
 | 
					  private HttpClient client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  HttpClientPoolFactory(String host, int port, int timeout,
 | 
				
			||||||
 | 
					    boolean clientAuth, String keyStore, String keyPass,
 | 
				
			||||||
 | 
					    String trustStore, String trustPass, String adminToken,
 | 
				
			||||||
 | 
					    int maxActive, long timeBetweenEvictionRunsMillis,
 | 
				
			||||||
 | 
					    long minEvictableIdleTimeMillis) {
 | 
				
			||||||
 | 
					    // Setup auth URL
 | 
				
			||||||
 | 
					    String protocol = (port == 35357) ? "https://" : "http://";
 | 
				
			||||||
 | 
					    String urlStr = protocol + host + ":" + port;
 | 
				
			||||||
 | 
					    uri = URI.create(urlStr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Setup connection pool
 | 
				
			||||||
 | 
					    SchemeRegistry schemeRegistry = new SchemeRegistry();
 | 
				
			||||||
 | 
					    if (protocol.startsWith("https")) {
 | 
				
			||||||
 | 
					      SSLSocketFactory sslf = sslFactory(keyStore, keyPass, trustStore,
 | 
				
			||||||
 | 
					        trustPass, clientAuth);
 | 
				
			||||||
 | 
					      schemeRegistry.register(new Scheme("https", port, sslf));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      schemeRegistry.register(new Scheme("http", port, PlainSocketFactory
 | 
				
			||||||
 | 
					        .getSocketFactory()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    connMgr = new PoolingClientConnectionManager(schemeRegistry,
 | 
				
			||||||
 | 
					      minEvictableIdleTimeMillis, TimeUnit.MILLISECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connMgr.setMaxTotal(maxActive);
 | 
				
			||||||
 | 
					    connMgr.setDefaultMaxPerRoute(maxActive);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Http connection timeout
 | 
				
			||||||
 | 
					    HttpParams params = new BasicHttpParams();
 | 
				
			||||||
 | 
					    params.setParameter(CoreConnectionPNames.SO_TIMEOUT, timeout);
 | 
				
			||||||
 | 
					    params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Create a single client
 | 
				
			||||||
 | 
					    client = new DefaultHttpClient(connMgr, params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Create and start the connection pool cleaner
 | 
				
			||||||
 | 
					    cleaner = new HttpPoolCleaner(connMgr, timeBetweenEvictionRunsMillis,
 | 
				
			||||||
 | 
					      minEvictableIdleTimeMillis);
 | 
				
			||||||
 | 
					    new Thread(cleaner).start();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @Override
 | 
				
			||||||
 | 
					  public Object makeObject() throws Exception {
 | 
				
			||||||
 | 
					    return new HttpAuthClient(client, uri);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @Override
 | 
				
			||||||
 | 
					  public void passivateObject(Object obj) throws Exception {
 | 
				
			||||||
 | 
					    ((HttpAuthClient) obj).reset();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @Override
 | 
				
			||||||
 | 
					  public void destroyObject(Object obj) throws Exception {
 | 
				
			||||||
 | 
					    ((HttpAuthClient) obj).reset();
 | 
				
			||||||
 | 
					    obj = null;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public void shutDown() {
 | 
				
			||||||
 | 
					    // Shutdown all connections
 | 
				
			||||||
 | 
					    connMgr.shutdown();
 | 
				
			||||||
 | 
					    // Shutdown connection pool cleaner
 | 
				
			||||||
 | 
					    cleaner.shutdown();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // get a socket factory
 | 
				
			||||||
 | 
					  private static SSLSocketFactory sslFactory(String keyStore, String keyPass,
 | 
				
			||||||
 | 
					    String trustStore, String trustPass, boolean clientAuth) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      // keystore
 | 
				
			||||||
 | 
					      KeyStore ks = null;
 | 
				
			||||||
 | 
					      if (clientAuth) {
 | 
				
			||||||
 | 
					        ks = KeyStore.getInstance("jks");
 | 
				
			||||||
 | 
					        FileInputStream is1 = new FileInputStream(new File(keyStore));
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          ks.load(is1, keyPass.toCharArray());
 | 
				
			||||||
 | 
					        } finally {
 | 
				
			||||||
 | 
					          is1.close();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      // truststore
 | 
				
			||||||
 | 
					      KeyStore ts = KeyStore.getInstance("jks");
 | 
				
			||||||
 | 
					      FileInputStream is2 = new FileInputStream(
 | 
				
			||||||
 | 
					        new File(trustStore));
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ts.load(is2, trustPass.toCharArray());
 | 
				
			||||||
 | 
					      } finally {
 | 
				
			||||||
 | 
					        is2.close();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      SSLSocketFactory sslf = new SSLSocketFactory(ks, keyPass, ts);
 | 
				
			||||||
 | 
					      return sslf;
 | 
				
			||||||
 | 
					    } catch (Exception e) {
 | 
				
			||||||
 | 
					      throw new AuthConnectionException(
 | 
				
			||||||
 | 
					        "Failed to create SSLSocketFactory", e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.http.conn.ClientConnectionManager;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A runner to clean the connection pool! There should only be one!
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author liemmn
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class HttpPoolCleaner implements Runnable {
 | 
				
			||||||
 | 
						private final ClientConnectionManager connMgr;
 | 
				
			||||||
 | 
						private long timeBetweenEvictionRunsMillis, minEvictableIdleTimeMillis;
 | 
				
			||||||
 | 
						private volatile boolean shutdown;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public HttpPoolCleaner(ClientConnectionManager connMgr,
 | 
				
			||||||
 | 
								long timeBetweenEvictionRunsMillis, long minEvictableIdleTimeMillis) {
 | 
				
			||||||
 | 
							this.connMgr = connMgr;
 | 
				
			||||||
 | 
							this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
 | 
				
			||||||
 | 
							this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Start the cleaner.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public void run() {
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								while (!shutdown) {
 | 
				
			||||||
 | 
									synchronized (this) {
 | 
				
			||||||
 | 
										wait(timeBetweenEvictionRunsMillis);
 | 
				
			||||||
 | 
										// Close expired connections
 | 
				
			||||||
 | 
										connMgr.closeExpiredConnections();
 | 
				
			||||||
 | 
										// Close connections that have been idle longer than x sec
 | 
				
			||||||
 | 
										connMgr.closeIdleConnections(minEvictableIdleTimeMillis,
 | 
				
			||||||
 | 
												TimeUnit.MILLISECONDS);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} catch (InterruptedException ex) {
 | 
				
			||||||
 | 
								// terminate
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Shutdown the cleaner.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void shutdown() {
 | 
				
			||||||
 | 
							shutdown = true;
 | 
				
			||||||
 | 
							synchronized (this) {
 | 
				
			||||||
 | 
								notifyAll();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class SignatureBuilderException extends RuntimeException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final long serialVersionUID = -2643382825421961020L;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public SignatureBuilderException(String msg) {
 | 
				
			||||||
 | 
							super(msg);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public SignatureBuilderException(String msg, Exception e) {
 | 
				
			||||||
 | 
							super(msg, e);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,79 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.servlet.ServletResponse;
 | 
				
			||||||
 | 
					import javax.servlet.http.HttpServletResponse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public enum SignatureExceptionHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  AuthConnectionException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp) {
 | 
				
			||||||
 | 
					      AuthConnectionException ae = (AuthConnectionException) e;
 | 
				
			||||||
 | 
					      logger.error(ae.getMessage() + " " + ae);
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED));
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  TException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp) {
 | 
				
			||||||
 | 
					      //	TException t = (TException) e;
 | 
				
			||||||
 | 
					      //logger.error("Thrift Exception " + t.getMessage() + " " + t);
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED));
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  SignatureBuilderException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp) {
 | 
				
			||||||
 | 
					      SignatureBuilderException sbe = (SignatureBuilderException) e;
 | 
				
			||||||
 | 
					      logger.error(sbe.getMessage() + " " + sbe);
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED));
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  AuthException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp) {
 | 
				
			||||||
 | 
					      AuthException ae = (AuthException) e;
 | 
				
			||||||
 | 
					      logger.error(ae.getMessage() + " " + ae);
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED));
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final Logger logger = LoggerFactory.getLogger(SignatureExceptionHandler.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  abstract void onException(Exception e, ServletResponse resp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,144 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import org.apache.http.client.ClientProtocolException;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.servlet.Filter;
 | 
				
			||||||
 | 
					import javax.servlet.FilterChain;
 | 
				
			||||||
 | 
					import javax.servlet.FilterConfig;
 | 
				
			||||||
 | 
					import javax.servlet.ServletException;
 | 
				
			||||||
 | 
					import javax.servlet.ServletRequest;
 | 
				
			||||||
 | 
					import javax.servlet.ServletResponse;
 | 
				
			||||||
 | 
					import javax.servlet.http.HttpServletRequest;
 | 
				
			||||||
 | 
					import javax.servlet.http.HttpServletResponse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A token-based authentication filter. This filter uses Thrift protocol to
 | 
				
			||||||
 | 
					 * communicate with the CS server. The token to validate is set via the header
 | 
				
			||||||
 | 
					 * {@link #TOKEN}.
 | 
				
			||||||
 | 
					 * <p>
 | 
				
			||||||
 | 
					 * A token is required to validate. However, if no token is presented, the
 | 
				
			||||||
 | 
					 * filter will set the {@link #AUTH_IDENTITY_STATUS} request parameter to
 | 
				
			||||||
 | 
					 * <code>Invalid</code> and let any other filter downstream to decide what to
 | 
				
			||||||
 | 
					 * do. For instance, if a downstream filter knows how to deal with signature
 | 
				
			||||||
 | 
					 * rather than tokens, then it will go ahead and validate with signatures.
 | 
				
			||||||
 | 
					 * <p>
 | 
				
			||||||
 | 
					 * Upon successful validation, all the Auth request parameters will be
 | 
				
			||||||
 | 
					 * populated, including information such as tenant, user and user roles, and
 | 
				
			||||||
 | 
					 * passed down to the next filter downstream.
 | 
				
			||||||
 | 
					 * <p>
 | 
				
			||||||
 | 
					 * Upon unsuccessful validation, this filter will terminate the request by
 | 
				
			||||||
 | 
					 * returning a 401 (unauthorized).
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author liemmn
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class TokenAuth implements Filter, AuthConstants {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final String TOKEN_NOTFOUND = "Bad Request: Token not found in the request";
 | 
				
			||||||
 | 
						private static final String SERVICE_IDS_PARAM = "serviceIds";
 | 
				
			||||||
 | 
						private static final String ENDPOINT_IDS_PARAM = "endpointIds";
 | 
				
			||||||
 | 
						private static final String SERVICE_CATALOG_PARAM = "includeCatalog";
 | 
				
			||||||
 | 
						private static final String API_VERSION_PARAM = "apiVersion";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private final Config appConfig = Config.getInstance();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private FilterConfig filterConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Thee faithful logger
 | 
				
			||||||
 | 
						private static final Logger logger = LoggerFactory
 | 
				
			||||||
 | 
								.getLogger(TokenAuth.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public void init(FilterConfig filterConfig) throws ServletException {
 | 
				
			||||||
 | 
							this.filterConfig = filterConfig;		
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * {@inheritDoc}
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void destroy() {
 | 
				
			||||||
 | 
							FilterUtils.destroyFilter();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * {@inheritDoc}
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void doFilter(ServletRequest req, ServletResponse resp,
 | 
				
			||||||
 | 
								FilterChain chain) throws IOException, ServletException {
 | 
				
			||||||
 | 
							Object auth = null;
 | 
				
			||||||
 | 
							int numberOfTries = 0;		
 | 
				
			||||||
 | 
							if (!appConfig.isInitialized()) {
 | 
				
			||||||
 | 
								appConfig.initialize(filterConfig,req,getInputParams());
 | 
				
			||||||
 | 
							}		
 | 
				
			||||||
 | 
							int retries = appConfig.getRetries();
 | 
				
			||||||
 | 
							long pauseTime = appConfig.getPauseTime();
 | 
				
			||||||
 | 
					    AuthClientFactory factory = appConfig.getFactory();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Extract credential
 | 
				
			||||||
 | 
					    String token = ((HttpServletRequest) req).getHeader(TOKEN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (token == null) {
 | 
				
			||||||
 | 
								if (!appConfig.isDelayAuthDecision()) {
 | 
				
			||||||
 | 
									logger.error(HttpServletResponse.SC_UNAUTHORIZED
 | 
				
			||||||
 | 
											+ " No token found.");
 | 
				
			||||||
 | 
									((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
											HttpServletResponse.SC_UNAUTHORIZED, TOKEN_NOTFOUND);
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									logger.info("No token found...Skipping");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      do {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          auth = FilterUtils.getCachedToken(token);
 | 
				
			||||||
 | 
					        }catch(UnavailableException e) {
 | 
				
			||||||
 | 
					          TokenExceptionHandler handler = TokenExceptionHandler
 | 
				
			||||||
 | 
					            .valueOf("UnavailableException");
 | 
				
			||||||
 | 
					          handler.onException(e,resp,token);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        catch(ClientProtocolException e) {
 | 
				
			||||||
 | 
					          if (numberOfTries < retries) {
 | 
				
			||||||
 | 
					            FilterUtils.pause(pauseTime);
 | 
				
			||||||
 | 
					            logger.debug("Retrying connection after "
 | 
				
			||||||
 | 
					              + pauseTime + " seconds.");
 | 
				
			||||||
 | 
					            numberOfTries++;
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            logger.debug("Exhausted retries..");
 | 
				
			||||||
 | 
					            TokenExceptionHandler handler = TokenExceptionHandler
 | 
				
			||||||
 | 
					              .valueOf("ClientProtocolException");
 | 
				
			||||||
 | 
					            handler.onException(e, resp, token);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      }while(auth==null && numberOfTries<=retries);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
							req = FilterUtils.wrapRequest(req, auth);
 | 
				
			||||||
 | 
							logger.debug("TokenAuth: Forwarding down stream to next filter/servlet");
 | 
				
			||||||
 | 
							// Forward downstream...
 | 
				
			||||||
 | 
							chain.doFilter(req, resp);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private Map<String, String> getInputParams() {
 | 
				
			||||||
 | 
							Map<String, String> inputParams = new HashMap<String, String>();
 | 
				
			||||||
 | 
							if (appConfig.getServiceIds() != null) {
 | 
				
			||||||
 | 
								inputParams.put(SERVICE_IDS_PARAM, appConfig.getServiceIds());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (appConfig.getEndpointIds() != null) {
 | 
				
			||||||
 | 
								inputParams.put(ENDPOINT_IDS_PARAM, appConfig.getEndpointIds());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							inputParams.put(SERVICE_CATALOG_PARAM, String.valueOf(appConfig.isIncludeCatalog()));
 | 
				
			||||||
 | 
							inputParams.put(API_VERSION_PARAM, appConfig.getAuthVersion());
 | 
				
			||||||
 | 
							return inputParams;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.common.cache.*;
 | 
				
			||||||
 | 
					import org.apache.http.client.ClientProtocolException;
 | 
				
			||||||
 | 
					import org.apache.thrift.TException;
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.concurrent.ExecutionException;
 | 
				
			||||||
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class TokenCache<K, V> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private final LoadingCache<K, V> cache;
 | 
				
			||||||
 | 
					  private final Config appConfig = Config.getInstance();
 | 
				
			||||||
 | 
					  private AuthClientFactory factory;
 | 
				
			||||||
 | 
					  private AuthClient client;
 | 
				
			||||||
 | 
					  private static final Logger logger = LoggerFactory
 | 
				
			||||||
 | 
					    .getLogger(TokenCache.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public TokenCache(final long maxSize, final long timeToExpire, final Map<String, String> map) {
 | 
				
			||||||
 | 
					    factory = appConfig.getFactory();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cache = CacheBuilder.newBuilder().maximumSize(maxSize)
 | 
				
			||||||
 | 
					      .expireAfterWrite(timeToExpire, TimeUnit.SECONDS)
 | 
				
			||||||
 | 
					      .build(new CacheLoader<K, V>() {
 | 
				
			||||||
 | 
					        public V load(K key) throws TException, ClientProtocolException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          V value = null;
 | 
				
			||||||
 | 
					          AuthClient client = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          try {
 | 
				
			||||||
 | 
					            client = factory.getClient();
 | 
				
			||||||
 | 
					            if (appConfig.getAuthVersion().equals("v2.0")) {
 | 
				
			||||||
 | 
					              value = (V) client.validateTokenForServiceEndpointV2((String) key, appConfig.getServiceIds(),
 | 
				
			||||||
 | 
					                appConfig.getEndpointIds(), appConfig.isIncludeCatalog());
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              value = (V) client.validateTokenForServiceEndpointV3((String) key, map);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          } finally {
 | 
				
			||||||
 | 
					            if (client != null)
 | 
				
			||||||
 | 
					              factory.recycle(client);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          return value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public V getToken(K key) throws ClientProtocolException {
 | 
				
			||||||
 | 
					    V value = null;
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      value = cache.get(key);
 | 
				
			||||||
 | 
					    } catch (ExecutionException e) {
 | 
				
			||||||
 | 
					      logger.debug("had problem caching token");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return value;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public void put(K key, V value) {
 | 
				
			||||||
 | 
					    cache.put(key, value);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,106 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.http.client.ClientProtocolException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.servlet.ServletResponse;
 | 
				
			||||||
 | 
					import javax.servlet.http.HttpServletResponse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.thrift.TException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public enum TokenExceptionHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  AuthConnectionException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp, String token) {
 | 
				
			||||||
 | 
					      AuthConnectionException ae = (AuthConnectionException) e;
 | 
				
			||||||
 | 
					      logger.error(ae.getMessage() + " " + ae);
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED)
 | 
				
			||||||
 | 
					            + " " + token);
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  TException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp, String token) {
 | 
				
			||||||
 | 
					      TException t = (TException) e;
 | 
				
			||||||
 | 
					      logger.error("Thrift Exception " + t.getMessage() + " " + t);
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED)
 | 
				
			||||||
 | 
					            + " " + token);
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  ClientProtocolException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp, String token) {
 | 
				
			||||||
 | 
					      ClientProtocolException t = (ClientProtocolException) e;
 | 
				
			||||||
 | 
					      logger.error("Http Client Exception " + t.getMessage() + " " + t);
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED)
 | 
				
			||||||
 | 
					            + " " + token);
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  AuthException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp, String token) {
 | 
				
			||||||
 | 
					      AuthException ae = (AuthException) e;
 | 
				
			||||||
 | 
					      logger.error(ae.getMessage() + " " + ae);
 | 
				
			||||||
 | 
					      String statusText = ae.getMessage();
 | 
				
			||||||
 | 
					      if (statusText == null || statusText.isEmpty()) {
 | 
				
			||||||
 | 
					        statusText = ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          statusText + " " + token);
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }, ServiceUnavailableException {
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onException(Exception e, ServletResponse resp, String token) {
 | 
				
			||||||
 | 
					      AuthException ae = (AuthException) e;
 | 
				
			||||||
 | 
					      logger.error(ae.getMessage() + " " + ae);
 | 
				
			||||||
 | 
					      String statusText = ae.getMessage();
 | 
				
			||||||
 | 
					      if (statusText == null || statusText.isEmpty()) {
 | 
				
			||||||
 | 
					        statusText = ExceptionHandlerUtil.getStatusText(HttpServletResponse.SC_UNAUTHORIZED);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        ((HttpServletResponse) resp).sendError(
 | 
				
			||||||
 | 
					          HttpServletResponse.SC_UNAUTHORIZED,
 | 
				
			||||||
 | 
					          statusText + " " + token);
 | 
				
			||||||
 | 
					      } catch (IOException ie) {
 | 
				
			||||||
 | 
					        logger.debug("Error in writing the HTTP response "
 | 
				
			||||||
 | 
					          + ie.getMessage() + " " + ie);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final Logger logger = LoggerFactory.getLogger(TokenExceptionHandler.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  abstract void onException(Exception e, ServletResponse resp, String token);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					package com.hpcloud.middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Created by johnderr on 6/25/14.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class UnavailableException extends RuntimeException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final long serialVersionUID = -2353922744077869466L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public UnavailableException(String msg) {
 | 
				
			||||||
 | 
					    super(msg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public UnavailableException(String msg, Exception e) {
 | 
				
			||||||
 | 
					    super(msg, e);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user