summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java46
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;
+ }
+ }
+
}