Creating Send with type file via CLI doesn't work #55

Closed
opened 2025-10-09 16:12:35 +03:00 by OVERLORD · 2 comments
Owner

Originally created by @smsteel on GitHub.

Prerequisites

Vaultwarden Support String

Your environment (Generated via diagnostics page)

  • Vaultwarden version: v1.34.3
  • Web-vault version: v2025.7.0
  • OS/Arch: linux/x86_64
  • Running within a container: true (Base: Debian)
  • Database type: SQLite
  • Database version: 3.50.2
  • Uses config.json: false
  • Uses a reverse proxy: false
  • Internet access: true
  • Internet access via a proxy: false
  • DNS Check: true
  • Browser/Server Time Check: true
  • Server/NTP Time Check: true
  • Domain Configuration Check: false
  • HTTPS Check: true
  • Websocket Check: true
  • HTTP Response Checks: false

Config & Details (Generated via diagnostics page)

Show Config & Details

Failed HTTP Checks:

API calls:
Header: 'content-security-policy' does not contain 'default-src 'none''

Config:

{
  "_duo_akey": null,
  "_enable_duo": true,
  "_enable_email_2fa": false,
  "_enable_smtp": true,
  "_enable_yubico": true,
  "_icon_service_csp": "",
  "_icon_service_url": "",
  "_ip_header_enabled": true,
  "_max_note_size": 10000,
  "_smtp_img_src": "***:",
  "admin_ratelimit_max_burst": 3,
  "admin_ratelimit_seconds": 300,
  "admin_session_lifetime": 20,
  "admin_token": "***",
  "allowed_connect_src": "",
  "allowed_iframe_ancestors": "",
  "attachments_folder": "data/attachments",
  "auth_request_purge_schedule": "30 * * * * *",
  "authenticator_disable_time_drift": false,
  "data_folder": "data",
  "database_conn_init": "",
  "database_max_conns": 10,
  "database_timeout": 30,
  "database_url": "***************",
  "db_connection_retries": 15,
  "disable_2fa_remember": false,
  "disable_admin_token": false,
  "disable_icon_download": false,
  "domain": "*****://*********",
  "domain_origin": "*****://*********",
  "domain_path": "",
  "domain_set": true,
  "duo_context_purge_schedule": "30 * * * * *",
  "duo_host": null,
  "duo_ikey": null,
  "duo_skey": null,
  "duo_use_iframe": false,
  "email_2fa_auto_fallback": false,
  "email_2fa_enforce_on_verified_invite": false,
  "email_attempts_limit": 3,
  "email_change_allowed": true,
  "email_expiration_time": 600,
  "email_token_size": 6,
  "emergency_access_allowed": true,
  "emergency_notification_reminder_schedule": "0 3 * * * *",
  "emergency_request_timeout_schedule": "0 7 * * * *",
  "enable_db_wal": true,
  "enable_websocket": true,
  "enforce_single_org_with_reset_pw_policy": false,
  "event_cleanup_schedule": "0 10 0 * * *",
  "events_days_retain": null,
  "experimental_client_feature_flags": "",
  "extended_logging": true,
  "helo_name": null,
  "hibp_api_key": null,
  "http_request_block_non_global_ips": true,
  "http_request_block_regex": null,
  "icon_blacklist_non_global_ips": true,
  "icon_blacklist_regex": null,
  "icon_cache_folder": "data/icon_cache",
  "icon_cache_negttl": 259200,
  "icon_cache_ttl": 2592000,
  "icon_download_timeout": 10,
  "icon_redirect_code": 302,
  "icon_service": "internal",
  "incomplete_2fa_schedule": "30 * * * * *",
  "incomplete_2fa_time_limit": 3,
  "increase_note_size_limit": false,
  "invitation_expiration_hours": 120,
  "invitation_org_name": "Vaultwarden",
  "invitations_allowed": true,
  "ip_header": "X-Real-IP",
  "job_poll_interval_ms": 30000,
  "log_file": null,
  "log_level": "trace",
  "log_timestamp_format": "%Y-%m-%d %H:%M:%S.%3f",
  "login_ratelimit_max_burst": 10,
  "login_ratelimit_seconds": 60,
  "org_attachment_limit": null,
  "org_creation_users": "",
  "org_events_enabled": false,
  "org_groups_enabled": false,
  "password_hints_allowed": true,
  "password_iterations": 600000,
  "push_enabled": false,
  "push_identity_uri": "https://identity.bitwarden.com",
  "push_installation_id": "***",
  "push_installation_key": "***",
  "push_relay_uri": "https://push.bitwarden.com",
  "reload_templates": false,
  "require_device_email": false,
  "rsa_key_filename": "data/rsa_key",
  "send_purge_schedule": "0 5 * * * *",
  "sendmail_command": null,
  "sends_allowed": true,
  "sends_folder": "data/sends",
  "show_password_hint": false,
  "signups_allowed": true,
  "signups_domains_whitelist": "",
  "signups_verify": false,
  "signups_verify_resend_limit": 6,
  "signups_verify_resend_time": 3600,
  "smtp_accept_invalid_certs": false,
  "smtp_accept_invalid_hostnames": false,
  "smtp_auth_mechanism": null,
  "smtp_debug": false,
  "smtp_embed_images": true,
  "smtp_explicit_tls": null,
  "smtp_from": "",
  "smtp_from_name": "Vaultwarden",
  "smtp_host": null,
  "smtp_password": null,
  "smtp_port": 587,
  "smtp_security": "starttls",
  "smtp_ssl": null,
  "smtp_timeout": 15,
  "smtp_username": null,
  "templates_folder": "data/templates",
  "tmp_folder": "data/tmp",
  "trash_auto_delete_days": null,
  "trash_purge_schedule": "0 5 0 * * *",
  "use_sendmail": false,
  "use_syslog": false,
  "user_attachment_limit": null,
  "user_send_limit": null,
  "web_vault_enabled": true,
  "web_vault_folder": "web-vault/",
  "yubico_client_id": null,
  "yubico_secret_key": null,
  "yubico_server": null
}

