xt_oss/oss/api/bucket/
referer.rs

1use crate::oss;
2
3use self::builders::{GetBucketRefererBuilder, PutBucketRefererBuilder};
4
5pub mod builders {
6    use crate::oss::{
7        self,
8        api::{self, ApiResponseFrom},
9        entities::referer::RefererConfiguration,
10        http,
11    };
12
13    #[derive(Debug)]
14    pub struct PutBucketRefererBuilder<'a> {
15        client: &'a oss::Client<'a>,
16        config: RefererConfiguration,
17    }
18
19    impl<'a> PutBucketRefererBuilder<'a> {
20        pub fn new(cilent: &'a oss::Client) -> Self {
21            Self {
22                client: cilent,
23                config: RefererConfiguration::default(),
24            }
25        }
26
27        pub fn with_config(mut self, value: RefererConfiguration) -> Self {
28            self.config = value;
29            self
30        }
31
32        fn config(&self) -> String {
33            quick_xml::se::to_string(&self.config).unwrap()
34        }
35
36        pub async fn execute(&self) -> api::ApiResult {
37            let res = format!("/{}/?{}", self.client.bucket(), "referer");
38            let url = format!("{}/?{}", self.client.base_url(), "referer");
39            let config = self.config();
40            let data = oss::Bytes::from(config);
41
42            let resp = self
43                .client
44                .request
45                .task()
46                .with_url(&url)
47                .with_resource(&res)
48                .with_method(http::Method::PUT)
49                .with_body(data)
50                .execute()
51                .await?;
52
53            Ok(ApiResponseFrom(resp).to_empty().await)
54        }
55    }
56
57    pub struct GetBucketRefererBuilder<'a> {
58        client: &'a oss::Client<'a>,
59    }
60
61    impl<'a> GetBucketRefererBuilder<'a> {
62        pub fn new(cilent: &'a oss::Client) -> Self {
63            Self { client: cilent }
64        }
65
66        pub async fn execute(&self) -> api::ApiResult<RefererConfiguration> {
67            let res = format!("/{}/?{}", self.client.options.bucket, "referer");
68            let url = format!("{}?{}", self.client.options.base_url(), "referer");
69
70            let resp = self
71                .client
72                .request
73                .task()
74                .with_url(&url)
75                .with_resource(&res)
76                .execute()
77                .await?;
78            Ok(ApiResponseFrom(resp).to_type().await)
79        }
80    }
81}
82
83/// # 防盗链`Referer``
84#[allow(non_snake_case)]
85impl<'a> oss::Client<'a> {
86    /// 调用PutBucketReferer接口设置存储空间`Bucket`级别的Referer访问白名单以及黑名单
87    ///
88    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/putbucketreferer)
89    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_referer_put.rs)
90    pub fn PutBucketReferer(&self) -> PutBucketRefererBuilder {
91        PutBucketRefererBuilder::new(self)
92    }
93
94    /// GetBucketReferer接口用于查看存储空间`Bucket`的防盗链`Referer`相关配置。
95    ///
96    /// - [official docs](https://help.aliyun.com/zh/oss/developer-reference/getbucketreferer)
97    /// - [xtoss example](https://github.com/isme-sun/xt_oss/blob/main/examples/api_bucket_referer_get.rs)
98    pub fn GetBucketReferer(&self) -> GetBucketRefererBuilder {
99        GetBucketRefererBuilder::new(self)
100    }
101}