Compare commits

...

44 Commits

Author SHA1 Message Date
timvisee
c71100c82a Bump version to 3.4.24 2025-04-22 22:03:29 +02:00
Tim Visée
4f2dd96708 Merge branch 'update-dependencies' into 'master'
Update dependencies

See merge request timvisee/send!35
2025-04-22 21:59:01 +02:00
Tim Visée
d8456c2c51 Merge branch 'add-custom-upload-download-warnings' into 'master'
Add customizable warnings shown on upload and download pages

See merge request timvisee/send!34
2025-04-22 21:55:25 +02:00
timvisee
b7324f3a5b Update dependencies 2025-04-22 21:35:39 +02:00
timvisee
6890165f67 Add customizable warnings shown on upload and download pages 2025-04-22 21:31:23 +02:00
Tim Visée
5124572dba Merge branch 'fix-node-18-crypto' into 'master'
Fix build failure due to crypto when using Node 18 or higher

See merge request timvisee/send!33
2025-02-04 19:32:41 +00:00
timvisee
0c1819bb15 Fix build failure due to crypto when using Node 18 or higher 2025-02-04 20:08:03 +01:00
LOLSALT
906990991e Update send.ftl 2024-12-20 11:34:42 +01:00
LOLSALT
48bdf734c5 Update send.ftl 2024-12-20 11:34:42 +01:00
LOLSALT
cf63e0e804 Update send.ftl 2024-12-20 11:34:42 +01:00
LOLSALT
ec66c2dc4e Update send.ftl 2024-12-20 11:34:42 +01:00
LOLSALT
67dfc94ef3 Update send.ftl 2024-12-20 11:34:42 +01:00
Filip Znachor
f54f3ccaa2 Update CS send.ftl
Improved Czech translations
2024-04-19 12:12:13 +02:00
DeAlexPesh
a35e2e58a3 Update RU send.ftl 2024-03-13 17:14:17 +01:00
Tim Visée
6ad2885a16 Merge branch 'aron9861623-master-patch-24529' into 'master'
Fixed docker.md first example

See merge request timvisee/send!32
2023-06-09 13:31:51 +00:00
Aron Tecsi
70662888b1 Fixed docker.md first example 2023-06-09 11:19:42 +00:00
timvisee
9f09a79986 Merge branch 'emilstahl-patch-1' into master
See https://github.com/timvisee/send/pull/149
2023-02-27 21:45:59 +01:00
Emil Stahl
db64c0467a Small typo 2023-02-27 21:02:53 +01:00
Tim Visée
ca52f84aa5 Merge branch 'master' into 'master'
Add build for arm64v8

