summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/db/LdapUser.java
diff options
context:
space:
mode:
authorNils Schwabe2014-05-05 16:26:07 +0200
committerNils Schwabe2014-05-05 16:26:07 +0200
commit0048997b91e3fb4502c8c754b1c9ddd9fc8c4700 (patch)
treebd0f68131a0994e3abf571a4257dbe8acc05cc71 /src/main/java/org/openslx/imagemaster/db/LdapUser.java
parentFix login format (diff)
downloadmasterserver-0048997b91e3fb4502c8c754b1c9ddd9fc8c4700.tar.gz
masterserver-0048997b91e3fb4502c8c754b1c9ddd9fc8c4700.tar.xz
masterserver-0048997b91e3fb4502c8c754b1c9ddd9fc8c4700.zip
Add user auth when ldap server is down
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/db/LdapUser.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/db/LdapUser.java33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/main/java/org/openslx/imagemaster/db/LdapUser.java b/src/main/java/org/openslx/imagemaster/db/LdapUser.java
index f9554c0..ae6aae2 100644
--- a/src/main/java/org/openslx/imagemaster/db/LdapUser.java
+++ b/src/main/java/org/openslx/imagemaster/db/LdapUser.java
@@ -52,9 +52,10 @@ public class LdapUser extends User
*/
public static LdapUser forLogin( final String login, final String password ) throws AuthenticationException
{
- String username, organization, firstName, lastName, eMail, satelliteAddress;
+ String username, organization, firstName, lastName, eMail, satelliteAddress = "";
- if (login.split( "_" ).length != 2)
+ final String[] split = login.split( "_" );
+ if (split.length != 2)
throw new AuthenticationException(AuthenticationError.GENERIC_ERROR, "Login must be in form: prefix_username");
LdapConnection connection = null;
@@ -117,6 +118,13 @@ public class LdapUser extends User
// everything went fine
return new LdapUser( 0, username, Sha512Crypt.Sha512_crypt( password, null, 0 ), organization, firstName, lastName, eMail, satelliteAddress );
} catch ( LdapException e) {
+ if ( e.getMessage().contains( "Cannot connect on the server" ) ) {
+ DbSatellite dbSatellite = DbSatellite.fromPrefix(split[0]);
+ if (dbSatellite == null) throw new AuthenticationException(AuthenticationError.INVALID_CREDENTIALS, "Credentials invalid.");
+ String lo = split[1] + "@" + dbSatellite.getOrganization();
+ log.info( "LDAP server could not be reached. Trying to connect locally with: " + lo );
+ return LdapUser.localLogin(lo, password);
+ }
e.printStackTrace();
throw new AuthenticationException( AuthenticationError.GENERIC_ERROR, "Something went wrong." );
} catch ( CursorException e ) {
@@ -137,10 +145,27 @@ public class LdapUser extends User
connection.unBind();
connection.close();
} catch ( IOException | LdapException e ) {
- e.printStackTrace();
- throw new AuthenticationException( AuthenticationError.GENERIC_ERROR, "Something went very wrong." );
+ // was not connected so don't do anything...
}
}
return null;
}
+
+ /**
+ * Login user locally if external Ldap server is not available
+ * @param username Must be in form "userid@organization"
+ * @param password The user's password
+ */
+ private static LdapUser localLogin( String login, String password )
+ {
+ DbUser user = DbUser.forLogin( login );
+ if (user == null) return null; // no user found
+
+ // check users password
+ if (!Sha512Crypt.verifyPassword( password, user.password )) return null;
+
+ // return ldapuser if valid
+ return new LdapUser( user.userId, user.username, Sha512Crypt.Sha512_crypt( password, null, 0 ), user.organization, user.firstName,
+ user.lastName, user.eMail, user.satelliteAddress );
+ }
}