aboutsummaryrefslogtreecommitdiffstats
path: root/crates/turtle/src/atuin_server
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-06-11 14:20:49 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-06-11 14:20:49 +0200
commit199563550dd41c3dfb703bd3747604a8a03cdbc5 (patch)
tree30cfa3e5539f782b7571091c742ee1c219e138fb /crates/turtle/src/atuin_server
parentchore: Restore db migrations (diff)
downloadatuin-199563550dd41c3dfb703bd3747604a8a03cdbc5.zip
chore: Remove all `pub`s
They will not be marked by rustc/cargo as unused, and as atuin doesn't expose an API all of them _should_ be `pub(crate)`
Diffstat (limited to 'crates/turtle/src/atuin_server')
-rw-r--r--crates/turtle/src/atuin_server/handlers/health.rs6
-rw-r--r--crates/turtle/src/atuin_server/handlers/history.rs18
-rw-r--r--crates/turtle/src/atuin_server/handlers/mod.rs22
-rw-r--r--crates/turtle/src/atuin_server/handlers/record.rs6
-rw-r--r--crates/turtle/src/atuin_server/handlers/status.rs2
-rw-r--r--crates/turtle/src/atuin_server/handlers/user.rs12
-rw-r--r--crates/turtle/src/atuin_server/handlers/v0/me.rs2
-rw-r--r--crates/turtle/src/atuin_server/handlers/v0/record.rs8
-rw-r--r--crates/turtle/src/atuin_server/handlers/v0/store.rs4
-rw-r--r--crates/turtle/src/atuin_server/metrics.rs4
-rw-r--r--crates/turtle/src/atuin_server/mod.rs10
-rw-r--r--crates/turtle/src/atuin_server/router.rs10
-rw-r--r--crates/turtle/src/atuin_server/settings.rs38
-rw-r--r--crates/turtle/src/atuin_server/utils.rs2
14 files changed, 72 insertions, 72 deletions
diff --git a/crates/turtle/src/atuin_server/handlers/health.rs b/crates/turtle/src/atuin_server/handlers/health.rs
index aebd1e8f..d39f7aa5 100644
--- a/crates/turtle/src/atuin_server/handlers/health.rs
+++ b/crates/turtle/src/atuin_server/handlers/health.rs
@@ -3,11 +3,11 @@ use axum::{Json, http, response::IntoResponse};
use serde::Serialize;
#[derive(Serialize)]
-pub struct HealthResponse {
- pub status: &'static str,
+pub(crate) struct HealthResponse {
+ pub(crate) status: &'static str,
}
-pub async fn health_check() -> impl IntoResponse {
+pub(crate) async fn health_check() -> impl IntoResponse {
(
http::StatusCode::OK,
Json(HealthResponse { status: "healthy" }),
diff --git a/crates/turtle/src/atuin_server/handlers/history.rs b/crates/turtle/src/atuin_server/handlers/history.rs
index 7f09161b..e5057bcb 100644
--- a/crates/turtle/src/atuin_server/handlers/history.rs
+++ b/crates/turtle/src/atuin_server/handlers/history.rs
@@ -23,7 +23,7 @@ use crate::atuin_server_database::{
use crate::atuin_common::api::*;
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn count<DB: Database>(
+pub(crate) async fn count<DB: Database>(
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
) -> Result<Json<CountResponse>, ErrorResponseStatus<'static>> {
@@ -43,7 +43,7 @@ pub async fn count<DB: Database>(
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn list<DB: Database>(
+pub(crate) async fn list<DB: Database>(
req: Query<SyncHistoryRequest>,
UserAuth(user): UserAuth,
headers: HeaderMap,
@@ -101,7 +101,7 @@ pub async fn list<DB: Database>(
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn delete<DB: Database>(
+pub(crate) async fn delete<DB: Database>(
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
Json(req): Json<DeleteHistoryRequest>,
@@ -123,7 +123,7 @@ pub async fn delete<DB: Database>(
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn add<DB: Database>(
+pub(crate) async fn add<DB: Database>(
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
Json(req): Json<Vec<AddHistoryRequest>>,
@@ -174,7 +174,7 @@ pub async fn add<DB: Database>(
}
#[derive(serde::Deserialize, Debug)]
-pub struct CalendarQuery {
+pub(crate) struct CalendarQuery {
#[serde(default = "serde_calendar::zero")]
year: i32,
#[serde(default = "serde_calendar::one")]
@@ -187,21 +187,21 @@ pub struct CalendarQuery {
mod serde_calendar {
use time::UtcOffset;
- pub fn zero() -> i32 {
+ pub(crate) fn zero() -> i32 {
0
}
- pub fn one() -> u8 {
+ pub(crate) fn one() -> u8 {
1
}
- pub fn utc() -> UtcOffset {
+ pub(crate) fn utc() -> UtcOffset {
UtcOffset::UTC
}
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn calendar<DB: Database>(
+pub(crate) async fn calendar<DB: Database>(
Path(focus): Path<String>,
Query(params): Query<CalendarQuery>,
UserAuth(user): UserAuth,
diff --git a/crates/turtle/src/atuin_server/handlers/mod.rs b/crates/turtle/src/atuin_server/handlers/mod.rs
index 7722d03e..322324c4 100644
--- a/crates/turtle/src/atuin_server/handlers/mod.rs
+++ b/crates/turtle/src/atuin_server/handlers/mod.rs
@@ -4,16 +4,16 @@ use axum::{Json, extract::State, http, response::IntoResponse};
use crate::atuin_server::router::AppState;
-pub mod health;
-pub mod history;
-pub mod record;
-pub mod status;
-pub mod user;
-pub mod v0;
+pub(crate) mod health;
+pub(crate) mod history;
+pub(crate) mod record;
+pub(crate) mod status;
+pub(crate) mod user;
+pub(crate) mod v0;
const VERSION: &str = env!("CARGO_PKG_VERSION");
-pub async fn index<DB: Database>(state: State<AppState<DB>>) -> Json<IndexResponse> {
+pub(crate) async fn index<DB: Database>(state: State<AppState<DB>>) -> Json<IndexResponse> {
let homage = r#""Through the fathomless deeps of space swims the star turtle Great A'Tuin, bearing on its back the four giant elephants who carry on their shoulders the mass of the Discworld." -- Sir Terry Pratchett"#;
let version = state
@@ -34,12 +34,12 @@ impl IntoResponse for ErrorResponseStatus<'_> {
}
}
-pub struct ErrorResponseStatus<'a> {
- pub error: ErrorResponse<'a>,
- pub status: http::StatusCode,
+pub(crate) struct ErrorResponseStatus<'a> {
+ pub(crate) error: ErrorResponse<'a>,
+ pub(crate) status: http::StatusCode,
}
-pub trait RespExt<'a> {
+pub(crate) trait RespExt<'a> {
fn with_status(self, status: http::StatusCode) -> ErrorResponseStatus<'a>;
fn reply(reason: &'a str) -> Self;
}
diff --git a/crates/turtle/src/atuin_server/handlers/record.rs b/crates/turtle/src/atuin_server/handlers/record.rs
index 63325606..39060423 100644
--- a/crates/turtle/src/atuin_server/handlers/record.rs
+++ b/crates/turtle/src/atuin_server/handlers/record.rs
@@ -8,7 +8,7 @@ use crate::atuin_server::router::UserAuth;
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>> {
+pub(crate) async fn post(UserAuth(user): UserAuth) -> Result<(), ErrorResponseStatus<'static>> {
// anyone who has actually used the old record store (a very small number) will see this error
// upon trying to sync.
// 1. The status endpoint will say that the server has nothing
@@ -24,7 +24,7 @@ pub async fn post(UserAuth(user): UserAuth) -> Result<(), ErrorResponseStatus<'s
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn index(UserAuth(user): UserAuth) -> axum::response::Response {
+pub(crate) async fn index(UserAuth(user): UserAuth) -> axum::response::Response {
let ret = json!({
"hosts": {}
});
@@ -33,7 +33,7 @@ pub async fn index(UserAuth(user): UserAuth) -> axum::response::Response {
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn next(
+pub(crate) async fn next(
UserAuth(user): UserAuth,
) -> Result<Json<Vec<Record<EncryptedData>>>, ErrorResponseStatus<'static>> {
let records = Vec::new();
diff --git a/crates/turtle/src/atuin_server/handlers/status.rs b/crates/turtle/src/atuin_server/handlers/status.rs
index 0cf2ca1e..59be1e5c 100644
--- a/crates/turtle/src/atuin_server/handlers/status.rs
+++ b/crates/turtle/src/atuin_server/handlers/status.rs
@@ -10,7 +10,7 @@ use crate::atuin_common::api::*;
const VERSION: &str = env!("CARGO_PKG_VERSION");
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn status<DB: Database>(
+pub(crate) async fn status<DB: Database>(
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
) -> Result<Json<StatusResponse>, ErrorResponseStatus<'static>> {
diff --git a/crates/turtle/src/atuin_server/handlers/user.rs b/crates/turtle/src/atuin_server/handlers/user.rs
index 01b72202..7708d43e 100644
--- a/crates/turtle/src/atuin_server/handlers/user.rs
+++ b/crates/turtle/src/atuin_server/handlers/user.rs
@@ -29,7 +29,7 @@ use reqwest::header::CONTENT_TYPE;
use crate::atuin_common::{api::*, utils::crypto_random_string};
-pub fn verify_str(hash: &str, password: &str) -> bool {
+pub(crate) fn verify_str(hash: &str, password: &str) -> bool {
let arg2 = Argon2::new(Algorithm::Argon2id, Version::V0x13, Params::default());
let Ok(hash) = PasswordHash::new(hash) else {
return false;
@@ -63,7 +63,7 @@ async fn send_register_hook(url: &str, username: String, registered: String) {
}
#[instrument(skip_all, fields(user.username = username.as_str()))]
-pub async fn get<DB: Database>(
+pub(crate) async fn get<DB: Database>(
Path(username): Path<String>,
state: State<AppState<DB>>,
) -> Result<Json<UserResponse>, ErrorResponseStatus<'static>> {
@@ -87,7 +87,7 @@ pub async fn get<DB: Database>(
}
#[instrument(skip_all)]
-pub async fn register<DB: Database>(
+pub(crate) async fn register<DB: Database>(
state: State<AppState<DB>>,
Json(register): Json<RegisterRequest>,
) -> Result<Json<RegisterResponse>, ErrorResponseStatus<'static>> {
@@ -163,7 +163,7 @@ pub async fn register<DB: Database>(
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn delete<DB: Database>(
+pub(crate) async fn delete<DB: Database>(
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
) -> Result<Json<DeleteUserResponse>, ErrorResponseStatus<'static>> {
@@ -183,7 +183,7 @@ pub async fn delete<DB: Database>(
}
#[instrument(skip_all, fields(user.id = user.id, change_password))]
-pub async fn change_password<DB: Database>(
+pub(crate) async fn change_password<DB: Database>(
UserAuth(mut user): UserAuth,
state: State<AppState<DB>>,
Json(change_password): Json<ChangePasswordRequest>,
@@ -213,7 +213,7 @@ pub async fn change_password<DB: Database>(
}
#[instrument(skip_all, fields(user.username = login.username.as_str()))]
-pub async fn login<DB: Database>(
+pub(crate) async fn login<DB: Database>(
state: State<AppState<DB>>,
login: Json<LoginRequest>,
) -> Result<Json<LoginResponse>, ErrorResponseStatus<'static>> {
diff --git a/crates/turtle/src/atuin_server/handlers/v0/me.rs b/crates/turtle/src/atuin_server/handlers/v0/me.rs
index a1e2db46..1f5f5016 100644
--- a/crates/turtle/src/atuin_server/handlers/v0/me.rs
+++ b/crates/turtle/src/atuin_server/handlers/v0/me.rs
@@ -7,7 +7,7 @@ use crate::atuin_server::router::UserAuth;
use crate::atuin_common::api::*;
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn get(
+pub(crate) async fn get(
UserAuth(user): UserAuth,
) -> Result<Json<MeResponse>, ErrorResponseStatus<'static>> {
Ok(Json(MeResponse {
diff --git a/crates/turtle/src/atuin_server/handlers/v0/record.rs b/crates/turtle/src/atuin_server/handlers/v0/record.rs
index 9b147a52..2cc09118 100644
--- a/crates/turtle/src/atuin_server/handlers/v0/record.rs
+++ b/crates/turtle/src/atuin_server/handlers/v0/record.rs
@@ -12,7 +12,7 @@ use crate::atuin_server_database::Database;
use crate::atuin_common::record::{EncryptedData, HostId, Record, RecordIdx, RecordStatus};
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn post<DB: Database>(
+pub(crate) async fn post<DB: Database>(
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
Json(records): Json<Vec<Record<EncryptedData>>>,
@@ -51,7 +51,7 @@ pub async fn post<DB: Database>(
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn index<DB: Database>(
+pub(crate) async fn index<DB: Database>(
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
) -> Result<Json<RecordStatus>, ErrorResponseStatus<'static>> {
@@ -76,7 +76,7 @@ pub async fn index<DB: Database>(
}
#[derive(Deserialize)]
-pub struct NextParams {
+pub(crate) struct NextParams {
host: HostId,
tag: String,
start: Option<RecordIdx>,
@@ -84,7 +84,7 @@ pub struct NextParams {
}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn next<DB: Database>(
+pub(crate) async fn next<DB: Database>(
params: Query<NextParams>,
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
diff --git a/crates/turtle/src/atuin_server/handlers/v0/store.rs b/crates/turtle/src/atuin_server/handlers/v0/store.rs
index cd184546..8269d6b3 100644
--- a/crates/turtle/src/atuin_server/handlers/v0/store.rs
+++ b/crates/turtle/src/atuin_server/handlers/v0/store.rs
@@ -10,10 +10,10 @@ use crate::atuin_server::{
use crate::atuin_server_database::Database;
#[derive(Deserialize)]
-pub struct DeleteParams {}
+pub(crate) struct DeleteParams {}
#[instrument(skip_all, fields(user.id = user.id))]
-pub async fn delete<DB: Database>(
+pub(crate) async fn delete<DB: Database>(
_params: Query<DeleteParams>,
UserAuth(user): UserAuth,
state: State<AppState<DB>>,
diff --git a/crates/turtle/src/atuin_server/metrics.rs b/crates/turtle/src/atuin_server/metrics.rs
index ebd0dd2d..7a9dc571 100644
--- a/crates/turtle/src/atuin_server/metrics.rs
+++ b/crates/turtle/src/atuin_server/metrics.rs
@@ -7,7 +7,7 @@ use axum::{
};
use metrics_exporter_prometheus::{Matcher, PrometheusBuilder, PrometheusHandle};
-pub fn setup_metrics_recorder() -> PrometheusHandle {
+pub(crate) fn setup_metrics_recorder() -> PrometheusHandle {
const EXPONENTIAL_SECONDS: &[f64] = &[
0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0,
];
@@ -25,7 +25,7 @@ pub fn setup_metrics_recorder() -> PrometheusHandle {
/// Middleware to record some common HTTP metrics
/// Generic over B to allow for arbitrary body types (eg Vec<u8>, Streams, a deserialized thing, etc)
/// Someday tower-http might provide a metrics middleware: https://github.com/tower-rs/tower-http/issues/57
-pub async fn track_metrics(req: Request, next: Next) -> impl IntoResponse {
+pub(crate) async fn track_metrics(req: Request, next: Next) -> impl IntoResponse {
let start = Instant::now();
let path = match req.extensions().get::<MatchedPath>() {
diff --git a/crates/turtle/src/atuin_server/mod.rs b/crates/turtle/src/atuin_server/mod.rs
index bd0f2168..ad480e1d 100644
--- a/crates/turtle/src/atuin_server/mod.rs
+++ b/crates/turtle/src/atuin_server/mod.rs
@@ -10,9 +10,9 @@ mod metrics;
mod router;
mod utils;
-pub use settings::Settings;
+pub(crate) use settings::Settings;
-pub mod settings;
+pub(crate) mod settings;
use tokio::net::TcpListener;
use tokio::signal;
@@ -31,7 +31,7 @@ async fn shutdown_signal() {
eprintln!("Shutting down gracefully...");
}
-pub async fn launch<Db: Database>(settings: Settings, addr: SocketAddr) -> Result<()> {
+pub(crate) async fn launch<Db: Database>(settings: Settings, addr: SocketAddr) -> Result<()> {
launch_with_tcp_listener::<Db>(
settings,
TcpListener::bind(addr)
@@ -42,7 +42,7 @@ pub async fn launch<Db: Database>(settings: Settings, addr: SocketAddr) -> Resul
.await
}
-pub async fn launch_with_tcp_listener<Db: Database>(
+pub(crate) async fn launch_with_tcp_listener<Db: Database>(
settings: Settings,
listener: TcpListener,
shutdown: impl Future<Output = ()> + Send + 'static,
@@ -58,7 +58,7 @@ pub async fn launch_with_tcp_listener<Db: Database>(
// The separate listener means it's much easier to ensure metrics are not accidentally exposed to
// the public.
-pub async fn launch_metrics_server(host: String, port: u16) -> Result<()> {
+pub(crate) async fn launch_metrics_server(host: String, port: u16) -> Result<()> {
let listener = TcpListener::bind((host, port))
.await
.context("failed to bind metrics tcp")?;
diff --git a/crates/turtle/src/atuin_server/router.rs b/crates/turtle/src/atuin_server/router.rs
index 11a16148..ed3d1e55 100644
--- a/crates/turtle/src/atuin_server/router.rs
+++ b/crates/turtle/src/atuin_server/router.rs
@@ -19,7 +19,7 @@ use crate::atuin_server::{
};
use crate::atuin_server_database::{Database, DbError, models::User};
-pub struct UserAuth(pub User);
+pub(crate) struct UserAuth(pub(crate) User);
impl<DB: Send + Sync> FromRequestParts<AppState<DB>> for UserAuth
where
@@ -101,12 +101,12 @@ async fn semver(request: Request, next: Next) -> Response {
}
#[derive(Clone)]
-pub struct AppState<DB: Database> {
- pub database: DB,
- pub settings: Settings,
+pub(crate) struct AppState<DB: Database> {
+ pub(crate) database: DB,
+ pub(crate) settings: Settings,
}
-pub fn router<DB: Database>(database: DB, settings: Settings) -> Router {
+pub(crate) fn router<DB: Database>(database: DB, settings: Settings) -> Router {
let mut routes = Router::new()
.route("/", get(handlers::index))
.route("/healthz", get(handlers::health::health_check));
diff --git a/crates/turtle/src/atuin_server/settings.rs b/crates/turtle/src/atuin_server/settings.rs
index 2bce0dac..1d0ac2d0 100644
--- a/crates/turtle/src/atuin_server/settings.rs
+++ b/crates/turtle/src/atuin_server/settings.rs
@@ -7,11 +7,11 @@ use fs_err::{File, create_dir_all};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)]
-pub struct Metrics {
+pub(crate) struct Metrics {
#[serde(alias = "enabled")]
- pub enable: bool,
- pub host: String,
- pub port: u16,
+ pub(crate) enable: bool,
+ pub(crate) host: String,
+ pub(crate) port: u16,
}
impl Default for Metrics {
@@ -25,35 +25,35 @@ impl Default for Metrics {
}
#[derive(Clone, Debug, Deserialize, Serialize)]
-pub struct Settings {
- pub host: String,
- pub port: u16,
- pub path: String,
- pub open_registration: bool,
- pub max_history_length: usize,
- pub max_record_size: usize,
- pub page_size: i64,
- pub register_webhook_url: Option<String>,
- pub register_webhook_username: String,
- pub metrics: Metrics,
+pub(crate) struct Settings {
+ pub(crate) host: String,
+ pub(crate) port: u16,
+ pub(crate) path: String,
+ pub(crate) open_registration: bool,
+ pub(crate) max_history_length: usize,
+ pub(crate) max_record_size: usize,
+ pub(crate) page_size: i64,
+ pub(crate) register_webhook_url: Option<String>,
+ pub(crate) register_webhook_username: String,
+ pub(crate) metrics: Metrics,
/// Enable legacy sync v1 routes (history-based sync)
/// Set to false to use only the newer record-based sync
- pub sync_v1_enabled: bool,
+ pub(crate) sync_v1_enabled: bool,
/// Advertise a version that is not what we are _actually_ running
/// Many clients compare their version with api.atuin.sh, and if they differ, notify the user
/// that an update is available.
/// Now that we take beta releases, we should be able to advertise a different version to avoid
/// notifying users when the server runs something that is not a stable release.
- pub fake_version: Option<String>,
+ pub(crate) fake_version: Option<String>,
#[serde(flatten)]
- pub db_settings: DbSettings,
+ pub(crate) db_settings: DbSettings,
}
impl Settings {
- pub fn new() -> Result<Self> {
+ pub(crate) fn new() -> Result<Self> {
let mut config_file = if let Ok(p) = std::env::var("ATUIN_CONFIG_DIR") {
PathBuf::from(p)
} else {
diff --git a/crates/turtle/src/atuin_server/utils.rs b/crates/turtle/src/atuin_server/utils.rs
index 12e9ac1b..cceef3ed 100644
--- a/crates/turtle/src/atuin_server/utils.rs
+++ b/crates/turtle/src/atuin_server/utils.rs
@@ -1,7 +1,7 @@
use eyre::Result;
use semver::{Version, VersionReq};
-pub fn client_version_min(user_agent: &str, req: &str) -> Result<bool> {
+pub(crate) fn client_version_min(user_agent: &str, req: &str) -> Result<bool> {
if user_agent.is_empty() {
return Ok(false);
}