You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2012/11/14 22:10:15 UTC

svn commit: r1409401 [1/2] - in /airavata/trunk/modules: airavata-rest-services/ airavata-rest-services/src/main/webapp/WEB-INF/ security/ security/src/ security/src/main/ security/src/main/java/ security/src/main/java/org/ security/src/main/java/org/a...

Author: lahiru
Date: Wed Nov 14 21:10:13 2012
New Revision: 1409401

URL: http://svn.apache.org/viewvc?rev=1409401&view=rev
Log:
committing amilas patch for https://issues.apache.org/jira/browse/AIRAVATA-560.

Added:
    airavata/trunk/modules/security/
    airavata/trunk/modules/security/pom.xml
    airavata/trunk/modules/security/src/
    airavata/trunk/modules/security/src/main/
    airavata/trunk/modules/security/src/main/java/
    airavata/trunk/modules/security/src/main/java/org/
    airavata/trunk/modules/security/src/main/java/org/apache/
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractAuthenticator.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractDatabaseAuthenticator.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AuthenticationException.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authenticator.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authoriser.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStore.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStoreException.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AbstractConfigurationReader.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReader.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/AbstractJDBCUserStore.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/LDAPUserStore.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/util/
    airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/util/DBLookup.java
    airavata/trunk/modules/security/src/test/
    airavata/trunk/modules/security/src/test/java/
    airavata/trunk/modules/security/src/test/java/org/
    airavata/trunk/modules/security/src/test/java/org/apache/
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator2.java
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator3.java
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/TestUserStore.java
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/userstore/
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/userstore/JDBCUserStoreTest.java
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/userstore/LDAPUserStoreTest.java
    airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/userstore/SessionDBUserStoreTest.java
    airavata/trunk/modules/security/src/test/resources/
    airavata/trunk/modules/security/src/test/resources/authenticators.xml
    airavata/trunk/modules/security/src/test/resources/disabled-authenticator.xml
    airavata/trunk/modules/security/src/test/resources/jdbc-authenticator.xml
    airavata/trunk/modules/security/src/test/resources/ldap-authenticator.xml
    airavata/trunk/modules/security/src/test/resources/session-authenticator.xml
    airavata/trunk/modules/security/src/test/resources/testdb/
    airavata/trunk/modules/security/src/test/resources/testdb/test/
    airavata/trunk/modules/security/src/test/resources/testdb/test.trace.db
    airavata/trunk/modules/security/src/test/resources/testdb/test/test.trace.db
Modified:
    airavata/trunk/modules/airavata-rest-services/pom.xml
    airavata/trunk/modules/airavata-rest-services/src/main/webapp/WEB-INF/web.xml

Modified: airavata/trunk/modules/airavata-rest-services/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/pom.xml?rev=1409401&r1=1409400&r2=1409401&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/pom.xml (original)
+++ airavata/trunk/modules/airavata-rest-services/pom.xml Wed Nov 14 21:10:13 2012
@@ -8,168 +8,180 @@
     ANY ~ KIND, either express or implied. See the License for the specific language governing permissions and limitations under 
     the License. -->
 
-<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">
+<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">
     <parent>
         <groupId>org.apache.airavata</groupId>
         <artifactId>airavata</artifactId>
         <version>0.6-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
-    
-	<modelVersion>4.0.0</modelVersion>
-	<artifactId>airavata-rest-services</artifactId>
-	<packaging>war</packaging>
-	<name>airavata-rest-services</name>
-	<build>
-		<finalName>airavata-rest-services</finalName>
-		<plugins>
-			<plugin>
-				<groupId>org.codehaus.cargo</groupId>
-				<artifactId>cargo-maven2-plugin</artifactId>
-				<version>${cargo.version}</version>
-				<configuration>
-					<wait>true</wait>
-					<configuration>
-						<properties>
-							<cargo.servlet.port>9080</cargo.servlet.port>
-							<cargo.tomcat.ajp.port>9009</cargo.tomcat.ajp.port>
-							<cargo.rmi.port>9099</cargo.rmi.port>
-							<cargo.jvmargs>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>airavata-rest-services</artifactId>
+    <packaging>war</packaging>
+    <name>airavata-rest-services</name>
+    <build>
+        <finalName>airavata-rest-services</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.cargo</groupId>
+                <artifactId>cargo-maven2-plugin</artifactId>
+                <version>${cargo.version}</version>
+                <configuration>
+                    <wait>true</wait>
+                    <configuration>
+                        <properties>
+                            <cargo.servlet.port>9080</cargo.servlet.port>
+                            <cargo.tomcat.ajp.port>9009</cargo.tomcat.ajp.port>
+                            <cargo.rmi.port>9099</cargo.rmi.port>
+                            <cargo.jvmargs>
                                 <![CDATA[-Xdebug -Xrunjdwp:transport=dt_socket,address=${cargo.debug.address},server=y,suspend=${cargo.debug.suspend} -noverify ${javaagent}]]>
-							</cargo.jvmargs>
-							<cargo.tomcat.context.reloadable>true</cargo.tomcat.context.reloadable>
-						</properties>
-						<home>${project.build.directory}/tomcat6x</home>
-						<deployables>
-							<deployable>
-								<groupId>org.apache.airavata</groupId>
-								<artifactId>airavata-rest-services</artifactId>
-								<type>war</type>
-								<properties>
-									<context>/airavata-services</context>
-								</properties>
-							</deployable>
-						</deployables>
-					</configuration>
-					<container>
-						<containerId>tomcat6x</containerId>
-						<timeout>180000</timeout>
-						<zipUrlInstaller>
-							<url>
-								http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.tar.gz
-							</url>
-						</zipUrlInstaller>
-						<systemProperties>
+                            </cargo.jvmargs>
+                            <cargo.tomcat.context.reloadable>true</cargo.tomcat.context.reloadable>
+                        </properties>
+                        <home>${project.build.directory}/tomcat6x</home>
+                        <deployables>
+                            <deployable>
+                                <groupId>org.apache.airavata</groupId>
+                                <artifactId>airavata-rest-services</artifactId>
+                                <type>war</type>
+                                <properties>
+                                    <context>/airavata-services</context>
+                                </properties>
+                            </deployable>
+                        </deployables>
+                    </configuration>
+                    <container>
+                        <containerId>tomcat6x</containerId>
+                        <timeout>180000</timeout>
+                        <zipUrlInstaller>
+                            <url>
+                                http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.tar.gz
+                            </url>
+                        </zipUrlInstaller>
+                        <systemProperties>
 
-						</systemProperties>
-					</container>
-				</configuration>
-			</plugin>
-		</plugins>
+                        </systemProperties>
+                    </container>
+                </configuration>
+            </plugin>
+        </plugins>
 
