package org.openslx.imagemaster.db; import org.apache.log4j.Logger; import org.openslx.imagemaster.session.User; import org.openslx.imagemaster.util.Sha512Crypt; /** * Represents a user that can login against the masterserver. */ public class DbUser extends User { private static Logger log = Logger.getLogger( DbUser.class ); public DbUser( int userId, String username, String password, String organization, String firstName, String lastName, String eMail, String satelliteAddress ) { super( userId, username, password, organization, firstName, lastName, eMail, satelliteAddress ); } /** * Query database for user with given login * * @param login * (user@organization) * @return instance of DbUser for matching entry from DB, or null if not * found */ public static DbUser forLogin( final String login ) { final String[] parts = login.split( "@" ); if ( parts.length != 2 ) return null; return MySQL .findUniqueOrNull( DbUser.class, "SELECT user.userid, user.username, user.password, user.organization, user.firstname, user.lastname, user.email, satellite.address FROM user" + " LEFT JOIN satellite USING (organization)" + " WHERE user.username = ? AND user.organization = ? LIMIT 1", parts[0], parts[1] ); } /** * Query database for user with given userId * * @param userid * @return instance of DbUser for matching entry from DB, or null if not * found */ public static DbUser forLogin( final int userid ) { return MySQL .findUniqueOrNull( DbUser.class, "SELECT user.userid, user.username, user.password, user.organization, user.firstname, user.lastname, user.email, satellite.address FROM user" + " LEFT JOIN satellite USING (organization)" + " WHERE user.userid = ? LIMIT 1", userid ); } public static boolean exists( final String login ) { return forLogin( login ) != null; } public static DbUser forLogin( String login, String password ) { DbUser user = forLogin( login ); if ( user == null || !Sha512Crypt.verifyPassword( password, user.password ) ) return null; return user; } public static boolean insertOrUpdate( User user ) { log.debug( "Inserted user '" + user.username + "' into db." ); MySQL.update( "INSERT INTO user (username, password, organization, firstname, lastname, email) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE password=VALUES(password), organization=VALUES(organization), firstname=VALUES(firstname), lastname=VALUES(lastname), email=VALUES(email)", user.username, user.password, user.organization, user.firstName, user.lastName, user.eMail ); return false; } public static int getUserIdByName( String username ) { DbUser user = MySQL .findUniqueOrNull( DbUser.class, "SELECT user.userid, user.username, user.password, user.organization, user.firstname, user.lastname, user.email, satellite.address FROM user" + " LEFT JOIN satellite USING (organization)" + " WHERE user.username = ? LIMIT 1", username ); if ( user == null ) return 0; return user.userId; } public static String getUserNameById( int id ) { DbUser user = MySQL .findUniqueOrNull( DbUser.class, "SELECT user.userid, user.username, user.password, user.organization, user.firstname, user.lastname, user.email, satellite.address FROM user" + " LEFT JOIN satellite USING (organization)" + " WHERE user.userid = ? LIMIT 1", id ); if ( user == null ) return ""; return user.username; } }