summaryrefslogtreecommitdiff
path: root/src/cli.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-07-24 22:32:27 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-07-24 22:32:27 -0400
commitb63380b251d04dd92f06aa5bbc22a72ca3e4bf8e (patch)
tree3956ec457131ce049fd91f2f53309bc0620fffe2 /src/cli.rs
parent2e42057694851b82574e0a406ded429fb95a07fa (diff)
wip: 83B78D40-D7CB-4419-9FE7-E7D858909443
Diffstat (limited to 'src/cli.rs')
-rw-r--r--src/cli.rs22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/cli.rs b/src/cli.rs
index 703bf19..fe43c56 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -16,7 +16,9 @@ use tokio::net;
use crate::{
app::App,
- clock, db, routes,
+ clock, db,
+ push::vapid,
+ routes,
umask::{self, Umask},
};
@@ -26,10 +28,8 @@ use crate::{
/// arguments for the `pilcrow` server:
///
/// ```no_run
-/// # use pilcrow::cli::Error;
-/// #
/// # #[tokio::main]
-/// # async fn main() -> Result<(), Error> {
+/// # async fn main() -> Result<(), impl std::error::Error> {
/// use clap::Parser;
/// use pilcrow::cli::Args;
///
@@ -67,6 +67,14 @@ pub struct Args {
/// upgrades
#[arg(short = 'D', long, env, default_value = "sqlite://pilcrow.db.backup")]
backup_database_url: String,
+
+ /// Base64-encoded VAPID public key for web push notifications.
+ #[arg(long, env)]
+ vapid_public_key: String,
+
+ /// Base64-encoded VAPID public key for web push notifications.
+ #[arg(long, env)]
+ vapid_private_key: vapid::PrivateKey,
}
impl Args {
@@ -90,7 +98,10 @@ impl Args {
self.umask.set();
let pool = self.pool().await?;
- let app = App::from(pool);
+ let vapid_public_key = self.vapid_public_key.clone();
+ let vapid_signer = self.vapid_private_key.as_signature_builder()?;
+
+ let app = App::from(pool, vapid_public_key, vapid_signer);
let app = routes::routes(&app)
.route_layer(middleware::from_fn(clock::middleware))
.route_layer(middleware::map_response(Self::server_info()))
@@ -141,6 +152,7 @@ fn started_msg(listener: &net::TcpListener) -> io::Result<String> {
#[error(transparent)]
enum Error {
Io(#[from] io::Error),
+ WebPush(#[from] web_push::WebPushError),
Database(#[from] db::Error),
Umask(#[from] umask::Error),
}