poem_openapi/auth/
api_key.rs1use poem::{Request, Result};
2
3use crate::{
4 auth::ApiKeyAuthorization, base::UrlQuery, error::AuthorizationError, registry::MetaParamIn,
5};
6
7#[derive(Debug)]
9pub struct ApiKey {
10 pub key: String,
12}
13
14impl ApiKeyAuthorization for ApiKey {
15 fn from_request(
16 req: &Request,
17 query: &UrlQuery,
18 name: &str,
19 in_type: MetaParamIn,
20 ) -> Result<Self> {
21 match in_type {
22 MetaParamIn::Query => query
23 .get(name)
24 .cloned()
25 .map(|value| Self { key: value })
26 .ok_or_else(|| AuthorizationError.into()),
27 MetaParamIn::Header => req
28 .headers()
29 .get(name)
30 .and_then(|value| value.to_str().ok())
31 .map(|value| Self {
32 key: value.to_string(),
33 })
34 .ok_or_else(|| AuthorizationError.into()),
35 MetaParamIn::Cookie => req
36 .cookie()
37 .get(name)
38 .as_ref()
39 .map(|cookie| Self {
40 key: cookie.value_str().to_string(),
41 })
42 .ok_or_else(|| AuthorizationError.into()),
43 _ => unreachable!(),
44 }
45 }
46}