Skip to content

Commit 561d814

Browse files
committed
Creates set password route, closes #11
1 parent 11ef093 commit 561d814

File tree

4 files changed

+69
-2
lines changed

4 files changed

+69
-2
lines changed

src/main/java/api/Controller.java

+4
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,8 @@ public String dbDeny(@RequestBody Map<String, String> body) {
5252
return man.deny(body.get("database")).asJSON();
5353
}
5454

55+
@RequestMapping(value = "/databases/{database}/users/{username}/password", method = RequestMethod.GET, produces = "application/json")
56+
public String resetPassword(@PathVariable(value = "database") String database, @PathVariable(value = "username") String username) {
57+
return man.setPassword(database, username).asJSON();
58+
}
5559
}

src/main/java/dbconn/DatabaseManager.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,18 @@ public interface DatabaseManager {
2222
void delete(String dbName);
2323

2424

25+
// TODO consider throwing error if failure occurs
26+
/**
27+
* Sets the user's password for the database
28+
* @param dbName the database the user belongs to
29+
* @param username the name of the user
30+
* @param password the password to set
31+
*/
32+
void setPassword(String dbName, String username, String password);
33+
34+
2535
/**
2636
* Closes the connection to the database.
2737
*/
2838
void close();
29-
3039
}

src/main/java/dbconn/ManagerManager.java

+45-1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public class ManagerManager {
4444
private PreparedStatement deleteDBUsersStmt;
4545
/** Approves a database request. Param 1: dbName */
4646
private PreparedStatement approveStmt;
47+
/** Resets a user password. Param: 1: date, 2: user */
48+
private PreparedStatement setPassStmt;
4749

4850
/** The connection object for the manager's sql db. */
4951
private Connection managerConnection;
@@ -104,6 +106,9 @@ public ManagerManager() {
104106
String approveDB = "update databases set approved=true where name=?";
105107
approveStmt = managerConnection.prepareStatement(approveDB);
106108

109+
String setPassword = "update users set last_reset=? where username=? and database=?";
110+
setPassStmt = managerConnection.prepareStatement(setPassword);
111+
107112
} catch (SQLException e) {
108113
// TODO report this in some way? Maybe email someone....
109114
System.err.println("Manager DB errored while connecting");
@@ -187,7 +192,6 @@ private Message create(String dbName) {
187192
try {
188193
String password = "";
189194
getDBAndPoolStmt.setString(1, dbName);
190-
System.out.println(dbName);
191195
ResultSet db = getDBAndPoolStmt.executeQuery();
192196
db.next();
193197
if(db.getBoolean("approved")) {
@@ -329,6 +333,46 @@ public Message request(int poolID, String name, String purpose, int type) {
329333
}
330334

331335

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+
332376
/**
333377
* Closes DEaDASS by calling close all of the database connections.
334378
*/

src/main/java/dbconn/mongo/MongoManager.java

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.mongodb.client.MongoClient;
55
import com.mongodb.client.MongoClients;
66
import com.mongodb.client.MongoDatabase;
7+
import org.bson.BsonDocument;
78

89
import java.util.Collections;
910

@@ -51,6 +52,15 @@ public void delete(String dbName) {
5152
}
5253

5354

55+
/** Overwrites a user's password without modifying roles. */
56+
@Override
57+
public void setPassword(String dbName, String username, String password) {
58+
MongoDatabase db = server.getDatabase(dbName);
59+
final BasicDBObject setPasswordCommand = new BasicDBObject("updateUser", username).append("pwd", password);
60+
db.runCommand(setPasswordCommand);
61+
}
62+
63+
5464
/**
5565
* Closes connections to the database server.
5666
*/

0 commit comments

Comments
 (0)