1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use serde::{Serialize, Deserialize};
use std::error::Error;
use reqwest::header::HeaderMap;


#[allow(non_snake_case)]
#[derive(Serialize,Deserialize,Debug,Default)]
pub struct Token {
    pub token: String,
    pub access_token: String,
    pub expires_in: i64,
    pub issued_at:String,
}



pub async fn get_token_dockerhub(image_name:String) -> Result<Token, Box<dyn Error>> {
    let url = format!("https://auth.docker.io/token?service=registry.docker.io&scope=repository:{}:pull",image_name.clone());
    let client = reqwest::Client::new();

    let mut headers = HeaderMap::new();

    headers.insert("Content-Type", "application/json".parse().unwrap());
    headers.insert("Accept-Language", "zh-CN,zh;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6".parse().unwrap());


    match client.get(url).timeout(std::time::Duration::from_secs(10)).send().await {
        Ok(r) => {
            match r.json().await {
                Ok(res) => Ok(res),
                Err(e) => {
                    Err(Box::new(e))
                }
            }
        },
        Err(e) => {
            Err(Box::new(e))
        }
    }
}