Kurlyk
Toggle main menu visibility
Loading...
Searching...
No Matches
ApiKeyAuthProvider.hpp
Go to the documentation of this file.
1
#pragma once
2
#ifndef _KURLYK_HTTP_AUTH_API_KEY_AUTH_PROVIDER_HPP_INCLUDED
3
#define _KURLYK_HTTP_AUTH_API_KEY_AUTH_PROVIDER_HPP_INCLUDED
4
7
8
#include "
IAuthProvider.hpp
"
9
#include "
kurlyk/utils/percent_encoding.hpp
"
10
#include <string>
11
12
namespace
kurlyk
{
13
namespace
http
{
14
namespace
auth
{
15
18
enum class
ApiKeyPlacement
{
19
HEADER
,
20
QUERY
21
};
22
25
class
ApiKeyAuthProvider
:
public
IAuthProvider
{
26
public
:
31
ApiKeyAuthProvider
(
32
const
std::string& key_name,
33
const
std::string& key_value,
34
ApiKeyPlacement
placement =
ApiKeyPlacement::HEADER
)
35
:
m_key_name
(key_name)
36
,
m_key_value
(key_value)
37
,
m_placement
(placement) {}
38
41
void
set_key_value
(
const
std::string& key_value) {
42
m_key_value
= key_value;
43
}
44
45
bool
authorize
(
HttpRequest
& request)
const override
{
46
if
(
m_key_name
.empty() ||
m_key_value
.empty())
return
false
;
47
if
(
m_placement
==
ApiKeyPlacement::HEADER
) {
48
request.
headers
.erase(
m_key_name
);
49
request.
headers
.emplace(
m_key_name
,
m_key_value
);
50
return
true
;
51
}
52
53
// QUERY placement
54
const
std::string encoded_key =
utils::percent_encode
(
m_key_name
);
55
const
std::string encoded_value =
utils::percent_encode
(
m_key_value
);
56
const
std::string param = encoded_key +
"="
+ encoded_value;
57
58
if
(request.
url
.find(
'?'
) == std::string::npos) {
59
request.
url
+=
"?"
+ param;
60
}
else
{
61
request.
url
+=
"&"
+ param;
62
}
63
return
true
;
64
}
65
66
bool
authorize
(
Headers
& headers)
const override
{
67
if
(
m_key_name
.empty() ||
m_key_value
.empty())
return
false
;
68
if
(
m_placement
!=
ApiKeyPlacement::HEADER
) {
69
return
false
;
70
}
71
headers.erase(
m_key_name
);
72
headers.emplace(
m_key_name
,
m_key_value
);
73
return
true
;
74
}
75
76
private
:
77
std::string
m_key_name
;
78
std::string
m_key_value
;
79
ApiKeyPlacement
m_placement
;
80
};
81
82
}
// namespace auth
83
}
// namespace http
84
}
// namespace kurlyk
85
86
#endif
// _KURLYK_HTTP_AUTH_API_KEY_AUTH_PROVIDER_HPP_INCLUDED
IAuthProvider.hpp
Defines the IAuthProvider interface for HTTP authentication strategies.
kurlyk::HttpRequest
Represents an HTTP request configuration.
Definition
HttpRequest.hpp:16
kurlyk::HttpRequest::url
std::string url
Full request URL.
Definition
HttpRequest.hpp:21
kurlyk::HttpRequest::headers
Headers headers
HTTP request headers.
Definition
HttpRequest.hpp:20
kurlyk::http::auth::ApiKeyAuthProvider::authorize
bool authorize(HttpRequest &request) const override
Modifies an HttpRequest in-place to include authentication credentials.
Definition
ApiKeyAuthProvider.hpp:45
kurlyk::http::auth::ApiKeyAuthProvider::m_key_value
std::string m_key_value
Definition
ApiKeyAuthProvider.hpp:78
kurlyk::http::auth::ApiKeyAuthProvider::m_placement
ApiKeyPlacement m_placement
Definition
ApiKeyAuthProvider.hpp:79
kurlyk::http::auth::ApiKeyAuthProvider::set_key_value
void set_key_value(const std::string &key_value)
Updates the stored API key value.
Definition
ApiKeyAuthProvider.hpp:41
kurlyk::http::auth::ApiKeyAuthProvider::m_key_name
std::string m_key_name
Definition
ApiKeyAuthProvider.hpp:77
kurlyk::http::auth::ApiKeyAuthProvider::authorize
bool authorize(Headers &headers) const override
Modifies a header map in-place to include authentication credentials.
Definition
ApiKeyAuthProvider.hpp:66
kurlyk::http::auth::ApiKeyAuthProvider::ApiKeyAuthProvider
ApiKeyAuthProvider(const std::string &key_name, const std::string &key_value, ApiKeyPlacement placement=ApiKeyPlacement::HEADER)
Constructs a provider with a key name, value, and placement.
Definition
ApiKeyAuthProvider.hpp:31
kurlyk::http::auth::IAuthProvider
Interface for authentication providers that modify HTTP requests or headers.
Definition
IAuthProvider.hpp:17
kurlyk::http::auth
Definition
ApiKeyAuthProvider.hpp:14
kurlyk::http::auth::ApiKeyPlacement
ApiKeyPlacement
Determines where the API key is attached.
Definition
ApiKeyAuthProvider.hpp:18
kurlyk::http::auth::ApiKeyPlacement::QUERY
@ QUERY
Appended as a query parameter to the request URL.
Definition
ApiKeyAuthProvider.hpp:20
kurlyk::http::auth::ApiKeyPlacement::HEADER
@ HEADER
Sent as a custom HTTP header.
Definition
ApiKeyAuthProvider.hpp:19
kurlyk::http
Definition
ApiKeyAuthProvider.hpp:13
kurlyk::utils::percent_encode
std::string percent_encode(const std::string &value) noexcept
Encodes a string using Percent Encoding according to RFC 3986.
Definition
percent_encoding.hpp:17
kurlyk
Primary namespace for the Kurlyk library, encompassing initialization, request management,...
kurlyk::Headers
utils::CaseInsensitiveMultimap Headers
Alias for HTTP headers, providing a case-insensitive unordered multimap.
Definition
CaseInsensitiveMultimap.hpp:62
percent_encoding.hpp
Provides functions for percent-encoding and decoding strings.
include
kurlyk
http
auth
ApiKeyAuthProvider.hpp
Generated by
1.17.0