12int main(
int argc,
char* argv[]) {
15 const express::legacy::in::WebApp app(
"OAuth2ResourceServer");
17 const std::string authorizationServerUri{
"http://localhost:8082"};
19 app.use(express::middleware::JsonMiddleware());
21 app.get(
"/access", [authorizationServerUri]
APPLICATION(req, res) {
22 res->set(
"Access-Control-Allow-Origin",
"*");
23 const std::string queryAccessToken{req->query(
"access_token")};
24 const std::string queryClientId{req->query(
"client_id")};
25 if (queryAccessToken.empty() || queryClientId.empty()) {
26 VLOG(1) <<
"Missing access_token or client_id in body";
31 const web::http::legacy::in::Client legacyClient(
32 [](web::http::legacy::in::Client::SocketConnection* socketConnection) {
33 VLOG(1) <<
"OnConnect";
35 VLOG(1) <<
"\tServer: " + socketConnection->getRemoteAddress().toString();
36 VLOG(1) <<
"\tClient: " + socketConnection->getLocalAddress().toString();
38 []([[maybe_unused]] web::http::legacy::in::Client::SocketConnection* socketConnection) {
39 VLOG(1) <<
"OnConnected";
41 [](web::http::legacy::in::Client::SocketConnection* socketConnection) {
42 VLOG(1) <<
"OnDisconnect";
44 VLOG(1) <<
"\tServer: " + socketConnection->getRemoteAddress().toString();
45 VLOG(1) <<
"\tClient: " + socketConnection->getLocalAddress().toString();
47 [queryAccessToken, queryClientId, res](
const std::shared_ptr<web::http::client::Request>& request) {
48 VLOG(1) <<
"OnRequestBegin";
49 request->url =
"/oauth2/token/validate?client_id=" + queryClientId;
50 request->method =
"POST";
51 VLOG(1) <<
"ClientId: " << queryClientId;
52 VLOG(1) <<
"AccessToken: " << queryAccessToken;
53 const nlohmann::json requestJson = {{
"access_token", queryAccessToken}, {
"client_id", queryClientId}};
54 const std::string requestJsonString{requestJson.dump(4)};
55 request->send(requestJsonString,
56 [res]([[maybe_unused]]
const std::shared_ptr<web::http::client::Request>& request,
57 const std::shared_ptr<web::http::client::Response>& response) {
58 VLOG(1) <<
"OnResponse";
59 VLOG(1) <<
"Response: " << std::string(response->body.begin(), response->body.end());
60 if (std::stoi(response->statusCode) != 200) {
61 const nlohmann::json errorJson = {{
"error",
"Invalid access token"}};
62 res->status(401).send(errorJson.dump(4));
64 const nlohmann::json successJson = {{
"content",
"🦆"}};
65 res->status(200).send(successJson.dump(4));
69 []([[maybe_unused]]
const std::shared_ptr<web::http::client::Request>& req) {
70 LOG(INFO) <<
" -- OnRequestEnd";
74 "localhost", 8082, [](
const web::http::legacy::in::Client::SocketAddress& socketAddress,
const core::socket::State& state) {
76 case core::socket::State::OK:
77 VLOG(1) <<
"OAuth2ResourceServer: connected to '" << socketAddress.toString() <<
"'";
79 case core::socket::State::DISABLED:
80 VLOG(1) <<
"OAuth2ResourceServer: disabled";
82 case core::socket::State::ERROR:
83 VLOG(1) <<
"OAuth2ResourceServer: error occurred";
85 case core::socket::State::FATAL:
86 VLOG(1) <<
"OAuth2ResourceServer: fatal error occurred";
92 app.listen(8083, [](
const express::legacy::in::WebApp::SocketAddress& socketAddress,
const core::socket::State& state) {
94 case core::socket::State::OK:
95 VLOG(1) <<
"app: listening on '" << socketAddress.toString() <<
"'";
97 case core::socket::State::DISABLED:
98 VLOG(1) <<
"app: disabled";
100 case core::socket::State::ERROR:
101 VLOG(1) <<
"app: error occurred";
103 case core::socket::State::FATAL:
104 VLOG(1) <<
"app: fatal error occurred";