diff --git a/.github/workflows/build-debs-reusable.yml b/.github/workflows/build-debs-reusable.yml new file mode 100644 index 00000000000..a2af889ec1c --- /dev/null +++ b/.github/workflows/build-debs-reusable.yml @@ -0,0 +1,49 @@ +# Reusable: build debs and upload one artifact with build// and +# build/trixie/ (trixie admin deb is venv-ABI-required by the trixie GCE host). +name: Build Debian packages + +on: + workflow_call: + inputs: + ubuntu_version: + required: true + type: string + python_version: + required: true + type: string + artifact_name: + required: true + type: string + +jobs: + package: + runs-on: ubuntu-24.04 + outputs: + artifact_id: ${{ steps.upload.outputs.artifact-id }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/setup-python@v6 + with: + python-version: ${{ inputs.python_version }} + - name: Build SecureDrop packages + run: | + OS_VERSION=${{ inputs.ubuntu_version }} ./builder/build-debs.sh + - name: Build OSSEC packages + run: | + OS_VERSION=${{ inputs.ubuntu_version }} WHAT=ossec ./builder/build-debs.sh + - name: Build admin packages + run: | + OS_VERSION=${{ inputs.ubuntu_version }} WHAT=admin ./builder/build-debs.sh + - name: Build admin packages (trixie) + run: | + OS_VERSION=trixie WHAT=admin ./builder/build-debs.sh + - uses: actions/upload-artifact@v7 + id: upload + with: + name: ${{ inputs.artifact_name }} + path: | + build/${{ inputs.ubuntu_version }} + build/trixie + if-no-files-found: error diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d7b1ad26041..94956bb30ae 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,7 +2,7 @@ name: Package builds on: merge_group: push: - branches: ["develop", "release/**"] + branches: ["develop", "release/**", "stg-*"] pull_request: types: ["opened", "synchronize"] @@ -24,31 +24,11 @@ jobs: - ubuntu: noble python: "3.12" # TODO: change this back to ubuntu-latest once it is consistently 24.04 - runs-on: ubuntu-24.04 - outputs: - artifact_id: ${{ steps.upload.outputs.artifact-id }} - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.versions.python }} - - name: Build SecureDrop packages - run: | - OS_VERSION=${{ matrix.versions.ubuntu }} ./builder/build-debs.sh - - name: Build OSSEC packages - run: | - OS_VERSION=${{ matrix.versions.ubuntu }} WHAT=ossec ./builder/build-debs.sh - - name: Build admin packages - run: | - OS_VERSION=${{ matrix.versions.ubuntu }} WHAT=admin ./builder/build-debs.sh - - uses: actions/upload-artifact@v7 - id: upload - with: - name: ${{ matrix.versions.ubuntu }}-${{ matrix.build }} - path: build/${{ matrix.versions.ubuntu }} - if-no-files-found: error + uses: ./.github/workflows/build-debs-reusable.yml + with: + ubuntu_version: ${{ matrix.versions.ubuntu }} + python_version: ${{ matrix.versions.python }} + artifact_name: ${{ matrix.versions.ubuntu }}-${{ matrix.build }} reproducible-debs: strategy: @@ -72,6 +52,10 @@ jobs: # FIXME: securedrop-app-code isn't reproducible for pkg in ossec-agent ossec-server securedrop-config securedrop-keyring securedrop-ossec-agent securedrop-ossec-server securedrop-admin do - echo "Checking ${pkg}..." - diffoscope ${{ matrix.ubuntu_version }}-one/${pkg}_*.deb ${{ matrix.ubuntu_version }}-two/${pkg}_*.deb + echo "Checking ${pkg} (${{ matrix.ubuntu_version }})..." + diffoscope ${{ matrix.ubuntu_version }}-one/${{ matrix.ubuntu_version }}/${pkg}_*.deb \ + ${{ matrix.ubuntu_version }}-two/${{ matrix.ubuntu_version }}/${pkg}_*.deb done + echo "Checking securedrop-admin (trixie)..." + diffoscope ${{ matrix.ubuntu_version }}-one/trixie/securedrop-admin_*.deb \ + ${{ matrix.ubuntu_version }}-two/trixie/securedrop-admin_*.deb diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 554c55195e7..0d60455da3a 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -1,3 +1,6 @@ +# Reuse the Package builds artifact for github.sha when available; otherwise +# build via the same reusable workflow. The staging job sees one artifact +# (staging-debs-noble) containing build/noble/* and build/trixie/*. name: Staging on: push: @@ -6,9 +9,100 @@ on: - 'release/*' schedule: - cron: '0 3 * * *' + workflow_dispatch: + +defaults: + run: + shell: bash jobs: + resolve-debs: + runs-on: ubuntu-latest + permissions: + actions: read + outputs: + reused: ${{ steps.lookup.outputs.reused }} + steps: + - name: Try to reuse Package builds artifact + id: lookup + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + COMMIT_SHA: ${{ github.sha }} + run: | + set -euxo pipefail + + # Look for a successful build.yml run for this SHA. + find_successful_run() { + gh run list --repo "${GH_REPO}" --workflow=build.yml \ + --commit "${COMMIT_SHA}" -L 50 --json databaseId,conclusion \ + --jq '.[] | select(.conclusion == "success") | .databaseId' | head -1 + } + + # Check whether a build.yml run is still in progress or queued. + has_pending_run() { + local pending + pending=$(gh run list --repo "${GH_REPO}" --workflow=build.yml \ + --commit "${COMMIT_SHA}" -L 50 --json databaseId,conclusion,status \ + --jq '[.[] | select(.status == "in_progress" or .status == "queued")] | length') + [[ "${pending}" -gt 0 ]] + } + + RUN_ID=$(find_successful_run) + + # If no successful run yet, wait for any in-progress/queued run to finish. + if [[ -z "${RUN_ID}" ]] && has_pending_run; then + echo "build.yml is still running for ${COMMIT_SHA}; waiting..." + MAX_ATTEMPTS=30 + for ((i=1; i<=MAX_ATTEMPTS; i++)); do + sleep 30 + RUN_ID=$(find_successful_run) + if [[ -n "${RUN_ID}" ]]; then + echo "build.yml succeeded after ${i} poll(s)." + break + fi + if ! has_pending_run; then + echo "build.yml finished without success." + break + fi + echo "Poll ${i}/${MAX_ATTEMPTS}: still waiting..." + done + fi + + if [[ -z "${RUN_ID}" ]]; then + echo "reused=false" >> "${GITHUB_OUTPUT}" + exit 0 + fi + mkdir -p build + gh run download "${RUN_ID}" --repo "${GH_REPO}" --name noble-one -D build + echo "reused=true" >> "${GITHUB_OUTPUT}" + - name: Re-upload as staging-debs-noble + if: steps.lookup.outputs.reused == 'true' + uses: actions/upload-artifact@v7 + with: + name: staging-debs-noble + path: | + build/noble + build/trixie + if-no-files-found: error + + build-debs: + needs: resolve-debs + if: needs.resolve-debs.outputs.reused != 'true' + uses: ./.github/workflows/build-debs-reusable.yml + with: + ubuntu_version: noble + python_version: "3.12" + artifact_name: staging-debs-noble + staging: + needs: + - resolve-debs + - build-debs + if: | + always() && + !cancelled() && + (needs.resolve-debs.outputs.reused == 'true' || needs.build-debs.result == 'success') strategy: fail-fast: false matrix: @@ -17,10 +111,15 @@ jobs: env: GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} UBUNTU_VERSION: ${{ matrix.ubuntu_version }} + CI_PREBUILT_DEBS: "1" steps: - uses: actions/checkout@v6 with: persist-credentials: false + - uses: actions/download-artifact@v8 + with: + name: staging-debs-noble + path: build - name: Run staging tests on GCE run: | make ci-go diff --git a/admin/Dockerfile b/admin/Dockerfile index 1c8653408ac..b70a8b21f0c 100644 --- a/admin/Dockerfile +++ b/admin/Dockerfile @@ -44,7 +44,7 @@ COPY . /src ENV PATH="/usr/share/securedrop-admin/venv/bin:$PATH" RUN ln -s /src/builder/fixup-changelog.sh /fixup-changelog RUN /src/builder/build-debs-admin.sh -RUN apt-get -y update && apt-get install -y /src/build/trixie/securedrop-admin_*+trixie_amd64.deb +RUN apt-get install -y /src/build/trixie/securedrop-admin_*+trixie_amd64.deb # Install dev dependencies in a separate venv RUN /usr/bin/python3 -m venv /opt/admin-dev/venv diff --git a/admin/bin/validate-gpg-key.sh b/admin/bin/validate-gpg-key.sh index b680d8c975e..e2a0fb7f967 100755 --- a/admin/bin/validate-gpg-key.sh +++ b/admin/bin/validate-gpg-key.sh @@ -1,5 +1,5 @@ #!/bin/bash -# shellcheck disable=SC2317 +# shellcheck disable=SC2317,SC2329 # Verifies a key at at given path matches a fingerprint # Does so by importing the key into gpg2 and checking output # diff --git a/admin/debian/changelog b/admin/debian/changelog index b839a7b6a2c..24b2b005707 100644 --- a/admin/debian/changelog +++ b/admin/debian/changelog @@ -1,20 +1,8 @@ -securedrop-admin (2.16.0~rc1) unstable; urgency=medium +securedrop-admin (2.15.0~rc1) unstable; urgency=medium - * + * - -- SecureDrop Team Thu, 16 Apr 2026 10:39:18 -0700 - -securedrop-admin (2.15.1) unstable; urgency=medium - - * see changelog.md - - -- SecureDrop Team Wed, 22 Apr 2026 22:59:13 -0700 - -securedrop-admin (2.15.0) unstable; urgency=medium - - * see changelog.md - - -- SecureDrop Team Wed, 15 Apr 2026 11:30:56 -0700 + -- SecureDrop Team Fri, 20 Feb 2026 11:43:01 -0500 securedrop-admin (2.14.0) unstable; urgency=medium diff --git a/admin/requirements-ansible.in b/admin/requirements-ansible.in index 96ec5d221db..6820e2dca8f 100644 --- a/admin/requirements-ansible.in +++ b/admin/requirements-ansible.in @@ -1,5 +1,5 @@ ansible==8.7.0 -cryptography>=46.0.6 # >= for CVE-2026-34073 +cryptography>=46.0.5 # >= for CVE-2026-26007 jinja2>=3.1.6 netaddr markupsafe>=3.0 diff --git a/admin/requirements-testinfra.txt b/admin/requirements-testinfra.txt index 626d7dd5394..772f5a1cd12 100644 --- a/admin/requirements-testinfra.txt +++ b/admin/requirements-testinfra.txt @@ -154,56 +154,56 @@ cffi==2.0.0 \ # -r requirements.in # cryptography # pynacl -cryptography==46.0.6 \ - --hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \ - --hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \ - --hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \ - --hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \ - --hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \ - --hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \ - --hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \ - --hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \ - --hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \ - --hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \ - --hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \ - --hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \ - --hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \ - --hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \ - --hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \ - --hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \ - --hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \ - --hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \ - --hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \ - --hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \ - --hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \ - --hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \ - --hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \ - --hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \ - --hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \ - --hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \ - --hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \ - --hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \ - --hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \ - --hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \ - --hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \ - --hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \ - --hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \ - --hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \ - --hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \ - --hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \ - --hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \ - --hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \ - --hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \ - --hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \ - --hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \ - --hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \ - --hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \ - --hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \ - --hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \ - --hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \ - --hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \ - --hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \ - --hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4 +cryptography==46.0.5 \ + --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ + --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ + --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 # via # -r requirements-ansible.in # ansible-core diff --git a/admin/requirements.txt b/admin/requirements.txt index 19ea4b69346..0a072bc6dad 100644 --- a/admin/requirements.txt +++ b/admin/requirements.txt @@ -96,56 +96,56 @@ cffi==2.0.0 \ # via # -r requirements.in # cryptography -cryptography==46.0.6 \ - --hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \ - --hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \ - --hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \ - --hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \ - --hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \ - --hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \ - --hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \ - --hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \ - --hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \ - --hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \ - --hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \ - --hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \ - --hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \ - --hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \ - --hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \ - --hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \ - --hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \ - --hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \ - --hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \ - --hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \ - --hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \ - --hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \ - --hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \ - --hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \ - --hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \ - --hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \ - --hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \ - --hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \ - --hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \ - --hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \ - --hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \ - --hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \ - --hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \ - --hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \ - --hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \ - --hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \ - --hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \ - --hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \ - --hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \ - --hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \ - --hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \ - --hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \ - --hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \ - --hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \ - --hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \ - --hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \ - --hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \ - --hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \ - --hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4 +cryptography==46.0.5 \ + --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ + --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ + --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 # via # -r requirements-ansible.in # ansible-core diff --git a/changelog.md b/changelog.md index 6f9ac76fd33..982b114671d 100644 --- a/changelog.md +++ b/changelog.md @@ -1,41 +1,8 @@ # Changelog -## 2.16.0~rc1 +## 2.15.0~rc1 -## 2.15.1 - -### Web Applications and API - -* Streamline memory management for the v2 Journalist API (#7809) - -### Operations - -* Fix the path used to verify checksums when restoring from a backup (#7802, - #7810) - -## 2.15.0 - -### Web Applications and API - -* Update terms used in English wordlist (#7785) - -* V2 Journalist API: - * Enable V2 API by default (#7789) - * add `source_converation_seen` event (#7784) - * Let client request arbitrary metadata shards (#7770) - -### Development - -* Improve V2 API documentation (#7793) -* Use `uv` to manage admin requirements (#7773) -* Set 7-day cooldown for dependabot alerts (#7787) -* Update demo base container image to used fully-qualified name (#7794) -* Dependency updates: - * `cffi` to 2.0.0 (#7773) - * `cryptography` to 46.0.6 (#7797) - * Github Actions `download-artifact` to 8 (#7782) - * Github Actions `upload-artifact` to 7 (#7782) ## 2.14.0 diff --git a/devops/gce-nested/gce-runner.sh b/devops/gce-nested/gce-runner.sh index 2f9007dca97..495a9a29305 100755 --- a/devops/gce-nested/gce-runner.sh +++ b/devops/gce-nested/gce-runner.sh @@ -49,21 +49,45 @@ function copy_securedrop_repo() { "${TOPLEVEL}/" "${SSH_TARGET}:~/securedrop-source" } +# Sync prebuilt debs (build/${OS_VERSION}/, build/trixie/) to GCE; the repo +# rsync above excludes *.deb. +function copy_prebuilt_debs_to_remote() { + if [[ "${CI_PREBUILT_DEBS:-}" != "1" ]]; then + return 0 + fi + local server_deb_dir="${TOPLEVEL}/build/${OS_VERSION}" + local admin_deb_dir="${TOPLEVEL}/build/trixie" + for d in "$server_deb_dir" "$admin_deb_dir"; do + if [[ ! -d "$d" ]] || [[ $(find "$d" -maxdepth 1 -name '*.deb' 2>/dev/null | wc -l) -eq 0 ]]; then + echo "ERROR: CI_PREBUILT_DEBS=1 but no .deb files found in ${d}" >&2 + exit 1 + fi + done + rsync -a -e "ssh ${SSH_OPTS[*]}" \ + "${server_deb_dir}/" "${SSH_TARGET}:~/securedrop-source/build/${OS_VERSION}/" + rsync -a -e "ssh ${SSH_OPTS[*]}" \ + "${admin_deb_dir}/" "${SSH_TARGET}:~/securedrop-source/build/trixie/" +} + # Main logic copy_securedrop_repo +copy_prebuilt_debs_to_remote # The test results should be collected regardless of pass/fail, # so register a trap to ensure the fetch always runs. trap fetch_junit_test_results EXIT -# build server debs -ssh_gce "OS_VERSION=\"${OS_VERSION}\" make build-debs-notest" -ssh_gce "OS_VERSION=\"${OS_VERSION}\" make build-debs-ossec-notest" +# Legacy on-host build path (used when running outside CI). +if [[ "${CI_PREBUILT_DEBS:-}" != "1" ]]; then + ssh_gce "OS_VERSION=\"${OS_VERSION}\" make build-debs-notest" + ssh_gce "OS_VERSION=\"${OS_VERSION}\" make build-debs-ossec-notest" + ssh_gce "OS_VERSION=\"trixie\" make build-debs-admin-notest" +fi + +# GCE host is trixie; admin venv is ABI-tied to its builder Python. +ssh_gce "sudo apt-get update && sudo apt install -y ./build/trixie/securedrop-admin_*+trixie_amd64.deb" -# build and install securedrop-admin tools and add staging config -ssh_gce "OS_VERSION=\"trixie\" make build-debs-admin-notest" ssh_gce "mkdir -p /home/sdci/.config/securedrop-admin" -ssh_gce "sudo apt-get update && sudo apt-get install -y ./build/trixie/securedrop-admin_*+trixie_amd64.deb" ssh_gce "cp ~/securedrop-source/install_files/ansible-base/roles/ossec/files/test_admin_key.pub /home/sdci/.config/securedrop-admin/" ssh_gce "cp ~/securedrop-source/install_files/ansible-base/roles/app/files/test_journalist_key.pub /home/sdci/.config/securedrop-admin/" diff --git a/install_files/ansible-base/group_vars/all/securedrop b/install_files/ansible-base/group_vars/all/securedrop index bfab14d6d6e..3b8c2e26cfb 100644 --- a/install_files/ansible-base/group_vars/all/securedrop +++ b/install_files/ansible-base/group_vars/all/securedrop @@ -2,7 +2,7 @@ # Variables that apply to both the app and monitor server go in this file # If the monitor or app server need different values define the variable in # hosts_vars/app.yml or host_vars/mon.yml -securedrop_version: "2.16.0~rc1" +securedrop_version: "2.15.0~rc1" securedrop_app_code_sdist_name: "securedrop-app-code-{{ securedrop_version | replace('~', '-') }}.tar.gz" grsecurity: true diff --git a/install_files/ansible-base/roles/restore/tasks/perform_restore.yml b/install_files/ansible-base/roles/restore/tasks/perform_restore.yml index 253a93460df..a6f109da074 100644 --- a/install_files/ansible-base/roles/restore/tasks/perform_restore.yml +++ b/install_files/ansible-base/roles/restore/tasks/perform_restore.yml @@ -59,7 +59,7 @@ connection: local become: no stat: - path: "{{ config_path }}/{{ restore_file }}" + path: "{{ restore_file }}" checksum_algorithm: sha256 register: local_backup_file when: restore_manual_transfer diff --git a/install_files/ansible-base/roles/tails-config/templates/locale/eo/LC_MESSAGES/messages.mo b/install_files/ansible-base/roles/tails-config/templates/locale/eo/LC_MESSAGES/messages.mo index 553bae90eb6..8e38fd636ee 100644 Binary files a/install_files/ansible-base/roles/tails-config/templates/locale/eo/LC_MESSAGES/messages.mo and b/install_files/ansible-base/roles/tails-config/templates/locale/eo/LC_MESSAGES/messages.mo differ diff --git a/install_files/ansible-base/roles/tails-config/templates/locale/eo/LC_MESSAGES/messages.po b/install_files/ansible-base/roles/tails-config/templates/locale/eo/LC_MESSAGES/messages.po index cf85b20699a..1c7fbae88ec 100644 --- a/install_files/ansible-base/roles/tails-config/templates/locale/eo/LC_MESSAGES/messages.po +++ b/install_files/ansible-base/roles/tails-config/templates/locale/eo/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , 2023. # msgid "" -msgstr "Project-Id-Version: SecureDrop 2.7.0~rc1\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPO-Revision-Date: 2026-04-15 15:32+0000\nLast-Translator: Pseudolocale add-on \nLanguage-Team: Esperanto \nLanguage: eo\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Generator: Weblate 5.16.2\nGenerated-By: Babel 2.12.1\n" +msgstr "Project-Id-Version: SecureDrop 2.7.0~rc1\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPO-Revision-Date: 2026-02-19 13:47+0000\nLast-Translator: Pseudolocale add-on \nLanguage-Team: Esperanto \nLanguage: eo\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Generator: Weblate 5.15.2\nGenerated-By: Babel 2.12.1\n" msgid "Launch Journalist Interface" msgstr "[!!Launch Journalist Interface!!]" diff --git a/install_files/ansible-base/roles/tails-config/templates/locale/pt_BR/LC_MESSAGES/messages.mo b/install_files/ansible-base/roles/tails-config/templates/locale/pt_BR/LC_MESSAGES/messages.mo index 625506f2178..6ef3d0e7940 100644 Binary files a/install_files/ansible-base/roles/tails-config/templates/locale/pt_BR/LC_MESSAGES/messages.mo and b/install_files/ansible-base/roles/tails-config/templates/locale/pt_BR/LC_MESSAGES/messages.mo differ diff --git a/install_files/ansible-base/roles/tails-config/templates/locale/pt_BR/LC_MESSAGES/messages.po b/install_files/ansible-base/roles/tails-config/templates/locale/pt_BR/LC_MESSAGES/messages.po index b0715d7d688..d6048a179b7 100644 --- a/install_files/ansible-base/roles/tails-config/templates/locale/pt_BR/LC_MESSAGES/messages.po +++ b/install_files/ansible-base/roles/tails-config/templates/locale/pt_BR/LC_MESSAGES/messages.po @@ -4,7 +4,18 @@ # Automatically generated, 2017. # msgid "" -msgstr "Project-Id-Version: PACKAGE VERSION\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPO-Revision-Date: 2026-02-21 04:39+0000\nLast-Translator: aaloo \nLanguage-Team: Portuguese (Brazil) \nLanguage: pt_BR\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n > 1;\nX-Generator: Weblate 5.16\n" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2023-06-22 07:39+0000\n" +"Last-Translator: notmuchtohide \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.1\n" msgid "Launch Journalist Interface" msgstr "Abrir Interface de Jornalista" @@ -34,7 +45,7 @@ msgstr "Interface de Fontes do SecureDrop" #. Icon msgid "{{ tails_config_securedrop_dotfiles }}/securedrop_icon.png" -msgstr "{{ tails_config_securedrop_dotfiles }}/securedrop_icon.png" +msgstr "" #~ msgid "Check for SecureDrop Updates" #~ msgstr "Verificar atualizações do SecureDrop" diff --git a/molecule/shared/stable.ver b/molecule/shared/stable.ver index 3b1fc7950fa..edcfe40d198 100644 --- a/molecule/shared/stable.ver +++ b/molecule/shared/stable.ver @@ -1 +1 @@ -2.15.1 +2.14.0 diff --git a/securedrop/debian/changelog b/securedrop/debian/changelog index 9213d72b867..09ae7713796 100644 --- a/securedrop/debian/changelog +++ b/securedrop/debian/changelog @@ -1,20 +1,8 @@ -securedrop (2.16.0~rc1) unstable; urgency=medium +securedrop (2.15.0~rc1) unstable; urgency=medium * - -- SecureDrop Team Thu, 16 Apr 2026 10:39:20 -0700 - -securedrop (2.15.1) unstable; urgency=medium - - * see changelog.md - - -- SecureDrop Team Wed, 22 Apr 2026 22:59:17 -0700 - -securedrop (2.15.0) unstable; urgency=medium - - * see changelog.md - - -- SecureDrop Team Wed, 15 Apr 2026 11:31:09 -0700 + -- SecureDrop Team Fri, 20 Feb 2026 11:43:21 -0500 securedrop (2.14.0) unstable; urgency=medium diff --git a/securedrop/journalist_app/__init__.py b/securedrop/journalist_app/__init__.py index f04c330203c..db8a9fbfb11 100644 --- a/securedrop/journalist_app/__init__.py +++ b/securedrop/journalist_app/__init__.py @@ -1,4 +1,3 @@ -import ctypes from datetime import datetime from pathlib import Path from typing import Any @@ -19,8 +18,6 @@ from werkzeug import Response from werkzeug.exceptions import HTTPException, default_exceptions -_libc = ctypes.CDLL("libc.so.6") -_heavy_api_routes = ["api.get_token", "api2.index", "api2.data"] _insecure_views = ["main.login", "static"] _insecure_api_views = ["api.get_token", "api.get_endpoints"] @@ -143,17 +140,6 @@ def setup_g() -> Response | None: return None - @app.teardown_request - def _malloc_trim(exception: BaseException | None) -> None: - # APIv2 (and APIv1 login) effectively load the entire database - # into memory, which ends up causing fragmentation issues in - # which glibc doesn't automatically release the memory back. - # Explicitly call the C `malloc_trim()` function to force glibc - # to release the memory that has been marked as freeable but not - # yet freed. The 0 means to free everything it can. - if request.endpoint in _heavy_api_routes: - _libc.malloc_trim(0) - app.register_blueprint(main.make_blueprint()) app.register_blueprint(account.make_blueprint(), url_prefix="/account") app.register_blueprint(admin.make_blueprint(), url_prefix="/admin") diff --git a/securedrop/requirements/develop-requirements.in b/securedrop/requirements/develop-requirements.in index 80f4e910d61..404df8728e7 100644 --- a/securedrop/requirements/develop-requirements.in +++ b/securedrop/requirements/develop-requirements.in @@ -4,7 +4,7 @@ ansible==6.7.0 ansible-compat<3.0.0 argon2_cffi>=20.1.0 cffi>=2.0.0 -cryptography>=46.0.6 # >= for CVE-2026-34073 +cryptography>=46.0.5 # >= for CVE-2026-26007 diffoscope docker # Needed for dig ansible lookup diff --git a/securedrop/requirements/develop-requirements.txt b/securedrop/requirements/develop-requirements.txt index bb610e339d5..19aa98de5d5 100644 --- a/securedrop/requirements/develop-requirements.txt +++ b/securedrop/requirements/develop-requirements.txt @@ -254,56 +254,56 @@ cookiecutter==2.6.0 \ --hash=sha256:a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d \ --hash=sha256:db21f8169ea4f4fdc2408d48ca44859349de2647fbe494a9d6c3edfc0542c21c # via molecule -cryptography==46.0.6 \ - --hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \ - --hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \ - --hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \ - --hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \ - --hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \ - --hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \ - --hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \ - --hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \ - --hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \ - --hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \ - --hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \ - --hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \ - --hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \ - --hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \ - --hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \ - --hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \ - --hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \ - --hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \ - --hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \ - --hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \ - --hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \ - --hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \ - --hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \ - --hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \ - --hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \ - --hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \ - --hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \ - --hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \ - --hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \ - --hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \ - --hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \ - --hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \ - --hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \ - --hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \ - --hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \ - --hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \ - --hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \ - --hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \ - --hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \ - --hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \ - --hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \ - --hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \ - --hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \ - --hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \ - --hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \ - --hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \ - --hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \ - --hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \ - --hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4 +cryptography==46.0.5 \ + --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ + --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ + --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 # via # -r requirements/develop-requirements.in # ansible-core diff --git a/securedrop/requirements/requirements.in b/securedrop/requirements/requirements.in index 914a960217b..06623750337 100644 --- a/securedrop/requirements/requirements.in +++ b/securedrop/requirements/requirements.in @@ -4,7 +4,7 @@ babel>=2.9.1 cffi==2.0.0 # This version needs Rust for compilation. -cryptography>=46.0.6 # >= for CVE-2026-34073 +cryptography>=46.0.5 # >= for CVE-2026-26007 Flask-Babel>=1.0.0 Flask-SQLAlchemy==2.5.1 diff --git a/securedrop/requirements/requirements.txt b/securedrop/requirements/requirements.txt index 28fb0dac572..ee4acb789f0 100644 --- a/securedrop/requirements/requirements.txt +++ b/securedrop/requirements/requirements.txt @@ -122,56 +122,56 @@ click==8.0.3 \ # via # flask # rq -cryptography==46.0.6 \ - --hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \ - --hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \ - --hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \ - --hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \ - --hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \ - --hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \ - --hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \ - --hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \ - --hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \ - --hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \ - --hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \ - --hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \ - --hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \ - --hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \ - --hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \ - --hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \ - --hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \ - --hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \ - --hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \ - --hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \ - --hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \ - --hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \ - --hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \ - --hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \ - --hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \ - --hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \ - --hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \ - --hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \ - --hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \ - --hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \ - --hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \ - --hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \ - --hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \ - --hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \ - --hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \ - --hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \ - --hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \ - --hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \ - --hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \ - --hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \ - --hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \ - --hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \ - --hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \ - --hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \ - --hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \ - --hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \ - --hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \ - --hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \ - --hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4 +cryptography==46.0.5 \ + --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ + --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ + --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 # via -r requirements/requirements.in flask==2.0.3 \ --hash=sha256:59da8a3170004800a2837844bfa84d49b022550616070f7cb1a659682b2e7c9f \ diff --git a/securedrop/setup.py b/securedrop/setup.py index f39284f6741..c9dfd044ee4 100644 --- a/securedrop/setup.py +++ b/securedrop/setup.py @@ -4,7 +4,7 @@ setuptools.setup( name="securedrop-app-code", - version="2.16.0~rc1", + version="2.15.0~rc1", author="Freedom of the Press Foundation", author_email="securedrop@freedom.press", description="SecureDrop Server", diff --git a/securedrop/tests/test_journalist_api.py b/securedrop/tests/test_journalist_api.py index 9e9e9244027..faf776c10a5 100644 --- a/securedrop/tests/test_journalist_api.py +++ b/securedrop/tests/test_journalist_api.py @@ -6,7 +6,6 @@ from pathlib import Path from uuid import UUID, uuid4 -import pytest from db import db from encryption import EncryptionManager from flask import url_for @@ -1477,60 +1476,3 @@ def test_download_submission_range(journalist_app, test_files, journalist_api_to assert partial_response.headers.get("Content-Length") == str(range_end - range_start) assert len(partial_response.data) == range_end - range_start assert full_response.data[range_start:] == partial_response.data - - -@pytest.mark.parametrize( - ("endpoint", "method", "should_trim"), - [ - ("api2.index", "GET", True), - ("api2.data", "POST", True), - ("api.get_endpoints", "GET", False), - ("api.get_current_user", "GET", False), - ], -) -def test_authenticated_routes_call_malloc_trim_only_if_heavy( - mocker, journalist_app, journalist_api_token, endpoint, method, should_trim -): - """ - Verify the teardown_request hook invokes malloc_trim() only for the - heavy APIv2 routes and not for other routes. - """ - mock_libc = mocker.patch("journalist_app._libc") - - with journalist_app.test_client() as app: - app.open( - url_for(endpoint), - method=method, - headers=get_api_headers(journalist_api_token), - ) - - if should_trim: - mock_libc.malloc_trim.assert_called_once_with(0) - else: - mock_libc.malloc_trim.assert_not_called() - - -def test_login_calls_malloc_trim(mocker, journalist_app, test_journo): - """ - Verify the teardown_request hook invokes malloc_trim() for the - APIv1 login endpoint (api.get_token), which also loads the full - database into memory. - """ - mock_libc = mocker.patch("journalist_app._libc") - - with journalist_app.test_client() as app: - valid_token = TOTP(test_journo["otp_secret"]).now() - response = app.post( - url_for("api.get_token"), - data=json.dumps( - { - "username": test_journo["username"], - "passphrase": test_journo["password"], - "one_time_code": valid_token, - } - ), - headers=get_api_headers(), - ) - assert response.status_code == 200 - - mock_libc.malloc_trim.assert_called_once_with(0) diff --git a/securedrop/translations/ar/LC_MESSAGES/messages.po b/securedrop/translations/ar/LC_MESSAGES/messages.po index de7b6ce25f5..a980219173e 100644 --- a/securedrop/translations/ar/LC_MESSAGES/messages.po +++ b/securedrop/translations/ar/LC_MESSAGES/messages.po @@ -4,7 +4,20 @@ # FIRST AUTHOR , 2017. # Ahmad Gharbeia أحمد غربية , 2017. msgid "" -msgstr "Project-Id-Version: SecureDrop 0.3.12\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPOT-Creation-Date: 2017-09-02 07:28+0000\nPO-Revision-Date: 2026-02-26 20:39+0000\nLast-Translator: Soufiane Hti \nLanguage-Team: Arabic \nLanguage: ar\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\nX-Generator: Weblate 5.16\nGenerated-By: Babel 2.4.0\n" +msgstr "" +"Project-Id-Version: SecureDrop 0.3.12\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"POT-Creation-Date: 2017-09-02 07:28+0000\n" +"PO-Revision-Date: 2025-03-11 17:34+0000\n" +"Last-Translator: anonymous \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" +"X-Generator: Weblate 5.10\n" +"Generated-By: Babel 2.4.0\n" msgid "Name too long" msgstr "الاسم طويلٌ جداً" @@ -755,7 +768,7 @@ msgid "Date" msgstr "التاريخ" msgid "There are no submissions." -msgstr "لا توجد مشاركات." +msgstr "" msgid "Filter by codename" msgstr "الترشيح بالاسم الرمزي" diff --git a/securedrop/translations/fa/LC_MESSAGES/messages.po b/securedrop/translations/fa/LC_MESSAGES/messages.po index 1912d94ceeb..a390e3b3c8e 100644 --- a/securedrop/translations/fa/LC_MESSAGES/messages.po +++ b/securedrop/translations/fa/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , 2018. # msgid "" -msgstr "Project-Id-Version: SecureDrop 0.8.0~rc1\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPO-Revision-Date: 2026-04-15 18:54+0000\nLast-Translator: Cory Francis Myers \nLanguage-Team: Persian \nLanguage: fa\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n > 1;\nX-Generator: Weblate 5.16.2\nGenerated-By: Babel 2.5.1\n" +msgstr "Project-Id-Version: SecureDrop 0.8.0~rc1\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPO-Revision-Date: 2026-01-30 14:39+0000\nLast-Translator: Maryam Azad \nLanguage-Team: Persian \nLanguage: fa\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n > 1;\nX-Generator: Weblate 5.15.2\nGenerated-By: Babel 2.5.1\n" msgid "Name too long" msgstr "نام بیش از حد طولانی است" diff --git a/securedrop/translations/fr_FR/LC_MESSAGES/messages.po b/securedrop/translations/fr_FR/LC_MESSAGES/messages.po index f0090aaf145..63a0b942bfe 100644 --- a/securedrop/translations/fr_FR/LC_MESSAGES/messages.po +++ b/securedrop/translations/fr_FR/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ # FIRST AUTHOR , 2017. # msgid "" -msgstr "Project-Id-Version: SecureDrop 0.3.12\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPOT-Creation-Date: 2017-09-02 07:28+0000\nPO-Revision-Date: 2026-04-08 22:39+0000\nLast-Translator: \"AO yahoe.001\" \nLanguage-Team: French \nLanguage: fr_FR\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n > 1;\nX-Generator: Weblate 5.16.2\nGenerated-By: Babel 2.4.0\n" +msgstr "Project-Id-Version: SecureDrop 0.3.12\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPOT-Creation-Date: 2017-09-02 07:28+0000\nPO-Revision-Date: 2026-01-31 17:39+0000\nLast-Translator: AO Localization Lab \nLanguage-Team: French \nLanguage: fr_FR\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n > 1;\nX-Generator: Weblate 5.15.2\nGenerated-By: Babel 2.4.0\n" msgid "Name too long" msgstr "Le nom est trop long" @@ -724,7 +724,7 @@ msgid "Select All" msgstr "Tout sélectionner" msgid "Select Unread" -msgstr "Choisir les non lus" +msgstr "Sélectionner les non lus" msgid "Select None" msgstr "Ne rien sélectionner" @@ -768,7 +768,7 @@ msgid "Write a message." msgstr "Rédiger un message." msgid "Select a file to upload." -msgstr "Choisir un fichier à téléverser." +msgstr "Sélectionner un fichier à téléverser." msgid "Message text too long." msgstr "Le texte du message est trop long." @@ -780,7 +780,7 @@ msgid "Your connection is not anonymous right now!" msgstr "Votre connexion n’est pas anonyme actuellement !" msgid "You were redirected because you are already logged in. If you want to create a new account, you should log out first." -msgstr "Vous avez été redirigé, car vous êtes déjà connecté. Si vous voulez créer un nouveau compte, vous devriez d’abord vous déconnecter." +msgstr "Vous avez été redirigé, car vous êtes déjà connecté. Si vous souhaitez créer un nouveau compte, vous devriez d’abord vous déconnecter." msgid "You are already logged in. Please verify your codename as it may differ from the one displayed on the previous page." msgstr "Vous êtes déjà connecté. Vérifiez votre nom de code, car il pourrait être différent de celui affiché sur la page précédente." @@ -1065,7 +1065,7 @@ msgid "If you are not using Tor Browser, you may not be anonymouspourriez ne pas être anonyme." msgid "If you want to submit information to SecureDrop, we strongly advise you to install Tor Browser and use it to access our site safely and anonymously." -msgstr "Si vous voulez envoyer des renseignements à SecureDrop, nous vous conseillons vivement d’installer le Navigateur Tor et de l’utiliser pour accéder à notre site en toute sécurité et anonymement." +msgstr "Si vous souhaitez envoyer des renseignements à SecureDrop, nous vous conseillons vivement d’installer le Navigateur Tor et de l’utiliser pour accéder à notre site en toute sécurité et anonymement." msgid "Copy and paste the following address into your browser and follow the instructions to download and install Tor Browser:" msgstr "Copiez et collez l’adresse suivante dans votre navigateur et suivez les instructions pour télécharger et installer le Navigateur Tor :" @@ -1092,7 +1092,7 @@ msgid "SecureDrop encrypts files and messages after they are submitted. Encrypti msgstr "SecureDrop chiffre les fichiers et messages une fois qu’ils ont été envoyés. Le chiffrement des messages et fichiers avant leur envoi peut fournir une couche de sécurité supplémentaire avant que vos données parviennent au serveur SecureDrop." msgid "If you are already familiar with the GPG encryption software, you may wish to encrypt your submissions yourself. To do so:" -msgstr "Si vous connaissez déjà le logiciel de chiffrement GPG, vous pouvez chiffrer vos documents vous-même. Pour ce faire :" +msgstr "Si vous connaissez déjà le logiciel de chiffrement GPG, vous souhaitez peut-être chiffrer vos documents vous-même. Pour ce faire :" msgid "" "Download the public key. It will be saved to a file called:\n" @@ -1114,7 +1114,7 @@ msgid "Encrypt your submission. Open the terminal and enter this gpg command:" msgstr "Chiffrez votre envoi. Ouvrez un terminal et saisissez cette commande gpg :" msgid "gpg --recipient '{submission_key_fpr}' --encrypt /path/to/submission" -msgstr "gpg --recipient '{submission_key_fpr}' --encrypt /chemin/vers/envoi" +msgstr "gpg --recipient '{submission_key_fpr}' --encrypt /chemin/vers/submission" msgid "Upload your encrypted submission. It will have the same filename as the unencrypted file, with .gpg at the end (e.g. internal_memo.pdf.gpg)" msgstr "Téléversez votre envoi chiffré. Il aura le même nom de fichier que le fichier non chiffré, avec .gpg à la fin (p. ex. mémo_interne.pdf.gpg)" diff --git a/securedrop/translations/pt_BR/LC_MESSAGES/messages.po b/securedrop/translations/pt_BR/LC_MESSAGES/messages.po index ba260bca480..7f4323c8416 100644 --- a/securedrop/translations/pt_BR/LC_MESSAGES/messages.po +++ b/securedrop/translations/pt_BR/LC_MESSAGES/messages.po @@ -4,7 +4,19 @@ # FIRST AUTHOR , 2017. # msgid "" -msgstr "Project-Id-Version: SecureDrop 0.4.3\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPO-Revision-Date: 2026-04-15 18:54+0000\nLast-Translator: Cory Francis Myers \nLanguage-Team: Portuguese (Brazil) \nLanguage: pt_BR\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n > 1;\nX-Generator: Weblate 5.16.2\nGenerated-By: Babel 2.4.0\n" +msgstr "" +"Project-Id-Version: SecureDrop 0.4.3\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2023-06-13 19:56+0000\n" +"Last-Translator: Guilherme \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.1\n" +"Generated-By: Babel 2.4.0\n" msgid "Name too long" msgstr "Nome muito longo" @@ -24,7 +36,7 @@ msgid "{time} ago" msgstr "há {time}" msgid "You have been logged out due to inactivity or a problem with your session." -msgstr "Você foi deslogada por causa de inatividade ou problema com a sua sessão." +msgstr "" msgid "SecureDrop" msgstr "SecureDrop" @@ -362,7 +374,7 @@ msgid "No users to display" msgstr "Não há usuários para exibir" msgid "Update instance configuration" -msgstr "Atualizar a configuração da instância" +msgstr "" msgid "INSTANCE CONFIG" msgstr "CONFIGURAÇÃO DE INSTÂNCIA" @@ -410,7 +422,7 @@ msgid "Can't scan the barcode? You can manually pair FreeOTP with this account b msgstr "Não consegue escanear o código de barras? Você pode emparelhar manualmente o FreeOTP com esta conta inserindo o seguinte 2FA no aplicativo:" msgid "Critical:  The operating system used by your SecureDrop servers has reached its end-of-life. A manual update is required to re-enable the Source Interface and remain safe. Please contact your administrator. Learn More" -msgstr "Crítico:  O sistema operacional usado pelo seus servidores SecureDrop atingiu o fim da vida. Uma atualização manual é requerida para reabilitar a Interface da Fonte e continuar segura. Por favor entre em contato com sua administradora. Aprenda Mais" +msgstr "" msgid "Navigation" msgstr "Navegação" @@ -428,7 +440,7 @@ msgid "Log Out" msgstr "Encerrar sessão" msgid "Return to All Sources" -msgstr "Retornar para Todas Fontes" +msgstr "" msgid "Powered by SecureDrop {version}." msgstr "Este site utiliza o SecureDrop {version}." @@ -443,13 +455,13 @@ msgid "All messages, files, and replies from sources are stored as encrypted fil msgstr "Todas as mensagens, arquivos e respostas enviados por fontes sao armazenados em formato de arquivos criptografados por motidos de segurança. Para acessá-los, é preciso descriptografá-los no seu Secure Viewing Station." msgid "Download Selected Files" -msgstr "Baixar Arquivos Selecionados" +msgstr "" msgid "Download Selected" msgstr "Baixar Seleção" msgid "Delete Selected Files" -msgstr "Apagar Arquivos Selecionados" +msgstr "" msgid "Delete Selected" msgstr "Apagar Seleção" @@ -473,7 +485,7 @@ msgid "Read" msgstr "Lida" msgid "Uploaded File" -msgstr "Arquivo Enviado" +msgstr "" msgid "Reply" msgstr "Responder" @@ -503,7 +515,7 @@ msgid "An encryption key will be generated for the source the next time they log msgstr "Uma chave criptográfica será gerada para esta fonte na próxima vez que ela se conectar. Em seguida, você poderá responder a ela aqui." msgid "Delete Source Account" -msgstr "Apagar Conta de Fonte" +msgstr "" msgid "Are you sure?" msgstr "Você tem certeza?" @@ -571,7 +583,7 @@ msgid "Submission Preferences" msgstr "Configurações de Envio" msgid "Prevent sources from uploading files. Sources will still be able to send messages." -msgstr "Prevenir fontes de subir arquivos. Fontes ainda serão capazes de enviar mensagens." +msgstr "" msgid "Prevent sources from sending initial messages shorter than the minimum required length:" msgstr "Previne fontes de enviar mensagens iniciais mais curtas que o comprimento mínimo necessário:" @@ -679,25 +691,25 @@ msgid "Reset Security Key Credentials" msgstr "Redefinir credenciais da chave de segurança" msgid "Download Selected Unread Submissions" -msgstr "Baixar Submissões Não Lidas Selecionadas" +msgstr "" msgid "Download Unread" msgstr "Baixar Não Lidas" msgid "Download Selected Submissions" -msgstr "Baixar Submissões Selecionadas" +msgstr "" msgid "Download" msgstr "Baixar" msgid "Star Selected Submissions" -msgstr "Marcar Submissões Selecionadas" +msgstr "" msgid "Star" msgstr "Marcar" msgid "Un-star Selected Submissions" -msgstr "Desmarcar Submissões Selecionadas" +msgstr "" msgid "Un-star" msgstr "Desmarcar" @@ -715,7 +727,7 @@ msgid "Date" msgstr "Data" msgid "There are no submissions." -msgstr "Não há submissões." +msgstr "" msgid "Filter by codename" msgstr "filtrar por codinome" @@ -742,7 +754,7 @@ msgid "Choose language" msgstr "Escolha a língua" msgid "Log in to access the journalist interface" -msgstr "Inicie a sessão para acessar a interface de jornalista" +msgstr "" msgid "Password" msgstr "Senha" @@ -751,15 +763,15 @@ msgid "Show password" msgstr "Mostrar senha" msgid "Log In to Journalist Interface" -msgstr "Iniciar sessão para Interface de Jornalista" +msgstr "" msgid "LOG IN" msgstr "ACESSAR" msgid "Field must be 1 character long." msgid_plural "Field must be between 1 and {max_codename_len} characters long." -msgstr[0] "Campo precisa ter 1 caractere." -msgstr[1] "Campo precisa ter entre 1 e" +msgstr[0] "" +msgstr[1] "" msgid "Invalid input." msgstr "Entrada inválida." @@ -828,7 +840,7 @@ msgid "Important" msgstr "Importante" msgid "You have been logged out due to inactivity or a problem with your session. Click the \"\" New Identity button in your Tor Browser's toolbar before moving on. This will clear your Tor Browser activity data on this device." -msgstr "Você foi desconectada por causa de inatividade ou um problema com a sua sessão. Clique no botão de \"\" Nova Identidade na barra de ferramentas de seu Tor Browser antes de prosseguir. Isso limpará os dados de atividade do Tor Browser neste dispositivo." +msgstr "" msgid "Protecting Journalists and Sources" msgstr "Protegendo Jornalistas e Fontes" @@ -837,10 +849,10 @@ msgid "Skip to notification" msgstr "Avançar para as notificações" msgid "Return to Submission Page" -msgstr "Retornar à Pagina de Submissão" +msgstr "" msgid "Return to Home Page" -msgstr "Retornar à Página Inicial" +msgstr "" msgid "We're sorry, our SecureDrop is currently offline." msgstr "Desculpas, o nosso SecureDrop está offline atualmente." @@ -885,10 +897,10 @@ msgid "Keep it safe. There is no account recovery option." msgstr " Mantenha seguro. Não existe opção de recuperar conta." msgid "Continue to Submission Page" -msgstr "Continue para Página de Submissão" +msgstr "" msgid "Welcome" -msgstr "Bem-vinda(o)" +msgstr "Bem-vindo(a)" msgid "Your Tor Browser's Security Level is too low. Use the \""Security button in your browser’s toolbar to change it." msgstr "O nível de segurança do seu navegador Tor está muito baixo. Use o botão \""nível  no seu navegador para modificá-lo." @@ -900,22 +912,22 @@ msgid "Click the \""Security msgstr "Clique no \""nível na barra de ferramentas, acima" msgid "Click Settings to open Security Level preferences" -msgstr "Clique em Configurações para abrir as preferências de Níveis de Segurança" +msgstr "" msgid "Click Change… and select Safest" -msgstr "Clique em Alterar... e selecione Mais Seguro" +msgstr "" msgid "Click Save and restart." -msgstr "Clique em Salvar e reiniciar." +msgstr "" msgid "Tor Browser will restart, with its security level set to Safest. After the restart, come back to this site." -msgstr "Tor Browser reiniciará com o seu nível segurança configurado para Mais Seguro. Depois de reiniciar, volte a este site." +msgstr "" msgid "It is recommended to use Tor Browser to access SecureDrop: Learn how to install it, or ignore this warning to continue." msgstr "Recomenda-se o uso do navegador Tor para acessar o SecureDrop: Veja como instalar o Tor ou ignore este aviso e continue." msgid "It is recommended you use the desktop version of Tor Browser to access SecureDrop, as Tor Browser for Android does not provide the same level of security and anonymity as the desktop version. Learn how to install it, or ignore this warning to continue." -msgstr "É recomendado você usar Tor Browser na versão desktop para acessar SecureDrop porque Tor Browser para Android não oferece o mesmo nível de segurança e anonimato comparado com a versão desktop. Aprenda como instala-lo ou ignore esse alerta para continuar." +msgstr "" msgid "{} logo" msgstr "{} logotipo" @@ -927,7 +939,7 @@ msgid "First time submitting to our SecureDrop? Start here." msgstr "Este é o seu primeiro envio pelo nosso SecureDrop? Comece por aqui." msgid "Get Started With Your First Submission" -msgstr "Iniciar Sua Primeira Submissão" +msgstr "" msgid "GET STARTED" msgstr "COMO COMEÇAR" @@ -939,10 +951,10 @@ msgid "Already have a codename? Check for replies or submit something new." msgstr "Você já criou um codinome? Verifique respostas ou envie novos documentos." msgid "Log In Using Your Codename" -msgstr "Acessar Usando Seu Codinome" +msgstr "" msgid "Log in" -msgstr "Acessar" +msgstr "" msgid "Enter Codename" msgstr "Inserir Codinome" @@ -951,16 +963,16 @@ msgid "Enter your codename" msgstr "Digite o seu codinome" msgid "Cancel and Return to Previous Page" -msgstr "Cancelar e Retornar à Página Anterior" +msgstr "" msgid "CANCEL" msgstr "CANCELAR" msgid "Additional Action Required" -msgstr "Ação Adicional Requerida" +msgstr "" msgid "Log Back In" -msgstr "Acessar Novamente" +msgstr "" msgid "One more thing..." msgstr "Uma última coisa..." @@ -996,10 +1008,10 @@ msgid "Anti-spam check. Do not fill this in!" msgstr "Checagem Anti-spam. Não preencha este campo!" msgid "Cancel and Clear Uploaded Content" -msgstr "Cancelar ou Limpar Conteúdo Carregado" +msgstr "" msgid "Submit Uploaded Content" -msgstr "Envie Conteúdo Carregado" +msgstr "" msgid "Read Replies" msgstr "Ler Respostas" @@ -1014,7 +1026,7 @@ msgid "Delete reply from {timestamp}?" msgstr "Deletar resposta de {timestamp}?" msgid "Delete Reply" -msgstr "Apagar Resposta" +msgstr "" msgid "Delete All Replies" msgstr "Apagar todas as respostas" @@ -1038,7 +1050,7 @@ msgid "Sorry, we couldn't locate what you requested." msgstr "Desculpe, não pudemos localizar o conteúdo que você pediu." msgid "Warning: Proxy Detected" -msgstr "Atenção: Proxy Detectado" +msgstr "" msgid "Proxy Service Detected" msgstr "Serviço Proxy detectado" @@ -1053,7 +1065,7 @@ msgid "Always use Tor Browser ({}) to access SecureDrop. Valid Secu msgstr "Sempre use o Navegador Tor ({}) para acessar o SecureDrop. Os endereços de site SecureDrop válidos terminam com .onion. O endereço correto deste site é:" msgid "If you are already using Tor Browser, copy the address above and click Tor Browser's New Identity button before you access SecureDrop." -msgstr "Se você já está usando Tor Browser, copie o endereço acima e clique no botão Nova Identidade de Tor Browser antes de acessar SecureDrop." +msgstr "" msgid "If there is a reasonable risk of your Internet traffic being monitored, consider connecting from a different location or network." msgstr "Caso haja um risco significativo de seu trafego na Internet estar sendo monitorado, considere conectar de uma diferente localização ou rede." @@ -1080,7 +1092,7 @@ msgid "Codename" msgstr "Codinome" msgid "Reveal Codename" -msgstr "Revelar Codinome" +msgstr "" msgid "Show Codename" msgstr "Mostrar codinome" diff --git a/securedrop/translations/sv/LC_MESSAGES/messages.po b/securedrop/translations/sv/LC_MESSAGES/messages.po index de82d872527..16a90fad90e 100644 --- a/securedrop/translations/sv/LC_MESSAGES/messages.po +++ b/securedrop/translations/sv/LC_MESSAGES/messages.po @@ -4,7 +4,19 @@ # FIRST AUTHOR , 2017. # msgid "" -msgstr "Project-Id-Version: SecureDrop 0.5-rc4\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPO-Revision-Date: 2026-02-23 12:39+0000\nLast-Translator: Jonas Waga \nLanguage-Team: Swedish \nLanguage: sv\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Generator: Weblate 5.16\nGenerated-By: Babel 2.4.0\n" +msgstr "" +"Project-Id-Version: SecureDrop 0.5-rc4\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2024-12-18 09:00+0000\n" +"Last-Translator: Jonas Waga \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.8.4\n" +"Generated-By: Babel 2.4.0\n" msgid "Name too long" msgstr "Namnet är för långt" @@ -410,7 +422,7 @@ msgid "Can't scan the barcode? You can manually pair FreeOTP with this account b msgstr "Kan du inte skanna koden? Du kan manuellt koppla FreeOTP till detta konto genom att skriva in denna tvåfaktorhemligheten i FreeOTP:" msgid "Critical:  The operating system used by your SecureDrop servers has reached its end-of-life. A manual update is required to re-enable the Source Interface and remain safe. Please contact your administrator. Learn More" -msgstr "Kritiskt:  Operativsystemet som används av era SecureDrop-servrar har nåt sitt slutdatum. En manuell uppdatering krävs för att återaktivera källgränssnittet och för att fortsätta vara säker. Vänligen kontakta din administratör.Läs mer" +msgstr "" msgid "Navigation" msgstr "Navigering" @@ -900,22 +912,22 @@ msgid "Click the \""Security msgstr "Klicka på \""Security i menyraden ovan" msgid "Click Settings to open Security Level preferences" -msgstr "Klicka på Inställningar för att öppna Säkerhetsnivå-inställningarna" +msgstr "" msgid "Click Change… and select Safest" -msgstr "Klicka på Ändra… och välj Säkrast" +msgstr "" msgid "Click Save and restart." -msgstr "Klicka Spara och starta om." +msgstr "" msgid "Tor Browser will restart, with its security level set to Safest. After the restart, come back to this site." -msgstr "Tor Browser kommer att starta om, med säkerhetsnivån satt till Säkrast. Efter omstarten, gå tillbaka till den här sidan." +msgstr "" msgid "It is recommended to use Tor Browser to access SecureDrop: Learn how to install it, or ignore this warning to continue." msgstr "Det är rekommenderat att använda Tor Browser för att använda SecureDrop: Lär dig hur den installeras, eller ignorera denna varning och fortsätt." msgid "It is recommended you use the desktop version of Tor Browser to access SecureDrop, as Tor Browser for Android does not provide the same level of security and anonymity as the desktop version. Learn how to install it, or ignore this warning to continue." -msgstr "Det är rekommenderat att använda datorversionen av Tor Browser för att nå SecureDrop, eftersom Tor Browser för Android inte tillhandahåller samma nivå av säkerhet och anonymitet.Lär dig hur du installerar den, eller ignorera denna varning och fortsätt." +msgstr "" msgid "{} logo" msgstr "{} logga" diff --git a/securedrop/translations/tr/LC_MESSAGES/messages.po b/securedrop/translations/tr/LC_MESSAGES/messages.po index 03359b47df3..9d5c89bcb4c 100644 --- a/securedrop/translations/tr/LC_MESSAGES/messages.po +++ b/securedrop/translations/tr/LC_MESSAGES/messages.po @@ -4,7 +4,19 @@ # FIRST AUTHOR , 2017. # msgid "" -msgstr "Project-Id-Version: SecureDrop 0.5-rc4\nReport-Msgid-Bugs-To: securedrop@freedom.press\nPO-Revision-Date: 2026-04-10 09:10+0000\nLast-Translator: tekrei \nLanguage-Team: Turkish \nLanguage: tr\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Generator: Weblate 5.16.2\nGenerated-By: Babel 2.4.0\n" +msgstr "" +"Project-Id-Version: SecureDrop 0.5-rc4\n" +"Report-Msgid-Bugs-To: securedrop@freedom.press\n" +"PO-Revision-Date: 2025-07-03 07:37+0000\n" +"Last-Translator: tekrei \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.11.1\n" +"Generated-By: Babel 2.4.0\n" msgid "Name too long" msgstr "İsim çok uzun" @@ -410,7 +422,7 @@ msgid "Can't scan the barcode? You can manually pair FreeOTP with this account b msgstr "Barkodu okutamıyor musunuz? Şu iki aşamalı kimlik doğrulama parolasını uygulamaya yazarak FreeOTP ile bu hesabı el ile eşleştirebilirsiniz:" msgid "Critical:  The operating system used by your SecureDrop servers has reached its end-of-life. A manual update is required to re-enable the Source Interface and remain safe. Please contact your administrator. Learn More" -msgstr "Önemli:  SecureDrop sunucularınızda kullanılan işletim sisteminin destek süresi sona ermiştir. Kaynak Arayüzü'nü yeniden etkinleştirmek ve güvenliğinizi sürdürmek için manuel bir güncelleme yapılması gerekmektedir. Lütfen sistem yöneticinizle iletişime geçin. Daha Fazla Bilgi" +msgstr "" msgid "Navigation" msgstr "Gezinme" @@ -915,7 +927,7 @@ msgid "It is recommended to use Tor Browser to access SecureDrop:SecureDrop uygulamasına erişmek için Tor Browser kullanmanız önerilir:Nasıl kuracağınızı öğrenin ya da bu uyarıyı görmezden gelerek devam edin." msgid "It is recommended you use the desktop version of Tor Browser to access SecureDrop, as Tor Browser for Android does not provide the same level of security and anonymity as the desktop version. Learn how to install it, or ignore this warning to continue." -msgstr "SecureDrop'a erişmek için Tor Browser'ın masaüstü sürümünü kullanmanızı öneriyoruz. Çünkü Android için Tor Browser, masaüstü sürümüyle aynı düzeyde güvenlik ve anonimlik sağlamaz. Yüklemeyi öğrenin veya devam etmek için bu uyarıyı göz ardı edin." +msgstr "" msgid "{} logo" msgstr "{} logosu" @@ -1121,7 +1133,7 @@ msgstr "Şifrelenmiş gönderilerinizi yükleyin. Şifrelenmiş dosyanın adı #, fuzzy msgid "Important: If you wish to remain anonymous, do not use GPG to sign the encrypted file (with the --sign or -s flag) as this will reveal your GPG identity to us." -msgstr "Önemli: Anonim kalmak istiyorsanız, dosyayı GPG ile (--sign ya da -s kullanarak) imzalamayın çünkü bu GPG kimliğinizi açığa çıkarır." +msgstr "Önemli: Anonim kalmak istiyorsanız, dosyanın GPG tarafından (--sign ya da -s parametreleriyle) imzalanmasına izin vermeyin, yoksa GPG kimliğiniz açığa çıkar." msgid "Back to submission page" msgstr "Gönderi sayfasına geri dön" diff --git a/securedrop/version.py b/securedrop/version.py index b214549dca5..9f38aa82fcc 100644 --- a/securedrop/version.py +++ b/securedrop/version.py @@ -1 +1 @@ -__version__ = "2.16.0~rc1" +__version__ = "2.15.0~rc1"