Vaultwarden Build Version

1.34.3

Deployment method

Official Container Image

Custom deployment method

services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://localhost"
ADMIN_TOKEN: foobar
EXTENDED_LOGGING: true
LOG_LEVEL: trace
volumes:
- ./vw-data/:/data/
ports:
- 8123:80

Reverse Proxy

none

Host/Server Operating System

Linux

Operating System Version

Ubuntu 24.04

Clients

CLI

Client Version

2025.7.0

Steps To Reproduce

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. Click on '...'
  5. Etc '...'

Expected Result

Create file works.

Actual Result

bw send -f ./1.txt
FetchError: request to http://localhost:8123/api/sends/ab6544d0-4f0b-404a-ae68-8ff1f72dcb1f/file/3e4223d9a28696e82518cbc1b7597e861107ba41c982da7ee2adb4d4220ed361 failed, reason: socket hang up

While Send with type text works:

bw send "test"
{"object":"send","id":"f2b1f384-fb95-4013-917d-c1ef9c06c288","accessId":"8rHzhPuVQBORfcHvnAbCiA","accessUrl":"http://localhost:8123/#/send/8rHzhPuVQBORfcHvnAbCiA/WNYVXox5H8thDScCaWskMw","name":"252b7911-f4c3-4532-a215-09864537b4e9","notes":null,"key":"WNYVXox5H8thDScCaWskMw==","type":0,"maxAccessCount":null,"accessCount":0,"revisionDate":"2025-08-08T12:43:25.920Z","deletionDate":"2025-08-15T12:43:25.608Z","expirationDate":null,"passwordSet":false,"disabled":false,"hideEmail":false,"text":{"text":"test","hidden":false}}

Logs

