aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-server/src
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-06-11 00:54:30 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-06-11 00:54:30 +0200
commit5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8 (patch)
treec64baa8d5866c8e339eaf660dd3f94f30a3f7d8a /crates/atuin-server/src
parentchore: Somewhat simplify sync code (diff)
downloadatuin-5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8.zip
chore: Move everything into one big crate
That helps remove duplicated code and rustc/cargo will now also show dead code correctly.
Diffstat (limited to '')
-rw-r--r--crates/atuin-server/src/bin/main.rs73
-rw-r--r--crates/turtle/src/atuin_server/handlers/health.rs (renamed from crates/atuin-server/src/handlers/health.rs)0
-rw-r--r--crates/turtle/src/atuin_server/handlers/history.rs (renamed from crates/atuin-server/src/handlers/history.rs)6
-rw-r--r--crates/turtle/src/atuin_server/handlers/mod.rs (renamed from crates/atuin-server/src/handlers/mod.rs)6
-rw-r--r--crates/turtle/src/atuin_server/handlers/record.rs (renamed from crates/atuin-server/src/handlers/record.rs)4
-rw-r--r--crates/turtle/src/atuin_server/handlers/status.rs (renamed from crates/atuin-server/src/handlers/status.rs)6
-rw-r--r--crates/turtle/src/atuin_server/handlers/user.rs (renamed from crates/atuin-server/src/handlers/user.rs)8
-rw-r--r--crates/turtle/src/atuin_server/handlers/v0/me.rs (renamed from crates/atuin-server/src/handlers/v0/me.rs)6
-rw-r--r--crates/turtle/src/atuin_server/handlers/v0/mod.rs (renamed from crates/atuin-server/src/handlers/v0/mod.rs)0
-rw-r--r--crates/turtle/src/atuin_server/handlers/v0/record.rs (renamed from crates/atuin-server/src/handlers/v0/record.rs)6
-rw-r--r--crates/turtle/src/atuin_server/handlers/v0/store.rs (renamed from crates/atuin-server/src/handlers/v0/store.rs)4
-rw-r--r--crates/turtle/src/atuin_server/metrics.rs (renamed from crates/atuin-server/src/metrics.rs)0
-rw-r--r--crates/turtle/src/atuin_server/mod.rs (renamed from crates/atuin-server/src/lib.rs)5
-rw-r--r--crates/turtle/src/atuin_server/router.rs (renamed from crates/atuin-server/src/router.rs)6
-rw-r--r--crates/turtle/src/atuin_server/settings.rs (renamed from crates/atuin-server/src/settings.rs)31
-rw-r--r--crates/turtle/src/atuin_server/utils.rs (renamed from crates/atuin-server/src/utils.rs)0
16 files changed, 41 insertions, 120 deletions
diff --git a/crates/atuin-server/src/bin/main.rs b/crates/atuin-server/src/bin/main.rs
deleted file mode 100644
index 960bdf6e..00000000
--- a/crates/atuin-server/src/bin/main.rs
+++ /dev/null
@@ -1,73 +0,0 @@
-#![forbid(unsafe_code)]
-
-use std::net::SocketAddr;
-
-use atuin_server::{Settings, example_config, launch, launch_metrics_server};
-use atuin_server_database::DbType;
-use atuin_server_postgres::Postgres;
-use atuin_server_sqlite::Sqlite;
-
-use clap::Parser;
-use eyre::{Context, Result, eyre};
-use tracing_subscriber::{EnvFilter, fmt, prelude::*};
-
-#[derive(Parser, Debug)]
-#[clap(
- name = "atuin-server",
- about = "Atuin sync server",
- version,
- infer_subcommands = true
-)]
-enum Cmd {
- /// Start the server
- Start {
- /// The host address to bind
- #[clap(long)]
- host: Option<String>,
-
- /// The port to bind
- #[clap(long, short)]
- port: Option<u16>,
- },
-
- /// Print server example configuration
- DefaultConfig,
-}
-
-#[tokio::main]
-async fn main() -> Result<()> {
- let cmd = Cmd::parse();
-
- tracing_subscriber::registry()
- .with(fmt::layer())
- .with(EnvFilter::from_default_env())
- .init();
-
- tracing::trace!(command = ?cmd, "server command");
-
- match cmd {
- Cmd::Start { host, port } => {
- let settings = Settings::new().wrap_err("could not load server settings")?;
- let host = host.as_ref().unwrap_or(&settings.host).clone();
- let port = port.unwrap_or(settings.port);
- let addr = SocketAddr::new(host.parse()?, port);
-
- if settings.metrics.enable {
- tokio::spawn(launch_metrics_server(
- settings.metrics.host.clone(),
- settings.metrics.port,
- ));
- }
-
- match settings.db_settings.db_type() {
- DbType::Postgres => launch::<Postgres>(settings, addr).await,
- DbType::Sqlite => launch::<Sqlite>(settings, addr).await,
- DbType::Unknown => Err(eyre!("db_uri must start with postgres:// or sqlite://")),
- }
- }
- Cmd::DefaultConfig => {
- println!("{}", example_config());
- Ok(())
- }
- }
-}
diff --git a/crates/atuin-server/src/handlers/health.rs b/crates/turtle/src/atuin_server/handlers/health.rs
index aebd1e8f..aebd1e8f 100644
--- a/crates/atuin-server/src/handlers/health.rs
+++ b/crates/turtle/src/atuin_server/handlers/health.rs
diff --git a/crates/atuin-server/src/handlers/history.rs b/crates/turtle/src/atuin_server/handlers/history.rs
index bdafcc60..7f09161b 100644
--- a/crates/atuin-server/src/handlers/history.rs
+++ b/crates/turtle/src/atuin_server/handlers/history.rs
@@ -10,17 +10,17 @@ use time::{Month, UtcOffset};
use tracing::{debug, error, instrument};
use super::{ErrorResponse, ErrorResponseStatus, RespExt};
-use crate::{
+use crate::atuin_server::{
router::{AppState, UserAuth},
utils::client_version_min,
};
-use atuin_server_database::{
+use crate::atuin_server_database::{
Database,
calendar::{TimePeriod, TimePeriodInfo},
models::NewHistory,
};
-use atuin_common::api::*;
+use crate::atuin_common::api::*;
#[instrument(skip_all, fields(user.id = user.id))]
pub async fn count<DB: Database>(
diff --git a/crates/atuin-server/src/handlers/mod.rs b/crates/turtle/src/atuin_server/handlers/mod.rs
index 2176ac5e..7722d03e 100644
--- a/crates/atuin-server/src/handlers/mod.rs
+++ b/crates/turtle/src/atuin_server/handlers/mod.rs
@@ -1,8 +1,8 @@
-use atuin_common::api::{ErrorResponse, IndexResponse};
-use atuin_server_database::Database;
+use crate::atuin_common::api::{ErrorResponse, IndexResponse};
+use crate::atuin_server_database::Database;
use axum::{Json, extract::State, http, response::IntoResponse};
-use crate::router::AppState;
+use crate::atuin_server::router::AppState;
pub mod health;
pub mod history;
diff --git a/crates/atuin-server/src/handlers/record.rs b/crates/turtle/src/atuin_server/handlers/record.rs
index 410c54bd..63325606 100644
--- a/crates/atuin-server/src/handlers/record.rs
+++ b/crates/turtle/src/atuin_server/handlers/record.rs
@@ -3,9 +3,9 @@ use serde_json::json;
use tracing::instrument;
use super::{ErrorResponse, ErrorResponseStatus, RespExt};
-use crate::router::UserAuth;
+use crate::atuin_server::router::UserAuth;
-use atuin_common::record::{EncryptedData, Record};
+use crate::atuin_common::record::{EncryptedData, Record};
#[instrument(skip_all, fields(user.id = user.id))]
pub async fn post(UserAuth(user): UserAuth) -> Result<(), ErrorResponseStatus<'static>> {
diff --git a/crates/atuin-server/src/handlers/status.rs b/crates/turtle/src/atuin_server/handlers/status.rs
index 9c152d51..0cf2ca1e 100644
--- a/crates/atuin-server/src/handlers/status.rs
+++ b/crates/turtle/src/atuin_server/handlers/status.rs
@@ -2,10 +2,10 @@ use axum::{Json, extract::State, http::StatusCode};
use tracing::instrument;
use super::{ErrorResponse, ErrorResponseStatus, RespExt};
-use crate::router::{AppState, UserAuth};
-use atuin_server_database::Database;
+use crate::atuin_server::router::{AppState, UserAuth};
+use crate::atuin_server_database::Database;
-use atuin_common::api::*;
+use crate::atuin_common::api::*;
const VERSION: &str = env!("CARGO_PKG_VERSION");
diff --git a/crates/atuin-server/src/handlers/user.rs b/crates/turtle/src/atuin_server/handlers/user.rs
index dda7a381..01b72202 100644
--- a/crates/atuin-server/src/handlers/user.rs
+++ b/crates/turtle/src/atuin_server/handlers/user.rs
@@ -16,18 +16,18 @@ use metrics::counter;
use rand::rngs::OsRng;
use tracing::{debug, error, info, instrument};
-use atuin_common::tls::ensure_crypto_provider;
+use crate::atuin_common::tls::ensure_crypto_provider;
use super::{ErrorResponse, ErrorResponseStatus, RespExt};
-use crate::router::{AppState, UserAuth};
-use atuin_server_database::{
+use crate::atuin_server::router::{AppState, UserAuth};
+use crate::atuin_server_database::{
Database, DbError,
models::{NewSession, NewUser},
};
use reqwest::header::CONTENT_TYPE;
-use atuin_common::{api::*, utils::crypto_random_string};
+use crate::atuin_common::{api::*, utils::crypto_random_string};
pub fn verify_str(hash: &str, password: &str) -> bool {
let arg2 = Argon2::new(Algorithm::Argon2id, Version::V0x13, Params::default());
diff --git a/crates/atuin-server/src/handlers/v0/me.rs b/crates/turtle/src/atuin_server/handlers/v0/me.rs
index 7960b479..a1e2db46 100644
--- a/crates/atuin-server/src/handlers/v0/me.rs
+++ b/crates/turtle/src/atuin_server/handlers/v0/me.rs
@@ -1,10 +1,10 @@
use axum::Json;
use tracing::instrument;
-use crate::handlers::ErrorResponseStatus;
-use crate::router::UserAuth;
+use crate::atuin_server::handlers::ErrorResponseStatus;
+use crate::atuin_server::router::UserAuth;
-use atuin_common::api::*;
+use crate::atuin_common::api::*;
#[instrument(skip_all, fields(user.id = user.id))]
pub async fn get(
diff --git a/crates/atuin-server/src/handlers/v0/mod.rs b/crates/turtle/src/atuin_server/handlers/v0/mod.rs
index d6f880f2..d6f880f2 100644
--- a/crates/atuin-server/src/handlers/v0/mod.rs
+++ b/crates/turtle/src/atuin_server/handlers/v0/mod.rs
diff --git a/crates/atuin-server/src/handlers/v0/record.rs b/crates/turtle/src/atuin_server/handlers/v0/record.rs
index 5c57910b..9b147a52 100644
--- a/crates/atuin-server/src/handlers/v0/record.rs
+++ b/crates/turtle/src/atuin_server/handlers/v0/record.rs
@@ -3,13 +3,13 @@ use metrics::counter;
use serde::Deserialize;
use tracing::{error, instrument};
-use crate::{
+use crate::atuin_server::{
handlers::{ErrorResponse, ErrorResponseStatus, RespExt},
router::{AppState, UserAuth},
};
-use atuin_server_database::Database;
+use crate::atuin_server_database::Database;
-use atuin_common::record::{EncryptedData, HostId, Record, RecordIdx, RecordStatus};
+use crate::atuin_common::record::{EncryptedData, HostId, Record, RecordIdx, RecordStatus};
#[instrument(skip_all, fields(user.id = user.id))]
pub async fn post<DB: Database>(
diff --git a/crates/atuin-server/src/handlers/v0/store.rs b/crates/turtle/src/atuin_server/handlers/v0/store.rs
index 6ca455d7..cd184546 100644
--- a/crates/atuin-server/src/handlers/v0/store.rs
+++ b/crates/turtle/src/atuin_server/handlers/v0/store.rs
@@ -3,11 +3,11 @@ use metrics::counter;
use serde::Deserialize;
use tracing::{error, instrument};
-use crate::{
+use crate::atuin_server::{
handlers::{ErrorResponse, ErrorResponseStatus, RespExt},
router::{AppState, UserAuth},
};
-use atuin_server_database::Database;
+use crate::atuin_server_database::Database;
#[derive(Deserialize)]
pub struct DeleteParams {}
diff --git a/crates/atuin-server/src/metrics.rs b/crates/turtle/src/atuin_server/metrics.rs
index ebd0dd2d..ebd0dd2d 100644
--- a/crates/atuin-server/src/metrics.rs
+++ b/crates/turtle/src/atuin_server/metrics.rs
diff --git a/crates/atuin-server/src/lib.rs b/crates/turtle/src/atuin_server/mod.rs
index 02e50e1e..bd0f2168 100644
--- a/crates/atuin-server/src/lib.rs
+++ b/crates/turtle/src/atuin_server/mod.rs
@@ -1,9 +1,7 @@
-#![forbid(unsafe_code)]
-
use std::future::Future;
use std::net::SocketAddr;
-use atuin_server_database::Database;
+use crate::atuin_server_database::Database;
use axum::{Router, serve};
use eyre::{Context, Result};
@@ -13,7 +11,6 @@ mod router;
mod utils;
pub use settings::Settings;
-pub use settings::example_config;
pub mod settings;
diff --git a/crates/atuin-server/src/router.rs b/crates/turtle/src/atuin_server/router.rs
index 2d679759..11a16148 100644
--- a/crates/atuin-server/src/router.rs
+++ b/crates/turtle/src/atuin_server/router.rs
@@ -1,4 +1,4 @@
-use atuin_common::api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ErrorResponse};
+use crate::atuin_common::api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ErrorResponse};
use axum::{
Router,
extract::{FromRequestParts, Request},
@@ -12,12 +12,12 @@ use tower::ServiceBuilder;
use tower_http::trace::TraceLayer;
use super::handlers;
-use crate::{
+use crate::atuin_server::{
handlers::{ErrorResponseStatus, RespExt},
metrics,
settings::Settings,
};
-use atuin_server_database::{Database, DbError, models::User};
+use crate::atuin_server_database::{Database, DbError, models::User};
pub struct UserAuth(pub User);
diff --git a/crates/atuin-server/src/settings.rs b/crates/turtle/src/atuin_server/settings.rs
index 3a612be9..f6650af0 100644
--- a/crates/atuin-server/src/settings.rs
+++ b/crates/turtle/src/atuin_server/settings.rs
@@ -1,13 +1,11 @@
use std::{io::prelude::*, path::PathBuf};
-use atuin_server_database::DbSettings;
+use crate::atuin_server_database::DbSettings;
use config::{Config, Environment, File as ConfigFile, FileFormat};
use eyre::{Result, eyre};
use fs_err::{File, create_dir_all};
use serde::{Deserialize, Serialize};
-static EXAMPLE_CONFIG: &str = include_str!("../server.toml");
-
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Metrics {
#[serde(alias = "enabled")]
@@ -60,7 +58,7 @@ impl Settings {
PathBuf::from(p)
} else {
let mut config_file = PathBuf::new();
- let config_dir = atuin_common::utils::config_dir();
+ let config_dir = crate::atuin_common::utils::config_dir();
config_file.push(config_dir);
config_file
};
@@ -87,27 +85,26 @@ impl Settings {
.separator("__"),
);
- config_builder = if config_file.exists() {
- config_builder.add_source(ConfigFile::new(
- config_file.to_str().unwrap(),
- FileFormat::Toml,
- ))
+ let config = if config_file.exists() {
+ config_builder
+ .add_source(ConfigFile::new(
+ config_file.to_str().unwrap(),
+ FileFormat::Toml,
+ ))
+ .build()?
} else {
create_dir_all(config_file.parent().unwrap())?;
let mut file = File::create(config_file)?;
- file.write_all(EXAMPLE_CONFIG.as_bytes())?;
- config_builder
- };
+ let config = config_builder.build()?;
+ // TODO(@bpeetz): I'm quiet unsure, if this will work <2026-06-10>
+ file.write_all(config.cache.to_string().as_bytes())?;
- let config = config_builder.build()?;
+ config
+ };
config
.try_deserialize()
.map_err(|e| eyre!("failed to deserialize: {}", e))
}
}
-
-pub fn example_config() -> &'static str {
- EXAMPLE_CONFIG
-}
diff --git a/crates/atuin-server/src/utils.rs b/crates/turtle/src/atuin_server/utils.rs
index 12e9ac1b..12e9ac1b 100644
--- a/crates/atuin-server/src/utils.rs
+++ b/crates/turtle/src/atuin_server/utils.rs