Skip to content

Commit 5c4edce

Browse files
authored
Use x forward header (#6)
* Use X-Forward-Header to authenticate against TerminusDB * Fix formatting
1 parent e0f87ef commit 5c4edce

File tree

4 files changed

+35
-4
lines changed

4 files changed

+35
-4
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
/target
2-
*~
2+
*~
3+
.env

docker-compose.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ services:
99
- 6363:6363
1010
environment:
1111
- TERMINUSDB_SERVER_PORT=6363
12+
- TERMINUSDB_INSECURE_USER_HEADER=X-User-Forward
13+
- TERMINUSDB_INSECURE_USER_HEADER_ENABLED=true
1214
volumes:
1315
- ./storage:/app/terminusdb/storage
1416
semantic_indexer:
@@ -17,6 +19,7 @@ services:
1719
- "8080:8080"
1820
environment:
1921
- TERMINUSDB_CONTENT_ENDPOINT=http://terminusdb:6363
22+
- TERMINUSDB_USER_FORWARD_HEADER=X-User-Forward
2023
- OPENAI_KEY=${OPENAI_KEY}
2124
volumes:
2225
- ./vector_storage:/app/storage

src/main.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ enum Commands {
3737
#[arg(short, long)]
3838
content_endpoint: Option<String>,
3939
#[arg(short, long)]
40+
user_forward_header: Option<String>,
41+
#[arg(short, long)]
4042
directory: String,
4143
#[arg(short, long, default_value_t = 8080)]
4244
port: u16,
@@ -110,18 +112,24 @@ fn content_endpoint_or_env(c: Option<String>) -> Option<String> {
110112
c.or_else(|| std::env::var("TERMINUSDB_CONTENT_ENDPOINT").ok())
111113
}
112114

115+
fn user_forward_header_or_env(c: Option<String>) -> String {
116+
c.unwrap_or_else(|| std::env::var("TERMINUSDB_USER_FORWARD_HEADER").unwrap())
117+
}
118+
113119
#[tokio::main]
114120
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
115121
let args = Args::parse();
116122
match args.command {
117123
Commands::Serve {
118124
content_endpoint,
125+
user_forward_header,
119126
directory,
120127
port,
121128
size,
122129
} => {
123130
server::serve(
124131
directory,
132+
user_forward_header_or_env(user_forward_header),
125133
port,
126134
size,
127135
content_endpoint_or_env(content_endpoint),

src/server.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ pub struct QueryResult {
256256

257257
pub struct Service {
258258
content_endpoint: Option<String>,
259+
user_forward_header: String,
259260
path: PathBuf,
260261
vector_store: VectorStore,
261262
pending: Mutex<HashSet<String>>,
@@ -277,6 +278,7 @@ enum TerminusIndexOperationError {}
277278

278279
async fn get_operations_from_content_endpoint(
279280
content_endpoint: String,
281+
user_forward_header: String,
280282
domain: String,
281283
commit: String,
282284
previous: Option<String>,
@@ -287,7 +289,11 @@ async fn get_operations_from_content_endpoint(
287289
}
288290
let endpoint = format!("{}/{}", content_endpoint, &domain);
289291
let url = reqwest::Url::parse_with_params(&endpoint, &params).unwrap();
290-
let res = reqwest::get(url)
292+
let client = reqwest::Client::new();
293+
let res = client
294+
.get(url)
295+
.header(user_forward_header, "admin")
296+
.send()
291297
.await
292298
.unwrap()
293299
.bytes_stream()
@@ -369,10 +375,16 @@ impl Service {
369375
s
370376
}
371377

372-
fn new<P: Into<PathBuf>>(path: P, num_bufs: usize, content_endpoint: Option<String>) -> Self {
378+
fn new<P: Into<PathBuf>>(
379+
path: P,
380+
user_forward_header: String,
381+
num_bufs: usize,
382+
content_endpoint: Option<String>,
383+
) -> Self {
373384
let path = path.into();
374385
Service {
375386
content_endpoint,
387+
user_forward_header,
376388
path: path.clone(),
377389
vector_store: VectorStore::new(path, num_bufs),
378390
pending: Mutex::new(HashSet::new()),
@@ -416,6 +428,7 @@ impl Service {
416428
if self.test_and_set_pending(index_id.clone()).await {
417429
let opstream = get_operations_from_content_endpoint(
418430
content_endpoint.to_string(),
431+
self.user_forward_header.clone(),
419432
domain.clone(),
420433
commit.clone(),
421434
previous.clone(),
@@ -725,12 +738,18 @@ enum AssignIndexError {
725738

726739
pub async fn serve<P: Into<PathBuf>>(
727740
directory: P,
741+
user_forward_header: String,
728742
port: u16,
729743
num_bufs: usize,
730744
content_endpoint: Option<String>,
731745
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
732746
let addr = SocketAddr::new(IpAddr::V6(Ipv6Addr::UNSPECIFIED), port);
733-
let service = Arc::new(Service::new(directory, num_bufs, content_endpoint));
747+
let service = Arc::new(Service::new(
748+
directory,
749+
user_forward_header,
750+
num_bufs,
751+
content_endpoint,
752+
));
734753
let make_svc = make_service_fn(move |_conn| {
735754
let s = service.clone();
736755
async {

0 commit comments

Comments
 (0)