vaultwarden  | [2025-08-08 12:44:15.733][tracing::span][TRACE] parse_headers;
vaultwarden  | [2025-08-08 12:44:15.733][tracing::span::active][TRACE] -> parse_headers;
vaultwarden  | [2025-08-08 12:44:15.733][tracing::span::active][TRACE] <- parse_headers;
vaultwarden  | [2025-08-08 12:44:15.733][tracing::span][TRACE] -- parse_headers;
vaultwarden  | [2025-08-08 12:44:15.733][request][INFO] POST /api/sends/file/v2
vaultwarden  | [2025-08-08 12:44:15.734][response][INFO] (post_send_file_v2) POST /api/sends/file/v2 => 200 OK
vaultwarden  | [2025-08-08 12:44:15.734][tracing::span][TRACE] encode_headers;
vaultwarden  | [2025-08-08 12:44:15.734][tracing::span::active][TRACE] -> encode_headers;
vaultwarden  | [2025-08-08 12:44:15.734][tracing::span::active][TRACE] <- encode_headers;
vaultwarden  | [2025-08-08 12:44:15.734][tracing::span][TRACE] -- encode_headers;
vaultwarden  | [2025-08-08 12:44:15.747][tracing::span][TRACE] parse_headers;
vaultwarden  | [2025-08-08 12:44:15.747][tracing::span::active][TRACE] -> parse_headers;
vaultwarden  | [2025-08-08 12:44:15.747][tracing::span::active][TRACE] <- parse_headers;
vaultwarden  | [2025-08-08 12:44:15.747][tracing::span][TRACE] -- parse_headers;
vaultwarden  | [2025-08-08 12:44:15.747][request][INFO] DELETE /api/sends/fc1b91e1-1edd-4114-acb3-7a74a8582bb2
vaultwarden  | [2025-08-08 12:44:15.749][response][INFO] (delete_send) DELETE /api/sends/<send_id> => 200 OK
vaultwarden  | [2025-08-08 12:44:15.749][tracing::span][TRACE] encode_headers;
vaultwarden  | [2025-08-08 12:44:15.749][tracing::span::active][TRACE] -> encode_headers;
vaultwarden  | [2025-08-08 12:44:15.749][tracing::span::active][TRACE] <- encode_headers;
vaultwarden  | [2025-08-08 12:44:15.749][tracing::span][TRACE] -- encode_headers;

Screenshots or Videos

No response

Additional Context

No response

