@@ -44,6 +44,8 @@ public class ManagerManager {
44
44
private PreparedStatement deleteDBUsersStmt ;
45
45
/** Approves a database request. Param 1: dbName */
46
46
private PreparedStatement approveStmt ;
47
+ /** Resets a user password. Param: 1: date, 2: user */
48
+ private PreparedStatement setPassStmt ;
47
49
48
50
/** The connection object for the manager's sql db. */
49
51
private Connection managerConnection ;
@@ -104,6 +106,9 @@ public ManagerManager() {
104
106
String approveDB = "update databases set approved=true where name=?" ;
105
107
approveStmt = managerConnection .prepareStatement (approveDB );
106
108
109
+ String setPassword = "update users set last_reset=? where username=? and database=?" ;
110
+ setPassStmt = managerConnection .prepareStatement (setPassword );
111
+
107
112
} catch (SQLException e ) {
108
113
// TODO report this in some way? Maybe email someone....
109
114
System .err .println ("Manager DB errored while connecting" );
@@ -187,7 +192,6 @@ private Message create(String dbName) {
187
192
try {
188
193
String password = "" ;
189
194
getDBAndPoolStmt .setString (1 , dbName );
190
- System .out .println (dbName );
191
195
ResultSet db = getDBAndPoolStmt .executeQuery ();
192
196
db .next ();
193
197
if (db .getBoolean ("approved" )) {
@@ -329,6 +333,46 @@ public Message request(int poolID, String name, String purpose, int type) {
329
333
}
330
334
331
335
336
+ /**
337
+ * Resets a users password
338
+ * @param database the database the user belongs to
339
+ * @param username the username of the user
340
+ * @return a Message containing either the password or an error
341
+ */
342
+ public Message setPassword (String database , String username ) {
343
+ String password = Password .getPassword ();
344
+
345
+ try {
346
+ setPassStmt .setDate (1 , new Date (new java .util .Date ().getTime ()));
347
+ setPassStmt .setString (2 , username );
348
+ setPassStmt .setString (3 , database );
349
+ setPassStmt .execute ();
350
+
351
+ getDBAndPoolStmt .setString (1 , database );
352
+ ResultSet db = getDBAndPoolStmt .executeQuery ();
353
+ if (!db .next ())
354
+ return new Message ("No db found" , Message .Type .ERROR );
355
+
356
+ switch (db .getInt ("type" )) {
357
+ case 0 : // Mongo
358
+ mongo .setPassword (database , username , password );
359
+ break ;
360
+ case 1 : // Postgres
361
+ break ;
362
+ case 2 : // MySQL
363
+ break ;
364
+ default :
365
+ return new Message ("Unknown database type" , Message .Type .ERROR );
366
+ }
367
+ } catch (SQLException e ) {
368
+ e .printStackTrace ();
369
+ return new Message ("Failed to set password." , Message .Type .ERROR );
370
+ }
371
+
372
+ return new Message (password , Message .Type .SUCCESS );
373
+ }
374
+
375
+
332
376
/**
333
377
* Closes DEaDASS by calling close all of the database connections.
334
378
*/
0 commit comments