From 2f140304dd193763b2aa9d509f972c6f23202e93 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 7 Sep 2015 18:20:58 +0200 Subject: Start adapting to new DB/Thrift model --- .../org/openslx/imagemaster/db/mappers/DbUser.java | 108 +++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/main/java/org/openslx/imagemaster/db/mappers/DbUser.java (limited to 'src/main/java/org/openslx/imagemaster/db/mappers/DbUser.java') diff --git a/src/main/java/org/openslx/imagemaster/db/mappers/DbUser.java b/src/main/java/org/openslx/imagemaster/db/mappers/DbUser.java new file mode 100644 index 0000000..ed55d8a --- /dev/null +++ b/src/main/java/org/openslx/imagemaster/db/mappers/DbUser.java @@ -0,0 +1,108 @@ +package org.openslx.imagemaster.db.mappers; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; +import org.openslx.bwlp.thrift.iface.Role; +import org.openslx.bwlp.thrift.iface.TNotFoundException; +import org.openslx.bwlp.thrift.iface.UserInfo; +import org.openslx.imagemaster.db.Database; +import org.openslx.imagemaster.db.MysqlConnection; +import org.openslx.imagemaster.db.MysqlStatement; +import org.openslx.imagemaster.db.models.LocalUser; +import org.openslx.imagemaster.util.Sha512Crypt; + +/** + * Represents a user that can login against the masterserver. + */ +public class DbUser +{ + + private static final Logger LOGGER = Logger.getLogger( DbUser.class ); + + private static final String localUserSql = "SELECT" + + " user.userid, user.login, user.password, user.organizationid, user.firstname, user.lastname, user.email," + + " organization.address FROM user" + + " LEFT JOIN organization USING (organizationid)"; + + private static LocalUser localFromRs( ResultSet rs ) throws SQLException + { + return new LocalUser( rs.getInt( "userid" ), rs.getString( "login" ), rs.getString( "password" ), + rs.getString( "organizationid" ), rs.getString( "firstname" ), rs.getString( "lastname" ), rs.getString( "email" ), + Role.TUTOR ); + } + + /** + * Query database for user with given login + * + * @param login (global user-id, login@org for test-accounts) + * @return instance of DbUser for matching entry from DB, or null if not + * found + * @throws SQLException if the query fails + */ + public static LocalUser forLogin( final String login ) throws SQLException + { + try ( MysqlConnection connection = Database.getConnection() ) { + MysqlStatement stmt = connection.prepareStatement( localUserSql + + " WHERE user.login = :login" ); + stmt.setString( "login", login ); + ResultSet rs = stmt.executeQuery(); + if ( !rs.next() ) + return null; + return localFromRs( rs ); + } catch ( SQLException e ) { + LOGGER.error( "Query failed in DbUser.forLogin()", e ); + throw e; + } + } + + public static UserInfo getUserInfo( final String login ) throws SQLException, TNotFoundException + { + LocalUser user = forLogin( login ); + if ( user == null ) + throw new TNotFoundException(); + return user.toUserInfo(); + } + + /** + * Query database for user with given userId + * + * @param userid + * @return instance of DbUser for matching entry from DB, or null if not + * found + * @throws SQLException + */ + public static LocalUser forLogin( final int userId ) throws SQLException + { + try ( MysqlConnection connection = Database.getConnection() ) { + MysqlStatement stmt = connection.prepareStatement( localUserSql + + " WHERE user.userid = :userid" ); + stmt.setInt( "userid", userId ); + ResultSet rs = stmt.executeQuery(); + if ( !rs.next() ) + return null; + return localFromRs( rs ); + } catch ( SQLException e ) { + LOGGER.error( "Query failed in DbUser.forLogin()", e ); + throw e; + } + } + + public static LocalUser forLogin( String login, String password ) throws SQLException + { + LocalUser user = forLogin( login ); + if ( user == null || !Sha512Crypt.verifyPassword( password, user.password ) ) + return null; + return user; + } + + public static List findUser( String organizationId, String searchTerm ) + { + // TODO Implement + return new ArrayList<>( 0 ); + } + +} -- cgit v1.2.3-55-g7522