From 65cd27a324a80a4ed956aaf68fe68ed8a939a3af Mon Sep 17 00:00:00 2001 From: Nils Schwabe Date: Mon, 5 May 2014 14:56:24 +0200 Subject: Add login can be in format prefix_userid OR userid@organization --- src/main/java/org/openslx/imagemaster/db/DbSatellite.java | 11 ++++++++--- src/main/java/org/openslx/imagemaster/db/LdapUser.java | 9 ++++----- .../java/org/openslx/imagemaster/session/Authenticator.java | 13 ++++++++++++- 3 files changed, 24 insertions(+), 9 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/openslx/imagemaster/db/DbSatellite.java b/src/main/java/org/openslx/imagemaster/db/DbSatellite.java index 9f3cd01..e6c8e03 100644 --- a/src/main/java/org/openslx/imagemaster/db/DbSatellite.java +++ b/src/main/java/org/openslx/imagemaster/db/DbSatellite.java @@ -3,14 +3,15 @@ package org.openslx.imagemaster.db; public class DbSatellite { - private String organization, address, name; + private String organization, address, name, prefix; // needs to be public in order to be found by MySQL - public DbSatellite(String organization, String address, String name) + public DbSatellite(String organization, String address, String name, String prefix) { this.organization = organization; this.address = address; this.name = name; + this.prefix = prefix; } public static DbSatellite fromOrganization( String organization ) @@ -18,7 +19,7 @@ public class DbSatellite return MySQL .findUniqueOrNull( DbSatellite.class, - "SELECT satellite.organization, satellite.address, satellite.name FROM satellite WHERE satellite.organization = ? LIMIT 1", + "SELECT satellite.organization, satellite.address, satellite.name, satellite.prefix FROM satellite WHERE satellite.organization = ? LIMIT 1", organization ); } @@ -36,4 +37,8 @@ public class DbSatellite { return organization; } + + public String getPrefix() { + return this.prefix; + } } diff --git a/src/main/java/org/openslx/imagemaster/db/LdapUser.java b/src/main/java/org/openslx/imagemaster/db/LdapUser.java index a887640..f9554c0 100644 --- a/src/main/java/org/openslx/imagemaster/db/LdapUser.java +++ b/src/main/java/org/openslx/imagemaster/db/LdapUser.java @@ -47,16 +47,15 @@ public class LdapUser extends User /** * Query LDAP for user with given login * - * @param login Login of user in the form "user@organization.com" + * @param login Login of user in the form "prefix_username" * @return instance of LDAPUser for matching entry from LDAP or null if sth went wrong */ public static LdapUser forLogin( final String login, final String password ) throws AuthenticationException { String username, organization, firstName, lastName, eMail, satelliteAddress; - -// String[] temp = login.split( "@" ); -// if ( temp.length != 2 ) -// throw new AuthenticationException( AuthenticationError.GENERIC_ERROR, "Login must be in form user@organization.com" ); + + if (login.split( "_" ).length != 2) + throw new AuthenticationException(AuthenticationError.GENERIC_ERROR, "Login must be in form: prefix_username"); LdapConnection connection = null; try { diff --git a/src/main/java/org/openslx/imagemaster/session/Authenticator.java b/src/main/java/org/openslx/imagemaster/session/Authenticator.java index 9924caf..3378662 100644 --- a/src/main/java/org/openslx/imagemaster/session/Authenticator.java +++ b/src/main/java/org/openslx/imagemaster/session/Authenticator.java @@ -1,6 +1,7 @@ package org.openslx.imagemaster.session; import org.apache.log4j.Logger; +import org.openslx.imagemaster.db.DbSatellite; import org.openslx.imagemaster.db.DbUser; import org.openslx.imagemaster.db.LdapUser; import org.openslx.imagemaster.thrift.iface.AuthenticationError; @@ -26,8 +27,18 @@ public class Authenticator // throw new AuthenticationException( AuthenticationError.INVALID_CREDENTIALS, "Invalid username or password!" ); // } // log.debug( "Login successful: " + username ); + + String prefix = ""; + if (username.split( "@" ).length == 2) { + // we are in userid@organization format + // --> get prefix + DbSatellite satellite = DbSatellite.fromOrganization( username.split( "@" )[1] ); + if (satellite == null) + throw new AuthenticationException( AuthenticationError.INVALID_CREDENTIALS, "Unkown Organization" ); + prefix = satellite.getPrefix(); + } - LdapUser user = LdapUser.forLogin( username, password ); // throws exception if credentials are invalid + LdapUser user = LdapUser.forLogin( prefix + "_" + username.split( "@" )[0], password ); // throws exception if credentials are invalid if ( user == null ) { log.debug( "Login failed: " + username ); throw new AuthenticationException( AuthenticationError.GENERIC_ERROR, "Could not login because of a weird error." ); -- cgit v1.2.3-55-g7522