mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-01-31 16:09:55 +00:00
103 lines
3.3 KiB
C++
103 lines
3.3 KiB
C++
#include "AuthRoutes.h"
|
|
#include "DashboardAuthService.h"
|
|
#include "json.hpp"
|
|
#include "Logger.h"
|
|
#include "GeneralUtils.h"
|
|
#include "Web.h"
|
|
#include "eHTTPMethod.h"
|
|
#include "HTTPContext.h"
|
|
|
|
void RegisterAuthRoutes() {
|
|
// POST /api/auth/login
|
|
// Request body: { "username": "string", "password": "string", "rememberMe": boolean }
|
|
// Response: { "success": boolean, "message": "string", "token": "string", "gmLevel": number }
|
|
Game::web.RegisterHTTPRoute({
|
|
.path = "/api/auth/login",
|
|
.method = eHTTPMethod::POST,
|
|
.middleware = {},
|
|
.handle = [](HTTPReply& reply, const HTTPContext& context) {
|
|
try {
|
|
auto json = nlohmann::json::parse(context.body);
|
|
std::string username = json.value("username", "");
|
|
std::string password = json.value("password", "");
|
|
bool rememberMe = json.value("rememberMe", false);
|
|
|
|
// Validate input
|
|
if (username.empty() || password.empty()) {
|
|
reply.message = R"({"success":false,"message":"Username and password are required"})";
|
|
reply.status = eHTTPStatusCode::BAD_REQUEST;
|
|
return;
|
|
}
|
|
|
|
if (password.length() > 40) {
|
|
reply.message = R"({"success":false,"message":"Password exceeds maximum length"})";
|
|
reply.status = eHTTPStatusCode::BAD_REQUEST;
|
|
return;
|
|
}
|
|
|
|
// Attempt login
|
|
auto result = DashboardAuthService::Login(username, password, rememberMe);
|
|
|
|
nlohmann::json response;
|
|
response["success"] = result.success;
|
|
response["message"] = result.message;
|
|
if (result.success) {
|
|
response["token"] = result.token;
|
|
response["gmLevel"] = result.gmLevel;
|
|
}
|
|
|
|
reply.message = response.dump();
|
|
reply.status = result.success ? eHTTPStatusCode::OK : eHTTPStatusCode::UNAUTHORIZED;
|
|
reply.contentType = eContentType::APPLICATION_JSON;
|
|
} catch (const std::exception& ex) {
|
|
LOG("Error processing login request: %s", ex.what());
|
|
reply.message = R"({"success":false,"message":"Internal server error"})";
|
|
reply.status = eHTTPStatusCode::INTERNAL_SERVER_ERROR;
|
|
reply.contentType = eContentType::APPLICATION_JSON;
|
|
}
|
|
}
|
|
});
|
|
|
|
// POST /api/auth/verify
|
|
// Request body: { "token": "string" }
|
|
// Response: { "valid": boolean, "username": "string", "gmLevel": number }
|
|
Game::web.RegisterHTTPRoute({
|
|
.path = "/api/auth/verify",
|
|
.method = eHTTPMethod::POST,
|
|
.middleware = {},
|
|
.handle = [](HTTPReply& reply, const HTTPContext& context) {
|
|
try {
|
|
auto json = nlohmann::json::parse(context.body);
|
|
std::string token = json.value("token", "");
|
|
|
|
if (token.empty()) {
|
|
reply.message = R"({"valid":false})";
|
|
reply.status = eHTTPStatusCode::BAD_REQUEST;
|
|
reply.contentType = eContentType::APPLICATION_JSON;
|
|
return;
|
|
}
|
|
|
|
std::string username;
|
|
uint8_t gmLevel{};
|
|
bool valid = DashboardAuthService::VerifyToken(token, username, gmLevel);
|
|
|
|
nlohmann::json response;
|
|
response["valid"] = valid;
|
|
if (valid) {
|
|
response["username"] = username;
|
|
response["gmLevel"] = gmLevel;
|
|
}
|
|
|
|
reply.message = response.dump();
|
|
reply.status = eHTTPStatusCode::OK;
|
|
reply.contentType = eContentType::APPLICATION_JSON;
|
|
} catch (const std::exception& ex) {
|
|
LOG("Error processing verify request: %s", ex.what());
|
|
reply.message = R"({"valid":false})";
|
|
reply.status = eHTTPStatusCode::INTERNAL_SERVER_ERROR;
|
|
reply.contentType = eContentType::APPLICATION_JSON;
|
|
}
|
|
}
|
|
});
|
|
}
|