移除firebase admin依赖

This commit is contained in:
李运家 2024-05-17 14:20:36 +08:00
parent 345655085b
commit bdbf47a38e
6 changed files with 28 additions and 331 deletions

286
Cargo.lock generated
View File

@ -183,10 +183,10 @@ dependencies = [
"axum-core",
"bytes",
"futures-util",
"http 1.1.0",
"http-body 1.0.0",
"http",
"http-body",
"http-body-util",
"hyper 1.2.0",
"hyper",
"hyper-util",
"itoa",
"matchit",
@ -216,8 +216,8 @@ dependencies = [
"async-trait",
"bytes",
"futures-util",
"http 1.1.0",
"http-body 1.0.0",
"http",
"http-body",
"http-body-util",
"mime",
"pin-project-lite",
@ -238,8 +238,8 @@ dependencies = [
"axum-core",
"bytes",
"futures-util",
"http 1.1.0",
"http-body 1.0.0",
"http",
"http-body",
"http-body-util",
"mime",
"pin-project-lite",
@ -879,31 +879,6 @@ dependencies = [
"slab",
]
[[package]]
name = "gcp_auth"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e155fdc0640589cc660d00e7ed7aa608479e20187b9ea352a77dd4443dd2d856"
dependencies = [
"async-trait",
"base64 0.22.0",
"chrono",
"home",
"hyper 0.14.28",
"hyper-rustls",
"ring",
"rustls 0.22.4",
"rustls-pemfile 2.1.2",
"serde",
"serde_json",
"thiserror",
"tokio",
"tracing",
"tracing-futures",
"url",
"which",
]
[[package]]
name = "generic-array"
version = "0.14.7"
@ -933,25 +908,6 @@ version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
[[package]]
name = "h2"
version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
dependencies = [
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
"http 0.2.12",
"indexmap",
"slab",
"tokio",
"tokio-util",
"tracing",
]
[[package]]
name = "h2"
version = "0.4.2"
@ -963,7 +919,7 @@ dependencies = [
"futures-core",
"futures-sink",
"futures-util",
"http 1.1.0",
"http",
"indexmap",
"slab",
"tokio",
@ -999,30 +955,6 @@ dependencies = [
"hashbrown 0.14.3",
]
[[package]]
name = "headers"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9"
dependencies = [
"base64 0.21.7",
"bytes",
"headers-core",
"http 1.1.0",
"httpdate",
"mime",
"sha1",
]
[[package]]
name = "headers-core"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4"
dependencies = [
"http 1.1.0",
]
[[package]]
name = "heck"
version = "0.4.1"
@ -1071,17 +1003,6 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "http"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
dependencies = [
"bytes",
"fnv",
"itoa",
]
[[package]]
name = "http"
version = "1.1.0"
@ -1093,17 +1014,6 @@ dependencies = [
"itoa",
]
[[package]]
name = "http-body"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
dependencies = [
"bytes",
"http 0.2.12",
"pin-project-lite",
]
[[package]]
name = "http-body"
version = "1.0.0"
@ -1111,7 +1021,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643"
dependencies = [
"bytes",
"http 1.1.0",
"http",
]
[[package]]
@ -1122,8 +1032,8 @@ checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840"
dependencies = [
"bytes",
"futures-util",
"http 1.1.0",
"http-body 1.0.0",
"http",
"http-body",
"pin-project-lite",
]
@ -1139,30 +1049,6 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hyper"
version = "0.14.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"h2 0.3.26",
"http 0.2.12",
"http-body 0.4.6",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
"socket2",
"tokio",
"tower-service",
"tracing",
"want",
]
[[package]]
name = "hyper"
version = "1.2.0"
@ -1172,9 +1058,9 @@ dependencies = [
"bytes",
"futures-channel",
"futures-util",
"h2 0.4.2",
"http 1.1.0",
"http-body 1.0.0",
"h2",
"http",
"http-body",
"httparse",
"httpdate",
"itoa",
@ -1184,22 +1070,6 @@ dependencies = [
"want",
]
[[package]]
name = "hyper-rustls"
version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "399c78f9338483cb7e630c8474b07268983c6bd5acee012e4211f9f7bb21b070"
dependencies = [
"futures-util",
"http 0.2.12",
"hyper 0.14.28",
"rustls 0.22.4",
"rustls-native-certs",
"rustls-pki-types",
"tokio",
"tokio-rustls",
]
[[package]]
name = "hyper-tls"
version = "0.6.0"
@ -1208,7 +1078,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
dependencies = [
"bytes",
"http-body-util",
"hyper 1.2.0",
"hyper",
"hyper-util",
"native-tls",
"tokio",
@ -1225,9 +1095,9 @@ dependencies = [
"bytes",
"futures-channel",
"futures-util",
"http 1.1.0",
"http-body 1.0.0",
"hyper 1.2.0",
"http",
"http-body",
"hyper",
"pin-project-lite",
"socket2",
"tokio",
@ -1355,8 +1225,8 @@ dependencies = [
"axum-extra",
"chrono",
"futures-util",
"http 1.1.0",
"http-body 1.0.0",
"http",
"http-body",
"http-body-util",
"moka",
"once_cell",
@ -2015,11 +1885,11 @@ dependencies = [
"encoding_rs",
"futures-core",
"futures-util",
"h2 0.4.2",
"http 1.1.0",
"http-body 1.0.0",
"h2",
"http",
"http-body",
"http-body-util",
"hyper 1.2.0",
"hyper",
"hyper-tls",
"hyper-util",
"ipnet",
@ -2090,28 +1960,6 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "rs-firebase-admin-sdk"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60d5ef0fca7bc47094901ec81745f2ae7b2147ec311f65f75b66e77eb8d78311"
dependencies = [
"base64 0.22.0",
"bytes",
"error-stack",
"gcp_auth",
"headers",
"http 1.1.0",
"openssl",
"reqwest",
"serde",
"serde_json",
"thiserror",
"time",
"tokio",
"urlencoding",
]
[[package]]
name = "rsa"
version = "0.9.6"
@ -2183,37 +2031,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
dependencies = [
"ring",
"rustls-webpki 0.101.7",
"rustls-webpki",
"sct",
]
[[package]]
name = "rustls"
version = "0.22.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432"
dependencies = [
"log",
"ring",
"rustls-pki-types",
"rustls-webpki 0.102.2",
"subtle",
"zeroize",
]
[[package]]
name = "rustls-native-certs"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792"
dependencies = [
"openssl-probe",
"rustls-pemfile 2.1.2",
"rustls-pki-types",
"schannel",
"security-framework",
]
[[package]]
name = "rustls-pemfile"
version = "1.0.4"
@ -2249,17 +2070,6 @@ dependencies = [
"untrusted",
]
[[package]]
name = "rustls-webpki"
version = "0.102.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610"
dependencies = [
"ring",
"rustls-pki-types",
"untrusted",
]
[[package]]
name = "rustversion"
version = "1.0.14"
@ -2492,7 +2302,6 @@ dependencies = [
"futures-executor",
"library",
"reqwest",
"rs-firebase-admin-sdk",
"sea-orm",
"tracing",
]
@ -2658,7 +2467,7 @@ dependencies = [
"paste",
"percent-encoding",
"rust_decimal",
"rustls 0.21.10",
"rustls",
"rustls-pemfile 1.0.4",
"serde",
"serde_json",
@ -3069,17 +2878,6 @@ dependencies = [
"tokio",
]
[[package]]
name = "tokio-rustls"
version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f"
dependencies = [
"rustls 0.22.4",
"rustls-pki-types",
"tokio",
]
[[package]]
name = "tokio-stream"
version = "0.1.14"
@ -3174,8 +2972,8 @@ checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
dependencies = [
"bitflags 2.4.2",
"bytes",
"http 1.1.0",
"http-body 1.0.0",
"http",
"http-body",
"http-body-util",
"pin-project-lite",
"tower-layer",
@ -3240,16 +3038,6 @@ dependencies = [
"valuable",
]
[[package]]
name = "tracing-futures"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
dependencies = [
"pin-project",
"tracing",
]
[[package]]
name = "tracing-log"
version = "0.2.0"
@ -3544,18 +3332,6 @@ version = "0.25.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
[[package]]
name = "which"
version = "6.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7"
dependencies = [
"either",
"home",
"rustix",
"winsafe",
]
[[package]]
name = "whoami"
version = "1.5.0"
@ -3757,12 +3533,6 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "winsafe"
version = "0.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904"
[[package]]
name = "wyz"
version = "0.5.1"

View File

@ -9,7 +9,6 @@ edition = "2021"
tracing = "0.1.40"
chrono = "0.4.35"
sea-orm = { version = "0.12.14", features = ["sqlx-mysql", "runtime-tokio-rustls", "macros", "debug-print"] }
rs-firebase-admin-sdk = "2.0.0"
reqwest = "0.12.4"
futures-executor = "0.3.30"
error-stack = "0.4.1"

View File

@ -1,62 +0,0 @@
use std::sync::OnceLock;
use futures_executor::block_on;
use rs_firebase_admin_sdk::{
auth::{FirebaseAuthService, UserIdentifiers},
App, AuthenticationManager,
};
use rs_firebase_admin_sdk::auth::token::{LiveTokenVerifier, TokenVerifier};
use rs_firebase_admin_sdk::auth::token::cache::{HttpCache, PubKeys};
use rs_firebase_admin_sdk::auth::token::jwt::JWToken;
static LIVE_APP: OnceLock<App<AuthenticationManager>> = OnceLock::new();
static ID_TOKEN_VERIFIER: OnceLock<LiveTokenVerifier<HttpCache<reqwest::Client, PubKeys>>> = OnceLock::new();
fn get_app() -> &'static App<AuthenticationManager> {
LIVE_APP.get_or_init(|| block_on(async {
let gcp_service_account = AuthenticationManager::new().await.expect("创建authentication manager失败");
App::live(gcp_service_account.into()).await.expect("创建live app失败")
}))
}
fn get_id_token_verifier() -> &'static LiveTokenVerifier<HttpCache<reqwest::Client, PubKeys>> {
ID_TOKEN_VERIFIER.get_or_init(|| block_on(async {
get_app().id_token_verifier().await.expect("创建id token verifier失败")
}))
}
pub async fn verify_user_id_token(id_token: &str) -> Result<JWToken, String> {
match get_id_token_verifier().verify_token(id_token).await {
Ok(jwt_token) => {
Ok(jwt_token)
}
Err(error) => {
tracing::error!("校验id token失败: {:?}", error);
Err(error.to_string())
}
}
}
async fn test() {
// Load your GCP SA from env, see https://crates.io/crates/gcp_auth for more details
let gcp_service_account = AuthenticationManager::new().await.unwrap();
// Create live (not emulated) context for Firebase app
let live_app = App::live(gcp_service_account.into()).await.unwrap();
let id_token_verifier = live_app.id_token_verifier().await.expect("Error while creating id token verifier");
let verify_result = id_token_verifier.verify_token("").await.expect("Error while verifying token");
// Create Firebase authentication admin client
let auth_admin = live_app.auth();
let user = auth_admin.get_user(
// Build a filter for finding the user
UserIdentifiers::builder()
.with_email("me@email.com".into())
.build()
)
.await
.expect("Error while fetching user")
.expect("User does not exist");
println!("User id: {}", user.uid);
}

View File

@ -1,3 +1,2 @@
pub mod player_info;
pub mod feedback;
pub mod firebase_admin;

View File

@ -5,7 +5,6 @@ use library::db;
use library::resp::response::ResErr::{ErrPerm, ErrSystem};
use library::resp::response::{ResOK, ResResult};
use sea_orm::{ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, Set};
use crate::firebase_admin;
pub async fn register(req: PlayerInfoRegister) -> ResResult<ResOK<()>> {
match PlayerInfo::find()
@ -24,14 +23,6 @@ pub async fn register(req: PlayerInfoRegister) -> ResResult<ResOK<()>> {
}
}
let verified_token = match firebase_admin::verify_user_id_token(req.id_token.unwrap().as_str()).await {
Ok(token) => token,
Err(err) => {
tracing::error!(error = ?err, "校验用户id token失败");
return Err(ErrSystem(None));
}
};
let now = chrono::Local::now().naive_local();
let model = player_info::ActiveModel {