diff --git a/backend/sync_server/Cargo.toml b/backend/sync_server/Cargo.toml deleted file mode 100644 index 7849766d..00000000 --- a/backend/sync_server/Cargo.toml +++ /dev/null @@ -1,40 +0,0 @@ -[package] -name = "sync_server" -version.workspace = true -edition.workspace = true -authors.workspace = true -license.workspace = true -repository.workspace = true - -[dependencies] -serde = { workspace = true } -thiserror = { workspace = true } - -tokio = { version = "1.44.2", features = ["full"]} -uuid = { version = "1.16.0", features = ["v4", "serde"] } -log = { version = "0.4.27" } -anyhow = { version = "1.0.98", features = ["backtrace"] } -axum = { version = "0.7.4", features = ["ws", "macros", "tracing", "multipart"]} -axum-extra = { version = "0.9.6", features = ["typed-header"] } -axum_typed_multipart = "0.11.0" -tower-http = { version = "0.6.1", features = ["cors", "trace", "limit", "timeout"] } -tracing = "0.1.41" -tracing-subscriber = { version = "0.3.19", features = ["fmt", "env-filter"]} -sqlx = { version = "0.8.6", features = ["sqlite", "runtime-tokio", "uuid", "chrono"] } -chrono = { version = "0.4.41", features = ["serde"] } -rand = "0.9.0" -sanitize-filename = "0.6.0" -regex = "1.11.1" -clap = { version = "4.5.38", features = ["derive"] } -futures = "0.3.31" -serde_yaml = "0.9.34" -serde_json = "1.0.140" -clap-verbosity-flag = "3.0.3" -bimap = "0.6.3" -ts-rs = { version = "10.1", features = ["uuid-impl", "chrono-impl"] } -serde_with = "3.12.0" -base64 = "0.22.1" -reconcile-text = "0.4.10" - -[lints] -workspace = true diff --git a/backend/.dockerignore b/sync-server/.dockerignore similarity index 100% rename from backend/.dockerignore rename to sync-server/.dockerignore diff --git a/backend/.env b/sync-server/.env similarity index 100% rename from backend/.env rename to sync-server/.env diff --git a/backend/Cargo.lock b/sync-server/Cargo.lock similarity index 100% rename from backend/Cargo.lock rename to sync-server/Cargo.lock diff --git a/backend/Cargo.toml b/sync-server/Cargo.toml similarity index 61% rename from backend/Cargo.toml rename to sync-server/Cargo.toml index db849393..fa6b337a 100644 --- a/backend/Cargo.toml +++ b/sync-server/Cargo.toml @@ -1,10 +1,5 @@ -[workspace] -resolver = "2" -members = [ - "sync_server", -] - -[workspace.package] +[package] +name = "sync_server" rust-version = "1.83" authors = ["Andras Schmelczer "] edition = "2024" @@ -12,9 +7,34 @@ license = "MIT" repository = "https://github.com/schmelczer/vault-link" version = "0.4.0" -[workspace.dependencies] +[dependencies] serde = { version = "1.0.219", default-features = false, features = ["derive"] } thiserror = { version = "2.0.12", default-features = false } +tokio = { version = "1.44.2", features = ["full"]} +uuid = { version = "1.16.0", features = ["v4", "serde"] } +log = { version = "0.4.27" } +anyhow = { version = "1.0.98", features = ["backtrace"] } +axum = { version = "0.7.4", features = ["ws", "macros", "tracing", "multipart"]} +axum-extra = { version = "0.9.6", features = ["typed-header"] } +axum_typed_multipart = "0.11.0" +tower-http = { version = "0.6.1", features = ["cors", "trace", "limit", "timeout"] } +tracing = "0.1.41" +tracing-subscriber = { version = "0.3.19", features = ["fmt", "env-filter"]} +sqlx = { version = "0.8.6", features = ["sqlite", "runtime-tokio", "uuid", "chrono"] } +chrono = { version = "0.4.41", features = ["serde"] } +rand = "0.9.0" +sanitize-filename = "0.6.0" +regex = "1.11.1" +clap = { version = "4.5.38", features = ["derive"] } +futures = "0.3.31" +serde_yaml = "0.9.34" +serde_json = "1.0.140" +clap-verbosity-flag = "3.0.3" +bimap = "0.6.3" +ts-rs = { version = "10.1", features = ["uuid-impl", "chrono-impl"] } +serde_with = "3.12.0" +base64 = "0.22.1" +reconcile-text = "0.4.10" [profile.release] codegen-units = 1 @@ -22,12 +42,12 @@ lto = true opt-level = 3 strip="debuginfo" # Keep some info for better panics -[workspace.lints.rust] +[lints.rust] unsafe_code = "forbid" rust_2018_idioms = { level = "warn", priority = -1 } missing_debug_implementations = "warn" -[workspace.lints.clippy] +[lints.clippy] await_holding_lock = "warn" dbg_macro = "warn" empty_enum = "warn" diff --git a/sync-server/Dockerfile b/sync-server/Dockerfile new file mode 100644 index 00000000..d9fa92d1 --- /dev/null +++ b/sync-server/Dockerfile @@ -0,0 +1,33 @@ +FROM rust:1.87 AS builder + +WORKDIR /usr/src/backend + +RUN apt update && apt install -y musl-tools +RUN cargo install sqlx-cli + +COPY . . + +RUN sqlx database create --database-url sqlite://db.sqlite3 +RUN sqlx migrate run --source sync_server/src/app_state/database/migrations --database-url sqlite://db.sqlite3 + +RUN cargo build --package sync_server --release --target x86_64-unknown-linux-musl + +# Runtime image +FROM alpine:3.22.0 + +LABEL org.opencontainers.image.authors="andras@schmelczer.dev" + +RUN apk add --no-cache curl + +COPY --from=builder /usr/src/backend/target/x86_64-unknown-linux-musl/release/sync_server /app/sync_server + +VOLUME /data +EXPOSE 3000/tcp +WORKDIR /data + +HEALTHCHECK \ + --interval=30s \ + --timeout=5s \ + CMD curl -f http://localhost:3000/vaults/fake/ping || exit 1 + +ENTRYPOINT ["/app/sync_server"] diff --git a/backend/sync_server/README.md b/sync-server/README.md similarity index 100% rename from backend/sync_server/README.md rename to sync-server/README.md diff --git a/backend/sync_server/build.rs b/sync-server/build.rs similarity index 100% rename from backend/sync_server/build.rs rename to sync-server/build.rs diff --git a/sync-server/config-e2e.yml b/sync-server/config-e2e.yml new file mode 100644 index 00000000..5f2346d6 --- /dev/null +++ b/sync-server/config-e2e.yml @@ -0,0 +1,26 @@ +database: + databases_directory_path: databases + max_connections_per_vault: 12 + cursor_timeout_seconds: 60 +server: + host: 0.0.0.0 + port: 3000 + max_body_size_mb: 512 + max_clients_per_vault: 256 + response_timeout_seconds: 60 +users: + user_configs: + - name: admin + token: test-token-change-me + vault_access: + type: allow_access_to_all + - name: other-admin + token: test-token-change-me2 + vault_access: + type: allow_access_to_all + - name: test + token: other-test-token + vault_access: + type: allow_list + allowed: + - default diff --git a/sync-server/rust-toolchain.toml b/sync-server/rust-toolchain.toml new file mode 100644 index 00000000..0d5c6104 --- /dev/null +++ b/sync-server/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "nightly-2025-06-06" +targets = [ "x86_64-unknown-linux-gnu", "x86_64-unknown-linux-musl" ] +profile = "default" diff --git a/sync-server/rustfmt.toml b/sync-server/rustfmt.toml new file mode 100644 index 00000000..6640f544 --- /dev/null +++ b/sync-server/rustfmt.toml @@ -0,0 +1,8 @@ +imports_granularity = "crate" +condense_wildcard_suffixes = true +fn_single_line = true +format_strings = true +reorder_impl_items = true +group_imports = "StdExternalCrate" +use_field_init_shorthand = true +wrap_comments=true diff --git a/backend/sync_server/src/app_state.rs b/sync-server/src/app_state.rs similarity index 100% rename from backend/sync_server/src/app_state.rs rename to sync-server/src/app_state.rs diff --git a/backend/sync_server/src/app_state/cursors.rs b/sync-server/src/app_state/cursors.rs similarity index 100% rename from backend/sync_server/src/app_state/cursors.rs rename to sync-server/src/app_state/cursors.rs diff --git a/backend/sync_server/src/app_state/database.rs b/sync-server/src/app_state/database.rs similarity index 100% rename from backend/sync_server/src/app_state/database.rs rename to sync-server/src/app_state/database.rs diff --git a/backend/sync_server/src/app_state/database/migrations/20241207143519_bootstrap.sql b/sync-server/src/app_state/database/migrations/20241207143519_bootstrap.sql similarity index 100% rename from backend/sync_server/src/app_state/database/migrations/20241207143519_bootstrap.sql rename to sync-server/src/app_state/database/migrations/20241207143519_bootstrap.sql diff --git a/backend/sync_server/src/app_state/database/migrations/20250522192949_add_provenance_columns.sql b/sync-server/src/app_state/database/migrations/20250522192949_add_provenance_columns.sql similarity index 100% rename from backend/sync_server/src/app_state/database/migrations/20250522192949_add_provenance_columns.sql rename to sync-server/src/app_state/database/migrations/20250522192949_add_provenance_columns.sql diff --git a/backend/sync_server/src/app_state/database/models.rs b/sync-server/src/app_state/database/models.rs similarity index 100% rename from backend/sync_server/src/app_state/database/models.rs rename to sync-server/src/app_state/database/models.rs diff --git a/backend/sync_server/src/app_state/websocket.rs b/sync-server/src/app_state/websocket.rs similarity index 100% rename from backend/sync_server/src/app_state/websocket.rs rename to sync-server/src/app_state/websocket.rs diff --git a/backend/sync_server/src/app_state/websocket/broadcasts.rs b/sync-server/src/app_state/websocket/broadcasts.rs similarity index 100% rename from backend/sync_server/src/app_state/websocket/broadcasts.rs rename to sync-server/src/app_state/websocket/broadcasts.rs diff --git a/backend/sync_server/src/app_state/websocket/models.rs b/sync-server/src/app_state/websocket/models.rs similarity index 100% rename from backend/sync_server/src/app_state/websocket/models.rs rename to sync-server/src/app_state/websocket/models.rs diff --git a/backend/sync_server/src/app_state/websocket/utils.rs b/sync-server/src/app_state/websocket/utils.rs similarity index 100% rename from backend/sync_server/src/app_state/websocket/utils.rs rename to sync-server/src/app_state/websocket/utils.rs diff --git a/backend/sync_server/src/cli.rs b/sync-server/src/cli.rs similarity index 100% rename from backend/sync_server/src/cli.rs rename to sync-server/src/cli.rs diff --git a/backend/sync_server/src/cli/args.rs b/sync-server/src/cli/args.rs similarity index 100% rename from backend/sync_server/src/cli/args.rs rename to sync-server/src/cli/args.rs diff --git a/backend/sync_server/src/cli/color_when.rs b/sync-server/src/cli/color_when.rs similarity index 100% rename from backend/sync_server/src/cli/color_when.rs rename to sync-server/src/cli/color_when.rs diff --git a/backend/sync_server/src/config.rs b/sync-server/src/config.rs similarity index 100% rename from backend/sync_server/src/config.rs rename to sync-server/src/config.rs diff --git a/backend/sync_server/src/config/database_config.rs b/sync-server/src/config/database_config.rs similarity index 100% rename from backend/sync_server/src/config/database_config.rs rename to sync-server/src/config/database_config.rs diff --git a/backend/sync_server/src/config/server_config.rs b/sync-server/src/config/server_config.rs similarity index 100% rename from backend/sync_server/src/config/server_config.rs rename to sync-server/src/config/server_config.rs diff --git a/backend/sync_server/src/config/user_config.rs b/sync-server/src/config/user_config.rs similarity index 100% rename from backend/sync_server/src/config/user_config.rs rename to sync-server/src/config/user_config.rs diff --git a/backend/sync_server/src/consts.rs b/sync-server/src/consts.rs similarity index 100% rename from backend/sync_server/src/consts.rs rename to sync-server/src/consts.rs diff --git a/backend/sync_server/src/errors.rs b/sync-server/src/errors.rs similarity index 100% rename from backend/sync_server/src/errors.rs rename to sync-server/src/errors.rs diff --git a/backend/sync_server/src/main.rs b/sync-server/src/main.rs similarity index 100% rename from backend/sync_server/src/main.rs rename to sync-server/src/main.rs diff --git a/backend/sync_server/src/server.rs b/sync-server/src/server.rs similarity index 100% rename from backend/sync_server/src/server.rs rename to sync-server/src/server.rs diff --git a/backend/sync_server/src/server/assets/index.html b/sync-server/src/server/assets/index.html similarity index 100% rename from backend/sync_server/src/server/assets/index.html rename to sync-server/src/server/assets/index.html diff --git a/backend/sync_server/src/server/auth.rs b/sync-server/src/server/auth.rs similarity index 100% rename from backend/sync_server/src/server/auth.rs rename to sync-server/src/server/auth.rs diff --git a/backend/sync_server/src/server/create_document.rs b/sync-server/src/server/create_document.rs similarity index 100% rename from backend/sync_server/src/server/create_document.rs rename to sync-server/src/server/create_document.rs diff --git a/backend/sync_server/src/server/delete_document.rs b/sync-server/src/server/delete_document.rs similarity index 100% rename from backend/sync_server/src/server/delete_document.rs rename to sync-server/src/server/delete_document.rs diff --git a/backend/sync_server/src/server/device_id_header.rs b/sync-server/src/server/device_id_header.rs similarity index 100% rename from backend/sync_server/src/server/device_id_header.rs rename to sync-server/src/server/device_id_header.rs diff --git a/backend/sync_server/src/server/fetch_document_version.rs b/sync-server/src/server/fetch_document_version.rs similarity index 100% rename from backend/sync_server/src/server/fetch_document_version.rs rename to sync-server/src/server/fetch_document_version.rs diff --git a/backend/sync_server/src/server/fetch_document_version_content.rs b/sync-server/src/server/fetch_document_version_content.rs similarity index 100% rename from backend/sync_server/src/server/fetch_document_version_content.rs rename to sync-server/src/server/fetch_document_version_content.rs diff --git a/backend/sync_server/src/server/fetch_latest_document_version.rs b/sync-server/src/server/fetch_latest_document_version.rs similarity index 100% rename from backend/sync_server/src/server/fetch_latest_document_version.rs rename to sync-server/src/server/fetch_latest_document_version.rs diff --git a/backend/sync_server/src/server/fetch_latest_documents.rs b/sync-server/src/server/fetch_latest_documents.rs similarity index 100% rename from backend/sync_server/src/server/fetch_latest_documents.rs rename to sync-server/src/server/fetch_latest_documents.rs diff --git a/backend/sync_server/src/server/index.rs b/sync-server/src/server/index.rs similarity index 100% rename from backend/sync_server/src/server/index.rs rename to sync-server/src/server/index.rs diff --git a/backend/sync_server/src/server/ping.rs b/sync-server/src/server/ping.rs similarity index 100% rename from backend/sync_server/src/server/ping.rs rename to sync-server/src/server/ping.rs diff --git a/backend/sync_server/src/server/requests.rs b/sync-server/src/server/requests.rs similarity index 100% rename from backend/sync_server/src/server/requests.rs rename to sync-server/src/server/requests.rs diff --git a/backend/sync_server/src/server/responses.rs b/sync-server/src/server/responses.rs similarity index 100% rename from backend/sync_server/src/server/responses.rs rename to sync-server/src/server/responses.rs diff --git a/backend/sync_server/src/server/update_document.rs b/sync-server/src/server/update_document.rs similarity index 100% rename from backend/sync_server/src/server/update_document.rs rename to sync-server/src/server/update_document.rs diff --git a/backend/sync_server/src/server/websocket.rs b/sync-server/src/server/websocket.rs similarity index 100% rename from backend/sync_server/src/server/websocket.rs rename to sync-server/src/server/websocket.rs diff --git a/backend/sync_server/src/utils.rs b/sync-server/src/utils.rs similarity index 100% rename from backend/sync_server/src/utils.rs rename to sync-server/src/utils.rs diff --git a/backend/sync_server/src/utils/dedup_paths.rs b/sync-server/src/utils/dedup_paths.rs similarity index 100% rename from backend/sync_server/src/utils/dedup_paths.rs rename to sync-server/src/utils/dedup_paths.rs diff --git a/backend/sync_server/src/utils/is_filetype_mergable.rs b/sync-server/src/utils/is_filetype_mergable.rs similarity index 100% rename from backend/sync_server/src/utils/is_filetype_mergable.rs rename to sync-server/src/utils/is_filetype_mergable.rs diff --git a/backend/sync_server/src/utils/normalize.rs b/sync-server/src/utils/normalize.rs similarity index 100% rename from backend/sync_server/src/utils/normalize.rs rename to sync-server/src/utils/normalize.rs diff --git a/backend/sync_server/src/utils/sanitize_path.rs b/sync-server/src/utils/sanitize_path.rs similarity index 100% rename from backend/sync_server/src/utils/sanitize_path.rs rename to sync-server/src/utils/sanitize_path.rs