#include "controllers/AuthController.h" #include "common/Auth.h" #include "common/Http.h" #include "services/AuthService.h" using drogon::HttpResponsePtr; namespace { void serviceResponse( Json::Value body, std::function &&callback) { if (body.get("ok", false).asBool()) { callback(visione::http::json(std::move(body))); return; } callback(visione::http::json(std::move(body), drogon::k400BadRequest)); } } // namespace void AuthController::registerCitizen( const drogon::HttpRequestPtr &req, std::function &&callback) { const auto body = visione::http::requireJson(req); if (body.isNull()) { callback(visione::http::error("invalid_json", drogon::k400BadRequest)); return; } visione::services::AuthService service; serviceResponse(service.registerCitizen(body), std::move(callback)); } void AuthController::requestOtp( const drogon::HttpRequestPtr &req, std::function &&callback) { const auto body = visione::http::requireJson(req); if (body.isNull()) { callback(visione::http::error("invalid_json", drogon::k400BadRequest)); return; } visione::services::AuthService service; serviceResponse(service.requestOtp(body), std::move(callback)); } void AuthController::verifyOtp( const drogon::HttpRequestPtr &req, std::function &&callback) { const auto body = visione::http::requireJson(req); if (body.isNull()) { callback(visione::http::error("invalid_json", drogon::k400BadRequest)); return; } visione::services::AuthService service; serviceResponse(service.verifyOtp(body), std::move(callback)); } void AuthController::loginWithPassword( const drogon::HttpRequestPtr &req, std::function &&callback) { const auto body = visione::http::requireJson(req); if (body.isNull()) { callback(visione::http::error("invalid_json", drogon::k400BadRequest)); return; } visione::services::AuthService service; serviceResponse(service.loginWithPassword(body), std::move(callback)); } void AuthController::changePassword( const drogon::HttpRequestPtr &req, std::function &&callback) { const auto user = visione::auth::authenticate(req); if (!user) { callback(visione::http::error("unauthorized", drogon::k401Unauthorized)); return; } const auto body = visione::http::requireJson(req); if (body.isNull()) { callback(visione::http::error("invalid_json", drogon::k400BadRequest)); return; } visione::services::AuthService service; serviceResponse(service.changePassword(*user, body), std::move(callback)); } void AuthController::me( const drogon::HttpRequestPtr &req, std::function &&callback) { const auto user = visione::auth::authenticate(req); if (!user) { callback(visione::http::error("unauthorized", drogon::k401Unauthorized)); return; } visione::services::AuthService service; callback(visione::http::json(service.currentUser(*user))); }