From 9c7452e7fd6327edc19f154578fc6a50141712a9 Mon Sep 17 00:00:00 2001 From: Linus Rath Date: Thu, 23 Apr 2026 11:22:14 +0200 Subject: [PATCH 1/3] chore: add admin dashboard data directory configuration to environment files --- .env.example | 14 +++++++++++--- docker-compose.yml | 9 +++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 1b952ce6..ec06ddf1 100644 --- a/.env.example +++ b/.env.example @@ -71,11 +71,19 @@ JMAP_SERVER_URL=https://your-jmap-server.com # Directory for storing encrypted settings files (default: ./data/settings). # For Docker, the working directory is /app, so the default resolves to -# /app/data/settings - mount a persistent volume there: -# volumes: -# - bulwark-settings:/app/data/settings +# /app/data/settings - mount a persistent volume there (see docker-compose.yml). # SETTINGS_DATA_DIR=./data/settings +# ============================================================================= +# Admin Dashboard Data +# ============================================================================= + +# Directory for admin dashboard state: config overrides, admin password hash, +# installed plugins/themes, and audit logs (default: ./data/admin). +# For Docker, the default resolves to /app/data/admin - mount a persistent +# volume there (see docker-compose.yml). +# ADMIN_DATA_DIR=./data/admin + # ============================================================================= # Server Listen Address # ============================================================================= diff --git a/docker-compose.yml b/docker-compose.yml index 2479dc33..c77bb9aa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,11 @@ services: - PORT=3000 env_file: - .env.local + volumes: + # Encrypted user settings (SETTINGS_DATA_DIR). + - bulwark-settings:/app/data/settings + # Admin dashboard state: config, password hash, plugins, audit logs (ADMIN_DATA_DIR). + - bulwark-admin:/app/data/admin healthcheck: test: [ @@ -23,3 +28,7 @@ services: retries: 3 start_period: 10s restart: unless-stopped + +volumes: + bulwark-settings: + bulwark-admin: From ae517732f7a58603ca3824a1d4ab269055151e8a Mon Sep 17 00:00:00 2001 From: Luis Felipe Marzagao Date: Sun, 26 Apr 2026 22:50:10 +0000 Subject: [PATCH 2/3] i18n: Fix word 'contactos' and its variants. --- locales/pt/common.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/locales/pt/common.json b/locales/pt/common.json index 4ffc6c03..a072b097 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -20,7 +20,7 @@ "generic": "Ocorreu um erro. Por favor, tente novamente.", "totp_required": "É necessário um código de autenticação de dois fatores. Insira seu código abaixo.", "totp_invalid": "Código de autenticação inválido. Verifique seu aplicativo de autenticação.", - "oauth_discovery_failed": "SSO está ativado mas o provedor de identidade não pôde ser contactado. Verifique sua configuração OAuth." + "oauth_discovery_failed": "SSO está ativado mas o provedor de identidade não pôde ser contatado. Verifique sua configuração OAuth." }, "show_password": "Mostrar senha", "hide_password": "Ocultar senha", @@ -669,7 +669,7 @@ "security": "Segurança", "encryption": "Criptografia", "files": "Arquivos", - "contacts": "Contactos", + "contacts": "Contatos", "sidebar_apps": "Apps da barra lateral", "notifications": "Notificações", "layout": "Layout", @@ -1322,12 +1322,12 @@ "manage_description": "Adicionar, editar ou remover apps personalizados da barra lateral" }, "contacts": { - "title": "Contactos", - "description": "Importar e exportar os seus contactos", - "import_label": "Importar contactos", - "import_description": "Importar contactos de um ficheiro vCard (.vcf)", - "export_label": "Exportar contactos", - "export_description": "Exportar todos os contactos como ficheiro vCard (.vcf)", + "title": "Contatos", + "description": "Importar e exportar os seus contatos", + "import_label": "Importar contatos", + "import_description": "Importar contatos de um ficheiro vCard (.vcf)", + "export_label": "Exportar contatos", + "export_description": "Exportar todos os contatos como ficheiro vCard (.vcf)", "manage_title": "Catálogos de endereços", "manage_description": "Renomeie seus catálogos de endereços", "no_address_books": "Nenhum catálogo de endereços encontrado", @@ -1874,7 +1874,7 @@ "cert_already_imported": "Certificado já importado", "cert_imported": "Certificado importado", "cert_import_failed": "Falha ao importar o certificado", - "section_contact": "Contact details", + "section_contact": "Detalhes do contato", "section_work": "Work", "section_personal": "Personal", "email_default_label": "Email", @@ -2243,7 +2243,7 @@ "hover_preview_delay_2s": "Atraso de 2 segundos", "hover_preview_off": "Desativado", "show_birthday_calendar": "Calendário de aniversários", - "show_birthday_calendar_desc": "Mostrar um calendário virtual com os aniversários dos seus contactos" + "show_birthday_calendar_desc": "Mostrar um calendário virtual com os aniversários dos seus contatos" }, "days": { "monday": "Segunda-feira", @@ -2738,4 +2738,4 @@ "custom": "Personalizado" } } -} +} \ No newline at end of file From c0af2dbdd129d91c12bb0951b3b66278252ae240 Mon Sep 17 00:00:00 2001 From: Luis Felipe Marzagao Date: Sun, 26 Apr 2026 23:20:23 +0000 Subject: [PATCH 3/3] i18n: Fix word 'ficheiro' and its variants. Co-authored-by: Copilot --- locales/pt/common.json | 52 +++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/locales/pt/common.json b/locales/pt/common.json index a072b097..8ee68311 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -80,7 +80,7 @@ "calendar": "Calendário", "settings": "Configurações", "admin": "Admin", - "files": "Ficheiros", + "files": "Arquivos", "loading_mailboxes": "Carregando caixas de entrada...", "push_connected": "Atualizações em tempo real ativas", "push_disconnected": "Atualizações em tempo real inativas", @@ -505,7 +505,7 @@ "show_less": "Mostrar menos", "forgot_attachment": { "title": "Esqueceu um anexo?", - "message": "A sua mensagem menciona \"{keyword}\" mas nenhum ficheiro está anexado. Enviar mesmo assim?", + "message": "A sua mensagem menciona \"{keyword}\" mas nenhum arquivo está anexado. Enviar mesmo assim?", "send_anyway": "Enviar mesmo assim", "back": "Voltar à edição" } @@ -1325,9 +1325,9 @@ "title": "Contatos", "description": "Importar e exportar os seus contatos", "import_label": "Importar contatos", - "import_description": "Importar contatos de um ficheiro vCard (.vcf)", + "import_description": "Importar contatos de um arquivo vCard (.vcf)", "export_label": "Exportar contatos", - "export_description": "Exportar todos os contatos como ficheiro vCard (.vcf)", + "export_description": "Exportar todos os contatos como arquivo vCard (.vcf)", "manage_title": "Catálogos de endereços", "manage_description": "Renomeie seus catálogos de endereços", "no_address_books": "Nenhum catálogo de endereços encontrado", @@ -1503,7 +1503,7 @@ }, "folder_layout": { "label": "Navegação de pastas", - "description": "Escolha como as pastas são apresentadas: integradas com os ficheiros ou numa árvore na barra lateral", + "description": "Escolha como as pastas são apresentadas: integradas com os arquivos ou numa árvore na barra lateral", "inline": "Integrado", "sidebar": "Barra lateral" }, @@ -2481,12 +2481,12 @@ "hint": "Clique num e-mail à esquerda para começar, ou inicie o tour." }, "files": { - "title": "Ficheiros", - "search_placeholder": "Pesquisar ficheiros...", - "empty_state_title": "Ainda não há ficheiros", - "empty_state_description": "Carregue ficheiros ou crie pastas para começar", + "title": "Arquivos", + "search_placeholder": "Pesquisar arquivos...", + "empty_state_title": "Ainda não há arquivos", + "empty_state_description": "Carregue arquivos ou crie pastas para começar", "upload": "Carregar", - "upload_files": "Carregar ficheiros", + "upload_files": "Carregar arquivos", "new_folder": "Nova pasta", "new_folder_name": "Nome da pasta", "rename": "Renomear", @@ -2501,13 +2501,13 @@ "modified": "Modificado", "type": "Tipo", "folder": "Pasta", - "file": "Ficheiro", + "file": "Arquivo", "parent_directory": "Diretório superior", "breadcrumb_root": "Início", - "drop_files_here": "Largue ficheiros ou pastas aqui para carregar", + "drop_files_here": "Largue arquivos ou pastas aqui para carregar", "uploading": "A carregar...", - "upload_success": "{count, plural, one {1 ficheiro carregado} other {# ficheiros carregados}}", - "upload_error": "Falha ao carregar o ficheiro", + "upload_success": "{count, plural, one {1 arquivo carregado} other {# arquivos carregados}}", + "upload_error": "Falha ao carregar o arquivo", "create_folder_success": "Pasta criada", "create_folder_error": "Falha ao criar a pasta", "delete_success": "Eliminado com sucesso", @@ -2515,11 +2515,11 @@ "rename_success": "Renomeado com sucesso", "rename_error": "Falha ao renomear", "download_error": "Falha ao transferir", - "not_available": "O armazenamento de ficheiros não está disponível neste servidor", + "not_available": "O armazenamento de arquivos não está disponível neste servidor", "cancel": "Cancelar", "create": "Criar", "save": "Guardar", - "no_results": "Nenhum ficheiro corresponde à sua pesquisa", + "no_results": "Nenhum arquivo corresponde à sua pesquisa", "batch_delete_confirm_message": "Tem a certeza de que deseja eliminar {count, plural, one {1 item} other {# itens}}? Esta ação não pode ser desfeita.", "batch_delete_success": "{count, plural, one {1 item eliminado} other {# itens eliminados}}", "grid_view": "Vista em grelha", @@ -2535,27 +2535,27 @@ "move_error": "Falha ao mover", "paste_success": "Colado com sucesso", "paste_error": "Falha ao colar", - "new_text_file": "Novo ficheiro de texto", - "file_name": "Nome do ficheiro", + "new_text_file": "Novo arquivo de texto", + "file_name": "Nome do arquivo", "retry": "Tentar novamente", "refresh": "Atualizar", "toggle_favorite": "Alternar favorito", "duplicate": "Duplicar", "duplicate_success": "Duplicado com sucesso", "duplicate_error": "Falha ao duplicar", - "create_file_success": "Ficheiro criado", - "create_file_error": "Falha ao criar ficheiro", + "create_file_success": "Arquivo criado", + "create_file_error": "Falha ao criar arquivo", "favorites": "Favoritos", "recent": "Recentes", "properties": "Propriedades", "open_folder": "Abrir pasta", "upload_folder": "Carregar pasta", - "file_too_large": "\"{name}\" excede o tamanho máximo do ficheiro ({max})", + "file_too_large": "\"{name}\" excede o tamanho máximo do arquivo ({max})", "undo": "Desfazer", "undo_success": "Ação desfeita", "undo_error": "Falha ao desfazer", "toolbar": "Ações de arquivo", - "file_list": "Ficheiros e pastas", + "file_list": "Arquivos e pastas", "context_menu": "Ações", "settings_title": "Configurações de arquivos", "settings_display": "Exibição", @@ -2578,7 +2578,7 @@ "settings_show_hidden": "Mostrar arquivos ocultos", "settings_show_hidden_desc": "Exibir arquivos e pastas que começam com um ponto", "settings_folder_layout": "Navegação de pastas", - "settings_folder_layout_desc": "Escolha como as pastas são apresentadas: integradas com os ficheiros ou numa árvore na barra lateral", + "settings_folder_layout_desc": "Escolha como as pastas são apresentadas: integradas com os arquivos ou numa árvore na barra lateral", "settings_folder_layout_inline": "Integrado", "settings_folder_layout_sidebar": "Barra lateral", "disabled_title": "O recurso de arquivos foi desativado pelo seu administrador", @@ -2703,11 +2703,11 @@ "event_modal_desc": "Aqui está o formulário do evento. Preencha o título, escolha uma data e hora, adicione um local ou participantes. Clique em salvar quando terminar - ou feche e siga em frente.", "contacts_list_title": "Seus contatos", "contacts_list_desc": "Aqui estão seus contatos. Clique em qualquer contato para ver seus detalhes à direita. Você também pode criar novos contatos, importar vCards ou organizar contatos em grupos.", - "files_title": "Armazenamento de ficheiros", + "files_title": "Armazenamento de arquivos", "settings_tabs_title": "Menu de configurações", "settings_tabs_desc": "Aqui estão todas as categorias de configurações. Personalize a aparência, gerencie identidades, configure filtros de e-mail, ajuste o calendário e muito mais.", - "files_desc": "O navegador de ficheiros permite carregar, organizar e partilhar ficheiros - como uma nuvem pessoal integrada no seu e-mail.", - "demo_banner_title": "Controlos de demonstração", + "files_desc": "O navegador de arquivos permite carregar, organizar e compartilhar arquivos - como uma nuvem pessoal integrada no seu e-mail.", + "demo_banner_title": "Controles de demonstração", "demo_banner_desc": "Está no modo de demonstração - tudo permanece no seu navegador. Clique em 'Repor Demonstração' a qualquer momento para recomeçar com dados limpos.", "quota_title": "Utilização do armazenamento", "quota_desc": "Acompanhe o tamanho da sua caixa de correio aqui. O círculo preenche-se à medida que utiliza mais espaço."