package org.openslx.imagemaster.db; import org.apache.log4j.Logger; import org.openslx.imagemaster.session.User; /** * 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] ); } 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; } /** * Checks if a user with id (userid@organization) exists * @param id * @return Whether the user exists */ public static boolean exists( String id ) { String[] parts = id.split( "@" ); String user = parts[0]; String organization = parts[1]; DbUser dbUser = 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", user, organization); if ( dbUser == null ) return false; return true; } }