diff options
| author | Per Larsson <[email protected]> | 2022-01-25 18:36:41 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2022-01-25 18:36:41 +0100 |
| commit | 060c3ed4b49c6341d1a917ec728d26bda7e41494 (patch) | |
| tree | 054b147827833efd715a08f08f85d7d2e25c609c /zenserver/auth/authservice.cpp | |
| parent | Fixed missing object in project oplog response. (diff) | |
| download | zen-060c3ed4b49c6341d1a917ec728d26bda7e41494.tar.xz zen-060c3ed4b49c6341d1a917ec728d26bda7e41494.zip | |
Added auth manager with support for OIDC providers.
Diffstat (limited to 'zenserver/auth/authservice.cpp')
| -rw-r--r-- | zenserver/auth/authservice.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/zenserver/auth/authservice.cpp b/zenserver/auth/authservice.cpp index c6def15b4..8200b9c9b 100644 --- a/zenserver/auth/authservice.cpp +++ b/zenserver/auth/authservice.cpp @@ -1,18 +1,49 @@ // Copyright Epic Games, Inc. All Rights Reserved. #include <auth/authservice.h> +#include <auth/authmgr.h> + +#include <zencore/compactbinarybuilder.h> #include <zencore/string.h> +#include <json11.hpp> + namespace zen { using namespace std::literals; -HttpAuthService::HttpAuthService() +HttpAuthService::HttpAuthService(AuthMgr& AuthMgr) : m_AuthMgr(AuthMgr) { m_Router.RegisterRoute( "token", [this](HttpRouterRequest& RouterRequest) { HttpServerRequest& ServerRequest = RouterRequest.ServerRequest(); + + const HttpContentType ContentType = ServerRequest.RequestContentType(); + + if ((ContentType == HttpContentType::kUnknownContentType || ContentType == HttpContentType::kJSON) == false) + { + return ServerRequest.WriteResponse(HttpResponseCode::BadRequest); + } + + const IoBuffer Body = ServerRequest.ReadPayload(); + + std::string JsonText(reinterpret_cast<const char*>(Body.GetData()), Body.GetSize()); + std::string JsonError; + json11::Json TokenInfo = json11::Json::parse(JsonText, JsonError); + + if (!JsonError.empty()) + { + CbObjectWriter Response; + Response << "Result"sv << false; + Response << "Error"sv << JsonError; + + return ServerRequest.WriteResponse(HttpResponseCode::BadRequest, Response.Save()); + } + + const std::string RefreshToken = TokenInfo["RefreshToken"].string_value(); + const std::string AccessToken = TokenInfo["AccessToken"].string_value(); + ServerRequest.WriteResponse(HttpResponseCode::OK); }, HttpVerb::kPost); |