feat: Integrate CIE authentication flow

This commit is contained in:
gabdevele
2026-06-17 12:53:16 +02:00 Unverified
parent bb7ed18539
commit 6cbdf6462d
20 changed files with 946 additions and 15 deletions
+54
View File
@@ -66,6 +66,60 @@ void AuthController::verifyOtp(
serviceResponse(service.verifyOtp(body), std::move(callback));
}
void AuthController::startCieLogin(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&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.startCieLogin(body), std::move(callback));
}
void AuthController::completeCieLogin(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback)
{
const std::string rawBody(req->body());
const auto body = visione::http::parseJsonBody(rawBody);
if (body.isNull())
{
callback(visione::http::error("invalid_json", drogon::k400BadRequest));
return;
}
visione::services::AuthService service;
auto responseBody =
service.completeCieLogin(rawBody, body, req->getHeader("X-Visione-Signature"));
if (responseBody.get("ok", false).asBool() &&
responseBody.isMember("redirect_url"))
{
callback(visione::http::redirect(responseBody["redirect_url"].asString()));
return;
}
serviceResponse(std::move(responseBody), std::move(callback));
}
void AuthController::cieSessionStatus(
const drogon::HttpRequestPtr & /*req*/,
std::function<void(const HttpResponsePtr &)> &&callback,
std::string state)
{
visione::services::AuthService service;
auto body = service.cieSessionStatus(state);
if (!body.get("ok", false).asBool())
{
callback(visione::http::json(std::move(body), drogon::k404NotFound));
return;
}
callback(visione::http::json(std::move(body)));
}
void AuthController::me(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback)