Remove dependency on once_cell
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
8a6bb08134
commit
b68ee94f38
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1808,7 +1808,6 @@ dependencies = [
|
|||
"dotenv",
|
||||
"mime",
|
||||
"minify-html",
|
||||
"once_cell",
|
||||
"opentelemetry",
|
||||
"opentelemetry-otlp",
|
||||
"opentelemetry_sdk",
|
||||
|
|
|
@ -25,7 +25,6 @@ console-subscriber = "0.2"
|
|||
dotenv = "0.15.0"
|
||||
mime = "0.3"
|
||||
minify-html = "0.15.0"
|
||||
once_cell = "1.4"
|
||||
opentelemetry = "0.21"
|
||||
opentelemetry_sdk = { version = "0.21", features = ["rt-tokio"] }
|
||||
opentelemetry-otlp = "0.14"
|
||||
|
|
63
src/main.rs
63
src/main.rs
|
@ -14,7 +14,6 @@ use anyhow::Context;
|
|||
use awc::{Client, Connector};
|
||||
use clap::Parser;
|
||||
use console_subscriber::ConsoleLayer;
|
||||
use once_cell::sync::Lazy;
|
||||
use opentelemetry::KeyValue;
|
||||
use opentelemetry_otlp::WithExportConfig;
|
||||
use opentelemetry_sdk::{propagation::TraceContextPropagator, Resource};
|
||||
|
@ -26,7 +25,7 @@ use std::{
|
|||
io::Cursor,
|
||||
net::SocketAddr,
|
||||
path::PathBuf,
|
||||
sync::Arc,
|
||||
sync::{Arc, OnceLock},
|
||||
time::{Duration, SystemTime},
|
||||
};
|
||||
use tracing_actix_web::TracingLogger;
|
||||
|
@ -121,7 +120,7 @@ struct Config {
|
|||
|
||||
impl Config {
|
||||
fn domain(&self) -> Option<&str> {
|
||||
CONFIG.domain.domain()
|
||||
config().domain.domain()
|
||||
}
|
||||
|
||||
fn upstream_upload_url(&self) -> String {
|
||||
|
@ -218,7 +217,11 @@ impl Config {
|
|||
}
|
||||
}
|
||||
|
||||
static CONFIG: Lazy<Config> = Lazy::new(Config::parse);
|
||||
static CONFIG: OnceLock<Config> = OnceLock::new();
|
||||
|
||||
fn config() -> &'static Config {
|
||||
CONFIG.get_or_init(Config::parse)
|
||||
}
|
||||
|
||||
pub enum UploadResult<'a> {
|
||||
Image(Image),
|
||||
|
@ -344,27 +347,27 @@ impl Image {
|
|||
}
|
||||
|
||||
fn link(&self) -> String {
|
||||
CONFIG.image_url(&self.file)
|
||||
config().image_url(&self.file)
|
||||
}
|
||||
|
||||
fn thumbnails(&self) -> String {
|
||||
CONFIG.thumbnails_url(&self.file)
|
||||
config().thumbnails_url(&self.file)
|
||||
}
|
||||
|
||||
fn view(&self, size: Option<u64>) -> String {
|
||||
CONFIG.view_url(size, &self.file)
|
||||
config().view_url(size, &self.file)
|
||||
}
|
||||
|
||||
fn thumb(&self, size: u64, filetype: FileType) -> String {
|
||||
CONFIG.thumbnail_url(size, &self.file, filetype)
|
||||
config().thumbnail_url(size, &self.file, filetype)
|
||||
}
|
||||
|
||||
fn delete(&self) -> String {
|
||||
CONFIG.delete_url(&self.delete_token, &self.file)
|
||||
config().delete_url(&self.delete_token, &self.file)
|
||||
}
|
||||
|
||||
fn confirm_delete(&self) -> String {
|
||||
CONFIG.confirm_delete_url(&self.delete_token, &self.file)
|
||||
config().confirm_delete_url(&self.delete_token, &self.file)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -473,7 +476,7 @@ async fn list_uploads(
|
|||
let mut details_handles = Vec::new();
|
||||
|
||||
for upload_id in &query.uploads {
|
||||
let claim_url = CONFIG.upstream_claim_url(upload_id.as_str());
|
||||
let claim_url = config().upstream_claim_url(upload_id.as_str());
|
||||
let client = client.clone();
|
||||
|
||||
upload_handles.push(actix_rt::spawn(async move {
|
||||
|
@ -494,7 +497,7 @@ async fn list_uploads(
|
|||
}
|
||||
|
||||
for (file, delete_token) in &query.files {
|
||||
let details_url = CONFIG.upstream_details_url(file);
|
||||
let details_url = config().upstream_details_url(file);
|
||||
|
||||
let file = file.clone();
|
||||
let delete_token = delete_token.clone();
|
||||
|
@ -586,7 +589,7 @@ async fn upload(
|
|||
body: web::Payload,
|
||||
client: web::Data<Client>,
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let client_request = client.request_from(CONFIG.upstream_upload_url(), req.head());
|
||||
let client_request = client.request_from(config().upstream_upload_url(), req.head());
|
||||
|
||||
let client_request = if let Some(addr) = req.head().peer_addr {
|
||||
client_request.append_header(("X-Forwarded-For", addr.to_string()))
|
||||
|
@ -621,7 +624,7 @@ async fn thumbs(
|
|||
) -> Result<HttpResponse, Error> {
|
||||
let file = query.into_inner().image;
|
||||
|
||||
let url = CONFIG.upstream_details_url(&file);
|
||||
let url = config().upstream_details_url(&file);
|
||||
let mut res = client.get(url).send().await?;
|
||||
|
||||
if res.status() == StatusCode::NOT_FOUND {
|
||||
|
@ -676,7 +679,7 @@ async fn view_original(
|
|||
) -> Result<HttpResponse, Error> {
|
||||
let file = file.into_inner();
|
||||
|
||||
let url = CONFIG.upstream_details_url(&file);
|
||||
let url = config().upstream_details_url(&file);
|
||||
let mut res = client.get(url).send().await?;
|
||||
|
||||
if res.status() == StatusCode::NOT_FOUND {
|
||||
|
@ -707,7 +710,7 @@ async fn view(
|
|||
return Ok(to_404());
|
||||
}
|
||||
|
||||
let url = CONFIG.upstream_details_url(&file);
|
||||
let url = config().upstream_details_url(&file);
|
||||
let mut res = client.get(url).send().await?;
|
||||
|
||||
if res.status() == StatusCode::NOT_FOUND {
|
||||
|
@ -736,7 +739,7 @@ async fn thumbnail(
|
|||
let (size, filetype, file) = parts.into_inner();
|
||||
|
||||
if valid_thumbnail_size(size) {
|
||||
let url = CONFIG.upstream_thumbnail_url(size, &file, filetype);
|
||||
let url = config().upstream_thumbnail_url(size, &file, filetype);
|
||||
|
||||
return image(url, req, client).await;
|
||||
}
|
||||
|
@ -754,7 +757,7 @@ async fn full_res(
|
|||
req: HttpRequest,
|
||||
client: web::Data<Client>,
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let url = CONFIG.upstream_image_url(&filename.into_inner());
|
||||
let url = config().upstream_image_url(&filename.into_inner());
|
||||
|
||||
image(url, req, client).await
|
||||
}
|
||||
|
@ -799,7 +802,7 @@ async fn delete(
|
|||
confirm,
|
||||
} = query.into_inner();
|
||||
|
||||
let url = CONFIG.upstream_details_url(&file);
|
||||
let url = config().upstream_details_url(&file);
|
||||
let mut res = client.get(url).send().await?;
|
||||
|
||||
if res.status() == StatusCode::NOT_FOUND {
|
||||
|
@ -807,7 +810,7 @@ async fn delete(
|
|||
}
|
||||
|
||||
if confirm {
|
||||
let url = CONFIG.upstream_delete_url(&token, &file);
|
||||
let url = config().upstream_delete_url(&token, &file);
|
||||
client.delete(url).send().await?;
|
||||
|
||||
render(HttpResponse::Ok(), |cursor| {
|
||||
|
@ -959,7 +962,7 @@ async fn rustls_client_config() -> anyhow::Result<ClientConfig> {
|
|||
.collect(),
|
||||
};
|
||||
|
||||
if let Some(cert) = CONFIG.certificate.as_ref() {
|
||||
if let Some(cert) = config().certificate.as_ref() {
|
||||
let cert_bytes = tokio::fs::read(&cert).await?;
|
||||
|
||||
for res in rustls_pemfile::certs(&mut cert_bytes.as_slice()) {
|
||||
|
@ -974,14 +977,14 @@ async fn rustls_client_config() -> anyhow::Result<ClientConfig> {
|
|||
}
|
||||
|
||||
async fn rustls_server_key() -> anyhow::Result<Option<CertifiedKey>> {
|
||||
let certificate_path = if let Some(c) = &CONFIG.server_certificate {
|
||||
let certificate_path = if let Some(c) = &config().server_certificate {
|
||||
c
|
||||
} else {
|
||||
tracing::info!("No server certificate");
|
||||
return Ok(None);
|
||||
};
|
||||
|
||||
let private_key_path = if let Some(p) = &CONFIG.server_private_key {
|
||||
let private_key_path = if let Some(p) = &config().server_private_key {
|
||||
p
|
||||
} else {
|
||||
tracing::info!("No server private_key");
|
||||
|
@ -1010,9 +1013,9 @@ async fn main() -> anyhow::Result<()> {
|
|||
|
||||
init_tracing(
|
||||
"pict-rs-proxy",
|
||||
CONFIG.opentelemetry_url.as_ref(),
|
||||
CONFIG.console_addr,
|
||||
CONFIG.console_event_buffer_size,
|
||||
config().opentelemetry_url.as_ref(),
|
||||
config().console_addr,
|
||||
config().console_event_buffer_size,
|
||||
)?;
|
||||
|
||||
let client_config = rustls_client_config().await?;
|
||||
|
@ -1051,7 +1054,7 @@ async fn main() -> anyhow::Result<()> {
|
|||
});
|
||||
|
||||
if let Some(key) = rustls_server_key().await? {
|
||||
tracing::info!("Serving pict-rs-proxy over TLS on {}", CONFIG.addr);
|
||||
tracing::info!("Serving pict-rs-proxy over TLS on {}", config().addr);
|
||||
|
||||
let (tx, rx) = rustls_channel_resolver::channel::<32>(key);
|
||||
|
||||
|
@ -1076,16 +1079,16 @@ async fn main() -> anyhow::Result<()> {
|
|||
.with_cert_resolver(rx);
|
||||
|
||||
server
|
||||
.bind_rustls_021(CONFIG.addr, server_config)?
|
||||
.bind_rustls_021(config().addr, server_config)?
|
||||
.run()
|
||||
.await?;
|
||||
|
||||
handle.abort();
|
||||
let _ = handle.await;
|
||||
} else {
|
||||
tracing::info!("Serving pict-rs-proxy on {}", CONFIG.addr);
|
||||
tracing::info!("Serving pict-rs-proxy on {}", config().addr);
|
||||
|
||||
server.bind(CONFIG.addr)?.run().await?;
|
||||
server.bind(config().addr)?.run().await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
@use super::statics::{layout_css, favicon_ico};
|
||||
@use crate::CONFIG;
|
||||
@use crate::config;
|
||||
|
||||
@(title: &str, description: Option<&str>, head: Content, body: Content)
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
|||
<meta property="og:description" content="Upload and share image files" />
|
||||
<meta property="twitter:description" content="Upload and share image files" />
|
||||
}
|
||||
@if let Some(domain) = CONFIG.domain() {
|
||||
@if let Some(domain) = config().domain() {
|
||||
<meta property="twitter:domain" content="@domain" />
|
||||
}
|
||||
<link rel="stylesheet" href="@crate::statics(layout_css.name)" type="text/css" />
|
||||
|
|
Loading…
Reference in a new issue