Skip to content

Commit 308a34f

Browse files
committed
get db url & token from proxy server
1 parent 1b61a5d commit 308a34f

File tree

3 files changed

+41
-28
lines changed

3 files changed

+41
-28
lines changed

src/lib.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ use sqlite::{
1313
SQLITE_DONE, SQLITE_ERROR, SQLITE_FLOAT, SQLITE_INTEGER, SQLITE_MISUSE, SQLITE_NULL, SQLITE_OK,
1414
SQLITE_RANGE, SQLITE_TEXT,
1515
};
16-
use utils::{execute_async_task, read_turso_config};
17-
18-
use crate::utils::{
19-
count_parameters, extract_column_names, sql_is_begin_transaction, sql_is_commit, sql_is_pragma,
20-
sql_is_rollback, TursoConfig,
16+
use utils::execute_async_task;
17+
18+
use crate::{
19+
proxy::get_turso_db,
20+
utils::{
21+
count_parameters, extract_column_names, get_tokio, sql_is_begin_transaction, sql_is_commit,
22+
sql_is_pragma, sql_is_rollback,
23+
},
2124
};
2225

2326
mod proxy;
@@ -63,19 +66,18 @@ pub unsafe extern "C" fn sqlite3_open_v2(
6366
exit(1);
6467
}
6568

66-
let turso_config = read_turso_config().unwrap_or_else(|_| TursoConfig {
67-
db_url: format!(
68-
"https://{}.aws-us-west-2.turso.io",
69-
filename
70-
),
71-
db_token: String::from("eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhIjoicnciLCJnaWQiOiIyMzBiZDc4Ni1iN2I3LTRlYjgtYjkyMy00ZjM5MDRjYTVkMzciLCJpYXQiOjE3NTEwNTc3MzYsInJpZCI6ImQ1N2NjZTQzLWVhNWItNDFmMy1hNWZlLTE2ZWI4MjIxZTkwOCJ9.ItDyuzwvUqeXwc6KsQkjf6dUVAoQ5BkhvlxFD7nDRCl6thxopIKckJ-w7boX-2ms_-jjgVQuhj9PqYAsaycFAg"),
72-
});
73-
7469
let reqwest_client = reqwest::Client::builder()
7570
.user_agent("libsqlite3_turso/1.0.0")
7671
.build()
7772
.unwrap();
7873

74+
let turso_config = get_tokio()
75+
.block_on(get_turso_db(&reqwest_client, filename))
76+
.unwrap_or_else(|err| {
77+
eprintln!("LibSqlite3_Turso Error: {}", err);
78+
exit(1);
79+
});
80+
7981
let mock_db = Box::into_raw(Box::new(SQLite3 {
8082
client: reqwest_client,
8183
error_stack: Mutex::new(vec![]),
@@ -87,10 +89,6 @@ pub unsafe extern "C" fn sqlite3_open_v2(
8789
turso_config: turso_config,
8890
}));
8991

90-
if let Ok(config) = read_turso_config() {
91-
(*mock_db).turso_config = config;
92-
}
93-
9492
*db = mock_db;
9593

9694
SQLITE_OK

src/proxy.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,3 +227,26 @@ pub fn get_execution_result<'a>(
227227

228228
Ok(first_execution_result)
229229
}
230+
231+
pub async fn get_turso_db(client: &Client, db_name: &str) -> Result<TursoConfig, Box<dyn Error>> {
232+
let globe_auth_api = std::env::var("GLOBE_DS_API")?;
233+
234+
let request_body = serde_json::json!({
235+
"db_name": db_name,
236+
});
237+
238+
let response = client
239+
.post(format!("{}/db/auth", globe_auth_api))
240+
.body(request_body.to_string())
241+
.send()
242+
.await?;
243+
244+
if !response.status().is_success() {
245+
return Err(format!("Failed to get Auth Token: {}", response.status()).into());
246+
}
247+
248+
let token: String = response.text().await?;
249+
let db_info = serde_json::from_str(&token)?;
250+
251+
Ok(db_info)
252+
}

src/utils.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
use std::{env, ffi::c_int, sync::OnceLock};
1+
use std::{ffi::c_int, sync::OnceLock};
22

33
use regex::Regex;
4+
use serde::Deserialize;
45
use tokio::runtime::{self, Runtime};
56

67
use crate::sqlite::{push_error, SQLite3, SQLITE_ERROR};
@@ -66,21 +67,12 @@ where
6667
}
6768
}
6869

69-
#[derive(Debug)]
70+
#[derive(Debug, Deserialize)]
7071
pub struct TursoConfig {
7172
pub db_url: String,
7273
pub db_token: String,
7374
}
7475

75-
pub fn read_turso_config() -> Result<TursoConfig, String> {
76-
let db_url = env::var("TURSO_DB_URL")
77-
.map_err(|_| "Missing environment variable: TURSO_DB_URL".to_string())?;
78-
let db_token = env::var("TURSO_DB_TOKEN")
79-
.map_err(|_| "Missing environment variable: TURSO_DB_TOKEN".to_string())?;
80-
81-
Ok(TursoConfig { db_url, db_token })
82-
}
83-
8476
#[inline]
8577
pub fn sql_is_begin_transaction(sql: &String) -> bool {
8678
sql.starts_with("BEGIN")

0 commit comments

Comments
 (0)