| #ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_OAUTH_UTILS_H_ |
| #define THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_OAUTH_UTILS_H_ |
| |
| #include <optional> |
| #include <string> |
| |
| #include "redfish_v1.pb.h" |
| #include "grpcpp/support/status.h" |
| #include "config_parser.h" |
| |
| namespace milotic::authz { |
| |
| // Generates the subject of the OAuth token for the given peer. |
| std::string GenerateOAuthSubject(const PeerSpiffeIdentity& peer); |
| |
| // Get the subject of the OAuth token from the given certificate path. Empty |
| // string will be returned on errors. |
| std::string GetSubject(const std::string& certificate_path); |
| |
| // Extracts the OAuth token from the Redfish request. |
| // Returns std::nullopt if the request doesn't contain an OAuth token. |
| std::optional<std::string> GetOAuthTokenFromRequest( |
| const ::redfish::v1::Request& request); |
| |
| // Verifies the OAuth token regarding signature, subject, audience, issuer, |
| // and expiration, if it's valid, extract the Redfish role from the scope claim. |
| grpc::Status VerifyAndExtractRoleFromToken(const std::string& token, |
| const std::string& public_key, |
| const std::string& expected_subject, |
| const std::string& expected_audience, |
| const std::string& expected_issuer, |
| std::string& redfish_role); |
| |
| } // namespace milotic::authz |
| |
| #endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_AUTHZ_OAUTH_UTILS_H_ |