summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/db/mappers/DbUser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/db/mappers/DbUser.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/db/mappers/DbUser.java108
1 files changed, 108 insertions, 0 deletions
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<UserInfo> findUser( String organizationId, String searchTerm )
+ {
+ // TODO Implement
+ return new ArrayList<>( 0 );
+ }
+
+}