Originally created by @smsteel on GitHub. ### Prerequisites - [x] I have searched the existing **Closed _AND_ Open** [Issues](https://github.com/dani-garcia/vaultwarden/issues?q=is%3Aissue%20) **_AND_** [Discussions](https://github.com/dani-garcia/vaultwarden/discussions?discussions_q=) - [x] I have searched and read the [documentation](https://github.com/dani-garcia/vaultwarden/wiki/) ### Vaultwarden Support String ### Your environment (Generated via diagnostics page) * Vaultwarden version: v1.34.3 * Web-vault version: v2025.7.0 * OS/Arch: linux/x86_64 * Running within a container: true (Base: Debian) * Database type: SQLite * Database version: 3.50.2 * Uses config.json: false * Uses a reverse proxy: false * Internet access: true * Internet access via a proxy: false * DNS Check: true * Browser/Server Time Check: true * Server/NTP Time Check: true * Domain Configuration Check: false * HTTPS Check: true * Websocket Check: true * HTTP Response Checks: false ### Config & Details (Generated via diagnostics page) <details><summary>Show Config & Details</summary> **Failed HTTP Checks:** ```yaml API calls: Header: 'content-security-policy' does not contain 'default-src 'none'' ``` **Config:** ```json { "_duo_akey": null, "_enable_duo": true, "_enable_email_2fa": false, "_enable_smtp": true, "_enable_yubico": true, "_icon_service_csp": "", "_icon_service_url": "", "_ip_header_enabled": true, "_max_note_size": 10000, "_smtp_img_src": "***:", "admin_ratelimit_max_burst": 3, "admin_ratelimit_seconds": 300, "admin_session_lifetime": 20, "admin_token": "***", "allowed_connect_src": "", "allowed_iframe_ancestors": "", "attachments_folder": "data/attachments", "auth_request_purge_schedule": "30 * * * * *", "authenticator_disable_time_drift": false, "data_folder": "data", "database_conn_init": "", "database_max_conns": 10, "database_timeout": 30, "database_url": "***************", "db_connection_retries": 15, "disable_2fa_remember": false, "disable_admin_token": false, "disable_icon_download": false, "domain": "*****://*********", "domain_origin": "*****://*********", "domain_path": "", "domain_set": true, "duo_context_purge_schedule": "30 * * * * *", "duo_host": null, "duo_ikey": null, "duo_skey": null, "duo_use_iframe": false, "email_2fa_auto_fallback": false, "email_2fa_enforce_on_verified_invite": false, "email_attempts_limit": 3, "email_change_allowed": true, "email_expiration_time": 600, "email_token_size": 6, "emergency_access_allowed": true, "emergency_notification_reminder_schedule": "0 3 * * * *", "emergency_request_timeout_schedule": "0 7 * * * *", "enable_db_wal": true, "enable_websocket": true, "enforce_single_org_with_reset_pw_policy": false, "event_cleanup_schedule": "0 10 0 * * *", "events_days_retain": null, "experimental_client_feature_flags": "", "extended_logging": true, "helo_name": null, "hibp_api_key": null, "http_request_block_non_global_ips": true, "http_request_block_regex": null, "icon_blacklist_non_global_ips": true, "icon_blacklist_regex": null, "icon_cache_folder": "data/icon_cache", "icon_cache_negttl": 259200, "icon_cache_ttl": 2592000, "icon_download_timeout": 10, "icon_redirect_code": 302, "icon_service": "internal", "incomplete_2fa_schedule": "30 * * * * *", "incomplete_2fa_time_limit": 3, "increase_note_size_limit": false, "invitation_expiration_hours": 120, "invitation_org_name": "Vaultwarden", "invitations_allowed": true, "ip_header": "X-Real-IP", "job_poll_interval_ms": 30000, "log_file": null, "log_level": "trace", "log_timestamp_format": "%Y-%m-%d %H:%M:%S.%3f", "login_ratelimit_max_burst": 10, "login_ratelimit_seconds": 60, "org_attachment_limit": null, "org_creation_users": "", "org_events_enabled": false, "org_groups_enabled": false, "password_hints_allowed": true, "password_iterations": 600000, "push_enabled": false, "push_identity_uri": "https://identity.bitwarden.com", "push_installation_id": "***", "push_installation_key": "***", "push_relay_uri": "https://push.bitwarden.com", "reload_templates": false, "require_device_email": false, "rsa_key_filename": "data/rsa_key", "send_purge_schedule": "0 5 * * * *", "sendmail_command": null, "sends_allowed": true, "sends_folder": "data/sends", "show_password_hint": false, "signups_allowed": true, "signups_domains_whitelist": "", "signups_verify": false, "signups_verify_resend_limit": 6, "signups_verify_resend_time": 3600, "smtp_accept_invalid_certs": false, "smtp_accept_invalid_hostnames": false, "smtp_auth_mechanism": null, "smtp_debug": false, "smtp_embed_images": true, "smtp_explicit_tls": null, "smtp_from": "", "smtp_from_name": "Vaultwarden", "smtp_host": null, "smtp_password": null, "smtp_port": 587, "smtp_security": "starttls", "smtp_ssl": null, "smtp_timeout": 15, "smtp_username": null, "templates_folder": "data/templates", "tmp_folder": "data/tmp", "trash_auto_delete_days": null, "trash_purge_schedule": "0 5 0 * * *", "use_sendmail": false, "use_syslog": false, "user_attachment_limit": null, "user_send_limit": null, "web_vault_enabled": true, "web_vault_folder": "web-vault/", "yubico_client_id": null, "yubico_secret_key": null, "yubico_server": null } ``` </details> ### Vaultwarden Build Version 1.34.3 ### Deployment method Official Container Image ### Custom deployment method services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped environment: DOMAIN: "https://localhost" ADMIN_TOKEN: foobar EXTENDED_LOGGING: true LOG_LEVEL: trace volumes: - ./vw-data/:/data/ ports: - 8123:80 ### Reverse Proxy none ### Host/Server Operating System Linux ### Operating System Version Ubuntu 24.04 ### Clients CLI ### Client Version 2025.7.0 ### Steps To Reproduce 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. Click on '...' 5. Etc '...' ### Expected Result Create file works. ### Actual Result ``` bw send -f ./1.txt FetchError: request to http://localhost:8123/api/sends/ab6544d0-4f0b-404a-ae68-8ff1f72dcb1f/file/3e4223d9a28696e82518cbc1b7597e861107ba41c982da7ee2adb4d4220ed361 failed, reason: socket hang up ``` While Send with type text works: ``` bw send "test" {"object":"send","id":"f2b1f384-fb95-4013-917d-c1ef9c06c288","accessId":"8rHzhPuVQBORfcHvnAbCiA","accessUrl":"http://localhost:8123/#/send/8rHzhPuVQBORfcHvnAbCiA/WNYVXox5H8thDScCaWskMw","name":"252b7911-f4c3-4532-a215-09864537b4e9","notes":null,"key":"WNYVXox5H8thDScCaWskMw==","type":0,"maxAccessCount":null,"accessCount":0,"revisionDate":"2025-08-08T12:43:25.920Z","deletionDate":"2025-08-15T12:43:25.608Z","expirationDate":null,"passwordSet":false,"disabled":false,"hideEmail":false,"text":{"text":"test","hidden":false}} ``` ### Logs ```text vaultwarden | [2025-08-08 12:44:15.733][tracing::span][TRACE] parse_headers; vaultwarden | [2025-08-08 12:44:15.733][tracing::span::active][TRACE] -> parse_headers; vaultwarden | [2025-08-08 12:44:15.733][tracing::span::active][TRACE] <- parse_headers; vaultwarden | [2025-08-08 12:44:15.733][tracing::span][TRACE] -- parse_headers; vaultwarden | [2025-08-08 12:44:15.733][request][INFO] POST /api/sends/file/v2 vaultwarden | [2025-08-08 12:44:15.734][response][INFO] (post_send_file_v2) POST /api/sends/file/v2 => 200 OK vaultwarden | [2025-08-08 12:44:15.734][tracing::span][TRACE] encode_headers; vaultwarden | [2025-08-08 12:44:15.734][tracing::span::active][TRACE] -> encode_headers; vaultwarden | [2025-08-08 12:44:15.734][tracing::span::active][TRACE] <- encode_headers; vaultwarden | [2025-08-08 12:44:15.734][tracing::span][TRACE] -- encode_headers; vaultwarden | [2025-08-08 12:44:15.747][tracing::span][TRACE] parse_headers; vaultwarden | [2025-08-08 12:44:15.747][tracing::span::active][TRACE] -> parse_headers; vaultwarden | [2025-08-08 12:44:15.747][tracing::span::active][TRACE] <- parse_headers; vaultwarden | [2025-08-08 12:44:15.747][tracing::span][TRACE] -- parse_headers; vaultwarden | [2025-08-08 12:44:15.747][request][INFO] DELETE /api/sends/fc1b91e1-1edd-4114-acb3-7a74a8582bb2 vaultwarden | [2025-08-08 12:44:15.749][response][INFO] (delete_send) DELETE /api/sends/<send_id> => 200 OK vaultwarden | [2025-08-08 12:44:15.749][tracing::span][TRACE] encode_headers; vaultwarden | [2025-08-08 12:44:15.749][tracing::span::active][TRACE] -> encode_headers; vaultwarden | [2025-08-08 12:44:15.749][tracing::span::active][TRACE] <- encode_headers; vaultwarden | [2025-08-08 12:44:15.749][tracing::span][TRACE] -- encode_headers; ``` ### Screenshots or Videos _No response_ ### Additional Context _No response_
OVERLORD added the bug label 2025-10-09 16:12:35 +03:00
Author
Owner

