mycommon-utils 0.1.2

Common utilities library for database operations, Redis caching and system utilities
Documentation
use std::collections::HashMap;
use axum::extract::Request;
use axum::http::request::Parts;
use reqwest::header::HeaderMap;

pub const TOKEN_PREFIX: &'static str = "Bearer ";

pub fn get_token(header_map:  &HeaderMap) -> String {
    let mut token = header_map
        .get("authorization")
        .map(|v| v.to_str().unwrap_or_default().to_string())
        .unwrap_or_default();
    if token.starts_with(TOKEN_PREFIX) {
        token = token.replace(TOKEN_PREFIX, "");
    }
    token
}


pub fn get_token_by_header_map (header_map:  &HeaderMap) -> String {
    let token = header_map
        .get("Access-Token")
        .map(|v| v.to_str().unwrap_or_default().to_string())
        .unwrap_or_default();
    token
}

/// 获取token认证信息
pub fn get_access_token_by_parts<B>(parts: &mut Parts) -> String {
    let mut jwt_token = "".to_string();
    //在头里找数据
    if let Some(t) = parts.headers.get("Access-Token") {
        jwt_token = t.to_str().unwrap_or(&String::from("")).trim().to_string();
    }
    jwt_token
}

pub fn get_access_token_by_request<B>(request: &Request<B>) -> String {
    let mut jwt_token = "".to_string();
    //在头里找数据
    if let Some(t) = request.headers().get("Access-Token") {
        jwt_token = t.to_str().unwrap_or(&String::from("")).trim().to_string();
    }
    jwt_token
}

// 提取请求参数的辅助函数
pub fn get_query_params_token<B>(request: &Request<B>) -> String {
    // 获取 URI 的查询部分
    let query = request.uri().query().unwrap_or("");
    // 解析查询字符串为 HashMap(这里我们直接使用 into_iter().collect() 来避免中间的 Vec)
    let params: HashMap<String, String> = form_urlencoded::parse(query.as_bytes())
        .into_owned()
        .collect::<HashMap<_, _>>();
    // 从 HashMap 中获取 token 的值,如果不存在则返回空字符串
    params.get("token").cloned().unwrap_or_default()
}