-	</build>
-	<dependencies>
-		<dependency>
-			<groupId>com.sun.jersey</groupId>
-			<artifactId>jersey-servlet</artifactId>
-			<version>${jersey.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>com.sun.jersey</groupId>
-			<artifactId>jersey-json</artifactId>
-			<version>${jersey.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>com.sun.jersey.contribs</groupId>
-			<artifactId>jersey-multipart</artifactId>
-			<version>${jersey.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>com.sun.jersey.jersey-test-framework</groupId>
-			<artifactId>jersey-test-framework-grizzly2</artifactId>
-			<version>${jersey.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>com.sun.jersey</groupId>
-			<artifactId>jersey-server</artifactId>
-			<version>${jersey.version}</version>
-		</dependency>
-		<dependency>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-servlet</artifactId>
+            <version>${jersey.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-json</artifactId>
+            <version>${jersey.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey.contribs</groupId>
+            <artifactId>jersey-multipart</artifactId>
+            <version>${jersey.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey.jersey-test-framework</groupId>
+            <artifactId>jersey-test-framework-grizzly2</artifactId>
+            <version>${jersey.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-server</artifactId>
+            <version>${jersey.version}</version>
+        </dependency>
+        <dependency>
             <groupId>com.sun.jersey</groupId>
             <artifactId>jersey-client</artifactId>
-			<version>${jersey.version}</version>
-		</dependency>
+            <version>${jersey.version}</version>
+        </dependency>
+	<dependency>
+            <groupId>org.apache.shiro</groupId>
+            <artifactId>shiro-core</artifactId>
+            <version>1.2.1</version>
+        </dependency>
+	<dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.3.168</version>
+            <scope>test</scope>
+        </dependency>
         <!--dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.6</version>
         </dependency-->
 
-		<!-- Airavata -->
-		<dependency>
-			<groupId>org.apache.airavata</groupId>
-			<artifactId>airavata-gfac-schema-utils</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.airavata</groupId>
-			<artifactId>airavata-registry-api</artifactId>
-			<version>${project.version}</version>
-		</dependency>
+        <!-- Airavata -->
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-gfac-schema-utils</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-registry-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>airavata-security</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-jpa-registry</artifactId>
             <version>${project.version}</version>
         </dependency>
-		<!-- Logging -->
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-			<version>${org.slf4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-simple</artifactId>
-			<version>${org.slf4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>jcl-over-slf4j</artifactId>
-			<version>${org.slf4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
-			<version>${org.slf4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
-			<version>${log4j.version}</version>
-		</dependency>
-        <!--dependency>
-              <groupId>org.apache.airavata</groupId>
-              <artifactId>airavata-security</artifactId>
-              <version>0.5-incubating-SNAPSHOT</version>
-          </dependency-->
-	</dependencies>
-	<properties>
-		<jersey.version>1.13</jersey.version>
-		<grizzly.version>2.0.0-M3</grizzly.version>
-		<org.slf4j.version>1.6.1</org.slf4j.version>
-		<log4j.version>1.2.16</log4j.version>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<cargo.version>1.2.1</cargo.version>
-		<!-- if you want a remote debugging on a different a address override on
-			command line with -Dcargo.debug.addres=xxxx -->
-		<cargo.debug.address>8000</cargo.debug.address>
-		<!-- if you want to start remote debugging session suspended override on
-			command line with -Dcargo.debug.suspend=y -->
-		<cargo.debug.suspend>n</cargo.debug.suspend>
-		<javaagent />
-	</properties>
-	  <repositories>
+        <!-- Logging -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${org.slf4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>${org.slf4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <version>${org.slf4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${org.slf4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>${log4j.version}</version>
+        </dependency>
+    </dependencies>
+    <properties>
+        <jersey.version>1.13</jersey.version>
+        <grizzly.version>2.0.0-M3</grizzly.version>
+        <org.slf4j.version>1.6.1</org.slf4j.version>
+        <log4j.version>1.2.16</log4j.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <cargo.version>1.2.1</cargo.version>
+        <!-- if you want a remote debugging on a different a address override on
+              command line with -Dcargo.debug.addres=xxxx -->
+        <cargo.debug.address>8000</cargo.debug.address>
+        <!-- if you want to start remote debugging session suspended override on
+              command line with -Dcargo.debug.suspend=y -->
+        <cargo.debug.suspend>n</cargo.debug.suspend>
+        <javaagent/>
+    </properties>
+    <repositories>
         <repository>
             <id>central</id>
             <name>Maven Central</name>

Modified: airavata/trunk/modules/airavata-rest-services/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/main/webapp/WEB-INF/web.xml?rev=1409401&r1=1409400&r2=1409401&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/main/webapp/WEB-INF/web.xml (original)
+++ airavata/trunk/modules/airavata-rest-services/src/main/webapp/WEB-INF/web.xml Wed Nov 14 21:10:13 2012
@@ -5,10 +5,7 @@
     <listener>
       <listener-class>org.apache.airavata.services.registry.rest.utils.RegistryListener</listener-class>
     </listener>
-     <!--context-param>
-      <param-name>configFile</param-name>
-      <param-value>/WEB-INF/classes/service.properties</param-value>
-    </context-param-->
+
     <servlet>
         <servlet-name>Airavata Web Application</servlet-name>
         <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
@@ -16,12 +13,26 @@
             <param-name>com.sun.jersey.config.property.packages</param-name>
             <param-value>org.apache.airavata.services.registry.rest;org.codehaus.jackson.jaxrs</param-value>
         </init-param>
-        <!--init-param>
-            <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
-            <param-value>org.apache.airavata.services.registry.rest.security.AuthenticationFilter</param-value>
-        </init-param-->
         <load-on-startup>1</load-on-startup>
     </servlet>
+
+    <!-- ========================= Security Related Configurations go here ================================== -->
+    <filter>
+        <filter-name>AuthenticationFilter</filter-name>
+        <filter-class>org.apache.airavata.services.registry.rest.security.HttpAuthenticatorFilter</filter-class>
+        <init-param>
+            <param-name>authenticatorConfigurations</param-name>
+            <param-value>authenticators.xml</param-value>
+        </init-param>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>AuthenticationFilter</filter-name>
+        <url-pattern>/api/*</url-pattern>
+    </filter-mapping>
+
+    <!-- ================================ End Security Related Configurations =============================== -->
+
     <servlet-mapping>
         <servlet-name>Airavata Web Application</servlet-name>
         <url-pattern>/*</url-pattern>

Added: airavata/trunk/modules/security/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/pom.xml?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/pom.xml (added)
+++ airavata/trunk/modules/security/pom.xml Wed Nov 14 21:10:13 2012
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file 
+    distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under 
+    the Apache License, Version 2.0 (theÏ "License"); you may not use this file except in compliance with the License. You may 
+    obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to 
+    in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 
+    ANY ~ KIND, either express or implied. See the License for the specific language governing permissions and limitations under 
+    the License. -->
+
+<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">
+    <parent>
+        <groupId>org.apache.airavata</groupId>
+        <artifactId>airavata</artifactId>
+        <version>0.6-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>airavata-security</artifactId>
+    <name>Airavata Security Implementation</name>
+    <description>Module for managing security features in Airavata</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shiro</groupId>
+            <artifactId>shiro-core</artifactId>
+            <version>1.2.1</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-dbcp</groupId>
+            <artifactId>commons-dbcp</artifactId>
+            <version>1.4</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.7</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.3.168</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${surefire.version}</version>
+                <configuration>
+                    <testSourceDirectory>${basedir}\src\test\java\</testSourceDirectory>
+                </configuration>
+            </plugin>
+        </plugins>
+        <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
+        <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
+        <testResources>
+            <testResource>
+                <directory>${project.basedir}/src/test/resources</directory>
+            </testResource>
+        </testResources>
+    </build>
+</project>

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractAuthenticator.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractAuthenticator.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractAuthenticator.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractAuthenticator.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,120 @@
+package org.apache.airavata.security;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+/**
+ * An abstract implementation of the authenticator.
+ */
+@SuppressWarnings("UnusedDeclaration")
+public abstract class AbstractAuthenticator implements Authenticator {
+
+    protected static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+    protected static Logger log = LoggerFactory.getLogger(AbstractAuthenticator.class);
+
+    public static int DEFAULT_AUTHENTICATOR_PRIORITY = 5;
+
+    protected String authenticatorName;
+
+    private int priority = DEFAULT_AUTHENTICATOR_PRIORITY;
+
+    protected boolean enabled = true;
+
+    protected UserStore userStore;
+
+    public AbstractAuthenticator() {
+
+    }
+
+    public AbstractAuthenticator(String name) {
+        this.authenticatorName = name;
+    }
+
+    public void setUserStore(UserStore store) {
+        this.userStore = store;
+    }
+
+    public UserStore getUserStore() {
+        return this.userStore;
+    }
+
+    public int getPriority() {
+        return priority;
+    }
+
+    public boolean canProcess(Object credentials) {
+        return false;
+    }
+
+    public String getAuthenticatorName() {
+        return authenticatorName;
+    }
+
+    public void setAuthenticatorName(String authenticatorName) {
+        this.authenticatorName = authenticatorName;
+    }
+
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public boolean authenticate(Object credentials) throws AuthenticationException {
+
+        boolean authenticated = doAuthentication(credentials);
+
+        if (authenticated) {
+            onSuccessfulAuthentication(credentials);
+        } else {
+            onFailedAuthentication(credentials);
+        }
+
+        return authenticated;
+    }
+
+
+    /**
+     * Gets the current time converted to format in DATE_TIME_FORMAT.
+     * @return Current time as a string.
+     */
+    protected String getCurrentTime() {
+        Calendar cal = Calendar.getInstance();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
+        return simpleDateFormat.format(cal.getTime());
+    }
+
+    /**
+     * The actual authenticating logic goes here. If user is successfully authenticated this should return
+     * <code>true</code> else this should return <code>false</code>. If an error occurred while authenticating
+     * this will throw an exception.
+     * @param credentials The object which contains request credentials. This could be request most of the time.
+     * @return <code>true</code> if successfully authenticated else <code>false</code>.
+     * @throws AuthenticationException If system error occurs while authenticating.
+     */
+    protected abstract boolean doAuthentication(Object credentials) throws AuthenticationException;
+
+    /**
+     * If authentication is successful we can do post authentication actions in following method.
+     * E.g :- adding user to session, audit logging etc ...
+     * @param authenticationInfo A generic object with authentication information.
+     */
+    public abstract void onSuccessfulAuthentication(Object authenticationInfo);
+
+    /**
+     * If authentication is failed we can do post authentication actions in following method.
+     * E.g :- adding user to session, audit logging etc ...
+     * @param authenticationInfo A generic object with authentication information.
+     */
+    public abstract void onFailedAuthentication(Object authenticationInfo);
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractDatabaseAuthenticator.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractDatabaseAuthenticator.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractDatabaseAuthenticator.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AbstractDatabaseAuthenticator.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,105 @@
+package org.apache.airavata.security;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * An abstract authenticator class which reads database configurations.
+ */
+@SuppressWarnings("UnusedDeclaration")
+public abstract class AbstractDatabaseAuthenticator extends AbstractAuthenticator {
+
+    private String databaseURL;
+
+    private String databaseDriver;
+
+    private String databaseUserName;
+
+    private String databasePassword;
+
+    public AbstractDatabaseAuthenticator() {
+        super();
+    }
+
+    public AbstractDatabaseAuthenticator(String name) {
+        super(name);
+    }
+
+    /**
+     * We are reading database parameters in this case.
+     *
+     * @param node An XML configuration node.
+     */
+    public void configure(Node node) {
+
+        /**
+         <specificConfigurations>
+         <database>
+         <jdbcUrl></jdbcUrl>
+         <databaseDriver></databaseDriver>
+         <userName></userName>
+         <password></password>
+         </database>
+         </specificConfigurations>
+         */
+
+        NodeList databaseNodeList = node.getChildNodes();
+
+        Node databaseNode = null;
+
+        for (int k = 0; k < databaseNodeList.getLength(); ++k) {
+
+            Node n = databaseNodeList.item(k);
+
+            if (n != null && n.getNodeType() == Node.ELEMENT_NODE) {
+                databaseNode = n;
+            }
+        }
+
+        if (databaseNode != null) {
+            NodeList nodeList = databaseNode.getChildNodes();
+
+            for (int i = 0; i < nodeList.getLength(); ++i) {
+                Node n = nodeList.item(i);
+
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+
+                    Element element = (Element) n;
+
+                    if (element.getNodeName().equals("jdbcUrl")) {
+                        databaseURL = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("databaseDriver")) {
+                        databaseDriver = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("userName")) {
+                        databaseUserName = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("password")) {
+                        databasePassword = element.getFirstChild().getNodeValue();
+                    }
+                }
+            }
+        }
+
+        StringBuilder stringBuilder = new StringBuilder("Configuring DB parameters for authenticator with JDBC URL - ");
+        stringBuilder.append(databaseURL).append(" DB driver - ").append(" DB user - ").
+                append(databaseUserName).append(" DB password - xxxxxx");
+
+        log.info(stringBuilder.toString());
+    }
+
+    public String getDatabaseURL() {
+        return databaseURL;
+    }
+
+    public String getDatabaseDriver() {
+        return databaseDriver;
+    }
+
+    public String getDatabaseUserName() {
+        return databaseUserName;
+    }
+
+    public String getDatabasePassword() {
+        return databasePassword;
+    }
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AuthenticationException.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AuthenticationException.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AuthenticationException.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/AuthenticationException.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,22 @@
+package org.apache.airavata.security;
+
+/**
+ * Wraps errors during authentication. This exception will be thrown if there is a system error during authentication.
+ */
+public class AuthenticationException extends Exception {
+
+
+    public AuthenticationException() {
+        super();
+    }
+
+    public AuthenticationException (String message) {
+        super(message);
+    }
+
+    public AuthenticationException (String message, Exception e) {
+        super(message, e);
+    }
+
+
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authenticator.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authenticator.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authenticator.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authenticator.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,71 @@
+package org.apache.airavata.security;
+
+import org.w3c.dom.Node;
+
+/**
+ * A generic interface to do request authentication. Specific authenticator will implement authenticate method.
+ */
+@SuppressWarnings("UnusedDeclaration")
+public interface Authenticator {
+
+    /**
+     * Authenticates the request with given credentials.
+     * @param credentials Credentials can be a session ticket, password or session id.
+     * @return <code>true</code> if request is successfully authenticated else <code>false</code>.
+     * @throws AuthenticationException If a system error occurred during authentication process.
+     */
+    boolean authenticate(Object credentials) throws AuthenticationException;
+
+    /**
+     * Checks whether given user is already authenticated.
+     * @param credentials The token to be authenticated.
+     * @return <code>true</code> if token is already authenticated else <code>false</code>.
+     */
+    boolean isAuthenticated(Object credentials);
+
+    /**
+     * Says whether current authenticator can handle given credentials.
+     * @param credentials Credentials used during authentication.
+     * @return <code>true</code> is can authenticate else <code>false</code>.
+     */
+    boolean canProcess(Object credentials);
+
+    /**
+     * Gets the priority of this authenticator.
+     * @return Higher the priority higher the precedence of selecting the authenticator.
+     */
+    int getPriority();
+
+    /**
+     * Returns the authenticator name. Each authenticator is associated with an identifiable name.
+     * @return The authenticator name.
+     */
+    String getAuthenticatorName();
+
+    /**
+     * Authenticator specific configurations goes into this method.
+     * @param node An XML configuration node.
+     * @throws RuntimeException If an error occurred while configuring the authenticator.
+     */
+    void configure(Node node) throws RuntimeException;
+
+    /**
+     * Return <code>true</code> if current authenticator is enabled. Else <code>false</code>.
+     * @return <code>true</code> if enabled.
+     */
+    boolean isEnabled();
+
+    /**
+     * User store that should be used by this authenticator. When authenticating a request
+     * authenticator should use the user store set by this method.
+     * @param userStore The user store to be used.
+     */
+    void setUserStore(UserStore userStore);
+
+    /**
+     * Gets the user store used by this authenticator.
+     * @return The user store used by this authenticator.
+     */
+    UserStore getUserStore();
+
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authoriser.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authoriser.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authoriser.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/Authoriser.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,18 @@
+package org.apache.airavata.security;
+
+/**
+ * An interface which can be used to authorise accessing resources.
+ */
+@SuppressWarnings("UnusedDeclaration")
+public interface Authoriser {
+
+    /**
+     * Checks whether user has sufficient privileges to perform action on the given resource.
+     * @param userName  The user who is performing the action.
+     * @param resource The resource which user is trying to access.
+     * @param action  The action (GET, PUT etc ...)
+     * @return Returns <code>true</code> if user is authorised to perform the action, else false.
+     */
+    boolean isAuthorised (String userName, String resource, String action);
+
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStore.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStore.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStore.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,72 @@
+/*
+ *
+ *  *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  *   http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *  *
+ *
+ */
+
+package org.apache.airavata.security;
+
+import org.w3c.dom.Node;
+
+/**
+ * An interface to wrap the functionality of a user store. A user store is place where we keep user attribute
+ * information. Usually this contains, user id, user name, password etc ...
+ * We also authenticate users against the credentials stored in a user store. In addition to user attributes
+ * we also store role information and group information.
+ * This interface provide methods to manipulated data in a user store.
+ * Such operations are as follows,
+ * <ol>
+ *     <li>authenticate user</li>
+ *     <li>add user</li>
+ *     <li>delete user</li>
+ *     <li>add a role</li>
+ *     <li>delete a role</li>
+ *     <li>... etc ...</li>
+ * </ol>
+ */
+public interface UserStore {
+
+    /**
+     * Checks whether given user exists in the user store and its credentials match with the credentials stored
+     * in the user store.
+     * @param userName Name of the user to authenticate.
+     * @param credentials User credentials as an object. User credentials may not be a string always.
+     * @return True if user exists in the user store and its credentials match with the credentials in user store.
+     *          <code>false</code> else.
+     * @throws UserStoreException if a system wide error occurred while authenticating the user.
+     */
+    boolean authenticate(String userName, Object credentials) throws UserStoreException;
+
+    /**
+     * Authenticates a user using a token.
+     * @param credentials The token information.
+     * @return <code>true</code> if authentication successful else <code>false</code>.
+     * @throws UserStoreException if a system wide error occurred while authenticating the user.
+     */
+    boolean authenticate(Object credentials) throws UserStoreException;
+
+    /**
+     * This method will do necessary configurations of the user store.
+     * @param node An XML configuration node.
+     * @throws RuntimeException If an error occurred while configuring the authenticator.
+     */
+    void configure(Node node) throws UserStoreException;
+
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStoreException.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStoreException.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStoreException.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/UserStoreException.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,47 @@
+/*
+ *
+ *  *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  *   http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *  *
+ *
+ */
+
+package org.apache.airavata.security;
+
+/**
+ * Exception class to wrap user store errors.
+ */
+public class UserStoreException extends Exception {
+
+    public UserStoreException() {
+        super();
+    }
+
+    public UserStoreException(String message) {
+        super(message);
+    }
+
+    public UserStoreException(String message, Exception e) {
+        super(message, e);
+    }
+
+    public UserStoreException(Exception e) {
+        super(e);
+    }
+
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AbstractConfigurationReader.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AbstractConfigurationReader.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AbstractConfigurationReader.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AbstractConfigurationReader.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,58 @@
+/*
+ *
+ *  *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  *   http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *  *
+ *
+ */
+
+package org.apache.airavata.security.configurations;
+
+
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Abstract implementation to read configurations.
+ */
+public abstract class AbstractConfigurationReader {
+
+    public void init(String fileName) throws IOException, SAXException, ParserConfigurationException {
+
+        File configurationFile = new File(fileName);
+
+        if (!configurationFile.canRead()) {
+            throw new IOException("Error reading configuration file " + configurationFile.getAbsolutePath());
+        }
+
+        FileInputStream streamIn = new FileInputStream(configurationFile);
+
+        try {
+            init(streamIn);
+        } finally {
+            streamIn.close();
+        }
+    }
+
+    public abstract void init(InputStream inputStream) throws IOException, ParserConfigurationException, SAXException;
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReader.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReader.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReader.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReader.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,225 @@
+package org.apache.airavata.security.configurations;
+
+import org.apache.airavata.security.AbstractAuthenticator;
+import org.apache.airavata.security.Authenticator;
+import org.apache.airavata.security.UserStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * This class will read authenticators.xml and load all configurations related to authenticators.
+ */
+public class AuthenticatorConfigurationReader extends AbstractConfigurationReader {
+
+    private List<Authenticator> authenticatorList = new ArrayList<Authenticator>();
+
+    protected static Logger log = LoggerFactory.getLogger(AuthenticatorConfigurationReader.class);
+
+    protected static boolean authenticationEnabled = true;
+
+    public AuthenticatorConfigurationReader() {
+
+    }
+
+    public void init(InputStream inputStream) throws IOException, ParserConfigurationException, SAXException {
+
+        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+        Document doc = dBuilder.parse(inputStream);
+        doc.getDocumentElement().normalize();
+
+        NodeList rootNodeList = doc.getElementsByTagName("authenticators");
+
+        if (rootNodeList == null || rootNodeList.getLength() == 0) {
+            throw new ParserConfigurationException("authenticators.xml should have authenticators root element.");
+        }
+
+        Node authenticatorsNode = rootNodeList.item(0);
+        NamedNodeMap rootAttributes = authenticatorsNode.getAttributes();
+
+        if (rootAttributes != null && rootAttributes.getNamedItem("enabled") != null) {
+
+            String enabledAttribute = rootAttributes.getNamedItem("enabled").getNodeValue();
+            if ( enabledAttribute != null) {
+
+                if (enabledAttribute.equals("false")) {
+                    authenticationEnabled = false;
+                }
+            }
+        }
+
+
+        NodeList authenticators = doc.getElementsByTagName("authenticator");
+
+        for (int i = 0; i < authenticators.getLength(); ++i) {
+            Node node = authenticators.item(i);
+
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+
+                NamedNodeMap namedNodeMap = node.getAttributes();
+
+                String name = namedNodeMap.getNamedItem("name").getNodeValue();
+                String className = namedNodeMap.getNamedItem("class").getNodeValue();
+                String enabled = namedNodeMap.getNamedItem("enabled").getNodeValue();
+                String priority = namedNodeMap.getNamedItem("priority").getNodeValue();
+                String userStoreClass = namedNodeMap.getNamedItem("userstore").getNodeValue();
+
+                if (className == null) {
+                    reportError("class");
+                }
+
+                if (userStoreClass == null) {
+                    reportError("userstore");
+                }
+
+                Authenticator authenticator = createAuthenticator(name, className, enabled,
+                        priority, userStoreClass);
+
+                NodeList configurationNodes = node.getChildNodes();
+
+                for (int j = 0; j < configurationNodes.getLength(); ++j) {
+
+                    Node configurationNode = configurationNodes.item(j);
+
+                    if (configurationNode.getNodeType() == Node.ELEMENT_NODE) {
+
+                        if (configurationNode.getNodeName().equals("specificConfigurations")) {
+                            authenticator.configure(configurationNode);
+                        }
+                    }
+                }
+
+                if (authenticator.isEnabled()) {
+                    authenticatorList.add(authenticator);
+                }
+
+                Collections.sort(authenticatorList, new AuthenticatorComparator());
+
+                StringBuilder stringBuilder = new StringBuilder("Successfully initialized authenticator ");
+                stringBuilder.append(name).append(" with class ").append(className).append(" enabled? ").append(enabled)
+                        .append(" priority = ").append(priority);
+
+                log.info(stringBuilder.toString());
+            }
+        }
+    }
+
+    private void reportError(String element) throws ParserConfigurationException {
+        throw new ParserConfigurationException("Error in configuration. Missing mandatory element "
+                + element);
+    }
+
+    protected Authenticator createAuthenticator(String name, String className, String enabled,
+                                                String priority, String userStoreClassName) {
+
+        log.info("Loading authenticator class " + className + " and name " + name);
+
+        // Load a class and instantiate an object
+        Class authenticatorClass;
+        try {
+            authenticatorClass = Class.forName(className, true, Thread.currentThread().getContextClassLoader());
+            //authenticatorClass = Class.forName(className);
+        } catch (ClassNotFoundException e) {
+            log.error("Error loading authenticator class " + className);
+            throw new RuntimeException("Error loading authenticator class " + className, e);
+
+        }
+
+        try {
+            AbstractAuthenticator authenticatorInstance = (AbstractAuthenticator) authenticatorClass.newInstance();
+            authenticatorInstance.setAuthenticatorName(name);
+
+            if (enabled != null) {
+                authenticatorInstance.setEnabled(Boolean.parseBoolean(enabled));
+            }
+
+            if (priority != null) {
+                authenticatorInstance.setPriority(Integer.parseInt(priority));
+            }
+
+            UserStore userStore = createUserStore(userStoreClassName);
+            authenticatorInstance.setUserStore(userStore);
+
+            return authenticatorInstance;
+
+        } catch (InstantiationException e) {
+            String error = "Error instantiating authenticator class " + className + " object.";
+            log.error(error);
+            throw new RuntimeException(error, e);
+
+        } catch (IllegalAccessException e) {
+            String error = "Not allowed to instantiate authenticator class " + className;
+            log.error(error);
+            throw new RuntimeException(error, e);
+        }
+
+    }
+
+    protected UserStore createUserStore(String userStoreClassName) {
+
+        try {
+            Class userStoreClass = Class.forName(userStoreClassName, true,
+                    Thread.currentThread().getContextClassLoader());
+
+            return (UserStore)userStoreClass.newInstance();
+        } catch (ClassNotFoundException e) {
+            log.error("Error loading authenticator class " + userStoreClassName);
+            throw new RuntimeException("Error loading authenticator class " + userStoreClassName, e);
+
+        } catch (InstantiationException e) {
+            String error = "Error instantiating authenticator class " + userStoreClassName + " object.";
+            log.error(error);
+            throw new RuntimeException(error, e);
+
+        } catch (IllegalAccessException e) {
+            String error = "Not allowed to instantiate authenticator class " + userStoreClassName;
+            log.error(error);
+            throw new RuntimeException(error, e);
+        }
+
+    }
+
+    public List<Authenticator> getAuthenticatorList() {
+        return Collections.unmodifiableList(authenticatorList);
+    }
+
+    /**
+     * We can specify whether authentication is enabled in the system for all request or not.
+     * This we can state in the configuration. AuthenticatorConfigurationReader will read that information
+     * and will populate that to static boolean authenticationEnabled. This method will say whether
+     * authentication is enabled in the system or disabled in the system.
+     * @return <code>true</code> if authentication is enabled. Else <code>false</code>.
+     */
+    public static boolean isAuthenticationEnabled() {
+        return authenticationEnabled;
+    }
+
+
+    /**
+     * Comparator to sort authenticators based on authenticator priority.
+     */
+    public class AuthenticatorComparator implements Comparator<Authenticator> {
+
+        @Override
+        public int compare(Authenticator o1, Authenticator o2) {
+            return (o1.getPriority() > o2.getPriority() ? -1 : (o1.getPriority() == o2.getPriority() ? 0 : 1));
+        }
+    }
+
+
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/AbstractJDBCUserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/AbstractJDBCUserStore.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/AbstractJDBCUserStore.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/AbstractJDBCUserStore.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,115 @@
+/*
+ *
+ *  *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  *   http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *  *
+ *
+ */
+
+package org.apache.airavata.security.userstore;
+
+import org.apache.airavata.security.UserStore;
+import org.apache.airavata.security.UserStoreException;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+
+/**
+ * An abstract implementation of the UserStore. This will encapsulate
+ * JDBC configurations reading code.
+ */
+public abstract class AbstractJDBCUserStore implements UserStore {
+
+    private String databaseURL = null;
+    private String databaseDriver = null;
+    private String databaseUserName = null;
+    private String databasePassword = null;
+
+    public String getDatabaseURL() {
+        return databaseURL;
+    }
+
+    public String getDatabaseDriver() {
+        return databaseDriver;
+    }
+
+    public String getDatabaseUserName() {
+        return databaseUserName;
+    }
+
+    public String getDatabasePassword() {
+        return databasePassword;
+    }
+
+    /**
+     * Configures primary JDBC parameters. i.e
+     * @param node An XML configuration node.
+     * @throws UserStoreException
+     */
+    public void configure(Node node) throws UserStoreException{
+
+        /**
+         <specificConfigurations>
+         <database>
+         <jdbcUrl></jdbcUrl>
+         <databaseDriver></databaseDriver>
+         <userName></userName>
+         <password></password>
+         </database>
+         </specificConfigurations>
+         */
+
+        NodeList databaseNodeList = node.getChildNodes();
+
+        Node databaseNode = null;
+
+        for (int k = 0; k < databaseNodeList.getLength(); ++k) {
+
+            Node n = databaseNodeList.item(k);
+
+            if (n != null && n.getNodeType() == Node.ELEMENT_NODE) {
+                databaseNode = n;
+            }
+        }
+
+        if (databaseNode != null) {
+            NodeList nodeList = databaseNode.getChildNodes();
+
+            for (int i = 0; i < nodeList.getLength(); ++i) {
+                Node n = nodeList.item(i);
+
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+
+                    Element element = (Element) n;
+
+                    if (element.getNodeName().equals("jdbcUrl")) {
+                        databaseURL = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("databaseDriver")) {
+                        databaseDriver = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("userName")) {
+                        databaseUserName = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("password")) {
+                        databasePassword = element.getFirstChild().getNodeValue();
+                    }
+                }
+            }
+        }
+
+    }
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,158 @@
+/*
+ *
+ *  *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  *   http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *  *
+ *
+ */
+
+package org.apache.airavata.security.userstore;
+
+import org.apache.airavata.security.UserStore;
+import org.apache.airavata.security.UserStoreException;
+import org.apache.airavata.security.util.DBLookup;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.realm.jdbc.JdbcRealm;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+import javax.sql.DataSource;
+
+/**
+ * The JDBC user store implementation.
+ */
+public class JDBCUserStore extends AbstractJDBCUserStore {
+
+    protected static Logger log = LoggerFactory.getLogger(JDBCUserStore.class);
+
+    private JdbcRealm jdbcRealm;
+
+    public JDBCUserStore() {
+        jdbcRealm = new JdbcRealm();
+    }
+
+    @Override
+    public boolean authenticate(String userName, Object credentials) throws UserStoreException{
+        AuthenticationToken authenticationToken = new UsernamePasswordToken(userName, (String)credentials);
+
+        AuthenticationInfo authenticationInfo;
+        try {
+            authenticationInfo = jdbcRealm.getAuthenticationInfo(authenticationToken);
+        } catch (AuthenticationException e) {
+            log.warn(e.getLocalizedMessage(), e);
+            return false;
+        }
+
+        return authenticationInfo != null;
+    }
+
+    @Override
+    public boolean authenticate(Object credentials) throws UserStoreException{
+        log.error("JDBC user store only supports user name, password based authentication.");
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public void configure(Node node) throws UserStoreException {
+
+        super.configure(node);
+
+        /**
+         <specificConfigurations>
+         <database>
+         <jdbcUrl></jdbcUrl>
+         <databaseDriver></databaseDriver>
+         <userName></userName>
+         <password></password>
+         <userTableName></userTableName>
+         <userNameColumnName></userNameColumnName>
+         <passwordColumnName></passwordColumnName>
+         </database>
+         </specificConfigurations>
+         */
+
+        NodeList databaseNodeList = node.getChildNodes();
+
+        Node databaseNode = null;
+
+        for (int k = 0; k < databaseNodeList.getLength(); ++k) {
+
+            Node n = databaseNodeList.item(k);
+
+            if (n != null && n.getNodeType() == Node.ELEMENT_NODE) {
+                databaseNode = n;
+            }
+        }
+
+        String userTable = null;
+        String userNameColumn = null;
+        String passwordColumn = null;
+
+        if (databaseNode != null) {
+            NodeList nodeList = databaseNode.getChildNodes();
+
+            for (int i = 0; i < nodeList.getLength(); ++i) {
+                Node n = nodeList.item(i);
+
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+
+                    Element element = (Element) n;
+
+                    if (element.getNodeName().equals("userTableName")) {
+                        userTable = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("userNameColumnName")) {
+                        userNameColumn = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("passwordColumnName")) {
+                        passwordColumn = element.getFirstChild().getNodeValue();
+                    }
+                }
+            }
+        }
+
+        initializeDatabaseLookup(passwordColumn, userTable, userNameColumn);
+
+        StringBuilder stringBuilder = new StringBuilder("Configuring DB parameters for authenticator with User name Table - ");
+        stringBuilder.append(userTable).append(" User name column - ").append(userNameColumn).append(" Password column - ").
+                append(passwordColumn);
+
+        log.info(stringBuilder.toString());
+    }
+
+    protected void initializeDatabaseLookup(String passwordColumn, String userTable,
+                                            String userNameColumn) {
+
+        DBLookup dbLookup = new DBLookup(getDatabaseURL(), getDatabaseUserName(), getDatabasePassword(),
+                getDatabaseDriver());
+        DataSource dataSource = dbLookup.getDataSource();
+        jdbcRealm.setDataSource(dataSource);
+
+        StringBuilder stringBuilder = new StringBuilder();
+
+        stringBuilder.append("SELECT ").append(passwordColumn).append(" FROM ").append(userTable)
+                .append(" WHERE ").append(userNameColumn).append(" = ?");
+
+        jdbcRealm.setAuthenticationQuery(stringBuilder.toString());
+    }
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/LDAPUserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/LDAPUserStore.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/LDAPUserStore.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/LDAPUserStore.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,148 @@
+/*
+ *
+ *  *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  *   http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *  *
+ *
+ */
+
+package org.apache.airavata.security.userstore;
+
+import org.apache.airavata.security.UserStore;
+import org.apache.airavata.security.UserStoreException;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.realm.ldap.JndiLdapContextFactory;
+import org.apache.shiro.realm.ldap.JndiLdapRealm;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+/**
+ * A user store which talks to LDAP server. User credentials and user information
+ * are stored in a LDAP server.
+ */
+public class LDAPUserStore implements UserStore {
+
+    private JndiLdapRealm ldapRealm;
+
+    protected static Logger log = LoggerFactory.getLogger(LDAPUserStore.class);
+
+    public boolean authenticate(String userName, Object credentials) throws UserStoreException {
+
+        AuthenticationToken authenticationToken = new UsernamePasswordToken(userName, (String)credentials);
+
+        AuthenticationInfo authenticationInfo;
+        try {
+            authenticationInfo = ldapRealm.getAuthenticationInfo(authenticationToken);
+        } catch (AuthenticationException e) {
+            log.warn(e.getLocalizedMessage(), e);
+            return false;
+        }
+
+        return authenticationInfo != null;
+
+    }
+
+    @Override
+    public boolean authenticate(Object credentials) throws UserStoreException {
+        log.error("LDAP user store only supports authenticating with user name and password.");
+        throw new NotImplementedException();
+    }
+
+    public void configure(Node specificConfigurationNode) throws UserStoreException{
+
+        /**
+         * <specificConfiguration>
+         * <ldap>
+         * <url>ldap://localhost:10389</url>
+         * <systemUser>admin</systemUser>
+         * <systemUserPassword>secret</systemUserPassword>
+         * <userDNTemplate>uid={0},ou=system</userDNTemplate>
+         * </ldap>
+         * </specificConfiguration>
+         */
+
+        Node configurationNode = null;
+        if (specificConfigurationNode != null) {
+            NodeList nodeList = specificConfigurationNode.getChildNodes();
+
+            for (int i=0; i < nodeList.getLength(); ++i) {
+                Node n = nodeList.item(i);
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+                    configurationNode = n;
+                }
+            }
+        }
+
+        String url = null;
+        String systemUser = null;
+        String systemUserPassword = null;
+        String userTemplate = null;
+
+        if (configurationNode != null) {
+            NodeList nodeList = configurationNode.getChildNodes();
+
+            for (int i = 0; i < nodeList.getLength(); ++i) {
+                Node n = nodeList.item(i);
+
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+
+                    Element element = (Element) n;
+
+                    if (element.getNodeName().equals("url")) {
+                        url = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("systemUser")) {
+                        systemUser = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("systemUserPassword")) {
+                        systemUserPassword = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("userDNTemplate")) {
+                        userTemplate = element.getFirstChild().getNodeValue();
+                    }
+                }
+            }
+        }
+
+        initializeLDAP(url, systemUser, systemUserPassword, userTemplate);
+
+    }
+
+    protected void initializeLDAP(String ldapUrl, String systemUser, String systemUserPassword,
+                                  String userNameTemplate) {
+
+        JndiLdapContextFactory jndiLdapContextFactory = new JndiLdapContextFactory();
+
+        jndiLdapContextFactory.setUrl(ldapUrl);
+        jndiLdapContextFactory.setSystemUsername(systemUser);
+        jndiLdapContextFactory.setSystemPassword(systemUserPassword);
+
+        ldapRealm = new JndiLdapRealm();
+
+        ldapRealm.setContextFactory(jndiLdapContextFactory);
+        ldapRealm.setUserDnTemplate(userNameTemplate);
+
+
+        ldapRealm.init();
+
+    }
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,141 @@
+/*
+ *
+ *  *
+ *  * Licensed to the Apache Software Foundation (ASF) under one
+ *  * or more contributor license agreements.  See the NOTICE file
+ *  * distributed with this work for additional information
+ *  * regarding copyright ownership.  The ASF licenses this file
+ *  * to you under the Apache License, Version 2.0 (the
+ *  * "License"); you may not use this file except in compliance
+ *  * with the License.  You may obtain a copy of the License at
+ *  *
+ *  *   http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing,
+ *  * software distributed under the License is distributed on an
+ *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  * KIND, either express or implied.  See the License for the
+ *  * specific language governing permissions and limitations
+ *  * under the License.
+ *  *
+ *
+ */
+
+package org.apache.airavata.security.userstore;
+
+import org.apache.airavata.security.UserStoreException;
+import org.apache.airavata.security.util.DBLookup;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+import java.sql.SQLException;
+
+/**
+ * User store which works on sessions. Will talk to database to check
+ * whether session ids are stored in the database.
+ */
+public class SessionDBUserStore extends AbstractJDBCUserStore {
+
+    private String sessionTable;
+    private String sessionColumn;
+    private String comparingColumn;
+
+    protected DBLookup dbLookup;
+
+    protected static Logger log = LoggerFactory.getLogger(SessionDBUserStore.class);
+
+
+    @Override
+    public boolean authenticate(String userName, Object credentials) throws UserStoreException {
+        // This user store only supports session tokens.
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public boolean authenticate(Object credentials) throws UserStoreException {
+
+        String sessionTicket = (String)credentials;
+
+        try {
+            String sessionString = dbLookup.getMatchingColumnValue(sessionTable, sessionColumn, sessionTicket);
+            return (sessionString != null);
+        } catch (SQLException e) {
+            throw new UserStoreException("Error querying database for session information.", e);
+        }
+    }
+
+    @Override
+    public void configure(Node node) throws UserStoreException {
+
+        super.configure(node);
+        /**
+         <specificConfigurations>
+         <sessionTable>
+         </sessionTable>
+         <sessionColumn></sessionColumn>
+         <comparingColumn></comparingColumn>
+         </specificConfigurations>
+         */
+
+        NodeList databaseNodeList = node.getChildNodes();
+
+        Node databaseNode = null;
+
+        for (int k = 0; k < databaseNodeList.getLength(); ++k) {
+
+            Node n = databaseNodeList.item(k);
+
+            if (n != null && n.getNodeType() == Node.ELEMENT_NODE) {
+                databaseNode = n;
+            }
+        }
+
+        if (databaseNode != null) {
+            NodeList nodeList = databaseNode.getChildNodes();
+
+            for (int i = 0; i < nodeList.getLength(); ++i) {
+                Node n = nodeList.item(i);
+
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+
+                    Element element = (Element) n;
+
+                    if (element.getNodeName().equals("sessionTable")) {
+                        sessionTable = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("sessionColumn")) {
+                        sessionColumn = element.getFirstChild().getNodeValue();
+                    } else if (element.getNodeName().equals("comparingColumn")) {
+                        comparingColumn = element.getFirstChild().getNodeValue();
+                    }
+                }
+            }
+        }
+
+        initializeDatabaseLookup();
+
+        StringBuilder stringBuilder = new StringBuilder("Configuring DB parameters for authenticator with Session Table - ");
+        stringBuilder.append(sessionTable).append(" Session column - ").append(sessionColumn).append(" Comparing column - ").
+                append(comparingColumn);
+
+        log.info(stringBuilder.toString());
+    }
+
+    private void initializeDatabaseLookup() throws RuntimeException {
+
+        this.dbLookup = new DBLookup(getDatabaseURL(), getDatabaseUserName(), getDatabasePassword(), getDatabaseDriver());
+
+        try {
+            this.dbLookup.init();
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException("Error loading database driver. Driver class not found.", e);
+        } catch (InstantiationException e) {
+            throw new RuntimeException("Error loading database driver. Error instantiating driver object.", e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException("Error loading database driver. Illegal access to driver object.", e);
+        }
+    }
+}

Added: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/util/DBLookup.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/util/DBLookup.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/util/DBLookup.java (added)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/util/DBLookup.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,108 @@
+package org.apache.airavata.security.util;
+
+import org.apache.commons.dbcp.BasicDataSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.sql.DataSource;
+import java.sql.*;
+import java.util.Properties;
+
+/**
+ * Database lookup.
+ */
+public class DBLookup {
+
+    private String jdbcUrl;
+    private String databaseUserName;
+    private String databasePassword;
+    private String driverName;
+
+    protected static Logger log = LoggerFactory.getLogger(DBLookup.class);
+
+    private Properties properties;
+
+
+    public DBLookup(String jdbcUrl, String userName, String password, String driver) {
+
+        this.jdbcUrl = jdbcUrl;
+        this.databaseUserName = userName;
+        this.databasePassword = password;
+        this.driverName = driver;
+    }
+
+    public void init() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
+        properties = new Properties();
+
+        properties.put("user", databaseUserName);
+        properties.put("password", databasePassword);
+        properties.put("characterEncoding", "ISO-8859-1");
+        properties.put("useUnicode", "true");
+
+        loadDriver();
+    }
+
+    public String getMatchingColumnValue(String tableName, String selectColumn, String whereValue)
+            throws SQLException {
+        return getMatchingColumnValue(tableName, selectColumn, selectColumn, whereValue);
+    }
+
+    public String getMatchingColumnValue(String tableName, String selectColumn, String whereColumn, String whereValue)
+            throws SQLException {
+
+        StringBuilder stringBuilder = new StringBuilder();
+
+        stringBuilder.append("SELECT ").append(selectColumn).append(" FROM ").append(tableName)
+                .append(" WHERE ").append(whereColumn).append(" = ?");
+
+        String sql = stringBuilder.toString();
+
+        Connection connection = getConnection();
+
+        PreparedStatement ps = connection.prepareStatement(sql);
+        ResultSet rs = null;
+
+        try {
+            ps.setString(1, whereValue);
+            rs = ps.executeQuery();
+
+            if (rs.next()) {
+                return rs.getString(1);
+            }
+
+        } finally {
+            try {
+                if (rs != null) {
+                    rs.close();
+                }
+
+                ps.close();
+                connection.close();
+
+            } catch (Exception ignore) {
+                log.error("An error occurred while closing database connections ", ignore);
+            }
+        }
+
+        return null;
+    }
+
+    private void loadDriver() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
+        Class.forName(driverName).newInstance();
+    }
+
+    public DataSource getDataSource() {
+        BasicDataSource ds = new BasicDataSource();
+        ds.setDriverClassName(this.driverName);
+        ds.setUsername(this.databaseUserName);
+        ds.setPassword(this.databasePassword);
+        ds.setUrl(this.jdbcUrl);
+
+        return ds;
+    }
+
+    public Connection getConnection() throws SQLException {
+        return DriverManager.getConnection(jdbcUrl, properties);
+    }
+
+}

Added: airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java (added)
+++ airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,97 @@
+package org.apache.airavata.security.configurations;
+
+import junit.framework.TestCase;
+import org.apache.airavata.security.Authenticator;
+import org.apache.airavata.security.userstore.JDBCUserStore;
+import org.apache.airavata.security.userstore.LDAPUserStore;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * A test class for authenticator configuration reader.
+ * Reads the authenticators.xml in resources directory.
+ */
+public class AuthenticatorConfigurationReaderTest extends TestCase {
+
+    private String configurationFile = this.getClass().getClassLoader().getResource("authenticators.xml").getFile();
+
+    public void setUp() throws Exception {
+
+        File f = new File(".");
+        System.out.println(f.getAbsolutePath());
+
+        File file = new File(configurationFile);
+
+        if (!file.exists() && !file.canRead()) {
+            throw new Exception("Error reading configuration file " + configurationFile);
+
+        }
+    }
+
+    public void testInit() throws Exception {
+
+        AuthenticatorConfigurationReader authenticatorConfigurationReader
+                = new AuthenticatorConfigurationReader();
+        authenticatorConfigurationReader.init(configurationFile);
+
+        assertTrue(AuthenticatorConfigurationReader.isAuthenticationEnabled());
+
+        List<Authenticator> authenticators = authenticatorConfigurationReader.getAuthenticatorList();
+
+        assertEquals(authenticators.size(), 3);
+
+        for (Authenticator authenticator : authenticators) {
+            if (authenticator instanceof TestDBAuthenticator1) {
+                assertEquals("dbAuthenticator1", authenticator.getAuthenticatorName());
+                assertEquals(6, authenticator.getPriority());
+                assertEquals(true, authenticator.isEnabled());
+                assertEquals("jdbc:sql:thin:@//myhost:1521/mysql1", ((TestDBAuthenticator1) authenticator).getDatabaseURL());
+                assertEquals("org.myqsql.Driver1", ((TestDBAuthenticator1) authenticator).getDatabaseDriver());
+                assertEquals("mysql1", ((TestDBAuthenticator1) authenticator).getDatabaseUserName());
+                assertEquals("secret1", ((TestDBAuthenticator1) authenticator).getDatabasePassword());
+                assertNotNull(authenticator.getUserStore());
+                assertTrue(authenticator.getUserStore() instanceof JDBCUserStore);
+            } else if (authenticator instanceof TestDBAuthenticator2) {
+                assertEquals("dbAuthenticator2", authenticator.getAuthenticatorName());
+                assertEquals(7, authenticator.getPriority());
+                assertEquals(true, authenticator.isEnabled());
+                assertEquals("jdbc:sql:thin:@//myhost:1521/mysql2", ((TestDBAuthenticator2) authenticator).getDatabaseURL());
+                assertEquals("org.myqsql.Driver2", ((TestDBAuthenticator2) authenticator).getDatabaseDriver());
+                assertEquals("mysql2", ((TestDBAuthenticator2) authenticator).getDatabaseUserName());
+                assertEquals("secret2", ((TestDBAuthenticator2) authenticator).getDatabasePassword());
+                assertNotNull(authenticator.getUserStore());
+                assertTrue(authenticator.getUserStore() instanceof LDAPUserStore);
+            }  else if (authenticator instanceof TestDBAuthenticator3) {
+                assertEquals("dbAuthenticator3", authenticator.getAuthenticatorName());
+                assertEquals(8, authenticator.getPriority());
+                assertEquals(true, authenticator.isEnabled());
+                assertEquals("jdbc:sql:thin:@//myhost:1521/mysql3", ((TestDBAuthenticator3) authenticator).getDatabaseURL());
+                assertEquals("org.myqsql.Driver3", ((TestDBAuthenticator3) authenticator).getDatabaseDriver());
+                assertEquals("mysql3", ((TestDBAuthenticator3) authenticator).getDatabaseUserName());
+                assertEquals("secret3", ((TestDBAuthenticator3) authenticator).getDatabasePassword());
+                assertNotNull(authenticator.getUserStore());
+                assertTrue(authenticator.getUserStore() instanceof JDBCUserStore);
+            }
+        }
+
+        assertEquals(8, authenticators.get(0).getPriority());
+        assertEquals(7, authenticators.get(1).getPriority());
+        assertEquals(6, authenticators.get(2).getPriority());
+
+    }
+
+    public void testDisabledAuthenticator() throws Exception {
+
+        String disabledConfiguration
+                = this.getClass().getClassLoader().getResource("disabled-authenticator.xml").getFile();
+
+
+        AuthenticatorConfigurationReader authenticatorConfigurationReader
+                = new AuthenticatorConfigurationReader();
+        authenticatorConfigurationReader.init(disabledConfiguration);
+
+        assertFalse(AuthenticatorConfigurationReader.isAuthenticationEnabled());
+
+    }
+}

Added: airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java?rev=1409401&view=auto
==============================================================================
--- airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java (added)
+++ airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java Wed Nov 14 21:10:13 2012
@@ -0,0 +1,37 @@
+package org.apache.airavata.security.configurations;
+
+import org.apache.airavata.security.AbstractDatabaseAuthenticator;
+import org.apache.airavata.security.AuthenticationException;
+
+public class TestDBAuthenticator1 extends AbstractDatabaseAuthenticator {
+
+    public TestDBAuthenticator1() {
+        super();
+    }
+
+    @Override
+    public void onSuccessfulAuthentication(Object authenticationInfo) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public void onFailedAuthentication(Object authenticationInfo) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean authenticate(Object credentials) throws AuthenticationException {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    protected boolean doAuthentication(Object credentials) throws AuthenticationException {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean isAuthenticated(Object credentials) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}
+