@smsteel commented on GitHub:

Can confirm that putting behind traefik "solves" initial problem
Example for local development if anyone needs it for some reason:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://localhost"
      ADMIN_TOKEN: foobar
      EXTENDED_LOGGING: true
      LOG_LEVEL: trace
      ORG_GROUPS_ENABLED: true
    ports:
      - 80
    networks:
      - vw-network
    volumes:
      - ./vw-data/:/data/
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.vaultwarden.rule=Host(`localhost`)"
      - "traefik.http.routers.vaultwarden.rule=PathPrefix(`/`)"
      - "traefik.http.routers.vaultwarden.entrypoints=web"
      - "traefik.http.services.vaultwarden.loadbalancer.server.port=80"

  traefik:
    image: traefik:v2.11
    container_name: traefik
    networks:
      - vw-network
    command:
      - --api.insecure=true
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
    ports:
      - "80:80"
      - "8080:8080" # Traefik dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
networks:
  vw-network:
@smsteel commented on GitHub: Can confirm that putting behind `traefik` "solves" initial problem Example for local development if anyone needs it for some reason: ```yml services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped environment: DOMAIN: "https://localhost" ADMIN_TOKEN: foobar EXTENDED_LOGGING: true LOG_LEVEL: trace ORG_GROUPS_ENABLED: true ports: - 80 networks: - vw-network volumes: - ./vw-data/:/data/ labels: - "traefik.enable=true" - "traefik.http.routers.vaultwarden.rule=Host(`localhost`)" - "traefik.http.routers.vaultwarden.rule=PathPrefix(`/`)" - "traefik.http.routers.vaultwarden.entrypoints=web" - "traefik.http.services.vaultwarden.loadbalancer.server.port=80" traefik: image: traefik:v2.11 container_name: traefik networks: - vw-network command: - --api.insecure=true - --providers.docker=true - --providers.docker.exposedbydefault=false - --entrypoints.web.address=:80 ports: - "80:80" - "8080:8080" # Traefik dashboard volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: vw-network: ```
Author
Owner

