diff options
author | Rutger Broekhoff | 2024-07-12 00:29:57 +0200 |
---|---|---|
committer | Rutger Broekhoff | 2024-07-12 00:29:57 +0200 |
commit | bc709f0f23be345a1e2ccd06acd36bd5dac40bde (patch) | |
tree | 4ffe66b1ac246e0a9eab4a2649a7db5bb3a1ff0a /gitolfs3-server/src/config.rs | |
parent | 3e67a3486eed22522f4352503ef7067ca81a8050 (diff) | |
download | gitolfs3-main.tar.gz gitolfs3-main.zip |
Diffstat (limited to 'gitolfs3-server/src/config.rs')
-rw-r--r-- | gitolfs3-server/src/config.rs | 122 |
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 | ||
3 | use gitolfs3_common::{load_key, Key}; | 3 | use gitolfs3_common::{load_key, Key}; |
4 | 4 | ||
5 | struct 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 | |||
19 | fn 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 | |||
24 | impl 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 | |||
43 | fn 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 | |||
65 | pub struct Config { | 5 | pub 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 | |||
64 | fn 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 | |||
86 | struct 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 | |||
100 | impl 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 | |||
119 | fn 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 | } | ||