Compare commits

..

1 Commits

Author SHA1 Message Date
Tim Visée 71587a604e
Revert "Remove some polyfills" 2022-08-10 19:24:20 +02:00
13 changed files with 5934 additions and 6625 deletions

View File

@ -1,23 +1,11 @@
image: "node:15-slim"
stages: stages:
- test - test
- artifact
- release - release
# Build Send, run npm tests before_script:
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
@ -27,46 +15,91 @@ test:
- 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
release-docker: # 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 stage: release
image: docker:latest image: docker:latest
dependencies:
- artifact-docker
services: services:
- docker:dind - docker:dind
only: only:
- api - master
- branches variables:
- chat IMG_IMPORT_FILE: "send:git-$CI_COMMIT_SHORT_SHA.tar"
- merge_requests IMG_IMPORT_NAME: "send:git-$CI_COMMIT_SHORT_SHA"
- pushes IMG_NAME: "registry.gitlab.com/timvisee/send:master-$CI_COMMIT_SHORT_SHA"
- schedules before_script: []
- tags
- triggers
- web
script: script:
- docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" # Login in to registry
- docker buildx create --name sendBuilder - 'docker login registry.gitlab.com -u $DOCKER_USER -p $DOCKER_PASS'
- docker buildx use sendBuilder
- | # Load existing, retag for new image images
if [ "$CI_PIPELINE_SOURCE" == "merge_request_event" ]; then - docker image load -i $IMG_IMPORT_FILE
IMAGE_NAMES="$CI_REGISTRY_IMAGE/mr:$CI_MERGE_REQUEST_IID" - docker tag $IMG_IMPORT_NAME $IMG_NAME
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"
fi - 'echo "Docker image artifact published, available as:" && echo " docker pull $IMG_NAME"'
- |
for image in $IMAGE_NAMES; do # Release public Docker image for a version tag
docker buildx build --platform linux/amd64,linux/arm64 -t $image . --push release-docker:
done stage: release
- | image: docker:latest
echo "Container image pushed. You can pull it with"; dependencies:
for image in $IMAGE_NAMES; do - artifact-docker
echo "docker pull $image" services:
done - docker:dind
only:
- /^v(\d+\.)*\d+$/
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:$CI_COMMIT_REF_NAME"
IMG_NAME_LATEST: "registry.gitlab.com/timvisee/send:latest"
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
- docker tag $IMG_IMPORT_NAME $IMG_NAME_LATEST
# Publish tagged image
- docker push $IMG_NAME
- docker push $IMG_NAME_LATEST
- 'echo "Docker image artifact published, available as:" && echo " docker pull $IMG_NAME_LATEST" && echo " docker pull $IMG_NAME"'

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/thunderbird/addon/filelink-provider-for-send/) - Thunderbird: [FileLink provider for Send](https://addons.thunderbird.net/en-US/thunderbird/addon/filelink-provider-for-send/)
#### Android #### Android

View File

@ -17,7 +17,6 @@ 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;
@ -77,7 +76,7 @@ export default class Archive {
clear() { clear() {
this.files = []; this.files = [];
this.dlimit = this.defaultDownloadLimit; this.dlimit = 1;
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 = 4096; const MAX_LENGTH = 32;
return html` return html`
<div class="mb-2 px-1"> <div class="mb-2 px-1">

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="4096" maxlength="32"
autocomplete="off" autocomplete="off"
placeholder="${state.translate('unlockInputPlaceholder')}" placeholder="${state.translate('unlockInputPlaceholder')}"
oninput="${inputChanged}" oninput="${inputChanged}"

View File

@ -65,45 +65,6 @@ class Footer extends Component {
`); `);
} }
// Defining a custom footer
var footer = [];
if (this.state != undefined && this.state.WEB_UI != undefined) {
const WEB_UI = this.state.WEB_UI;
if (WEB_UI.CUSTOM_FOOTER_URL != '' && WEB_UI.CUSTOM_FOOTER_TEXT != '') {
footer.push(html`
<li class="m-2">
<a href="${WEB_UI.CUSTOM_FOOTER_URL}" target="_blank">
${WEB_UI.CUSTOM_FOOTER_TEXT}
</a>
</li>
`);
}
else if (WEB_UI.CUSTOM_FOOTER_URL != '') {
footer.push(html`
<li class="m-2">
<a href="${WEB_UI.CUSTOM_FOOTER_URL}" target="_blank">
${WEB_UI.CUSTOM_FOOTER_URL}
</a>
</li>
`);
}
else if (WEB_UI.CUSTOM_FOOTER_TEXT != '') {
footer.push(html`
<li class="m-2">
${WEB_UI.CUSTOM_FOOTER_TEXT}
</li>
`)
}
else {
footer.push(html`
<li class="m-2">
${translate('footerText')}
</li>
`);
}
}
return html` return html`
<footer <footer
class="flex flex-col md:flex-row items-start w-full flex-none self-start p-6 md:p-8 font-medium text-xs text-grey-60 dark:text-grey-40 md:items-center justify-between" class="flex flex-col md:flex-row items-start w-full flex-none self-start p-6 md:p-8 font-medium text-xs text-grey-60 dark:text-grey-40 md:items-center justify-between"
@ -111,7 +72,7 @@ class Footer extends Component {
<ul <ul
class="flex flex-col md:flex-row items-start md:items-center md:justify-start" class="flex flex-col md:flex-row items-start md:items-center md:justify-start"
> >
${footer} <li class="m-2">${translate('footerText')}</li>
</ul> </ul>
<ul <ul
class="flex flex-col md:flex-row items-start md:items-center md:justify-end" class="flex flex-col md:flex-row items-start md:items-center md:justify-end"

View File

@ -9,7 +9,6 @@ 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
``` ```
@ -34,7 +33,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 DSN for error tracking (optional, disabled by default) | `SENTRY_CLIENT`, `SENTRY_DSN` | Sentry Client ID and DNS 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*
@ -97,11 +96,6 @@ See the table below for the variables and their default values.
| UI_CUSTOM_ASSETS_FACEBOOK | | A custom header image for Facebook | | UI_CUSTOM_ASSETS_FACEBOOK | | A custom header image for Facebook |
| UI_CUSTOM_ASSETS_TWITTER | | A custom header image for Twitter | | UI_CUSTOM_ASSETS_TWITTER | | A custom header image for Twitter |
| UI_CUSTOM_ASSETS_WORDMARK | | A custom wordmark (Text next to the logo) | | UI_CUSTOM_ASSETS_WORDMARK | | A custom wordmark (Text next to the logo) |
| UI_CUSTOM_CSS | | Allows you to define a custom CSS file for custom styling |
| CUSTOM_FOOTER_TEXT | | Allows you to define a custom footer |
| CUSTOM_FOOTER_URL | | Allows you to define a custom URL in your footer |
Side note: If you define a custom URL and a custom footer, only the footer text will display, but will be hyperlinked to the URL.
## Examples ## Examples

12294
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.23", "version": "3.4.20",
"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": "^10.1.0", "mocha": "^6.2.2",
"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.4", "convict": "^6.2.3",
"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

@ -13,8 +13,6 @@ module.exports = {
FOOTER_CLI_URL: config.footer_cli_url, FOOTER_CLI_URL: config.footer_cli_url,
FOOTER_DMCA_URL: config.footer_dmca_url, FOOTER_DMCA_URL: config.footer_dmca_url,
FOOTER_SOURCE_URL: config.footer_source_url, FOOTER_SOURCE_URL: config.footer_source_url,
CUSTOM_FOOTER_TEXT: config.custom_footer_text,
CUSTOM_FOOTER_URL: config.custom_footer_url,
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,19 +165,9 @@ const conf = convict({
}, },
base_url: { base_url: {
format: 'url', format: 'url',
default: 'https://send.example.com', default: 'https://send.firefox.com',
env: 'BASE_URL' env: 'BASE_URL'
}, },
custom_title: {
format: String,
default: 'Send',
env: 'CUSTOM_TITLE'
},
custom_description: {
format: String,
default: 'Encrypt and send files with a link that automatically expires to ensure your important documents dont stay online forever.',
env: 'CUSTOM_DESCRIPTION'
},
detect_base_url: { detect_base_url: {
format: Boolean, format: Boolean,
default: false, default: false,
@ -253,16 +243,6 @@ const conf = convict({
default: 'https://github.com/timvisee/send', default: 'https://github.com/timvisee/send',
env: 'SEND_FOOTER_SOURCE_URL' env: 'SEND_FOOTER_SOURCE_URL'
}, },
custom_footer_text: {
format: String,
default: '',
env: 'CUSTOM_FOOTER_TEXT'
},
custom_footer_url: {
format: String,
default: '',
env: 'CUSTOM_FOOTER_URL'
},
ui_color_primary: { ui_color_primary: {
format: String, format: String,
default: '#0a84ff', default: '#0a84ff',
@ -273,11 +253,6 @@ const conf = convict({
default: '#003eaa', default: '#003eaa',
env: 'UI_COLOR_ACCENT' env: 'UI_COLOR_ACCENT'
}, },
custom_locale: {
format: String,
default: '',
env: 'CUSTOM_LOCALE'
},
ui_custom_assets: { ui_custom_assets: {
android_chrome_192px: { android_chrome_192px: {
format: String, format: String,
@ -328,11 +303,6 @@ const conf = convict({
format: String, format: String,
default: '', default: '',
env: 'UI_CUSTOM_ASSETS_WORDMARK' env: 'UI_CUSTOM_ASSETS_WORDMARK'
},
custom_css: {
format: String,
default: '',
env: 'UI_CUSTOM_CSS'
} }
} }
}); });

View File

@ -3,10 +3,6 @@ const assets = require('../common/assets');
const initScript = require('./initScript'); const initScript = require('./initScript');
module.exports = function(state, body = '') { module.exports = function(state, body = '') {
const custom_css = state.ui.assets.custom_css !== ''
? html`<link rel="stylesheet" type="text/css" href="${state.ui.assets.custom_css}" />`
: ''
return html` return html`
<!DOCTYPE html> <!DOCTYPE html>
<html lang="${state.locale}"> <html lang="${state.locale}">
@ -44,7 +40,6 @@ module.exports = function(state, body = '') {
type="text/css" type="text/css"
href="${assets.get('app.css')}" href="${assets.get('app.css')}"
/> />
${custom_css}
<link <link
rel="apple-touch-icon" rel="apple-touch-icon"
sizes="180x180" sizes="180x180"

View File

@ -3,18 +3,9 @@ const layout = require('./layout');
const assets = require('../common/assets'); const assets = require('../common/assets');
const getTranslator = require('./locale'); const getTranslator = require('./locale');
const { getFxaConfig } = require('./fxa'); const { getFxaConfig } = require('./fxa');
const fs = require('fs');
const path = require('path');
module.exports = async function(req) { module.exports = async function(req) {
const locale = (() => { const locale = req.language || 'en-US';
if (config.custom_locale != '' && fs.existsSync(path.join(__dirname,'../public/locales',config.custom_locale))) {
return config.custom_locale;
}
else {
return req.language || 'en-US';
}
})();
let authConfig = null; let authConfig = null;
let robots = 'none'; let robots = 'none';
if (req.route && req.route.path === '/') { if (req.route && req.route.path === '/') {
@ -43,8 +34,7 @@ module.exports = async function(req) {
safari_pinned_tab: assets.get('safari-pinned-tab.svg'), safari_pinned_tab: assets.get('safari-pinned-tab.svg'),
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: ''
}; };
Object.keys(uiAssets).forEach(index => { Object.keys(uiAssets).forEach(index => {
if (config.ui_custom_assets[index] !== '') if (config.ui_custom_assets[index] !== '')
@ -57,8 +47,9 @@ module.exports = async function(req) {
locale, locale,
capabilities: { account: false }, capabilities: { account: false },
translate: getTranslator(locale), translate: getTranslator(locale),
title: config.custom_title, title: 'Send',
description: config.custom_description, description:
'Encrypt and send files with a link that automatically expires to ensure your important documents dont stay online forever.',
baseUrl, baseUrl,
ui: { ui: {
colors: { colors: {