diff options
author | Simon Rettberg | 2017-06-07 15:16:39 +0200 |
---|---|---|
committer | Simon Rettberg | 2017-06-07 15:16:39 +0200 |
commit | ffd9a09dbf0e181b249e91b7aca266426e7fdc31 (patch) | |
tree | 8946bf1d40635925fd4132c67641c3117a006192 /dozentenmodulserver | |
parent | [server] Forgot to increase template version :) (diff) | |
download | tutor-module-ffd9a09dbf0e181b249e91b7aca266426e7fdc31.tar.gz tutor-module-ffd9a09dbf0e181b249e91b7aca266426e7fdc31.tar.xz tutor-module-ffd9a09dbf0e181b249e91b7aca266426e7fdc31.zip |
[server] Automatically delete users which are inactive
This means that they:
1) Didn't log in for 180 days
2) Don't own or manage any lectures/VMs
3) Have the "canlogin" flag set
3 is required so banned users won't automatically be cleared
every 180 days and thus be able to login again (assuming default
server settings)
This implements #3116
Diffstat (limited to 'dozentenmodulserver')
-rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java | 2 | ||||
-rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java | 46 |
2 files changed, 44 insertions, 4 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java index 619c0c59..deb9be5e 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java @@ -21,6 +21,7 @@ import org.openslx.bwlp.sat.database.mappers.DbUser; import org.openslx.bwlp.sat.fileserv.FileServer; import org.openslx.bwlp.sat.maintenance.DeleteOldImages; import org.openslx.bwlp.sat.maintenance.DeleteOldLectures; +import org.openslx.bwlp.sat.maintenance.DeleteOldUsers; import org.openslx.bwlp.sat.maintenance.MailFlusher; import org.openslx.bwlp.sat.maintenance.SendExpireWarning; import org.openslx.bwlp.sat.thrift.BinaryListener; @@ -155,6 +156,7 @@ public class App { SendExpireWarning.init(); MailFlusher.init(); DeleteOldLectures.init(); + DeleteOldUsers.init(); // Start Thrift Server Thread t; diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java index 11e7bb43..7084acc2 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java @@ -20,6 +20,7 @@ import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; import org.openslx.util.TimeoutHashMap; +import org.openslx.util.Util; public class DbUser { @@ -52,8 +53,7 @@ public class DbUser { if (page < 0) return new ArrayList<>(1); try (MysqlConnection connection = Database.getConnection()) { - MysqlStatement stmt = connection.prepareStatement("SELECT userid, firstname, lastname, email, organizationid," - + " lastlogin, canlogin, issuperuser, emailnotifications" + MysqlStatement stmt = connection.prepareStatement("SELECT userid, firstname, lastname, email, organizationid" + " FROM user ORDER BY userid ASC " + Paginator.limitStatement(page)); ResultSet rs = stmt.executeQuery(); List<UserInfo> list = new ArrayList<>(); @@ -70,8 +70,7 @@ public class DbUser { public static UserInfo getOrNull(String userId) throws SQLException { try (MysqlConnection connection = Database.getConnection()) { - MysqlStatement stmt = connection.prepareStatement("SELECT userid, firstname, lastname, email, organizationid," - + " lastlogin, canlogin, issuperuser, emailnotifications" + MysqlStatement stmt = connection.prepareStatement("SELECT userid, firstname, lastname, email, organizationid" + " FROM user WHERE userid = :userid"); stmt.setString("userid", userId); ResultSet rs = stmt.executeQuery(); @@ -272,4 +271,43 @@ public class DbUser { } } + /** + * @return list of users who didn't log in for at least 180 days + */ + public static List<UserInfo> getInactive() throws SQLException { + long cutoff = Util.unixTime() - TimeUnit.DAYS.toSeconds(180); + try (MysqlConnection connection = Database.getConnection()) { + MysqlStatement stmt = connection.prepareStatement("SELECT userid, firstname, lastname, email, organizationid" + + " FROM user WHERE lastlogin < :cutoff AND canlogin <> 0 AND issuperuser = 0"); + stmt.setLong("cutoff", cutoff); + ResultSet rs = stmt.executeQuery(); + List<UserInfo> list = new ArrayList<>(); + while (rs.next()) { + list.add(new UserInfo(rs.getString("userid"), rs.getString("firstname"), + rs.getString("lastname"), rs.getString("email"), rs.getString("organizationid"))); + } + return list; + } catch (SQLException e) { + LOGGER.error("Query failed in getInactive()", e); + throw e; + } + } + + /** + * Delete given user from database. Not that this might fail due to + * constraints. + * + * @param user the user to delete + */ + public static void deleteUser(UserInfo user) throws SQLException { + try (MysqlConnection connection = Database.getConnection()) { + MysqlStatement stmt = connection.prepareStatement("DELETE FROM user WHERE userid = :userid"); + stmt.setString("userid", user.userId); + stmt.executeUpdate(); + connection.commit(); + } catch (SQLException e) { + throw e; + } + } + } |