Orbit Framework
An ultra-modern, asynchronous, cross-platform C++ Web Framework.
Loading...
Searching...
No Matches
OAuth2.hpp
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <functional>
4#include <memory>
5#include <vector>
8#include <orbit/http/json.hpp>
9
10namespace middleware {
11
17 std::string client_id;
18 std::string client_secret;
19 std::string redirect_uri;
21 std::string token_endpoint;
22 std::string userinfo_endpoint;
23 std::vector<std::string> scopes;
24};
25
30class OAuth2 {
31public:
38
44 std::function<void(http::HttpRequest&, std::shared_ptr<http::ResponseWriter>)> login_handler();
45
53 std::function<void(http::HttpRequest&, std::shared_ptr<http::ResponseWriter>)> callback_handler(
54 std::function<void(const nlohmann::json& user_info, http::HttpRequest&, std::shared_ptr<http::ResponseWriter>)> on_success,
55 std::function<void(const std::string& error, http::HttpRequest&, std::shared_ptr<http::ResponseWriter>)> on_error
56 );
57
66 static OAuth2 google(const std::string& client_id, const std::string& client_secret, const std::string& redirect_uri);
67
76 static OAuth2 github(const std::string& client_id, const std::string& client_secret, const std::string& redirect_uri);
77
78private:
79 OAuth2Config config_;
80 std::string fetch_sync(const std::string& url, const std::string& method, const std::string& body, const std::string& auth_header = "") const;
81};
82
83} // namespace middleware
Middleware for handling OAuth2 authentication.
Definition OAuth2.hpp:30
std::function< void(http::HttpRequest &, std::shared_ptr< http::ResponseWriter >)> callback_handler(std::function< void(const nlohmann::json &user_info, http::HttpRequest &, std::shared_ptr< http::ResponseWriter >)> on_success, std::function< void(const std::string &error, http::HttpRequest &, std::shared_ptr< http::ResponseWriter >)> on_error)
Handler to process the redirect callback, exchange the code for an access token, and fetch user info.
Definition OAuth2.cpp:83
std::function< void(http::HttpRequest &, std::shared_ptr< http::ResponseWriter >)> login_handler()
Handler to redirect the user to the OAuth2 provider's consent page.
Definition OAuth2.cpp:62
static OAuth2 google(const std::string &client_id, const std::string &client_secret, const std::string &redirect_uri)
Pre-configured factory for Google OAuth2.
Definition OAuth2.cpp:128
static OAuth2 github(const std::string &client_id, const std::string &client_secret, const std::string &redirect_uri)
Pre-configured factory for GitHub OAuth2.
Definition OAuth2.cpp:140
a class to store JSON values
Definition json.hpp:19401
Definition Config.hpp:5
Definition Compress.hpp:4
Represents an incoming HTTP request.
Definition HttpRequest.hpp:22
Configuration for OAuth2 middleware.
Definition OAuth2.hpp:16
std::string userinfo_endpoint
Definition OAuth2.hpp:22
std::string client_secret
Definition OAuth2.hpp:18
std::string redirect_uri
Definition OAuth2.hpp:19
std::string client_id
Definition OAuth2.hpp:17
std::vector< std::string > scopes
Definition OAuth2.hpp:23
std::string token_endpoint
Definition OAuth2.hpp:21
std::string authorization_endpoint
Definition OAuth2.hpp:20