diff --git a/apiv3.properties b/apiv3.properties
index 0254f7c..f2f8f92 100644
--- a/apiv3.properties
+++ b/apiv3.properties
@@ -1,5 +1,6 @@
general.id=main
general.releaseStage=production
+logging.level=info
mongo.address=ds055505.mongolab.com
mongo.port=55505
mongo.database=minehqapi
@@ -15,6 +16,6 @@ twillio.authToken=982592505a171d3be6b0722f5ecacc0e
mandrill.apiKey=0OYtwymqJP6oqvszeJu0vQ
librato.email=cmcdonald.main@gmail.com
librato.apiKey=a818c3eca8a59d6d9cf76dc9f0d237c6aa97f257c482ce3363cf55a5431bc153
-bugsnag.apiKey=
+bugsnag.apiKey=0e47fba8b825416b7cbc839066184509
auth.permittedUserRanks=developer,owner
auth.websiteApiKey=RVbp4hY6sCFVaf
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index a5a8f9f..c00290d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,6 +17,17 @@
UTF-8
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ net.frozenorb.apiv3.Main
+
+
+
+
org.apache.maven.plugins
maven-shade-plugin
diff --git a/src/main/java/net/frozenorb/apiv3/APIv3.java b/src/main/java/net/frozenorb/apiv3/APIv3.java
index bf3a36a..77f78e2 100644
--- a/src/main/java/net/frozenorb/apiv3/APIv3.java
+++ b/src/main/java/net/frozenorb/apiv3/APIv3.java
@@ -68,9 +68,9 @@ public final class APIv3 {
.create();
APIv3() {
- //System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");
-
setupConfig();
+ System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", config.getProperty("logging.level"));
+
setupDatabase();
setupRedis();
setupMetrics();
@@ -89,13 +89,15 @@ public final class APIv3 {
private void setupDatabase() {
MongoClient mongoClient = new MongoClient(new ServerAddress(
config.getProperty("mongo.address"),
- Integer.parseInt(config.getProperty("mongo.port"))),
+ Integer.parseInt(config.getProperty("mongo.port")))/*,
ImmutableList.of(
MongoCredential.createCredential(
config.getProperty("mongo.username"),
config.getProperty("mongo.database"),
config.getProperty("mongo.password").toCharArray())
- ));
+ )*/);
+
+ // TODO: DISABLE CREDS IF NOT NEEDED
MorphiaLoggerFactory.reset();
MorphiaLoggerFactory.registerLogger(SLF4JLoggerImplFactory.class);
@@ -136,6 +138,9 @@ public final class APIv3 {
private void setupBugsnag() {
bugsnagClient = new Client(config.getProperty("bugsnag.apiKey"));
bugsnagClient.setReleaseStage(config.getProperty("general.releaseStage"));
+ bugsnagClient.setProjectPackages("net.frozenorb.apiv3");
+
+ // TODO: Use .setLogger to use slf4j with this
}
private void setupHttp() {
diff --git a/src/main/java/net/frozenorb/apiv3/filters/ActorAttributeFilter.java b/src/main/java/net/frozenorb/apiv3/filters/ActorAttributeFilter.java
index 4057f14..48d1dbd 100644
--- a/src/main/java/net/frozenorb/apiv3/filters/ActorAttributeFilter.java
+++ b/src/main/java/net/frozenorb/apiv3/filters/ActorAttributeFilter.java
@@ -1,6 +1,5 @@
package net.frozenorb.apiv3.filters;
-import com.sun.xml.internal.messaging.saaj.util.Base64;
import net.frozenorb.apiv3.APIv3;
import net.frozenorb.apiv3.actors.*;
import net.frozenorb.apiv3.models.Server;
@@ -11,6 +10,8 @@ import spark.Request;
import spark.Response;
import spark.Spark;
+import java.util.Base64;
+
public final class ActorAttributeFilter implements Filter {
public void handle(Request req, Response res) {
@@ -29,7 +30,7 @@ public final class ActorAttributeFilter implements Filter {
@SuppressWarnings("deprecation") // We purposely get the User by their last username.
private Actor processBasicAuthorization(String authHeader, Response res) {
String encodedHeader = authHeader.substring("Basic ".length());
- String[] credentials = Base64.base64Decode(encodedHeader).split(":");
+ String[] credentials = new String(Base64.getDecoder().decode(encodedHeader.getBytes())).split(":");
if (credentials.length == 2) {
User user = User.byLastUsername(credentials[0]);
diff --git a/src/main/java/net/frozenorb/apiv3/filters/MetricsAfterFilter.java b/src/main/java/net/frozenorb/apiv3/filters/MetricsAfterFilter.java
index cda9b9d..174d059 100644
--- a/src/main/java/net/frozenorb/apiv3/filters/MetricsAfterFilter.java
+++ b/src/main/java/net/frozenorb/apiv3/filters/MetricsAfterFilter.java
@@ -15,11 +15,8 @@ public final class MetricsAfterFilter implements Filter {
public void handle(Request req, Response res) {
responseLengthMetric.update(req.contentLength());
- Timer.Context timerMetricActorType = req.attribute("timerMetric.actorType");
- Timer.Context timerMetricGlobal = req.attribute("timerMetric.global");
-
- timerMetricActorType.stop();
- timerMetricGlobal.stop();
+ Timer.Context timerMetric = req.attribute("timerMetric");
+ timerMetric.stop();
}
}
\ No newline at end of file
diff --git a/src/main/java/net/frozenorb/apiv3/filters/MetricsBeforeFilter.java b/src/main/java/net/frozenorb/apiv3/filters/MetricsBeforeFilter.java
index f2cf8ad..48b2c56 100644
--- a/src/main/java/net/frozenorb/apiv3/filters/MetricsBeforeFilter.java
+++ b/src/main/java/net/frozenorb/apiv3/filters/MetricsBeforeFilter.java
@@ -3,22 +3,16 @@ package net.frozenorb.apiv3.filters;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import net.frozenorb.apiv3.APIv3;
-import net.frozenorb.apiv3.actors.Actor;
import spark.Filter;
import spark.Request;
import spark.Response;
public final class MetricsBeforeFilter implements Filter {
- private Timer responseTimesGlobalMetric = APIv3.getMetrics().timer(MetricRegistry.name(getClass(), "responseTimes", "global"));
+ private Timer responseTimesMetric = APIv3.getMetrics().timer(MetricRegistry.name("apiv3", "http", "responseTimes"));
public void handle(Request req, Response res) {
- Actor actor = req.attribute("actor");
- String metricName = MetricRegistry.name(getClass(), "responseTimes", actor.getType().name());
- Timer responseTimesActorTypeMetric = APIv3.getMetrics().timer(metricName);
-
- req.attribute("timerMetric.global", responseTimesGlobalMetric.time());
- req.attribute("timerMetric.actorType", responseTimesActorTypeMetric.time());
+ req.attribute("timerMetric", responseTimesMetric.time());
}
}
\ No newline at end of file
diff --git a/src/main/java/net/frozenorb/apiv3/models/ServerGroup.java b/src/main/java/net/frozenorb/apiv3/models/ServerGroup.java
index 56c4b50..ce7f22c 100644
--- a/src/main/java/net/frozenorb/apiv3/models/ServerGroup.java
+++ b/src/main/java/net/frozenorb/apiv3/models/ServerGroup.java
@@ -18,7 +18,7 @@ public final class ServerGroup {
// We define these HashSets up here because, in the event they're
// empty, Morphia will load them as null, not empty sets.
@Getter @Setter @ExcludeFromReplies private Set announcements = new HashSet<>();
- @Getter private Map> permissions = new HashMap<>();
+ @Getter @ExcludeFromReplies private Map> permissions = new HashMap<>();
public static ServerGroup byId(String id) {
return APIv3.getDatastore().createQuery(ServerGroup.class).field("id").equal(id).get();
diff --git a/src/main/java/net/frozenorb/apiv3/routes/GETDump.java b/src/main/java/net/frozenorb/apiv3/routes/GETDump.java
index 5a81542..a6c0be5 100644
--- a/src/main/java/net/frozenorb/apiv3/routes/GETDump.java
+++ b/src/main/java/net/frozenorb/apiv3/routes/GETDump.java
@@ -30,7 +30,7 @@ public final class GETDump implements Route {
});
return effectedUsers;
- case "accessDeniable":
+ case "accessdeniable": // Lowercase d because we convert to lowercase above
// We have to name it effectedUsers2 because Java's
// scoping in switch statements is really dumb.
List effectedUsers2 = new ArrayList<>();
diff --git a/src/main/java/net/frozenorb/apiv3/routes/NotFound.java b/src/main/java/net/frozenorb/apiv3/routes/NotFound.java
index 9a3ea92..be8d636 100644
--- a/src/main/java/net/frozenorb/apiv3/routes/NotFound.java
+++ b/src/main/java/net/frozenorb/apiv3/routes/NotFound.java
@@ -1,5 +1,6 @@
package net.frozenorb.apiv3.routes;
+import lombok.extern.slf4j.Slf4j;
import net.frozenorb.apiv3.APIv3;
import net.frozenorb.apiv3.utils.ErrorUtils;
import spark.Request;
@@ -7,9 +8,11 @@ import spark.Response;
import spark.Route;
import spark.Spark;
+@Slf4j
public final class NotFound implements Route {
public Object handle(Request req, Response res) {
+ log.info(req.requestMethod().toUpperCase() + " " + req.url());
Spark.halt(404, APIv3.getGson().toJson(ErrorUtils.notFound("Route", req.url())));
return null;
}
diff --git a/src/main/java/net/frozenorb/apiv3/routes/servers/POSTServer.java b/src/main/java/net/frozenorb/apiv3/routes/servers/POSTServer.java
index c92281c..c77e90c 100644
--- a/src/main/java/net/frozenorb/apiv3/routes/servers/POSTServer.java
+++ b/src/main/java/net/frozenorb/apiv3/routes/servers/POSTServer.java
@@ -13,7 +13,7 @@ public final class POSTServer implements Route {
public Object handle(Request req, Response res) {
String id = req.queryParams("id");
- String bungeeId = req.queryParams("id");
+ String bungeeId = req.queryParams("bungeeId");
String displayName = req.queryParams("displayName");
String apiKey = req.queryParams("apiKey");
ServerGroup group = ServerGroup.byId(req.queryParams("group"));
diff --git a/src/main/java/net/frozenorb/apiv3/unsorted/LoggingExceptionHandler.java b/src/main/java/net/frozenorb/apiv3/unsorted/LoggingExceptionHandler.java
index 2c51c5d..8583aaf 100644
--- a/src/main/java/net/frozenorb/apiv3/unsorted/LoggingExceptionHandler.java
+++ b/src/main/java/net/frozenorb/apiv3/unsorted/LoggingExceptionHandler.java
@@ -13,11 +13,8 @@ import spark.Response;
public final class LoggingExceptionHandler implements ExceptionHandler {
public void handle(Exception ex, Request req, Response res) {
- Timer.Context timerMetricActorType = req.attribute("timerMetric.actorType");
- Timer.Context timerMetricGlobal = req.attribute("timerMetric.global");
-
- timerMetricActorType.stop();
- timerMetricGlobal.stop();
+ Timer.Context timerMetric = req.attribute("timerMetric");
+ timerMetric.stop();
String code = new ObjectId().toHexString();