userver: userver/server/handlers/auth/auth_checker_base.hpp Source File
Loading...
Searching...
No Matches
auth_checker_base.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/server/handlers/auth/auth_checker_base.hpp
4/// @brief @copybrief server::handlers::auth::AuthCheckerBase
5
6#include <memory>
7#include <optional>
8#include <string>
9
10#include <userver/server/auth/user_auth_info.hpp>
11#include <userver/server/handlers/exceptions.hpp>
12#include <userver/server/http/http_request.hpp>
13#include <userver/server/request/request_context.hpp>
14
15USERVER_NAMESPACE_BEGIN
16
17namespace server::handlers::auth {
18
20 enum class Status { kTokenNotFound, kInternalCheckFailure, kInvalidToken, kForbidden, kOk };
21
22 Status status{Status::kOk};
23 std::optional<std::string> reason{};
24 std::optional<std::string> ext_reason{};
25 std::optional<HandlerErrorCode> code{};
26};
27
28const std::string& GetDefaultReasonForStatus(AuthCheckResult::Status status);
29void RaiseForStatus(const AuthCheckResult& auth_check);
30
31/// @brief Base class for HTTP handler authentication checkers
33public:
34 virtual ~AuthCheckerBase();
35
36 [[nodiscard]] virtual AuthCheckResult CheckAuth(const http::HttpRequest& request, request::RequestContext& context)
37 const = 0;
38
39 [[nodiscard]] virtual bool SupportsUserAuth() const noexcept = 0;
40
41protected:
42 void SetUserAuthInfo(server::request::RequestContext& request_context, server::auth::UserAuthInfo&& info) const;
43};
44
45using AuthCheckerBasePtr = std::shared_ptr<AuthCheckerBase>;
46
47} // namespace server::handlers::auth
48
49USERVER_NAMESPACE_END