@BlackDex commented on GitHub:

I have looked into this. And it is not something we can fix.

The Bitwarden CLI client is sending the connection: close header, but it then still tries to use that same connection to send the file, but, since Rocket adheres to this close it closes the connection as requested by the client.

This seems a nodejs or rather a node-fetch issue, which has been resolved in v2.6.13 of node-fetch, but Bitwarden seems to still be using v2.6.12, even though both versions are ancient already.

See: https://github.com/node-fetch/node-fetch/releases/tag/v2.6.13

The only solution I can offer is put a reverse proxy in front of Vaultwarden, which most of the time will not send the connection: close header.

Since we can not fix this on our side, I'm going to close this.

@BlackDex commented on GitHub: I have looked into this. And it is not something we can fix. The Bitwarden CLI client is sending the `connection: close` header, but it then still tries to use that same connection to send the file, but, since Rocket adheres to this `close` it closes the connection as requested by the client. This seems a nodejs or rather a node-fetch issue, which has been resolved in v2.6.13 of node-fetch, but Bitwarden seems to still be using v2.6.12, even though both versions are ancient already. See: https://github.com/node-fetch/node-fetch/releases/tag/v2.6.13 The only solution I can offer is put a reverse proxy in front of Vaultwarden, which most of the time will not send the `connection: close` header. Since we can not fix this on our side, I'm going to close this.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/vaultwarden#55