You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2017/09/26 19:09:49 UTC
[20/40] airavata git commit: AIRAVATA-2500 Partial Implementation
AIRAVATA-2500 Partial Implementation
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/1c2ab272
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/1c2ab272
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/1c2ab272
Branch: refs/heads/develop
Commit: 1c2ab2724fdb0e6d104130d0c4a8fc4c6df96312
Parents: fab1900
Author: spamidig <pa...@iu.edu>
Authored: Fri Sep 15 09:56:05 2017 -0400
Committer: Marcus Christie <ma...@apache.org>
Committed: Tue Sep 19 15:08:05 2017 -0400
----------------------------------------------------------------------
modules/compute-account-provisioning/pom.xml | 6 +
.../IULdapSSHAccountProvisioner.java | 120 ++++++++++++++++++-
.../SSHAccountProvisionerFactoryTest.java | 10 +-
.../TestSSHAccountProvisionerProvider.java | 8 +-
4 files changed, 136 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/1c2ab272/modules/compute-account-provisioning/pom.xml
----------------------------------------------------------------------
diff --git a/modules/compute-account-provisioning/pom.xml b/modules/compute-account-provisioning/pom.xml
index ee89d33..de963df 100644
--- a/modules/compute-account-provisioning/pom.xml
+++ b/modules/compute-account-provisioning/pom.xml
@@ -52,6 +52,12 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
+ <!-- apache directory ldap api! -->
+ <dependency>
+ <groupId>org.apache.directory.api</groupId>
+ <artifactId>api-all</artifactId>
+ <version>1.0.0</version>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
http://git-wip-us.apache.org/repos/asf/airavata/blob/1c2ab272/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java
----------------------------------------------------------------------
diff --git a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java
index 03fa803..331c01c 100644
--- a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java
+++ b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java
@@ -22,20 +22,92 @@ package org.apache.airavata.accountprovisioning.provisioner;
import org.apache.airavata.accountprovisioning.ConfigParam;
import org.apache.airavata.accountprovisioning.SSHAccountProvisioner;
-
+import org.apache.directory.api.ldap.model.cursor.CursorException;
+import org.apache.directory.ldap.client.api.*;
+import org.apache.directory.api.ldap.model.cursor.EntryCursor;
+import org.apache.directory.api.ldap.model.entry.Attribute;
+import org.apache.directory.api.ldap.model.entry.Entry;
+import org.apache.directory.api.ldap.model.entry.Modification;
+import org.apache.directory.api.ldap.model.entry.DefaultEntry;
+import org.apache.directory.api.ldap.model.exception.LdapException;
+import org.apache.directory.api.ldap.model.message.SearchScope;
+import org.apache.directory.api.ldap.model.message.DeleteResponse;
+import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
+import org.junit.Assert;
import java.util.Map;
+import java.util.List;
-public class IULdapSSHAccountProvisioner implements SSHAccountProvisioner {
+public class IULdapSSHAccountProvisioner implements SSHAccountProvisioner {
+ String ldaphost, adminDN, ldap_username, ldap_password, adminPass, ldapBaseDN;
+ int ldapport, ldapPortId;
+ LdapConnection connection;
@Override
public void init(Map<ConfigParam, String> config) {
// TODO: implement
+ ldapServerName = config.get(new ConfigParam("ldaphost"));//"bazooka.hps.iu.edu"
+ ldapPortId = config.get(new ConfigParam("ldapport"));//"636"
+ ldap_username = config.get(new ConfigParam("ldap_username"));//"cn=sgrcusr"
+ ldap_password = config.get(new ConfigParam("ldap_password"));//"lore footwork engorge"
+ ldapBaseDN = config.get(new ConfigParam( "ldapBaseDN" ));//"dc=rt,dc=iu,dc=edu"
+ try {
+ connection = new LdapNetworkConnection(ldaphost, ldapport, true);
+
+
+ System.out.println( "binding connection:" );
+ String AuthDN=ldap_username+","+ldapBaseDN;
+ connection.bind(AuthDN,ldap_password);
+ //check that we're auth'ed and connected
+ System.out.println("asserting bound:");
+ Assert.assertTrue( connection.isAuthenticated() );
+ Assert.assertTrue( connection.isConnected() );
+ } catch (Exception e) {
+ System.out.println("Exception caught!");
+ System.out.println(e.getClass().getCanonicalName());
+ System.out.println(e.getMessage());
+ System.out.println(e.getCause());
+
+ }
+ //catch (LdapException le) {
+ //System.out.println("Ldap Exception caught!", le);
+ //}
+
}
@Override
public boolean hasAccount(String username) {
// TODO: implement
+ // To verify if the user has a login on a remote host
+ // if not advice the user to get an account (if possible) before returning.
+ // a search at the ldap is used to set the value
+ System.out.println("attempting search:");
+ String uidName="uid="+username;
+ List<String> userClusters = new ArrayList();
+ try {
+ EntryCursor cursor = connection.search( ldapBaseDN, uidName, SearchScope.SUBTREE, "*" );
+ System.out.println( "Printing LDAP-wide results for " + username + ":" );
+ while (cursor.next()) {
+ Entry entry = cursor.get();
+ String DNName = entry.getDn().getName();
+ String[] words=DNName.split(",");
+ String cluster = words[1].replace("ou=");
+ userClusters.add(cluster);
+ //System.out.println( entry.getDn().getName() );
+ //System.out.println( entry.getAttributes() );
+ return true;
+ }
+ cursor.close();
+ }catch (Exception e) {
+ System.out.println( "Exception caught!" );
+ System.out.println( e.getClass().getCanonicalName() );
+ System.out.println( e.getMessage() );
+ System.out.println( e.getCause() );
+ } catch (CursorException ce) {
+ System.out.println( "Cursor Exception caught!" );
+ }catch (LdapException le) {
+ System.out.println( "Ldap Exception caught!" );
+ }
return false;
}
@@ -48,11 +120,53 @@ public class IULdapSSHAccountProvisioner implements SSHAccountProvisioner {
@Override
public void installSSHKey(String username, String sshPublicKey) {
// TODO: implement
+ // use Eric Coulter's LdapBazookaSearchAndAdd to accomplsih this
+ String GatewaySSHPublicKey = sshPublicKey;
+ String IULocalUserName = username;
+
+
+ /*
+ LdapConnectionConfig lcconfig = new LdapConnectionConfig();
+ lcconfig.setLdapHost(ldapservername);// LdapServerName = ldapserverName;//from ConfigParam should be like bazooka.hpc.iu.edu
+ lcconfig.setLdapPort(ldapPortId);// LdapPortID = ldapPortId;//from ConfigParam 636
+ lcconfig.setName(adminDN);// = adminName;//from ConfigParam sgrcusr
+ lcconfig.setCredentials(AdminPass);//from ConfigParam "lore footwork engorge"
+
+ DefaultLdapConnectionFactory lcfactory = new DefaultLdapConnectionFactory( lcconfig );
+ lcfactory.setTimeOut( connectionTimeout );
+ */
+
+ Modification addSSHPublicKeyAdd = new DefaultModification(ModificationOperation.ADD_ATTRIBUTE,"add","sshPublicKey");
+ Modification SSHPublicKey = new DefaultModification(ModificationOperation.ADD_ATTRIBUTE, "sshPublicKey",GatewaySSHPublicKey);
+ /*
+ Entry modentry = New DefaultEntry(
+ "cn=sgrcusr,dc=rt,dc=iu,dc=edu",
+ "ObjectClass: person",
+ "ObjectClass: ldapPublicKey",
+ "cn", username,
+ "dn", "uid=",username, "ou=bigred2-sgrc,dc=rt,dc=iu,dc=edu",
+ "add: sshPublicKey",
+ "sshPublicKey", GatewaySSHPublicKey );
+ */
+ try {
+ connection.modify(ldapBaseDN, addSSHPublicKeyAdd );//ldapmodify
+ connection.modify(ldapBaseDN, SSHPublicKey );
+ } catch (Exception e) {
+ System.out.println("Exception caught!", e);
+ System.out.println( e.getClass().getCanonicalName() );
+ System.out.println( e.getMessage() );
+ System.out.println( e.getCause() );
+ }
+
}
@Override
public String getScratchLocation(String username) {
// TODO: implement
- return null;
+ //if scratch location is available get it or else set a new scratch location for the user
+ String canonicalScratch = config.get(new ConfigParam("canonicalScratch"));//"/N/cd2/_USER_/scratch"
+ String scratchLocation = canonicalScratch.replace("_USER_",username);
+ return scratchLocation;
+ //return null;
}
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/1c2ab272/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java
----------------------------------------------------------------------
diff --git a/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java
index 89e9ff7..54d5f1c 100644
--- a/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java
+++ b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java
@@ -43,7 +43,7 @@ public class SSHAccountProvisionerFactoryTest {
public void testGetSSHAccountProvisionerConfigParams() {
List<ConfigParam> configParams = SSHAccountProvisionerFactory.getSSHAccountProvisionerConfigParams("TestSSHAccountProvisioner");
- Assert.assertEquals(4, configParams.size());
+ Assert.assertEquals(5, configParams.size());
ConfigParam ldaphost = configParams.get(0);
Assert.assertEquals("ldaphost", ldaphost.getName());
Assert.assertEquals(ConfigParam.ConfigParamType.STRING, ldaphost.getType());
@@ -51,11 +51,15 @@ public class SSHAccountProvisionerFactoryTest {
Assert.assertEquals("ldapport", ldapport.getName());
Assert.assertEquals(ConfigParam.ConfigParamType.STRING, ldapport.getType());
ConfigParam ldapUsername = configParams.get(2);
- Assert.assertEquals("ldap-username", ldapUsername.getName());
+ Assert.assertEquals("ldap_username", ldapUsername.getName());
Assert.assertEquals(ConfigParam.ConfigParamType.STRING, ldapUsername.getType());
ConfigParam ldapPassword = configParams.get(3);
- Assert.assertEquals("ldap-password", ldapPassword.getName());
+ Assert.assertEquals("ldap_password", ldapPassword.getName());
Assert.assertEquals(ConfigParam.ConfigParamType.CRED_STORE_PASSWORD_TOKEN, ldapPassword.getType());
+ ConfigParam ldapBaseDN = configParams.get(4);
+ Assert.assertArrayEquals("ldapBaseDN", ldapBaseDN.getName() );
+ Assert.assertArrayEquals( ConfigParam.ConfigParamType.STRING,ldapBaseDN.getType() );
+
}
@Test
http://git-wip-us.apache.org/repos/asf/airavata/blob/1c2ab272/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java
----------------------------------------------------------------------
diff --git a/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java
index a8d2cb5..7eb4250 100644
--- a/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java
+++ b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java
@@ -46,14 +46,18 @@ public class TestSSHAccountProvisionerProvider implements SSHAccountProvisionerP
.setDescription("Port of LDAP server")
.setOptional(false)
.setType(ConfigParam.ConfigParamType.STRING));
- configParams.add(new ConfigParam("ldap-username")
+ configParams.add(new ConfigParam("ldap_username")
.setDescription("Username for LDAP server")
.setOptional(false)
.setType(ConfigParam.ConfigParamType.STRING));
- configParams.add(new ConfigParam("ldap-password")
+ configParams.add(new ConfigParam("ldap_password")
.setDescription("Password for LDAP server")
.setOptional(false)
.setType(ConfigParam.ConfigParamType.CRED_STORE_PASSWORD_TOKEN));
+ configParams.add(new ConfigParam("ldapBaseDN")
+ .setDescription( "Base DN for the ldap entry" )
+ .setOptional( false )
+ .setType( ConfigParam.ConfigParamType.STRING );
return configParams;
}