This commit is contained in:
danilbodry-mac
2026-04-10 19:58:29 +03:00
parent 5821006bf2
commit c5287dc81d
18 changed files with 2495 additions and 161 deletions

View File

@@ -10,29 +10,59 @@ public class SetupHandler {
this.userService = userService;
}
public void checkStatus(RoutingContext ctx) {
userService.countUsers().onComplete(ar -> {
if (ar.succeeded()) {
ctx.response()
.putHeader("Content-Type", "application/json")
.end(new JsonObject()
.put("needsSetup", ar.result() == 0)
.put("userCount", ar.result())
.encode());
} else {
ctx.response().setStatusCode(500).end(ar.cause().getMessage());
}
});
}
public void handleSetup(RoutingContext ctx) {
// Проверяем, есть ли уже пользователи
userService.countUsers().onComplete(ar -> {
if (ar.succeeded() && ar.result() == 0) {
JsonObject body = ctx.body().asJsonObject();
if (body == null) {
ctx.response().setStatusCode(400).end("Invalid JSON body");
return;
}
String login = body.getString("login");
String password = body.getString("password");
if (login == null || password == null || login.length() < 3 || password.length() < 6) {
ctx.response().setStatusCode(400).end("Invalid login or password (min 3/6 chars)");
ctx.response().setStatusCode(400)
.end(new JsonObject()
.put("error", "Invalid login or password (min 3/6 chars)")
.encode());
return;
}
String ip = ctx.request().remoteAddress().host();
userService.createUser(login, password, ip).onComplete(cr -> {
if (cr.succeeded()) {
ctx.response().setStatusCode(201).end(new JsonObject().put("success", true).encode());
ctx.response().setStatusCode(201)
.end(new JsonObject().put("success", true).encode());
} else {
ctx.response().setStatusCode(500).end("Failed to create admin: " + cr.cause().getMessage());
ctx.response().setStatusCode(500)
.end(new JsonObject()
.put("error", "Failed to create admin: " + cr.cause().getMessage())
.encode());
}
});
} else {
ctx.response().setStatusCode(403).end("Setup already completed");
ctx.response().setStatusCode(403)
.end(new JsonObject()
.put("error", "Setup already completed")
.encode());
}
});
}