feat: Integrate CIE authentication flow
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -15,6 +15,15 @@ class AuthController : public drogon::HttpController<AuthController>
|
||||
ADD_METHOD_TO(AuthController::verifyOtp,
|
||||
"/api/v1/auth/otp/verify",
|
||||
drogon::Post);
|
||||
ADD_METHOD_TO(AuthController::startCieLogin,
|
||||
"/api/v1/auth/cie/start",
|
||||
drogon::Post);
|
||||
ADD_METHOD_TO(AuthController::completeCieLogin,
|
||||
"/api/v1/auth/cie/exchange",
|
||||
drogon::Post);
|
||||
ADD_METHOD_TO(AuthController::cieSessionStatus,
|
||||
"/api/v1/auth/cie/session/{1}",
|
||||
drogon::Get);
|
||||
ADD_METHOD_TO(AuthController::me, "/api/v1/me", drogon::Get);
|
||||
ADD_METHOD_TO(AuthController::editUser, "/api/v1/me", drogon::Patch);
|
||||
METHOD_LIST_END
|
||||
@@ -28,6 +37,16 @@ class AuthController : public drogon::HttpController<AuthController>
|
||||
void verifyOtp(
|
||||
const drogon::HttpRequestPtr &req,
|
||||
std::function<void(const drogon::HttpResponsePtr &)> &&callback);
|
||||
void startCieLogin(
|
||||
const drogon::HttpRequestPtr &req,
|
||||
std::function<void(const drogon::HttpResponsePtr &)> &&callback);
|
||||
void completeCieLogin(
|
||||
const drogon::HttpRequestPtr &req,
|
||||
std::function<void(const drogon::HttpResponsePtr &)> &&callback);
|
||||
void cieSessionStatus(
|
||||
const drogon::HttpRequestPtr &req,
|
||||
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
||||
std::string state);
|
||||
void me(const drogon::HttpRequestPtr &req,
|
||||
std::function<void(const drogon::HttpResponsePtr &)> &&callback);
|
||||
void editUser(const drogon::HttpRequestPtr &req,
|
||||
|
||||
Reference in New Issue
Block a user