aboutsummaryrefslogtreecommitdiffstats
path: root/gitolfs3-server/src/config.rs
diff options
context:
space:
mode:
authorLibravatar Rutger Broekhoff2024-07-12 00:29:57 +0200
committerLibravatar Rutger Broekhoff2024-07-12 00:29:57 +0200
commitbc709f0f23be345a1e2ccd06acd36bd5dac40bde (patch)
tree4ffe66b1ac246e0a9eab4a2649a7db5bb3a1ff0a /gitolfs3-server/src/config.rs
parent3e67a3486eed22522f4352503ef7067ca81a8050 (diff)
downloadgitolfs3-main.tar.gz
gitolfs3-main.zip
Restructure serverHEADmain
Diffstat (limited to 'gitolfs3-server/src/config.rs')
-rw-r--r--gitolfs3-server/src/config.rs122
1 files changed, 61 insertions, 61 deletions
diff --git a/gitolfs3-server/src/config.rs b/gitolfs3-server/src/config.rs
index 75e84dc..c6a51a5 100644
--- a/gitolfs3-server/src/config.rs
+++ b/gitolfs3-server/src/config.rs
@@ -2,66 +2,6 @@ use std::collections::HashSet;
2 2
3use gitolfs3_common::{load_key, Key}; 3use gitolfs3_common::{load_key, Key};
4 4
5struct Env {
6 s3_access_key_id: String,
7 s3_secret_access_key: String,
8 s3_bucket: String,
9 s3_region: String,
10 s3_endpoint: String,
11 base_url: String,
12 key_path: String,
13 listen_host: String,
14 listen_port: String,
15 download_limit: String,
16 trusted_forwarded_hosts: String,
17}
18
19fn require_env(name: &str) -> Result<String, String> {
20 std::env::var(name)
21 .map_err(|_| format!("environment variable {name} should be defined and valid"))
22}
23
24impl Env {
25 fn load() -> Result<Env, String> {
26 Ok(Env {
27 s3_secret_access_key: require_env("GITOLFS3_S3_SECRET_ACCESS_KEY_FILE")?,
28 s3_access_key_id: require_env("GITOLFS3_S3_ACCESS_KEY_ID_FILE")?,
29 s3_region: require_env("GITOLFS3_S3_REGION")?,
30 s3_endpoint: require_env("GITOLFS3_S3_ENDPOINT")?,
31 s3_bucket: require_env("GITOLFS3_S3_BUCKET")?,
32 base_url: require_env("GITOLFS3_BASE_URL")?,
33 key_path: require_env("GITOLFS3_KEY_PATH")?,
34 listen_host: require_env("GITOLFS3_LISTEN_HOST")?,
35 listen_port: require_env("GITOLFS3_LISTEN_PORT")?,
36 download_limit: require_env("GITOLFS3_DOWNLOAD_LIMIT")?,
37 trusted_forwarded_hosts: std::env::var("GITOLFS3_TRUSTED_FORWARDED_HOSTS")
38 .unwrap_or_default(),
39 })
40 }
41}
42
43fn get_s3_client(env: &Env) -> Result<aws_sdk_s3::Client, std::io::Error> {
44 let access_key_id = std::fs::read_to_string(&env.s3_access_key_id)?;
45 let secret_access_key = std::fs::read_to_string(&env.s3_secret_access_key)?;
46
47 let credentials = aws_sdk_s3::config::Credentials::new(
48 access_key_id,
49 secret_access_key,
50 None,
51 None,
52 "gitolfs3-env",
53 );
54 let config = aws_config::SdkConfig::builder()
55 .behavior_version(aws_config::BehaviorVersion::latest())
56 .region(aws_config::Region::new(env.s3_region.clone()))
57 .endpoint_url(&env.s3_endpoint)
58 .credentials_provider(aws_sdk_s3::config::SharedCredentialsProvider::new(
59 credentials,
60 ))
61 .build();
62 Ok(aws_sdk_s3::Client::new(&config))
63}
64
65pub struct Config { 5pub struct Config {
66 pub listen_addr: (String, u16), 6 pub listen_addr: (String, u16),
67 pub base_url: String, 7 pub base_url: String,
@@ -83,7 +23,7 @@ impl Config {
83 Err(e) => return Err(format!("failed to load configuration: {e}")), 23 Err(e) => return Err(format!("failed to load configuration: {e}")),
84 }; 24 };
85 25
86 let s3_client = match get_s3_client(&env) { 26 let s3_client = match create_s3_client(&env) {
87 Ok(s3_client) => s3_client, 27 Ok(s3_client) => s3_client,
88 Err(e) => return Err(format!("failed to create S3 client: {e}")), 28 Err(e) => return Err(format!("failed to create S3 client: {e}")),
89 }; 29 };
@@ -120,3 +60,63 @@ impl Config {
120 }) 60 })
121 } 61 }
122} 62}
63
64fn create_s3_client(env: &Env) -> Result<aws_sdk_s3::Client, std::io::Error> {
65 let access_key_id = std::fs::read_to_string(&env.s3_access_key_id)?;
66 let secret_access_key = std::fs::read_to_string(&env.s3_secret_access_key)?;
67
68 let credentials = aws_sdk_s3::config::Credentials::new(
69 access_key_id,
70 secret_access_key,
71 None,
72 None,
73 "gitolfs3-env",
74 );
75 let config = aws_config::SdkConfig::builder()
76 .behavior_version(aws_config::BehaviorVersion::latest())
77 .region(aws_config::Region::new(env.s3_region.clone()))
78 .endpoint_url(&env.s3_endpoint)
79 .credentials_provider(aws_sdk_s3::config::SharedCredentialsProvider::new(
80 credentials,
81 ))
82 .build();
83 Ok(aws_sdk_s3::Client::new(&config))
84}
85
86struct Env {
87 s3_access_key_id: String,
88 s3_secret_access_key: String,
89 s3_bucket: String,
90 s3_region: String,
91 s3_endpoint: String,
92 base_url: String,
93 key_path: String,
94 listen_host: String,
95 listen_port: String,
96 download_limit: String,
97 trusted_forwarded_hosts: String,
98}
99
100impl Env {
101 fn load() -> Result<Env, String> {
102 Ok(Env {
103 s3_secret_access_key: require_env("GITOLFS3_S3_SECRET_ACCESS_KEY_FILE")?,
104 s3_access_key_id: require_env("GITOLFS3_S3_ACCESS_KEY_ID_FILE")?,
105 s3_region: require_env("GITOLFS3_S3_REGION")?,
106 s3_endpoint: require_env("GITOLFS3_S3_ENDPOINT")?,
107 s3_bucket: require_env("GITOLFS3_S3_BUCKET")?,
108 base_url: require_env("GITOLFS3_BASE_URL")?,
109 key_path: require_env("GITOLFS3_KEY_PATH")?,
110 listen_host: require_env("GITOLFS3_LISTEN_HOST")?,
111 listen_port: require_env("GITOLFS3_LISTEN_PORT")?,
112 download_limit: require_env("GITOLFS3_DOWNLOAD_LIMIT")?,
113 trusted_forwarded_hosts: std::env::var("GITOLFS3_TRUSTED_FORWARDED_HOSTS")
114 .unwrap_or_default(),
115 })
116 }
117}
118
119fn require_env(name: &str) -> Result<String, String> {
120 std::env::var(name)
121 .map_err(|_| format!("environment variable {name} should be defined and valid"))
122}