See merge request timvisee/send!27
2023-02-22 11:40:25 +00:00
timvisee
6fff664947 Bump version to 3.4.23 2023-02-14 13:42:39 +01:00
timvisee
439ac0ab7c Update dependencies 2023-02-14 13:41:10 +01:00
timvisee
dee6b3e9cc Merge branch 'tdulcet-passphrase' into master
See https://github.com/timvisee/send/pull/147
2023-02-14 13:38:30 +01:00
Teal Dulcet
dc9d072472 Increased password length limit to support passphrases. 2023-02-14 04:36:19 -08:00
simepy
91773832c1 Updated from timvisee/send master 2023-02-03 14:29:30 +01:00
timvisee
65730db0db Bump version to 3.4.22 2023-01-16 17:23:07 +01:00
timvisee
a86221b1cc Update dependencies 2023-01-16 17:00:14 +01:00
dependabot[bot]
bcc53f73c6 Bump decode-uri-component from 0.2.0 to 0.2.2
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-11 11:27:01 +00:00
dependabot[bot]
b0444f488b Bump convict from 6.2.3 to 6.2.4
Bumps [convict](https://github.com/mozilla/node-convict) from 6.2.3 to 6.2.4.
- [Release notes](https://github.com/mozilla/node-convict/releases)
- [Changelog](https://github.com/mozilla/node-convict/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mozilla/node-convict/commits)

---
updated-dependencies:
- dependency-name: convict
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-10 22:22:09 +00:00
Tim Visée
70a11e5300 Merge branch 'reset-dlimit-to-default' into 'master'
Reset download limit to default after uploading files

See merge request timvisee/send!30
2023-01-10 20:50:13 +00:00
Jun Omae
f62a99882d Reset download limit to default after uplaoding files 2023-01-06 17:42:45 +09:00
timvisee
309c7d63ac Change GitLab CI test image to node 16, add missing packages for testing 2022-12-20 20:04:45 +01:00
dependabot[bot]
1d75366f66 Bump loader-utils from 1.4.1 to 1.4.2
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.2/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.1...v1.4.2)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-18 00:43:28 +00:00
timvisee
0a849fb7c6 Revert "Bump node-forge and webpack-dev-server"
This reverts commit 88725df09d.
2022-11-14 19:43:09 +01:00
dependabot[bot]
88725df09d Bump node-forge and webpack-dev-server
Bumps [node-forge](https://github.com/digitalbazaar/forge) to 1.3.1 and updates ancestor dependency [webpack-dev-server](https://github.com/webpack/webpack-dev-server). These dependencies need to be updated together.


Updates `node-forge` from 0.10.0 to 1.3.1
- [Release notes](https://github.com/digitalbazaar/forge/releases)
- [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md)
- [Commits](https://github.com/digitalbazaar/forge/compare/0.10.0...v1.3.1)

Updates `webpack-dev-server` from 3.11.3 to 4.11.1
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.11.3...v4.11.1)

---
updated-dependencies:
- dependency-name: node-forge
  dependency-type: indirect
- dependency-name: webpack-dev-server
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-14 18:35:44 +00:00
dependabot[bot]
5a92e7e5e7 Bump minimatch and mocha
Bumps [minimatch](https://github.com/isaacs/minimatch) to 3.1.2 and updates ancestor dependency [mocha](https://github.com/mochajs/mocha). These dependencies need to be updated together.


Updates `minimatch` from 3.0.4 to 3.1.2
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

Updates `mocha` from 6.2.3 to 10.1.0
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v6.2.3...v10.1.0)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
- dependency-name: mocha
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-14 18:32:13 +00:00
dependabot[bot]
71541fc2b6 Bump loader-utils from 1.4.0 to 1.4.1
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.1/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-09 03:16:30 +00:00
Simon PERA
c524804c63 Add build for arm64v8 2022-10-25 19:08:27 +02:00
timvisee
5b4c0d2540 Merge branch 'JoshAtticus-patch-1' into master
See https://github.com/timvisee/send/pull/115
2022-10-05 16:05:01 +02:00
Josh
e7f3c91d0b Update config.js 2022-09-19 15:46:47 +08:00
Josh
8bb198b73e Remove firefox link 2022-09-17 12:33:03 +08:00
Tim Visée
9e188bc76c Merge branch 'registry-credentials' into 'master'
Refactor CI

See merge request timvisee/send!26
2022-09-14 14:37:33 +00:00
Marian Hähnlein
1353a54c49 Refactor CI 2022-09-12 13:53:00 +02:00
Tim Visée
4ae007167d Merge branch 'custom-css-undefined' into 'master'
Change default value for custom css to empty string

See merge request timvisee/send!25
2022-09-09 12:34:16 +00:00
Marian Hähnlein
660f36e584 Change default value for custom css to empty string 2022-09-08 14:16:00 +02:00
16 changed files with 6710 additions and 21202 deletions

View File

@@ -1,11 +1,23 @@
image: "node:15-slim"
stages: stages:
- test - test
- artifact
- release - release
before_script: # Build Send, run npm tests
test:
stage: test
image: "node:16-slim"
only:
- api
- branches
- chat
- merge_requests
- pushes
- schedules
- tags
- triggers
- web
before_script:
# Install dependencies # Install dependencies
- apt-get update - apt-get update
- apt-get install -y git python3 build-essential libxtst6 - apt-get install -y git python3 build-essential libxtst6
@@ -15,91 +27,46 @@ before_script:
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
- sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' - sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
- apt-get update - apt-get update
- apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils
- apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 --no-install-recommends - apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 --no-install-recommends
# Build Send, run npm tests
test:
stage: test
script: script:
- npm ci - npm ci
- npm run lint - npm run lint
- npm test - npm test
# Build Docker image, export Docker image artifact
artifact-docker:
stage: artifact
image: docker:latest
needs: []
services:
- docker:dind
variables:
IMG_FILE: "send:git-$CI_COMMIT_SHORT_SHA.tar"
IMG_NAME: "send:git-$CI_COMMIT_SHORT_SHA"
before_script: []
script:
- docker build -t $IMG_NAME .
- docker image save -o $IMG_FILE $IMG_NAME
artifacts:
name: artifact-docker
paths:
- $IMG_FILE
expire_in: 1 week
# Release public Docker image for the master branch
release-docker-master:
stage: release
image: docker:latest
dependencies:
- artifact-docker
services:
- docker:dind
only:
- master
variables:
IMG_IMPORT_FILE: "send:git-$CI_COMMIT_SHORT_SHA.tar"
IMG_IMPORT_NAME: "send:git-$CI_COMMIT_SHORT_SHA"
IMG_NAME: "registry.gitlab.com/timvisee/send:master-$CI_COMMIT_SHORT_SHA"
before_script: []
script:
# Login in to registry
- 'docker login registry.gitlab.com -u $DOCKER_USER -p $DOCKER_PASS'
# Load existing, retag for new image images
- docker image load -i $IMG_IMPORT_FILE
- docker tag $IMG_IMPORT_NAME $IMG_NAME
# Publish tagged image
- docker push $IMG_NAME
- 'echo "Docker image artifact published, available as:" && echo " docker pull $IMG_NAME"'
# Release public Docker image for a version tag
release-docker: release-docker:
stage: release stage: release
image: docker:latest image: docker:latest
dependencies:
- artifact-docker
services: services:
- docker:dind - docker:dind
only: only:
- /^v(\d+\.)*\d+$/ - api
variables: - branches
IMG_IMPORT_FILE: "send:git-$CI_COMMIT_SHORT_SHA.tar" - chat
IMG_IMPORT_NAME: "send:git-$CI_COMMIT_SHORT_SHA" - merge_requests
IMG_NAME: "registry.gitlab.com/timvisee/send:$CI_COMMIT_REF_NAME" - pushes
IMG_NAME_LATEST: "registry.gitlab.com/timvisee/send:latest" - schedules
before_script: [] - tags
- triggers
- web
script: script:
# Login in to registry - docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
- 'docker login registry.gitlab.com -u $DOCKER_USER -p $DOCKER_PASS' - docker buildx create --name sendBuilder
- docker buildx use sendBuilder
# Load existing, retag for new image images - |
- docker image load -i $IMG_IMPORT_FILE if [ "$CI_PIPELINE_SOURCE" == "merge_request_event" ]; then
- docker tag $IMG_IMPORT_NAME $IMG_NAME IMAGE_NAMES="$CI_REGISTRY_IMAGE/mr:$CI_MERGE_REQUEST_IID"
- docker tag $IMG_IMPORT_NAME $IMG_NAME_LATEST elif [ "$CI_COMMIT_TAG" != "" ]; then
IMAGE_NAMES="$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG $CI_REGISTRY_IMAGE:latest"
# Publish tagged image else
- docker push $IMG_NAME IMAGE_NAMES="$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:$CI_COMMIT_SHORT_SHA"
- docker push $IMG_NAME_LATEST fi
- |
- 'echo "Docker image artifact published, available as:" && echo " docker pull $IMG_NAME_LATEST" && echo " docker pull $IMG_NAME"' for image in $IMAGE_NAMES; do
docker buildx build --platform linux/amd64,linux/arm64 -t $image . --push
done
- |
echo "Container image pushed. You can pull it with";
for image in $IMAGE_NAMES; do
echo "docker pull $image"
done

View File

@@ -152,7 +152,7 @@ AWS example using Ubuntu Server `20.04`: [docs/AWS.md](docs/AWS.md)
- Web: _this repository_ - Web: _this repository_
- Command-line: [`ffsend`](https://github.com/timvisee/ffsend) - Command-line: [`ffsend`](https://github.com/timvisee/ffsend)
- Android: _see [Android](#android) section_ - Android: _see [Android](#android) section_
- Thunderbird: [FileLink provider for Send](https://addons.thunderbird.net/en-US/thunderbird/addon/filelink-provider-for-send/) - Thunderbird: [FileLink provider for Send](https://addons.thunderbird.net/thunderbird/addon/filelink-provider-for-send/)
#### Android #### Android

View File

@@ -17,6 +17,7 @@ export default class Archive {
constructor(files = [], defaultTimeLimit = 86400, defaultDownloadLimit = 1) { constructor(files = [], defaultTimeLimit = 86400, defaultDownloadLimit = 1) {
this.files = Array.from(files); this.files = Array.from(files);
this.defaultTimeLimit = defaultTimeLimit; this.defaultTimeLimit = defaultTimeLimit;
this.defaultDownloadLimit = defaultDownloadLimit;
this.timeLimit = defaultTimeLimit; this.timeLimit = defaultTimeLimit;
this.dlimit = defaultDownloadLimit; this.dlimit = defaultDownloadLimit;
this.password = null; this.password = null;
@@ -76,7 +77,7 @@ export default class Archive {
clear() { clear() {
this.files = []; this.files = [];
this.dlimit = 1; this.dlimit = this.defaultDownloadLimit;
this.timeLimit = this.defaultTimeLimit; this.timeLimit = this.defaultTimeLimit;
this.password = null; this.password = null;
} }

View File

@@ -26,7 +26,7 @@ function expiryInfo(translate, archive) {
} }
function password(state) { function password(state) {
const MAX_LENGTH = 32; const MAX_LENGTH = 4096;
return html` return html`
<div class="mb-2 px-1"> <div class="mb-2 px-1">
@@ -486,6 +486,16 @@ module.exports.empty = function(state, emit) {
})} })}
</button> </button>
`; `;
const warning = state.WEB_UI.UPLOAD_AREA_WARNING_HTML
? html`
<p
class="w-full mt-8 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
>
${raw(state.WEB_UI.UPLOAD_AREA_WARNING_HTML)}
</p>
`
: '';
return html` return html`
<send-upload-area <send-upload-area
class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded-default px-6 py-16 h-full w-full dark:border-grey-60" class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded-default px-6 py-16 h-full w-full dark:border-grey-60"
@@ -526,7 +536,7 @@ module.exports.empty = function(state, emit) {
> >
${state.translate('addFilesButton')} ${state.translate('addFilesButton')}
</label> </label>
${upsell} ${upsell} ${warning}
</send-upload-area> </send-upload-area>
`; `;
@@ -559,6 +569,16 @@ module.exports.preview = function(state, emit) {
${archiveDetails(state.translate, archive)} ${archiveDetails(state.translate, archive)}
</div> </div>
`; `;
const warning = state.WEB_UI.DOWNLOAD_WARNING_HTML
? html`
<p
class="w-full mt-4 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
>
${raw(state.WEB_UI.DOWNLOAD_WARNING_HTML)}
</p>
`
: '';
return html` return html`
<send-archive <send-archive
class="flex flex-col max-h-full bg-white p-4 w-full md:w-128 dark:bg-grey-90" class="flex flex-col max-h-full bg-white p-4 w-full md:w-128 dark:bg-grey-90"
@@ -574,6 +594,7 @@ module.exports.preview = function(state, emit) {
> >
${state.translate('downloadButtonLabel')} ${state.translate('downloadButtonLabel')}
</button> </button>
${warning}
</send-archive> </send-archive>
`; `;

View File

@@ -32,7 +32,7 @@ module.exports = function(state, emit) {
class="w-full border-l border-t border-b rounded-l-lg rounded-r-none ${invalid class="w-full border-l border-t border-b rounded-l-lg rounded-r-none ${invalid
? 'border-red dark:border-red-40' ? 'border-red dark:border-red-40'
: 'border-grey'} leading-loose px-2 py-1 dark:bg-grey-80" : 'border-grey'} leading-loose px-2 py-1 dark:bg-grey-80"
maxlength="32" maxlength="4096"
autocomplete="off" autocomplete="off"
placeholder="${state.translate('unlockInputPlaceholder')}" placeholder="${state.translate('unlockInputPlaceholder')}"
oninput="${inputChanged}" oninput="${inputChanged}"

View File

@@ -9,6 +9,7 @@ docker pull registry.gitlab.com/timvisee/send:latest
docker run -v $PWD/uploads:/uploads -p 1443:1443 \ docker run -v $PWD/uploads:/uploads -p 1443:1443 \
-e 'DETECT_BASE_URL=true' \ -e 'DETECT_BASE_URL=true' \
-e 'REDIS_HOST=localhost' \ -e 'REDIS_HOST=localhost' \
-e 'FILE_DIR=/uploads' \
registry.gitlab.com/timvisee/send:latest registry.gitlab.com/timvisee/send:latest
``` ```
@@ -33,7 +34,7 @@ Config options expecting array values (e.g. `EXPIRE_TIMES_SECONDS`, `DOWNLOAD_CO
| `PORT` | Port the server will listen on (defaults to `1443`) | `PORT` | Port the server will listen on (defaults to `1443`)
| `NODE_ENV` | Run in `development` mode (unsafe) or `production` mode (the default) | `NODE_ENV` | Run in `development` mode (unsafe) or `production` mode (the default)
| `SEND_FOOTER_DMCA_URL` | A URL to a contact page for DMCA requests (empty / not shown by default) | `SEND_FOOTER_DMCA_URL` | A URL to a contact page for DMCA requests (empty / not shown by default)
| `SENTRY_CLIENT`, `SENTRY_DSN` | Sentry Client ID and DNS for error tracking (optional, disabled by default) | `SENTRY_CLIENT`, `SENTRY_DSN` | Sentry Client ID and DSN for error tracking (optional, disabled by default)
*Note: more options can be found here: https://github.com/timvisee/send/blob/master/server/config.js* *Note: more options can be found here: https://github.com/timvisee/send/blob/master/server/config.js*

27595
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{ {
"name": "send", "name": "send",
"description": "File Sharing Experiment", "description": "File Sharing Experiment",
"version": "3.4.21", "version": "3.4.24",
"author": "Mozilla (https://mozilla.org)", "author": "Mozilla (https://mozilla.org)",
"contributors": [ "contributors": [
"Tim Visee <3a4fb3964f@sinenomine.email> (https://timvisee.com)" "Tim Visee <3a4fb3964f@sinenomine.email> (https://timvisee.com)"
@@ -98,7 +98,7 @@
"husky": "^3.0.9", "husky": "^3.0.9",
"intl-pluralrules": "^1.3.1", "intl-pluralrules": "^1.3.1",
"lint-staged": "^9.4.2", "lint-staged": "^9.4.2",
"mocha": "^6.2.2", "mocha": "^10.1.0",
"morgan": "^1.9.1", "morgan": "^1.9.1",
"nanobus": "^4.5.0", "nanobus": "^4.5.0",
"nanohtml": "^1.9.0", "nanohtml": "^1.9.0",
@@ -141,7 +141,7 @@
"choo": "^7.0.0", "choo": "^7.0.0",
"cldr-core": "^35.1.0", "cldr-core": "^35.1.0",
"configstore": "github:dannycoates/configstore#master", "configstore": "github:dannycoates/configstore#master",
"convict": "^6.2.3", "convict": "^6.2.4",
"convict-format-with-validator": "^6.2.0", "convict-format-with-validator": "^6.2.0",
"double-ended-queue": "^2.1.0-0", "double-ended-queue": "^2.1.0-0",
"express": "^4.17.3", "express": "^4.17.3",

View File

@@ -48,12 +48,12 @@ passwordSetError = Toto heslo nemohlo být nastaveno
-send-brand = -send-brand =
{ $case -> { $case ->
*[nom] Send *[nom] Send
[gen] Send [gen] Sendu
[dat] Send [dat] Sendu
[acc] Send [acc] Send
[voc] Send [voc] Sende
[loc] Send [loc] Sendu
[ins] Send [ins] Sendem
} }
-send-short-brand = -send-short-brand =
{ $case -> { $case ->
@@ -86,7 +86,7 @@ passwordSetError = Toto heslo nemohlo být nastaveno
[ins] Mozillou [ins] Mozillou
} }
introTitle = Jednoduché a soukromé sdílení souborů introTitle = Jednoduché a soukromé sdílení souborů
introDescription = S { -send-brand(case: "ins") } jsou sdílené soubory šifrované end-to-end, takže ani my nevíme, co sdílíte. Platnost odkazů je navíc omezená. Soubory tak můžete sdílet soukromě a s jistotou, že se nezůstanou na internetu válet navždy. introDescription = Se { -send-brand(case: "ins") } jsou sdílené soubory šifrované end-to-end, takže ani my nevíme, co sdílíte. Platnost odkazů je navíc omezená. Soubory tak můžete sdílet soukromě a s jistotou, že se nezůstanou na internetu válet navždy.
notifyUploadEncryptDone = Váš soubor je zašifrovaný a připraven k odeslání notifyUploadEncryptDone = Váš soubor je zašifrovaný a připraven k odeslání
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes' # downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Platnost vyprší po { $downloadCount } nebo za { $timespan } archiveExpiryInfo = Platnost vyprší po { $downloadCount } nebo za { $timespan }
@@ -131,7 +131,7 @@ copyLinkDescription = Soubor můžete sdílet tímto odkazem:
copyLinkButton = Zkopírovat odkaz copyLinkButton = Zkopírovat odkaz
downloadTitle = Stáhnout soubory downloadTitle = Stáhnout soubory
downloadDescription = Tento soubor byl sdílen přes { -send-brand(case: "acc") } s end-to-end šifrováním a odkazem s omezenou platností. downloadDescription = Tento soubor byl sdílen přes { -send-brand(case: "acc") } s end-to-end šifrováním a odkazem s omezenou platností.
trySendDescription = Vyzkoušejte jednoduché a bezpečné sdílení souborů s { -send-brand(case: "ins") } trySendDescription = Vyzkoušejte jednoduché a bezpečné sdílení souborů se { -send-brand(case: "ins") }
# count will always be > 10 # count will always be > 10
tooManyFiles = tooManyFiles =
{ $count -> { $count ->
@@ -189,6 +189,6 @@ downloadFirefoxPromo = { -send-short-brand } od aplikace { -firefox }.
shareLinkDescription = Sdílet odkaz na soubor: shareLinkDescription = Sdílet odkaz na soubor:
shareLinkButton = Sdílet odkaz shareLinkButton = Sdílet odkaz
# $name is the name of the file # $name is the name of the file
shareMessage = Stáhněte si soubor „{ $name }“ s { -send-brand(case: "ins") } - jednoduché a bezpečné sdílení souborů shareMessage = Stáhněte si soubor „{ $name }“ se { -send-brand(case: "ins") } - jednoduché a bezpečné sdílení souborů
trailheadPromo = Existuje způsob, jak ochránit své soukromí. Používejte Firefox. trailheadPromo = Existuje způsob, jak ochránit své soukromí. Používejte Firefox.
learnMore = Zjistit více. learnMore = Zjistit více.

View File

@@ -53,7 +53,7 @@ introTitle = Простой и безопасный обмен файлами
introDescription = { -send-brand } позволяет вам делиться файлами со сквозным шифрованием и ограниченным сроком действия ссылки на загрузку. Так что, вы сможете делиться файлами приватно и они не останутся в сети навсегда. introDescription = { -send-brand } позволяет вам делиться файлами со сквозным шифрованием и ограниченным сроком действия ссылки на загрузку. Так что, вы сможете делиться файлами приватно и они не останутся в сети навсегда.
notifyUploadEncryptDone = Ваш файл зашифрован и готов к отправке notifyUploadEncryptDone = Ваш файл зашифрован и готов к отправке
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes' # downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Срок хранения истекает после { $downloadCount } или через { $timespan } archiveExpiryInfo = Удалить после { $downloadCount } или через { $timespan }
timespanMinutes = timespanMinutes =
{ $num -> { $num ->
[one] { $num } минуту [one] { $num } минуту
@@ -89,7 +89,7 @@ gb = ГБ
# localized number and byte abbreviation. example "2.5MB" # localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units } fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB") # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Общий размер: { $size } totalSize = Всего: { $size }
# the next line after the colon contains a file name # the next line after the colon contains a file name
copyLinkDescription = Скопируйте ссылку, чтобы поделиться своим файлом: copyLinkDescription = Скопируйте ссылку, чтобы поделиться своим файлом:
copyLinkButton = Копировать ссылку copyLinkButton = Копировать ссылку
@@ -117,13 +117,13 @@ legalTitle = Уведомление о конфиденциальности { -s
legalDateStamp = Версия 1.0, от 12 марта 2019 года legalDateStamp = Версия 1.0, от 12 марта 2019 года
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m" # A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } дн. { $hours } ч. { $minutes } мин. expiresDaysHoursMinutes = { $days } дн. { $hours } ч. { $minutes } мин.
addFilesButton = Выберите файлы для выгрузки addFilesButton = Добавить
uploadButton = Выгрузить uploadButton = Выгрузить
# the first part of the string 'Drag and drop files or click to send up to 1GB' # the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Перетащите файлы сюда dragAndDropFiles = Перетащите файлы сюда
# the second part of the string 'Drag and drop files or click to send up to 1GB' # the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB") # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = или щёлкните здесь, чтобы отправить их (до { $size }) orClickWithSize = или кликните сюда для отправки файлов до { $size }
addPassword = Защитить паролем addPassword = Защитить паролем
emailPlaceholder = Введите ваш адрес электронной почты emailPlaceholder = Введите ваш адрес электронной почты
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB") # $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")

View File

@@ -2,12 +2,12 @@ title = Send
importingFile = 正在导入… importingFile = 正在导入…
encryptingFile = 正在加密… encryptingFile = 正在加密…
decryptingFile = 正在解密… decryptingFile = 正在解密…
downloadCount = downloadCount = { $num ->
{ $num -> [one] 1 次下载
*[other] { $num } 次下载 *[other] { $num } 次下载
} }
timespanHours = timespanHours = { $num ->
{ $num -> [one] 1 小时
*[other] { $num } 小时 *[other] { $num } 小时
} }
copiedUrl = 已复制! copiedUrl = 已复制!
@@ -26,6 +26,11 @@ notSupportedOutdatedDetail = 很可惜,此版本的 Firefox 不支持 Send 所
updateFirefox = 更新 Firefox updateFirefox = 更新 Firefox
deletePopupCancel = 取消 deletePopupCancel = 取消
deleteButtonHover = 删除 deleteButtonHover = 删除
footerText = 不附属于 Mozilla 或 Firefox。
footerLinkDonate = 捐助
footerLinkCli = 命令行
footerLinkDmca = DMCA
footerLinkSource = 源代码
passwordTryAgain = 密码不正确。请重试。 passwordTryAgain = 密码不正确。请重试。
javascriptRequired = Send 需要 JavaScript javascriptRequired = Send 需要 JavaScript
whyJavascript = 为什么 Send 需要 JavaScript whyJavascript = 为什么 Send 需要 JavaScript
@@ -142,5 +147,4 @@ shareLinkDescription = 您的文件链接:
shareLinkButton = 分享链接 shareLinkButton = 分享链接
# $name is the name of the file # $name is the name of the file
shareMessage = 使用 { -send-brand } 下载“{ $name }”:简单、安全的文件分享服务 shareMessage = 使用 { -send-brand } 下载“{ $name }”:简单、安全的文件分享服务
trailheadPromo = 捍卫隐私不是幻想。加入 Firefox 一同抗争。
learnMore = 详细了解。 learnMore = 详细了解。

View File

@@ -2,12 +2,12 @@ title = Send
importingFile = 匯入中… importingFile = 匯入中…
encryptingFile = 加密中… encryptingFile = 加密中…
decryptingFile = 解密中… decryptingFile = 解密中…
downloadCount = downloadCount = { $num ->
{ $num -> [one] 1 次下載
*[other] { $num } 次下載 *[other] { $num } 次下載
} }
timespanHours = timespanHours = { $num ->
{ $num -> [one] 1 小時
*[other] { $num } 小時 *[other] { $num } 小時
} }
copiedUrl = 已複製! copiedUrl = 已複製!
@@ -26,6 +26,11 @@ notSupportedOutdatedDetail = 很可惜,此版本的 Firefox 不支援 Send 所
updateFirefox = 更新 Firefox updateFirefox = 更新 Firefox
deletePopupCancel = 取消 deletePopupCancel = 取消
deleteButtonHover = 刪除 deleteButtonHover = 刪除
footerText = 不隸屬於 Mozilla 或 Firefox。
footerLinkDonate = 捐助
footerLinkCli = 命令列
footerLinkDmca = DMCA
footerLinkSource = 原始碼
passwordTryAgain = 密碼不正確,請再試一次。 passwordTryAgain = 密碼不正確,請再試一次。
javascriptRequired = Send 需要開啟 JavaScript 功能 javascriptRequired = Send 需要開啟 JavaScript 功能
whyJavascript = 為什麼 Send 需要 JavaScript 才能使用? whyJavascript = 為什麼 Send 需要 JavaScript 才能使用?
@@ -45,27 +50,28 @@ passwordSetError = 無法設定此密碼
-send-short-brand = Send -send-short-brand = Send
-firefox = Firefox -firefox = Firefox
-mozilla = Mozilla -mozilla = Mozilla
introTitle = 簡單而私密的檔案共享服務 introTitle = 簡單而私密的檔案共享服務
introDescription = { -send-brand } 讓您可透過點對點加密的方式來分享檔案,並提供會自動失效的鏈結。這樣一來就可以保留分享時的隱私,也確保檔案不會永久保存於網路上。 introDescription = { -send-brand } 讓您可透過點對點加密的方式來分享檔案,並提供會自動失效的鏈結。這樣一來就可以保留分享時的隱私,也確保檔案不會永久保存於網路上。
notifyUploadEncryptDone = 已加密您的檔案,可以傳送 notifyUploadEncryptDone = 已加密您的檔案,可以傳送
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes' # downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = { $downloadCount } 或 { $timespan } 後失效 archiveExpiryInfo = { $downloadCount } 或 { $timespan } 後失效
timespanMinutes = timespanMinutes = { $num ->
{ $num -> [one] 1 分鐘
*[other] { $num } 分鐘 *[other] { $num } 分鐘
} }
timespanDays = timespanDays = { $num ->
{ $num -> [one] 1 天
*[other] { $num } 天 *[other] { $num } 天
} }
timespanWeeks = timespanWeeks = { $num ->
{ $num -> [one] 1 週
*[other] { $num } 週 *[other] { $num } 週
} }
fileCount = fileCount = { $num ->
{ $num -> [one] 1 個檔案
*[other] { $num } 個檔案 *[other] { $num } 個檔案
} }
# byte abbreviation # byte abbreviation
bytes = 位元組 bytes = 位元組
# kibibyte abbreviation # kibibyte abbreviation
@@ -85,15 +91,15 @@ downloadTitle = 下載檔案
downloadDescription = 此檔案是透過 { -send-brand } 進行分享,以點對點加密的方式來分享檔案,並提供會自動失效的鏈結。 downloadDescription = 此檔案是透過 { -send-brand } 進行分享,以點對點加密的方式來分享檔案,並提供會自動失效的鏈結。
trySendDescription = 快試試 { -send-brand },簡單安全的檔案分享機制。 trySendDescription = 快試試 { -send-brand },簡單安全的檔案分享機制。
# count will always be > 10 # count will always be > 10
tooManyFiles = tooManyFiles = { $count ->
{ $count -> [one] 一次僅能上傳 1 個檔案。
*[other] 一次僅能上傳 { $count } 個檔案。 *[other] 一次僅能上傳 { $count } 個檔案。
} }
# count will always be > 10 # count will always be > 10
tooManyArchives = tooManyArchives = { $count ->
{ $count -> [one] 僅允許 1 個壓縮檔。
*[other] 僅允許 { $count } 個壓縮檔。 *[other] 僅允許 { $count } 個壓縮檔。
} }
expiredTitle = 此鏈結已經失效。 expiredTitle = 此鏈結已經失效。
notSupportedDescription = 無法於此瀏覽器使用 { -send-brand }。在最新版的 { -firefox } 中使用 { -send-short-brand } 會有最佳效果,也可在大部分瀏覽器的最新版本當中使用。 notSupportedDescription = 無法於此瀏覽器使用 { -send-brand }。在最新版的 { -firefox } 中使用 { -send-short-brand } 會有最佳效果,也可在大部分瀏覽器的最新版本當中使用。
downloadFirefox = 下載 { -firefox } downloadFirefox = 下載 { -firefox }
@@ -136,5 +142,4 @@ shareLinkDescription = 您的檔案鏈結:
shareLinkButton = 分享鏈結 shareLinkButton = 分享鏈結
# $name is the name of the file # $name is the name of the file
shareMessage = 使用 { -send-brand } 下載「{ $name }」: 簡單安全的檔案分享機制 shareMessage = 使用 { -send-brand } 下載「{ $name }」: 簡單安全的檔案分享機制
trailheadPromo = 有種方法可以保護您的隱私,加入 Firefox。
learnMore = 了解更多。 learnMore = 了解更多。

View File

@@ -15,6 +15,8 @@ module.exports = {
FOOTER_SOURCE_URL: config.footer_source_url, FOOTER_SOURCE_URL: config.footer_source_url,
CUSTOM_FOOTER_TEXT: config.custom_footer_text, CUSTOM_FOOTER_TEXT: config.custom_footer_text,
CUSTOM_FOOTER_URL: config.custom_footer_url, CUSTOM_FOOTER_URL: config.custom_footer_url,
UPLOAD_AREA_WARNING_HTML: config.upload_area_warning_html,
DOWNLOAD_WARNING_HTML: config.download_warning_html,
COLORS: { COLORS: {
PRIMARY: config.ui_color_primary, PRIMARY: config.ui_color_primary,
ACCENT: config.ui_color_accent ACCENT: config.ui_color_accent

View File

@@ -165,7 +165,7 @@ const conf = convict({
}, },
base_url: { base_url: {
format: 'url', format: 'url',
default: 'https://send.firefox.com', default: 'https://send.example.com',
env: 'BASE_URL' env: 'BASE_URL'
}, },
custom_title: { custom_title: {
@@ -175,7 +175,8 @@ const conf = convict({
}, },
custom_description: { custom_description: {
format: String, format: String,
default: 'Encrypt and send files with a link that automatically expires to ensure your important documents dont stay online forever.', default:
'Encrypt and send files with a link that automatically expires to ensure your important documents dont stay online forever.',
env: 'CUSTOM_DESCRIPTION' env: 'CUSTOM_DESCRIPTION'
}, },
detect_base_url: { detect_base_url: {
@@ -263,6 +264,16 @@ const conf = convict({
default: '', default: '',
env: 'CUSTOM_FOOTER_URL' env: 'CUSTOM_FOOTER_URL'
}, },
upload_area_warning_html: {
format: String,
default: '',
env: 'SEND_UPLOAD_AREA_WARNING_HTML'
},
download_warning_html: {
format: String,
default: '',
env: 'SEND_DOWNLOAD_WARNING_HTML'
},
ui_color_primary: { ui_color_primary: {
format: String, format: String,
default: '#0a84ff', default: '#0a84ff',

View File

@@ -44,7 +44,7 @@ module.exports = async function(req) {
facebook: baseUrl + '/' + assets.get('send-fb.jpg'), facebook: baseUrl + '/' + assets.get('send-fb.jpg'),
twitter: baseUrl + '/' + assets.get('send-twitter.jpg'), twitter: baseUrl + '/' + assets.get('send-twitter.jpg'),
wordmark: assets.get('wordmark.svg') + '#logo', wordmark: assets.get('wordmark.svg') + '#logo',
custom_css: assets.get('undefined') custom_css: ''
}; };
Object.keys(uiAssets).forEach(index => { Object.keys(uiAssets).forEach(index => {
if (config.ui_custom_assets[index] !== '') if (config.ui_custom_assets[index] !== '')

View File

@@ -6,6 +6,13 @@ const VersionPlugin = require('./build/version_plugin');
const AndroidIndexPlugin = require('./build/android_index_plugin'); const AndroidIndexPlugin = require('./build/android_index_plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin');
// Fix for node 18+
// See: <https://stackoverflow.com/a/78005686/1000145>
const crypto = require('crypto');
const crypto_orig_createHash = crypto.createHash;
crypto.createHash = algorithm =>
crypto_orig_createHash(algorithm == 'md4' ? 'sha256' : algorithm);
const webJsOptions = { const webJsOptions = {
babelrc: false, babelrc: false,
presets: [ presets: [