Skip to content

Commit d299f62

Browse files
support multiple hosts
1 parent 2eacb4a commit d299f62

File tree

3 files changed

+70
-44
lines changed

3 files changed

+70
-44
lines changed

src/main/java/org/inventivetalent/mcauth/DatabaseClient.java

Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,56 +9,70 @@
99

1010
import java.io.IOException;
1111
import java.util.Collections;
12+
import java.util.List;
1213

1314
public class DatabaseClient {
1415

15-
private String dbName;
16-
private String host;
17-
private int port;
18-
private MongoCredential credential;
16+
private List<ServerAddress> hosts;
1917

20-
private MongoClient mongoClient;
21-
private MongoDatabase mongoDatabase;
18+
private String dbName;
19+
private String host;
20+
private int port;
21+
private MongoCredential credential;
2222

23-
public DatabaseClient(String dbName, String host, int port, String user, char[] pass, String authDatabase) {
24-
this.dbName = dbName;
25-
this.host = host;
26-
this.port = port;
23+
private MongoClient mongoClient;
24+
private MongoDatabase mongoDatabase;
25+
26+
public DatabaseClient(String dbName, List<ServerAddress> hosts, String user, char[] pass, String authDatabase) {
27+
this.dbName = dbName;
28+
this.hosts = hosts;
2729
this.credential = MongoCredential.createScramSha1Credential(user, authDatabase, pass);
28-
}
30+
}
31+
32+
public DatabaseClient(String dbName, String host, int port, String user, char[] pass, String authDatabase) {
33+
this.dbName = dbName;
34+
this.host = host;
35+
this.port = port;
36+
this.credential = MongoCredential.createScramSha1Credential(user, authDatabase, pass);
37+
}
2938

30-
public int collectionCount() {
31-
int c = 0;
32-
for (String ignored : db().listCollectionNames()) {
33-
c++;
34-
}
35-
return c;
36-
}
39+
public int collectionCount() {
40+
int c = 0;
41+
for (String ignored : db().listCollectionNames()) {
42+
c++;
43+
}
44+
return c;
45+
}
3746

38-
public ServerAddress connect(int timeout) throws IOException {
39-
if (mongoClient == null) {
40-
System.out.println("Connecting to MongoDB " + this.host + ":" + this.port + "...");
41-
mongoClient = new MongoClient(new ServerAddress(this.host, this.port), Collections.singletonList(this.credential), MongoClientOptions.builder().connectTimeout(timeout).build());
42-
}
43-
return mongoClient.getAddress();
44-
}
47+
public ServerAddress connect(int timeout) throws IOException {
48+
if (mongoClient == null) {
49+
if (hosts != null && !hosts.isEmpty()) {
50+
System.out.println("Connecting to MongoDB...");
51+
mongoClient = new MongoClient(this.hosts, this.credential, MongoClientOptions.builder().connectTimeout(timeout).build());
52+
} else {
53+
System.out.println("Connecting to MongoDB " + this.host + ":" + this.port + "...");
54+
mongoClient = new MongoClient(new ServerAddress(this.host, this.port), Collections.singletonList(this.credential), MongoClientOptions.builder().connectTimeout(timeout).build());
55+
}
56+
}
57+
return mongoClient.getAddress();
58+
}
4559

46-
public void disconnect() throws IOException {
47-
if (mongoClient != null) {
48-
mongoClient.close();
49-
}
50-
}
60+
public void disconnect() throws IOException {
61+
if (mongoClient != null) {
62+
mongoClient.close();
63+
}
64+
}
5165

52-
public MongoDatabase db() {
53-
if (mongoDatabase == null) {
54-
System.out.println("Initializing database '" + dbName + "'");
55-
mongoDatabase = mongoClient.getDatabase(dbName);
56-
}
57-
return mongoDatabase;
58-
}
66+
public MongoDatabase db() {
67+
if (mongoDatabase == null) {
68+
System.out.println("Initializing database '" + dbName + "'");
69+
mongoDatabase = mongoClient.getDatabase(dbName);
70+
}
71+
return mongoDatabase;
72+
}
5973

60-
public Jongo jongo() {
61-
return new Jongo(mongoClient.getDB(dbName));
62-
}
74+
public Jongo jongo() {
75+
return new Jongo(mongoClient.getDB(dbName));
76+
}
6377

6478
}

src/main/java/org/inventivetalent/mcauth/MCAuthServer.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.inventivetalent.mcauth;
22

3+
import com.mongodb.ServerAddress;
34
import net.md_5.bungee.api.ProxyServer;
45
import net.md_5.bungee.api.ServerPing;
56
import net.md_5.bungee.api.chat.TextComponent;
@@ -20,6 +21,8 @@
2021
import java.io.IOException;
2122
import java.io.InputStream;
2223
import java.nio.file.Files;
24+
import java.util.ArrayList;
25+
import java.util.List;
2326
import java.util.Random;
2427

2528
public class MCAuthServer extends Plugin implements Listener {
@@ -52,12 +55,21 @@ public void onEnable() {
5255
throw new RuntimeException("Failed to load config", e);
5356
}
5457

55-
databaseClient = new DatabaseClient(config.getString("mongodb.database"), config.getString("mongodb.host"), config.getInt("mongodb.port"), config.getString("mongodb.login.user"), config.getString("mongodb.login.pass").toCharArray(), config.getString("mongodb.login.db"));
58+
if (config.contains("mongodb.hosts")) {
59+
List<ServerAddress> hosts = new ArrayList<>();
60+
for (String s : config.getStringList("mongodb.hosts")) {
61+
String[] split = s.split(":");
62+
hosts.add(new ServerAddress(split[0], split.length > 1 ? Integer.parseInt(split[1]) : ServerAddress.defaultPort()));
63+
}
64+
databaseClient = new DatabaseClient(config.getString("mongodb.database"), hosts, config.getString("mongodb.login.user"), config.getString("mongodb.login.pass").toCharArray(), config.getString("mongodb.login.db"));
65+
} else {
66+
databaseClient = new DatabaseClient(config.getString("mongodb.database"), config.getString("mongodb.host"), config.getInt("mongodb.port"), config.getString("mongodb.login.user"), config.getString("mongodb.login.pass").toCharArray(), config.getString("mongodb.login.db"));
67+
}
5668
try {
5769
databaseClient.connect(10000);
5870
databaseClient.collectionCount();
5971
} catch (IOException e) {
60-
throw new RuntimeException("Failed to connect to databse", e);
72+
throw new RuntimeException("Failed to connect to database", e);
6173
}
6274

6375
jongo = databaseClient.jongo();

src/main/resources/bungee.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
name: MCAuth-Server
22
main: org.inventivetalent.mcauth.MCAuthServer
3-
version: 1.0.0
4-
author: inventivetalent
3+
version: 1.1.0
4+
author: inventivetalent

0 commit comments

Comments
 (0)