Compare commits

...

51 Commits

Author SHA1 Message Date
Daniel Hiller
a8dcd7cef3 chore: Remove global npm update step from build workflow 2026-04-18 15:23:53 +00:00
Daniel Hiller
6e2e6539d1 chore: Update what's new documentation 2026-04-18 15:19:56 +00:00
Daniel Hiller
e429b478ca chore: Bump version to 2.1.1 and update release notes 2026-04-18 15:10:14 +00:00
Daniel Hiller
0e5dedd627 Merge pull request #1638 from plankanban/dependabot/npm_and_yarn/server/multi-e6e4b50ff7
build(deps): Bump underscore and @sailshq/nedb in /server
2026-04-18 16:23:01 +02:00
Daniel Hiller
eb90b12b0e Merge pull request #1637 from plankanban/dependabot/npm_and_yarn/server/multi-c857c64966
build(deps): Bump path-to-regexp and @sailshq/router in /server
2026-04-18 16:22:59 +02:00
Daniel Hiller
cd9ba8ff4f feat: Add Pro features discovery banner
Adds a dismissible banner in the topbar that informs users about
PLANKA Pro features.

- Dismissible per-user (stored in localStorage)
- Reappears after 30 days
- Rotates between main message and 3 feature highlights
- Links to planka.app/pro (with ref parameter for anonymous source attribution)
2026-04-18 13:32:22 +00:00
Daniel Hiller
4e23f3c8a9 refactor(docker): Remove global npm installation from Dockerfiles 2026-04-18 13:32:22 +00:00
dependabot[bot]
a9f28b45f4 build(deps): Bump underscore and @sailshq/nedb in /server
Bumps [underscore](https://github.com/jashkenas/underscore) and [@sailshq/nedb](https://github.com/sailshq/nedb). These dependencies needed to be updated together.

Updates `underscore` from 1.13.1 to 1.13.8
- [Commits](https://github.com/jashkenas/underscore/compare/1.13.1...1.13.8)

Updates `@sailshq/nedb` from 1.8.3 to 1.8.4
- [Commits](https://github.com/sailshq/nedb/compare/v1.8.3...v1.8.4)

---
updated-dependencies:
- dependency-name: underscore
  dependency-version: 1.13.8
  dependency-type: indirect
- dependency-name: "@sailshq/nedb"
  dependency-version: 1.8.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-18 13:29:02 +00:00
dependabot[bot]
d44e0dde93 build(deps): Bump path-to-regexp and @sailshq/router in /server
Bumps [path-to-regexp](https://github.com/pillarjs/path-to-regexp) and [@sailshq/router](https://github.com/sailshq/router). These dependencies needed to be updated together.

Updates `path-to-regexp` from 0.1.12 to 0.1.13
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/v.0.1.13/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v0.1.12...v.0.1.13)

Updates `@sailshq/router` from 1.3.10 to 1.3.11
- [Changelog](https://github.com/sailshq/router/blob/master/HISTORY.md)
- [Commits](https://github.com/sailshq/router/compare/v1.3.10...v1.3.11)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-version: 0.1.13
  dependency-type: indirect
- dependency-name: "@sailshq/router"
  dependency-version: 1.3.11
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-18 13:28:46 +00:00
Daniel Hiller
20eb57de4c Merge pull request #1635 from HannesOberreiter/fix/unicode-initials
fix: unicode/emoji characters in user avatar initials
2026-04-18 15:28:06 +02:00
Daniel Hiller
4ccc71419f Merge pull request #1551 from plankanban/dependabot/npm_and_yarn/client/multi-5543462fab
build(deps): Bump bn.js in /client
2026-04-18 15:28:04 +02:00
Daniel Hiller
0e93111e1b Merge pull request #1612 from plankanban/dependabot/npm_and_yarn/yaml-2.8.3
build(deps): Bump yaml from 2.8.2 to 2.8.3
2026-04-18 15:28:02 +02:00
Daniel Hiller
11f7814e87 Merge pull request #1611 from plankanban/dependabot/npm_and_yarn/client/yaml-2.8.3
build(deps): Bump yaml from 2.8.2 to 2.8.3 in /client
2026-04-18 15:27:59 +02:00
Daniel Hiller
9a4241e3d1 Merge pull request #1610 from plankanban/dependabot/npm_and_yarn/server/yaml-2.8.3
build(deps): Bump yaml from 2.8.2 to 2.8.3 in /server
2026-04-18 15:27:57 +02:00
Daniel Hiller
4fd164c81a Merge pull request #1627 from plankanban/dependabot/npm_and_yarn/client/vite-7.3.2
build(deps): Bump vite from 7.3.1 to 7.3.2 in /client
2026-04-18 15:27:55 +02:00
Daniel Hiller
5331f590a2 Merge pull request #1617 from plankanban/dependabot/npm_and_yarn/server/brace-expansion-1.1.13
build(deps): Bump brace-expansion from 1.1.12 to 1.1.13 in /server
2026-04-18 15:27:52 +02:00
Daniel Hiller
082b257a50 Merge pull request #1628 from plankanban/dependabot/npm_and_yarn/brace-expansion-2.0.3
build(deps): Bump brace-expansion from 2.0.2 to 2.0.3
2026-04-18 15:27:50 +02:00
Daniel Hiller
fd0981b5b3 Merge pull request #1624 from plankanban/dependabot/npm_and_yarn/client/lodash-es-4.18.1
build(deps): Bump lodash-es from 4.17.23 to 4.18.1 in /client
2026-04-18 15:27:48 +02:00
Daniel Hiller
9b68d3fc30 Merge pull request #1630 from plankanban/dependabot/npm_and_yarn/client/lodash-4.18.1
build(deps): Bump lodash from 4.17.23 to 4.18.1 in /client
2026-04-18 15:27:46 +02:00
Daniel Hiller
922d70e289 Merge pull request #1629 from plankanban/dependabot/npm_and_yarn/server/lodash-4.18.1
build(deps): Bump lodash from 4.17.23 to 4.18.1 in /server
2026-04-18 15:27:43 +02:00
Daniel Hiller
40a3e436ad Merge pull request #1608 from plankanban/dependabot/npm_and_yarn/server/picomatch-2.3.2
build(deps): Bump picomatch from 2.3.1 to 2.3.2 in /server
2026-04-18 15:27:22 +02:00
Daniel Hiller
227332768c Merge pull request #1607 from plankanban/dependabot/npm_and_yarn/client/picomatch-2.3.2
build(deps-dev): Bump picomatch from 2.3.1 to 2.3.2 in /client
2026-04-18 15:27:19 +02:00
Daniel Hiller
555117912c Merge pull request #1631 from plankanban/dependabot/npm_and_yarn/server/nodemailer-8.0.5
build(deps): Bump nodemailer from 7.0.13 to 8.0.5 in /server
2026-04-18 15:27:11 +02:00
Daniel Hiller
9ba5f86073 Merge pull request #1632 from plankanban/dependabot/npm_and_yarn/server/multi-d854bddb60
build(deps): Bump fast-xml-parser and @aws-sdk/xml-builder in /server
2026-04-18 15:27:09 +02:00
HannesOberreiter
3bf6e6fa19 fix: allow unicodes in initials 2026-04-16 14:21:13 +02:00
dependabot[bot]
8cc00ef2ef build(deps): Bump fast-xml-parser and @aws-sdk/xml-builder in /server
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [@aws-sdk/xml-builder](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages-internal/xml-builder). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 5.4.1 to 5.5.8
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.4.1...v5.5.8)

Updates `@aws-sdk/xml-builder` from 3.972.11 to 3.972.17
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages-internal/xml-builder/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/HEAD/packages-internal/xml-builder)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 5.5.8
  dependency-type: indirect
- dependency-name: "@aws-sdk/xml-builder"
  dependency-version: 3.972.17
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-09 00:26:02 +00:00
dependabot[bot]
3d3c8f374c build(deps): Bump nodemailer from 7.0.13 to 8.0.5 in /server
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 7.0.13 to 8.0.5.
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/compare/v7.0.13...v8.0.5)

---
updated-dependencies:
- dependency-name: nodemailer
  dependency-version: 8.0.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 22:42:51 +00:00
dependabot[bot]
7a3873cbeb build(deps): Bump lodash from 4.17.23 to 4.18.1 in /client
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 08:29:03 +00:00
dependabot[bot]
512b69080d build(deps): Bump lodash from 4.17.23 to 4.18.1 in /server
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 08:21:34 +00:00
dependabot[bot]
5fa6fe825b build(deps): Bump brace-expansion from 2.0.2 to 2.0.3
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v2.0.2...v2.0.3)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 2.0.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 06:15:56 +00:00
dependabot[bot]
f61299fde8 build(deps): Bump vite from 7.3.1 to 7.3.2 in /client
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.3.1 to 7.3.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.3.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-06 21:38:57 +00:00
dependabot[bot]
a55214e617 build(deps): Bump lodash-es from 4.17.23 to 4.18.1 in /client
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 11:42:15 +00:00
Maksim Eltyshev
dbad8e976b fix(s3): Add requestChecksumCalculation config option
Closes #1619
2026-04-01 22:12:58 +02:00
dependabot[bot]
3915536e72 build(deps): Bump brace-expansion from 1.1.12 to 1.1.13 in /server
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.13.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.13)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.13
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 14:25:58 +00:00
dependabot[bot]
3b7cc9c8a7 build(deps): Bump yaml from 2.8.2 to 2.8.3
Bumps [yaml](https://github.com/eemeli/yaml) from 2.8.2 to 2.8.3.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.8.2...v2.8.3)

---
updated-dependencies:
- dependency-name: yaml
  dependency-version: 2.8.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 18:33:58 +00:00
dependabot[bot]
081d0cee1f build(deps): Bump yaml from 2.8.2 to 2.8.3 in /client
Bumps [yaml](https://github.com/eemeli/yaml) from 2.8.2 to 2.8.3.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.8.2...v2.8.3)

---
updated-dependencies:
- dependency-name: yaml
  dependency-version: 2.8.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 17:25:40 +00:00
dependabot[bot]
60aaa4ad92 build(deps): Bump yaml from 2.8.2 to 2.8.3 in /server
Bumps [yaml](https://github.com/eemeli/yaml) from 2.8.2 to 2.8.3.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.8.2...v2.8.3)

---
updated-dependencies:
- dependency-name: yaml
  dependency-version: 2.8.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 17:25:17 +00:00
dependabot[bot]
dbff5b2b1b build(deps): Bump picomatch from 2.3.1 to 2.3.2 in /server
Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 23:26:27 +00:00
dependabot[bot]
f9102db1b2 build(deps-dev): Bump picomatch from 2.3.1 to 2.3.2 in /client
Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-25 23:18:47 +00:00
dependabot[bot]
9abad91b04 build(deps): Bump rollup from 4.57.1 to 4.59.0 in /client (#1559)
Bumps [rollup](https://github.com/rollup/rollup) from 4.57.1 to 4.59.0.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.57.1...v4.59.0)

---
updated-dependencies:
- dependency-name: rollup
  dependency-version: 4.59.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-25 21:07:46 +01:00
dependabot[bot]
2b5921c30d build(deps): Bump immutable from 5.1.4 to 5.1.5 in /client (#1563)
Bumps [immutable](https://github.com/immutable-js/immutable-js) from 5.1.4 to 5.1.5.
- [Release notes](https://github.com/immutable-js/immutable-js/releases)
- [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/immutable-js/immutable-js/compare/v5.1.4...v5.1.5)

---
updated-dependencies:
- dependency-name: immutable
  dependency-version: 5.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-25 21:07:21 +01:00
dependabot[bot]
03acecc43e build(deps): Bump svgo from 3.3.2 to 3.3.3 in /client (#1564)
Bumps [svgo](https://github.com/svg/svgo) from 3.3.2 to 3.3.3.
- [Release notes](https://github.com/svg/svgo/releases)
- [Commits](https://github.com/svg/svgo/compare/v3.3.2...v3.3.3)

---
updated-dependencies:
- dependency-name: svgo
  dependency-version: 3.3.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-25 21:07:12 +01:00
dependabot[bot]
06bedc1f7d build(deps-dev): Bump flatted from 3.4.1 to 3.4.2 in /server (#1603)
Bumps [flatted](https://github.com/WebReflection/flatted) from 3.4.1 to 3.4.2.
- [Commits](https://github.com/WebReflection/flatted/compare/v3.4.1...v3.4.2)

---
updated-dependencies:
- dependency-name: flatted
  dependency-version: 3.4.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-25 21:06:30 +01:00
dependabot[bot]
e31eca2273 build(deps-dev): Bump flatted from 3.4.1 to 3.4.2 in /client (#1595)
Bumps [flatted](https://github.com/WebReflection/flatted) from 3.4.1 to 3.4.2.
- [Commits](https://github.com/WebReflection/flatted/compare/v3.4.1...v3.4.2)

---
updated-dependencies:
- dependency-name: flatted
  dependency-version: 3.4.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-25 21:06:17 +01:00
Sebastian Dichler
d3ff3e2db8 feat(client): Add ability for admins to edit user avatars (#1604) 2026-03-25 11:24:27 +01:00
Sebastian Dichler
952a078aa1 chore(i18n): Update German translation (#1602) 2026-03-23 20:43:13 +01:00
Maksim Eltyshev
4ea0322dc4 build(dev): Add proxy target to dev compose file 2026-03-22 22:57:48 +01:00
Sebastian Dichler
105b37ef57 chore(i18n): Update German translation (#1597) 2026-03-22 22:39:27 +01:00
Maksim Eltyshev
4fb498667e build(client): Allow specifying proxy target
Closes #1593
2026-03-22 22:24:52 +01:00
Maksim Eltyshev
b7d3602dcd fix(proxy): Limit Squid file descriptors to prevent excessive memory allocation
Closes #1590
2026-03-19 12:28:09 +01:00
dependabot[bot]
8009fbacc6 build(deps): Bump bn.js in /client
Bumps  and [bn.js](https://github.com/indutny/bn.js). These dependencies needed to be updated together.

Updates `bn.js` from 5.2.2 to 5.2.3
- [Release notes](https://github.com/indutny/bn.js/releases)
- [Changelog](https://github.com/indutny/bn.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/indutny/bn.js/compare/v5.2.2...v5.2.3)

Updates `bn.js` from 4.12.2 to 4.12.3
- [Release notes](https://github.com/indutny/bn.js/releases)
- [Changelog](https://github.com/indutny/bn.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/indutny/bn.js/compare/v5.2.2...v5.2.3)

---
updated-dependencies:
- dependency-name: bn.js
  dependency-version: 5.2.3
  dependency-type: indirect
- dependency-name: bn.js
  dependency-version: 4.12.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-24 20:58:25 +00:00
71 changed files with 729 additions and 187 deletions

View File

@@ -18,9 +18,6 @@ jobs:
node-version: '22'
cache: 'npm'
- name: Update npm
run: npm install npm --global
- name: Install server dependencies
run: npm install --omit=prod --ignore-scripts
working-directory: ./server

View File

@@ -8,8 +8,7 @@ WORKDIR /app
COPY server .
RUN npm install npm --global \
&& npm install \
RUN npm install \
&& npm run build \
&& npm prune --production
@@ -28,8 +27,7 @@ RUN npm install npm --global \
FROM node:22-alpine
RUN apk -U upgrade \
&& apk add bash python3 squid --no-cache \
&& npm install npm --global
&& apk add bash python3 squid --no-cache
USER node
WORKDIR /app

View File

@@ -1,7 +1,6 @@
FROM node:22-alpine
RUN apk -U upgrade \
&& apk add bash build-base python3 xdg-utils --no-cache \
&& npm install npm --global
&& apk add bash build-base python3 xdg-utils --no-cache
WORKDIR /app

View File

@@ -45,13 +45,12 @@
"history": "^5.3.0",
"i18next": "^25.8.18",
"i18next-browser-languagedetector": "^8.2.1",
"initials": "^3.1.2",
"javascript-time-ago": "^2.6.4",
"js-cookie": "^3.0.5",
"jwt-decode": "^4.0.0",
"linkify-react": "^4.3.2",
"linkifyjs": "^4.3.2",
"lodash": "^4.17.23",
"lodash": "^4.18.1",
"lowlight": "^3.3.0",
"markdown-it": "^13.0.2",
"nanoid": "^5.1.7",
@@ -85,7 +84,7 @@
"semantic-ui-react": "^2.1.5",
"socket.io-client": "^4.8.3",
"validator": "^13.15.26",
"vite": "^7.3.1",
"vite": "^7.3.2",
"vite-plugin-commonjs": "^0.10.4",
"vite-plugin-node-polyfills": "^0.25.0",
"vite-plugin-svgr": "^4.5.0",
@@ -6472,9 +6471,9 @@
}
},
"node_modules/anymatch/node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9551,9 +9550,9 @@
}
},
"node_modules/flatted": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz",
"integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==",
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
"integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true,
"license": "ISC"
},
@@ -10586,12 +10585,6 @@
"node": ">=10"
}
},
"node_modules/initials": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/initials/-/initials-3.1.2.tgz",
"integrity": "sha512-Sltg35nx8+GX1w4U86rmbxFEmqFiSuMJviS6cB2KChB+jcT2/8Td+nlImXD74HkqpZF5PMv8hN57AyrA/7ltXw==",
"license": "MIT"
},
"node_modules/inline-style-prefixer": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz",
@@ -12329,15 +12322,15 @@
}
},
"node_modules/lodash": {
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
"license": "MIT"
},
"node_modules/lodash-es": {
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
"integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
"integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
"license": "MIT"
},
"node_modules/lodash.debounce": {
@@ -12671,9 +12664,9 @@
}
},
"node_modules/micromatch/node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"license": "MIT",
"engines": {
"node": ">=8.6"
@@ -13663,9 +13656,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -17485,9 +17478,9 @@
"license": "MIT"
},
"node_modules/vite": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz",
"integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==",
"license": "MIT",
"dependencies": {
"esbuild": "^0.27.0",
@@ -17922,9 +17915,9 @@
"license": "ISC"
},
"node_modules/yaml": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
"license": "ISC",
"bin": {
"yaml": "bin.mjs"

View File

@@ -122,13 +122,12 @@
"history": "^5.3.0",
"i18next": "^25.8.18",
"i18next-browser-languagedetector": "^8.2.1",
"initials": "^3.1.2",
"javascript-time-ago": "^2.6.4",
"js-cookie": "^3.0.5",
"jwt-decode": "^4.0.0",
"linkify-react": "^4.3.2",
"linkifyjs": "^4.3.2",
"lodash": "^4.17.23",
"lodash": "^4.18.1",
"lowlight": "^3.3.0",
"markdown-it": "^13.0.2",
"nanoid": "^5.1.7",
@@ -162,7 +161,7 @@
"semantic-ui-react": "^2.1.5",
"socket.io-client": "^4.8.3",
"validator": "^13.15.26",
"vite": "^7.3.1",
"vite": "^7.3.2",
"vite-plugin-commonjs": "^0.10.4",
"vite-plugin-node-polyfills": "^0.25.0",
"vite-plugin-svgr": "^4.5.0",

View File

@@ -1,4 +1,22 @@
# [2.1.0] - 2026-03-19
# [2.1.1] - 2026-04-18
### Added
* Allow admins to edit user avatars
* Add Pro features discovery banner
### Changed
* Remove global npm installation from Dockerfiles
### Fixed
* Fix Unicode and emoji characters in user avatar initials
* Fix S3 request checksum calculation
* Limit proxy file descriptors to prevent excessive memory allocation
* Improve security by fixing multiple dependency vulnerabilities
## [2.1.0] - 2026-03-19
### Added

View File

@@ -17,6 +17,7 @@ import SelectRoleStep from './SelectRoleStep';
import ApiKeyStep from './ApiKeyStep';
import ConfirmationStep from '../../ConfirmationStep';
import EditUserInformationStep from '../../../users/EditUserInformationStep';
import EditUserAvatarStep from '../../../users/EditUserAvatarStep';
import EditUserUsernameStep from '../../../users/EditUserUsernameStep';
import EditUserEmailStep from '../../../users/EditUserEmailStep';
import EditUserPasswordStep from '../../../users/EditUserPasswordStep';
@@ -25,6 +26,7 @@ import styles from './ActionsStep.module.scss';
const StepTypes = {
EDIT_INFORMATION: 'EDIT_INFORMATION',
EDIT_AVATAR: 'EDIT_AVATAR',
EDIT_USERNAME: 'EDIT_USERNAME',
EDIT_EMAIL: 'EDIT_EMAIL',
EDIT_PASSWORD: 'EDIT_PASSWORD',
@@ -97,6 +99,10 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
openStep(StepTypes.EDIT_INFORMATION);
}, [openStep]);
const handleEditAvatarClick = useCallback(() => {
openStep(StepTypes.EDIT_AVATAR);
}, [openStep]);
const handleEditUsernameClick = useCallback(() => {
openStep(StepTypes.EDIT_USERNAME);
}, [openStep]);
@@ -137,6 +143,8 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
switch (step.type) {
case StepTypes.EDIT_INFORMATION:
return <EditUserInformationStep id={userId} onBack={handleBack} onClose={onClose} />;
case StepTypes.EDIT_AVATAR:
return <EditUserAvatarStep id={userId} onBack={handleBack} onClose={onClose} />;
case StepTypes.EDIT_USERNAME:
return <EditUserUsernameStep id={userId} onBack={handleBack} onClose={onClose} />;
case StepTypes.EDIT_EMAIL:
@@ -219,6 +227,12 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
context: 'title',
})}
</Menu.Item>
<Menu.Item className={styles.menuItem} onClick={handleEditAvatarClick}>
<Icon name="image outline" className={styles.menuItemIcon} />
{t('action.editAvatar', {
context: 'title',
})}
</Menu.Item>
{!user.lockedFieldNames.includes('username') && (
<Menu.Item className={styles.menuItem} onClick={handleEditUsernameClick}>
<Icon name="at" className={styles.menuItemIcon} />

View File

@@ -1,5 +1,5 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Copyright (c) 2026 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
@@ -8,6 +8,7 @@ import { useSelector } from 'react-redux';
import selectors from '../../../selectors';
import Header from '../Header';
import PromoBanner from '../PromoBanner/PromoBanner';
import Favorites from '../Favorites';
import HomeActions from '../HomeActions';
import Project from '../../projects/Project';
@@ -22,6 +23,7 @@ const Fixed = React.memo(() => {
return (
<div className={styles.wrapper}>
<Header />
<PromoBanner />
<Favorites />
{projectId === undefined && <HomeActions />}
{projectId && <Project />}

View File

@@ -0,0 +1,111 @@
/*!
* Copyright (c) 2026 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import React, { useCallback, useEffect, useRef, useState } from 'react';
import { useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
import selectors from '../../../selectors';
import styles from './PromoBanner.module.scss';
const PRO_URL = 'https://planka.app/pro?ref=app-banner';
const DISMISS_DURATION_MS = 30 * 24 * 60 * 60 * 1000;
const CYCLE_INTERVAL_MS = 8000;
const CSS_VAR = '--promo-banner-height';
const FEATURES = ['proFeatureCalendar', 'proFeatureRecurringCards', 'proFeatureGuestRoles'];
// Alternates: main, sub1, main, sub2, main, sub3
const TEXTS = [
'discoverPlankaPro',
FEATURES[0],
'discoverPlankaPro',
FEATURES[1],
'discoverPlankaPro',
FEATURES[2],
];
function getDismissKey(userId) {
return `planka_proBannerDismissed_${userId}`;
}
function isBannerDismissed(userId) {
const stored = localStorage.getItem(getDismissKey(userId));
if (!stored) return false;
return Date.now() - Date.parse(stored) < DISMISS_DURATION_MS;
}
const PromoBanner = React.memo(() => {
const userId = useSelector(selectors.selectCurrentUserId);
const [dismissed, setDismissed] = useState(() => isBannerDismissed(userId));
const [textIndex, setTextIndex] = useState(0);
const [visible, setVisible] = useState(true);
const wrapperRef = useRef(null);
const [t] = useTranslation();
useEffect(() => {
if (dismissed) {
document.documentElement.style.removeProperty(CSS_VAR);
return undefined;
}
const height = wrapperRef.current ? wrapperRef.current.offsetHeight : 0;
document.documentElement.style.setProperty(CSS_VAR, `${height}px`);
return () => document.documentElement.style.removeProperty(CSS_VAR);
}, [dismissed]);
useEffect(() => {
if (dismissed) return undefined;
const interval = setInterval(() => {
setVisible(false);
setTimeout(() => {
setTextIndex((i) => (i + 1) % TEXTS.length);
setVisible(true);
}, 400);
}, CYCLE_INTERVAL_MS);
return () => clearInterval(interval);
}, [dismissed]);
const handleDismiss = useCallback(
(e) => {
e.preventDefault();
localStorage.setItem(getDismissKey(userId), new Date().toISOString());
setDismissed(true);
},
[userId],
);
if (dismissed) return null;
return (
<div ref={wrapperRef} className={styles.wrapper}>
<a
href={PRO_URL}
target="_blank"
rel="noopener noreferrer"
className={`${styles.textLink} ${visible ? styles.textVisible : styles.textHidden}`}
>
{t(`common.${TEXTS[textIndex]}`)}
<span className={styles.externalIcon}></span>
</a>
<button
type="button"
title={t('common.dismissProBannerFor30Days')}
className={styles.closeButton}
onClick={handleDismiss}
>
×
</button>
</div>
);
});
export default PromoBanner;

View File

@@ -0,0 +1,60 @@
/*!
* Copyright (c) 2026 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
:global(#app) {
.wrapper {
align-items: center;
background: rgba(0, 0, 0, 0.18);
display: flex;
gap: 8px;
justify-content: center;
padding: 5px 16px;
}
.textLink {
color: #fff;
cursor: pointer;
flex: 1 1 auto;
font-size: 13px;
text-align: center;
text-decoration: none;
&:hover {
color: #bdff22;
}
}
.externalIcon {
font-size: 11px;
margin-left: 4px;
opacity: 0.7;
vertical-align: super;
}
.textVisible {
opacity: 1;
transition: opacity 0.4s ease;
}
.textHidden {
opacity: 0;
transition: opacity 0.4s ease;
}
.closeButton {
background: transparent;
border: none;
color: rgba(255, 255, 255, 0.45);
cursor: pointer;
flex: 0 0 auto;
font-size: 18px;
line-height: 1;
padding: 0 2px;
}
.closeButton:hover {
color: rgba(255, 255, 255, 0.9);
}
}

View File

@@ -1,5 +1,5 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Copyright (c) 2026 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
@@ -37,15 +37,15 @@
.wrapper {
height: 100%;
margin-top: 116px;
margin-top: calc(116px + var(--promo-banner-height, 0px));
}
.wrapperBoard {
margin-top: 174px;
margin-top: calc(174px + var(--promo-banner-height, 0px));
}
.wrapperBoardWithFavorites {
margin-top: 264px;
margin-top: calc(264px + var(--promo-banner-height, 0px));
}
.wrapperFlex {
@@ -57,11 +57,11 @@
}
.wrapperProject {
margin-top: 98px;
margin-top: calc(98px + var(--promo-banner-height, 0px));
}
.wrapperProjectWithFavorites {
margin-top: 188px;
margin-top: calc(188px + var(--promo-banner-height, 0px));
}
.wrapperTransitioning {
@@ -73,6 +73,6 @@
}
.wrapperWithFavorites {
margin-top: 206px;
margin-top: calc(206px + var(--promo-banner-height, 0px));
}
}

View File

@@ -3,20 +3,22 @@
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import React, { useCallback, useEffect, useRef } from 'react';
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
import PropTypes from 'prop-types';
import { useDispatch, useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
import { Button } from 'semantic-ui-react';
import { FilePicker, Popup } from '../../../../lib/custom-ui';
import { FilePicker, Popup } from '../../../lib/custom-ui';
import selectors from '../../../../selectors';
import entryActions from '../../../../entry-actions';
import selectors from '../../../selectors';
import entryActions from '../../../entry-actions';
import styles from './EditAvatarStep.module.scss';
import styles from './EditUserAvatarStep.module.scss';
const EditAvatarStep = React.memo(({ onClose }) => {
const defaultValue = useSelector((state) => selectors.selectCurrentUser(state).avatar);
const EditUserAvatarStep = React.memo(({ id, onBack, onClose }) => {
const selectUserById = useMemo(() => selectors.makeSelectUserById(), []);
const avatar = useSelector((state) => selectUserById(state, id).avatar);
const dispatch = useDispatch();
const [t] = useTranslation();
@@ -26,33 +28,33 @@ const EditAvatarStep = React.memo(({ onClose }) => {
const handleFileSelect = useCallback(
(file) => {
dispatch(
entryActions.updateCurrentUserAvatar({
entryActions.updateUserAvatar(id, {
file,
}),
);
onClose();
},
[onClose, dispatch],
[dispatch, id, onClose],
);
const handleDeleteClick = useCallback(() => {
dispatch(
entryActions.updateCurrentUser({
entryActions.updateUser(id, {
avatar: null,
}),
);
onClose();
}, [onClose, dispatch]);
}, [dispatch, id, onClose]);
useEffect(() => {
fieldRef.current.focus();
fieldRef.current?.focus?.();
}, []);
return (
<>
<Popup.Header>
<Popup.Header onBack={onBack}>
{t('common.editAvatar', {
context: 'title',
})}
@@ -67,7 +69,7 @@ const EditAvatarStep = React.memo(({ onClose }) => {
/>
</FilePicker>
</div>
{defaultValue && (
{avatar && (
<Button negative content={t('action.deleteAvatar')} onClick={handleDeleteClick} />
)}
</Popup.Content>
@@ -75,8 +77,14 @@ const EditAvatarStep = React.memo(({ onClose }) => {
);
});
EditAvatarStep.propTypes = {
EditUserAvatarStep.propTypes = {
id: PropTypes.string.isRequired,
onBack: PropTypes.func,
onClose: PropTypes.func.isRequired,
};
export default EditAvatarStep;
EditUserAvatarStep.defaultProps = {
onBack: undefined,
};
export default EditUserAvatarStep;

View File

@@ -3,6 +3,6 @@
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import AccountPane from './AccountPane';
import EditUserAvatarStep from './EditUserAvatarStep';
export default AccountPane;
export default EditUserAvatarStep;

View File

@@ -1,5 +1,5 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Copyright (c) 2026 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
@@ -104,6 +104,17 @@ const UserActionsStep = React.memo(({ onClose }) => {
context: 'title',
})}
</Menu.Item>
<Menu.Item
href="https://planka.app/pro?ref=app-menu"
target="_blank"
rel="noopener noreferrer"
className={styles.proMenuItem}
>
<Icon name="gem" className={styles.proMenuItemIcon} />
{withAdministration
? t('common.upgradeTeamToPro', { context: 'title' })
: t('common.discoverPlankaPro', { context: 'title' })}
</Menu.Item>
<hr className={styles.divider} />
<Menu.Item
{...logoutMenuItemProps} // eslint-disable-line react/jsx-props-no-spreading

View File

@@ -1,5 +1,5 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Copyright (c) 2026 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
@@ -25,4 +25,14 @@
float: left;
margin: 0 0.5em 0 0;
}
.proMenuItem {
margin: 0;
padding-left: 14px;
}
.proMenuItemIcon {
float: left;
margin: 0 0.5em 0 0;
}
}

View File

@@ -5,7 +5,6 @@
import upperFirst from 'lodash/upperFirst';
import camelCase from 'lodash/camelCase';
import initials from 'initials';
import React, { useMemo } from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
@@ -35,6 +34,19 @@ const COLORS = [
'midnight-blue',
];
const getInitials = (name) => {
const words = name
.trim()
.split(/[\s-]+/)
.filter(Boolean);
if (words.length === 0) return '';
if (words.length === 1) return [...words[0]].slice(0, 2).join('');
return words
.slice(0, 2)
.map((word) => [...word][0])
.join('');
};
const getColor = (name) => {
let sum = 0;
for (let i = 0; i < name.length; i += 1) {
@@ -78,7 +90,7 @@ const UserAvatar = React.memo(
background: avatarUrl && `url("${avatarUrl}") center / cover`,
}}
>
{!avatarUrl && <span className={styles.initials}>{initials(user.name).slice(0, 2)}</span>}
{!avatarUrl && <span className={styles.initials}>{getInitials(user.name)}</span>}
{withCreatorIndicator && <span className={styles.creatorIndicator}>+</span>}
</span>
);

View File

@@ -8,16 +8,16 @@ import { useDispatch, useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
import { Button, Divider, Dropdown, Header, Tab } from 'semantic-ui-react';
import selectors from '../../../../selectors';
import entryActions from '../../../../entry-actions';
import { usePopupInClosableContext } from '../../../../hooks';
import locales from '../../../../locales';
import EditAvatarStep from './EditAvatarStep';
import EditUserInformation from '../../EditUserInformation';
import EditUserUsernameStep from '../../EditUserUsernameStep';
import EditUserEmailStep from '../../EditUserEmailStep';
import EditUserPasswordStep from '../../EditUserPasswordStep';
import UserAvatar from '../../UserAvatar';
import selectors from '../../../selectors';
import entryActions from '../../../entry-actions';
import { usePopupInClosableContext } from '../../../hooks';
import locales from '../../../locales';
import EditUserInformation from '../EditUserInformation';
import EditUserAvatarStep from '../EditUserAvatarStep';
import EditUserUsernameStep from '../EditUserUsernameStep';
import EditUserEmailStep from '../EditUserEmailStep';
import EditUserPasswordStep from '../EditUserPasswordStep';
import UserAvatar from '../UserAvatar';
import styles from './AccountPane.module.scss';
@@ -34,7 +34,7 @@ const AccountPane = React.memo(() => {
[dispatch],
);
const EditAvatarPopup = usePopupInClosableContext(EditAvatarStep);
const EditUserAvatarPopup = usePopupInClosableContext(EditUserAvatarStep);
const EditUserUsernamePopup = usePopupInClosableContext(EditUserUsernameStep);
const EditUserEmailPopup = usePopupInClosableContext(EditUserEmailStep);
const EditUserPasswordPopup = usePopupInClosableContext(EditUserPasswordStep);
@@ -45,9 +45,9 @@ const AccountPane = React.memo(() => {
return (
<Tab.Pane attached={false} className={styles.wrapper}>
<EditAvatarPopup>
<EditUserAvatarPopup id={user.id}>
<UserAvatar id={user.id} size="massive" isDisabled={user.isAvatarUpdating} />
</EditAvatarPopup>
</EditUserAvatarPopup>
<br />
<br />
<EditUserInformation id={user.id} />

View File

@@ -75,6 +75,7 @@ export default {
CURRENT_USER_USERNAME_UPDATE: `${PREFIX}/CURRENT_USER_USERNAME_UPDATE`,
USER_USERNAME_UPDATE_ERROR_CLEAR: `${PREFIX}/USER_USERNAME_UPDATE_ERROR_CLEAR`,
CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR: `${PREFIX}/CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR`,
USER_AVATAR_UPDATE: `${PREFIX}/USER_AVATAR_UPDATE`,
CURRENT_USER_AVATAR_UPDATE: `${PREFIX}/CURRENT_USER_AVATAR_UPDATE`,
USER_API_KEY_CREATE: `${PREFIX}/USER_API_KEY_CREATE`,
USER_API_KEY_DELETE: `${PREFIX}/USER_API_KEY_DELETE`,

View File

@@ -139,6 +139,14 @@ const clearCurrentUserUsernameUpdateError = () => ({
payload: {},
});
const updateUserAvatar = (id, data) => ({
type: EntryActionTypes.USER_AVATAR_UPDATE,
payload: {
id,
data,
},
});
const updateCurrentUserAvatar = (data) => ({
type: EntryActionTypes.CURRENT_USER_AVATAR_UPDATE,
payload: {
@@ -271,6 +279,7 @@ export default {
updateCurrentUserUsername,
clearUserUsernameUpdateError,
clearCurrentUserUsernameUpdateError,
updateUserAvatar,
updateCurrentUserAvatar,
createUserApiKey,
deleteUserApiKey,

View File

@@ -138,6 +138,13 @@ export default {
customFieldGroups_title: 'مجموعات الحقول المخصصة',
customField_title: 'الحقل المخصص',
customFields_title: 'الحقول المخصصة',
discoverPlankaPro: '✨ المزيد من الميزات لألواحك: اكتشف PLANKA Pro',
discoverPlankaPro_title: 'اكتشف PLANKA Pro',
upgradeTeamToPro_title: 'ترقية الفريق إلى Pro',
proFeatureCalendar: '✨ عرض التقويم للوحاتك',
proFeatureRecurringCards: '✨ البطاقات المتكررة والأتمتة',
proFeatureGuestRoles: '✨ أدوار الضيف والتعاون الخارجي',
dismissProBannerFor30Days: 'إغلاق لمدة 30 يومًا',
customerPanel_title: 'لوحة العملاء',
dangerZone_title: 'منطقة الخطر',
date: 'تاريخ',
@@ -436,6 +443,7 @@ export default {
download: 'تحميل',
duplicateCard_title: 'تكرار البطاقة',
edit: 'تعديل',
editAvatar_title: 'تعديل الصورة الرمزية',
editColor_title: 'تعديل اللون',
editDescription_title: 'تعديل الوصف',
editDueDate_title: 'تعديل تاريخ الاستحقاق',

View File

@@ -149,6 +149,13 @@ export default {
customFieldGroups_title: 'Групи персонализирани полета',
customField_title: 'Персонализирано поле',
customFields_title: 'Персонализирани полета',
discoverPlankaPro: '✨ Повече функции за вашите дъски: Открийте PLANKA Pro',
discoverPlankaPro_title: 'Открийте PLANKA Pro',
upgradeTeamToPro_title: 'Надградете екипа до Pro',
proFeatureCalendar: '✨ Изглед Календар за вашите дъски',
proFeatureRecurringCards: '✨ Повтарящи се карти и автоматизация',
proFeatureGuestRoles: '✨ Роли за гости и външно сътрудничество',
dismissProBannerFor30Days: 'Скрий за 30 дни',
customerPanel_title: 'Панел на клиента',
dangerZone_title: 'Опасна зона',
date: 'Дата',
@@ -451,6 +458,7 @@ export default {
download: 'Изтегляне',
duplicateCard_title: 'Дублирана карта',
edit: 'Редактиране',
editAvatar_title: 'Редактиране на аватар',
editColor_title: 'Редактиране на цвят',
editDescription_title: 'Редактиране на описание',
editDueDate_title: 'Редактиране на краен срок',

View File

@@ -148,6 +148,13 @@ export default {
customFieldGroups_title: 'Grups de camps personalitzats',
customField_title: 'Camp personalitzat',
customFields_title: 'Camps personalitzats',
discoverPlankaPro: '✨ Més funcions per als vostres taulers: Descobriu PLANKA Pro',
discoverPlankaPro_title: 'Descobriu PLANKA Pro',
upgradeTeamToPro_title: "Actualitzeu l'equip a Pro",
proFeatureCalendar: '✨ Vista de calendari per als vostres taulers',
proFeatureRecurringCards: '✨ Targetes recurrents i automatització',
proFeatureGuestRoles: '✨ Rols de convidat i col·laboració externa',
dismissProBannerFor30Days: 'Tanca durant 30 dies',
customerPanel_title: 'Panell del client',
dangerZone_title: 'Zona de perill',
date: 'Data',
@@ -453,6 +460,7 @@ export default {
download: 'Descarregar',
duplicateCard_title: 'Duplicar targeta',
edit: 'Editar',
editAvatar_title: 'Editar avatar',
editColor_title: 'Editar color',
editDescription_title: 'Editar descripció',
editDueDate_title: 'Editar data de venciment',

View File

@@ -140,6 +140,13 @@ export default {
customFieldGroups_title: 'Skupina vlastních polí',
customField_title: 'Vlastní pole',
customFields_title: 'Vlastní pole',
discoverPlankaPro: '✨ Více funkcí pro vaše tabule: Objevte PLANKA Pro',
discoverPlankaPro_title: 'Objevte PLANKA Pro',
upgradeTeamToPro_title: 'Upgradovat tým na Pro',
proFeatureCalendar: '✨ Zobrazení kalendáře pro vaše tabule',
proFeatureRecurringCards: '✨ Opakující se karty a automatizace',
proFeatureGuestRoles: '✨ Role hosta a externí spolupráce',
dismissProBannerFor30Days: 'Zavřít na 30 dní',
customerPanel_title: 'Panel zákazníka',
dangerZone_title: 'Nebezpečná zóna',
date: 'Datum',
@@ -441,6 +448,7 @@ export default {
download: 'Stáhnout',
duplicateCard_title: 'Duplikovat kartu',
edit: 'Upravit',
editAvatar_title: 'Upravit avatar',
editColor_title: 'Upravit barvu',
editDescription_title: 'Upravit popis',
editDueDate_title: 'Upravit termín',

View File

@@ -144,6 +144,13 @@ export default {
customFieldGroups_title: 'Brugerdefinerede feltgrupper',
customField_title: 'Brugerdefineret felt',
customFields_title: 'Brugerdefinerede felter',
discoverPlankaPro: '✨ Flere funktioner til dine boards: Opdag PLANKA Pro',
discoverPlankaPro_title: 'Opdag PLANKA Pro',
upgradeTeamToPro_title: 'Opgrader team til Pro',
proFeatureCalendar: '✨ Kalendervisning til dine boards',
proFeatureRecurringCards: '✨ Tilbagevendende kort og automatisering',
proFeatureGuestRoles: '✨ Gæsteroller og eksternt samarbejde',
dismissProBannerFor30Days: 'Luk i 30 dage',
customerPanel_title: 'Kundepanel',
dangerZone_title: 'Farezone',
date: 'Dato',
@@ -447,6 +454,7 @@ export default {
download: 'Download',
duplicateCard_title: 'Duplikér kort',
edit: 'Rediger',
editAvatar_title: 'Rediger profilbillede',
editColor_title: 'Rediger farve',
editDescription_title: 'Rediger beskrivelse',
editDueDate_title: 'Rediger frist',

View File

@@ -161,6 +161,13 @@ export default {
customFields_title: 'Feldgruppen',
customerPanel_title: 'Kundenpanel',
dangerZone_title: 'Gefahrenbereich',
discoverPlankaPro: '✨ Mehr Features für eure Boards: PLANKA Pro entdecken',
discoverPlankaPro_title: 'PLANKA Pro entdecken',
dismissProBannerFor30Days: 'Für 30 Tage schließen',
upgradeTeamToPro_title: 'Team auf Pro upgraden',
proFeatureCalendar: '✨ Kalenderansicht für eure Boards',
proFeatureRecurringCards: '✨ Wiederkehrende Karten',
proFeatureGuestRoles: '✨ Gastrollen & externe Zusammenarbeit',
date: 'Datum',
deactivateUser_title: 'Benutzer deaktivieren',
defaultCardType_title: 'Standard-Kartentyp',
@@ -463,6 +470,7 @@ export default {
download: 'Herunterladen',
duplicateCard_title: 'Karte duplizieren',
edit: 'Bearbeiten',
editAvatar_title: 'Profilbild bearbeiten',
editColor_title: 'Farbe bearbeiten',
editDescription_title: 'Beschreibung ändern',
editDueDate_title: 'Fälligkeitsdatum bearbeiten',

View File

@@ -157,6 +157,14 @@ export default {
customFieldGroups_title: 'Ομάδες προσαρμοσμένων πεδίων',
customField_title: 'Προσαρμοσμένο πεδίο',
customFields_title: 'Προσαρμοσμένα πεδία',
discoverPlankaPro:
'✨ Περισσότερες λειτουργίες για τους πίνακές σας: Ανακαλύψτε το PLANKA Pro',
discoverPlankaPro_title: 'Ανακαλύψτε το PLANKA Pro',
upgradeTeamToPro_title: 'Αναβαθμίστε την ομάδα σε Pro',
proFeatureCalendar: '✨ Προβολή ημερολογίου για τους πίνακές σας',
proFeatureRecurringCards: '✨ Επαναλαμβανόμενες κάρτες και αυτοματισμός',
proFeatureGuestRoles: '✨ Ρόλοι επισκεπτών και εξωτερική συνεργασία',
dismissProBannerFor30Days: 'Κλείσιμο για 30 ημέρες',
customerPanel_title: 'Πίνακας πελάτη',
dangerZone_title: 'Επικίνδυνη ζώνη',
date: 'Ημερομηνία',
@@ -467,6 +475,7 @@ export default {
download: 'Λήψη',
duplicateCard_title: 'Διπλασιασμός κάρτας',
edit: 'Επεξεργασία',
editAvatar_title: 'Επεξεργασία avatar',
editColor_title: 'Επεξεργασία χρώματος',
editDescription_title: 'Επεξεργασία περιγραφής',
editDueDate_title: 'Επεξεργασία ημερομηνίας λήξης',

View File

@@ -143,6 +143,13 @@ export default {
customFieldGroups_title: 'Custom Field Groups',
customField_title: 'Custom Field',
customFields_title: 'Custom Fields',
discoverPlankaPro: '✨ More features for your boards: Discover PLANKA Pro',
discoverPlankaPro_title: 'Discover PLANKA Pro',
upgradeTeamToPro_title: 'Upgrade Team to Pro',
proFeatureCalendar: '✨ Calendar View for your boards',
proFeatureRecurringCards: '✨ Recurring Cards & Automation',
proFeatureGuestRoles: '✨ Guest Roles & External Collaboration',
dismissProBannerFor30Days: 'Dismiss for 30 days',
customerPanel_title: 'Customer Panel',
dangerZone_title: 'Danger Zone',
date: 'Date',
@@ -443,6 +450,7 @@ export default {
download: 'Download',
duplicateCard_title: 'Duplicate Card',
edit: 'Edit',
editAvatar_title: 'Edit Avatar',
editColor_title: 'Edit Color',
editDescription_title: 'Edit Description',
editDueDate_title: 'Edit Due Date',

View File

@@ -140,6 +140,13 @@ export default {
customFields_title: 'Custom Fields',
customerPanel_title: 'Customer Panel',
dangerZone_title: 'Danger Zone',
discoverPlankaPro: '✨ More features for your boards: Discover PLANKA Pro',
discoverPlankaPro_title: 'Discover PLANKA Pro',
dismissProBannerFor30Days: 'Dismiss for 30 days',
upgradeTeamToPro_title: 'Upgrade Team to Pro',
proFeatureCalendar: '✨ Calendar View for your boards',
proFeatureRecurringCards: '✨ Recurring Cards',
proFeatureGuestRoles: '✨ Guest Roles & External Collaboration',
date: 'Date',
deactivateUser_title: 'Deactivate User',
defaultCardType_title: 'Default Card Type',
@@ -438,6 +445,7 @@ export default {
download: 'Download',
duplicateCard_title: 'Duplicate Card',
edit: 'Edit',
editAvatar_title: 'Edit Avatar',
editColor_title: 'Edit Color',
editDescription_title: 'Edit Description',
editDueDate_title: 'Edit Due Date',

View File

@@ -149,6 +149,13 @@ export default {
customFieldGroups_title: 'Grupos de campos personalizados',
customField_title: 'Campo personalizado',
customFields_title: 'Campos personalizados',
discoverPlankaPro: '✨ Más funciones para tus tableros: Descubre PLANKA Pro',
discoverPlankaPro_title: 'Descubre PLANKA Pro',
upgradeTeamToPro_title: 'Actualizar equipo a Pro',
proFeatureCalendar: '✨ Vista de calendario para tus tableros',
proFeatureRecurringCards: '✨ Tarjetas recurrentes y automatización',
proFeatureGuestRoles: '✨ Roles de invitado y colaboración externa',
dismissProBannerFor30Days: 'Cerrar durante 30 días',
customerPanel_title: 'Panel del cliente',
dangerZone_title: 'Zona de peligro',
date: 'Fecha',
@@ -453,6 +460,7 @@ export default {
download: 'Descargar',
duplicateCard_title: 'Duplicar tarjeta',
edit: 'Editar',
editAvatar_title: 'Editar avatar',
editColor_title: 'Editar color',
editDescription_title: 'Editar descripción',
editDueDate_title: 'Editar fecha de vencimiento',

View File

@@ -144,6 +144,13 @@ export default {
customFieldGroups_title: 'Kohandatud väljade grupid',
customField_title: 'Kohandatud väli',
customFields_title: 'Kohandatud väljad',
discoverPlankaPro: '✨ Rohkem funktsioone oma tahvlite jaoks: Avasta PLANKA Pro',
discoverPlankaPro_title: 'Avasta PLANKA Pro',
upgradeTeamToPro_title: 'Uuenda meeskond Pro-ks',
proFeatureCalendar: '✨ Kalendervaade oma tahvlite jaoks',
proFeatureRecurringCards: '✨ Korduvad kaardid ja automatiseerimine',
proFeatureGuestRoles: '✨ Külalisrollid ja väline koostöö',
dismissProBannerFor30Days: 'Sulge 30 päevaks',
customerPanel_title: 'Kliendi paneel',
dangerZone_title: 'Ohtliku ala',
date: 'Kuupäev',
@@ -445,6 +452,7 @@ export default {
download: 'Laadi alla',
duplicateCard_title: 'Duplikaardi loomine',
edit: 'Muuda',
editAvatar_title: 'Muuda avatar',
editColor_title: 'Muuda värvi',
editDescription_title: 'Muuda kirjeldust',
editDueDate_title: 'Muuda tähtaega',

View File

@@ -147,6 +147,13 @@ export default {
customFieldGroups_title: 'گروه‌های فیلد سفارشی',
customField_title: 'فیلد سفارشی',
customFields_title: 'فیلدهای سفارشی',
discoverPlankaPro: '✨ ویژگی‌های بیشتر برای تابلوهای شما: PLANKA Pro را کشف کنید',
discoverPlankaPro_title: 'PLANKA Pro را کشف کنید',
upgradeTeamToPro_title: 'ارتقای تیم به Pro',
proFeatureCalendar: '✨ نمای تقویم برای تابلوهای شما',
proFeatureRecurringCards: '✨ کارت‌های تکرارشونده و خودکارسازی',
proFeatureGuestRoles: '✨ نقش‌های مهمان و همکاری خارجی',
dismissProBannerFor30Days: 'بستن برای ۳۰ روز',
customerPanel_title: 'پنل مشتری',
dangerZone_title: 'منطقه خطر',
date: 'تاریخ',
@@ -447,6 +454,7 @@ export default {
download: 'دانلود',
duplicateCard_title: 'تکرار کارت',
edit: 'ویرایش',
editAvatar_title: 'ویرایش آواتار',
editColor_title: 'ویرایش رنگ',
editDescription_title: 'ویرایش توضیحات',
editDueDate_title: 'ویرایش تاریخ سررسید',

View File

@@ -140,6 +140,13 @@ export default {
customFieldGroups_title: 'Mukautettujen kenttien ryhmät',
customField_title: 'Mukautettu kenttä',
customFields_title: 'Mukautetut kentät',
discoverPlankaPro: '✨ Lisää ominaisuuksia tauluillesi: Tutustu PLANKA Pro:hon',
discoverPlankaPro_title: 'Tutustu PLANKA Pro:hon',
upgradeTeamToPro_title: 'Päivitä tiimi Pro-versioon',
proFeatureCalendar: '✨ Kalenterinäkymä tauluillesi',
proFeatureRecurringCards: '✨ Toistuvat kortit ja automaatio',
proFeatureGuestRoles: '✨ Vierasroolit ja ulkoinen yhteistyö',
dismissProBannerFor30Days: 'Sulje 30 päiväksi',
customerPanel_title: 'Asiakaspaneeli',
dangerZone_title: 'Vaaravyöhyke',
date: 'Päivämäärä',
@@ -446,6 +453,7 @@ export default {
download: 'Lataa',
duplicateCard_title: 'Monista kortti',
edit: 'Muokkaa',
editAvatar_title: 'Muokkaa avatar',
editColor_title: 'Muokkaa väriä',
editDescription_title: 'Muokkaa kuvausta',
editDueDate_title: 'Muokkaa määräpäivää',

View File

@@ -148,6 +148,13 @@ export default {
customFieldGroups_title: 'Groupes de champs personnalisés',
customField_title: 'Champ personnalisé',
customFields_title: 'Champs personnalisés',
discoverPlankaPro: '✨ Plus de fonctionnalités pour vos tableaux : Découvrez PLANKA Pro',
discoverPlankaPro_title: 'Découvrez PLANKA Pro',
upgradeTeamToPro_title: "Passer l'équipe à Pro",
proFeatureCalendar: '✨ Vue calendrier pour vos tableaux',
proFeatureRecurringCards: '✨ Cartes récurrentes et automatisation',
proFeatureGuestRoles: '✨ Rôles invités et collaboration externe',
dismissProBannerFor30Days: 'Fermer pendant 30 jours',
customerPanel_title: 'Panneau client',
dangerZone_title: 'Zone dangereuse',
date: 'Date',
@@ -451,6 +458,7 @@ export default {
download: 'Télécharger',
duplicateCard_title: 'Dupliquer la carte',
edit: 'Modifier',
editAvatar_title: "Modifier l'avatar",
editColor_title: 'Modifier la couleur',
editDescription_title: 'Modifier la description',
editDueDate_title: "Modifier la date d'échéance",

View File

@@ -138,6 +138,13 @@ export default {
customFieldGroups_title: 'Egyedi mezőcsoportok',
customField_title: 'Egyedi mező',
customFields_title: 'Egyedi mezők',
discoverPlankaPro: '✨ Több funkció a tábláidhoz: Fedezd fel a PLANKA Pro-t',
discoverPlankaPro_title: 'Fedezd fel a PLANKA Pro-t',
upgradeTeamToPro_title: 'Csapat frissítése Pro-ra',
proFeatureCalendar: '✨ Naptár nézet a tábláidhoz',
proFeatureRecurringCards: '✨ Ismétlődő kártyák és automatizálás',
proFeatureGuestRoles: '✨ Vendég szerepkörök és külső együttműködés',
dismissProBannerFor30Days: 'Bezárás 30 napra',
customerPanel_title: 'Ügyfélpanel',
dangerZone_title: 'Veszélyzóna',
date: 'Dátum',
@@ -445,6 +452,7 @@ export default {
download: 'Letöltés',
duplicateCard_title: 'Kártya másolása',
edit: 'Szerkesztés',
editAvatar_title: 'Avatar szerkesztése',
editColor_title: 'Szín szerkesztése',
editDescription_title: 'Leírás szerkesztése',
editDueDate_title: 'Esedékesség dátumának szerkesztése',

View File

@@ -145,6 +145,13 @@ export default {
customFieldGroups_title: 'Grup bidang kustom',
customField_title: 'Bidang kustom',
customFields_title: 'Bidang kustom',
discoverPlankaPro: '✨ Lebih banyak fitur untuk papan Anda: Temukan PLANKA Pro',
discoverPlankaPro_title: 'Temukan PLANKA Pro',
upgradeTeamToPro_title: 'Tingkatkan tim ke Pro',
proFeatureCalendar: '✨ Tampilan Kalender untuk papan Anda',
proFeatureRecurringCards: '✨ Kartu Berulang & Otomatisasi',
proFeatureGuestRoles: '✨ Peran Tamu & Kolaborasi Eksternal',
dismissProBannerFor30Days: 'Tutup selama 30 hari',
customerPanel_title: 'Panel pelanggan',
dangerZone_title: 'Zona berbahaya',
date: 'Tanggal',
@@ -446,6 +453,7 @@ export default {
download: 'Unduh',
duplicateCard_title: 'Duplikat kartu',
edit: 'Ubah',
editAvatar_title: 'Ubah avatar',
editColor_title: 'Ubah warna',
editDescription_title: 'Ubah deskripsi',
editDueDate_title: 'Ubah tenggat waktu',

View File

@@ -145,6 +145,13 @@ export default {
customFieldGroups_title: 'Campi personalizzati',
customField_title: 'Campo personalizzato',
customFields_title: 'Campi personalizzati',
discoverPlankaPro: '✨ Più funzionalità per le tue bacheche: Scopri PLANKA Pro',
discoverPlankaPro_title: 'Scopri PLANKA Pro',
upgradeTeamToPro_title: 'Aggiorna il team a Pro',
proFeatureCalendar: '✨ Vista calendario per le tue bacheche',
proFeatureRecurringCards: '✨ Schede ricorrenti e automazione',
proFeatureGuestRoles: '✨ Ruoli ospite e collaborazione esterna',
dismissProBannerFor30Days: 'Chiudi per 30 giorni',
customerPanel_title: 'Pannello cliente',
dangerZone_title: 'Zona pericolosa',
date: 'Data',
@@ -449,6 +456,7 @@ export default {
download: 'Scarica',
duplicateCard_title: 'Duplica scheda',
edit: 'Modifica',
editAvatar_title: 'Modifica avatar',
editColor_title: 'Modifica colore',
editDescription_title: 'Modifica descrizione',
editDueDate_title: 'Modifica data di scadenza',

View File

@@ -141,6 +141,13 @@ export default {
customFieldGroups_title: 'カスタムフィールドグループ',
customField_title: 'カスタムフィールド',
customFields_title: 'カスタムフィールド',
discoverPlankaPro: '✨ ボードのさらなる機能: PLANKA Proを発見',
discoverPlankaPro_title: 'PLANKA Proを発見',
upgradeTeamToPro_title: 'チームをProにアップグレード',
proFeatureCalendar: '✨ ボード用カレンダービュー',
proFeatureRecurringCards: '✨ 繰り返しカードと自動化',
proFeatureGuestRoles: '✨ ゲストロールと外部コラボレーション',
dismissProBannerFor30Days: '30日間閉じる',
customerPanel_title: '顧客パネル',
dangerZone_title: '危険ゾーン',
date: '日付',
@@ -443,6 +450,7 @@ export default {
download: 'ダウンロード',
duplicateCard_title: 'カードを複製',
edit: '編集',
editAvatar_title: 'アバターを編集',
editColor_title: '色を編集',
editDescription_title: '説明を編集',
editDueDate_title: '期限を編集',

View File

@@ -136,6 +136,13 @@ export default {
customFieldGroups_title: '사용자 정의 필드 그룹들',
customField_title: '사용자 정의 필드',
customFields_title: '사용자 정의 필드들',
discoverPlankaPro: '✨ 보드를 위한 더 많은 기능: PLANKA Pro 알아보기',
discoverPlankaPro_title: 'PLANKA Pro 알아보기',
upgradeTeamToPro_title: '팀을 Pro로 업그레이드',
proFeatureCalendar: '✨ 보드용 캘린더 뷰',
proFeatureRecurringCards: '✨ 반복 카드 및 자동화',
proFeatureGuestRoles: '✨ 게스트 역할 및 외부 협업',
dismissProBannerFor30Days: '30일 동안 닫기',
customerPanel_title: '고객 패널',
dangerZone_title: '위험 구역',
date: '날짜',
@@ -440,6 +447,7 @@ export default {
download: '다운로드',
duplicateCard_title: '카드 복제',
edit: '편집',
editAvatar_title: '아바타 편집',
editColor_title: '색상 편집',
editDescription_title: '설명 편집',
editDueDate_title: '마감일 편집',

View File

@@ -144,6 +144,13 @@ export default {
customFieldGroups_title: 'Aangepaste veldgroepen',
customField_title: 'Aangepast veld',
customFields_title: 'Aangepaste velden',
discoverPlankaPro: '✨ Meer functies voor uw borden: Ontdek PLANKA Pro',
discoverPlankaPro_title: 'Ontdek PLANKA Pro',
upgradeTeamToPro_title: 'Team upgraden naar Pro',
proFeatureCalendar: '✨ Kalenderweergave voor uw borden',
proFeatureRecurringCards: '✨ Terugkerende kaarten en automatisering',
proFeatureGuestRoles: '✨ Gastrol en externe samenwerking',
dismissProBannerFor30Days: 'Sluiten voor 30 dagen',
customerPanel_title: 'Klantenpaneel',
dangerZone_title: 'Gevaarlijke zone',
date: 'Datum',
@@ -449,6 +456,7 @@ export default {
download: 'Downloaden',
duplicateCard_title: 'Kaart dupliceren',
edit: 'Bewerken',
editAvatar_title: 'Avatar bewerken',
editColor_title: 'Kleur bewerken',
editDescription_title: 'Beschrijving bewerken',
editDueDate_title: 'Vervaldatum bewerken',

View File

@@ -143,6 +143,13 @@ export default {
customFieldGroups_title: 'Grupy pól własnych',
customField_title: 'Własne pole',
customFields_title: 'Własne pola',
discoverPlankaPro: '✨ Więcej funkcji dla Twoich tablic: Odkryj PLANKA Pro',
discoverPlankaPro_title: 'Odkryj PLANKA Pro',
upgradeTeamToPro_title: 'Uaktualnij zespół do Pro',
proFeatureCalendar: '✨ Widok kalendarza dla Twoich tablic',
proFeatureRecurringCards: '✨ Powtarzające się karty i automatyzacja',
proFeatureGuestRoles: '✨ Role gościa i zewnętrzna współpraca',
dismissProBannerFor30Days: 'Zamknij na 30 dni',
customerPanel_title: 'Panel klienta',
dangerZone_title: 'Strefa niebezpieczeństwa',
date: 'Data',
@@ -446,6 +453,7 @@ export default {
download: 'Pobierz',
duplicateCard_title: 'Duplikuj kartę',
edit: 'Edytuj',
editAvatar_title: 'Edytuj awatar',
editColor_title: 'Edytuj kolor',
editDescription_title: 'Edytuj opis',
editDueDate_title: 'Edytuj termin',

View File

@@ -146,6 +146,13 @@ export default {
customFieldGroups_title: 'Grupos de campo personalizado',
customField_title: 'Campo personalizado',
customFields_title: 'Campos personalizados',
discoverPlankaPro: '✨ Mais recursos para seus quadros: Descubra o PLANKA Pro',
discoverPlankaPro_title: 'Descubra o PLANKA Pro',
upgradeTeamToPro_title: 'Atualizar equipe para Pro',
proFeatureCalendar: '✨ Visualização de calendário para seus quadros',
proFeatureRecurringCards: '✨ Cartões recorrentes e automação',
proFeatureGuestRoles: '✨ Funções de convidado e colaboração externa',
dismissProBannerFor30Days: 'Fechar por 30 dias',
customerPanel_title: 'Painel do cliente',
dangerZone_title: 'Zona de perigo',
date: 'Data',
@@ -449,6 +456,7 @@ export default {
download: 'Baixar',
duplicateCard_title: 'Duplicar cartão',
edit: 'Editar',
editAvatar_title: 'Editar avatar',
editColor_title: 'Editar cor',
editDescription_title: 'Editar descrição',
editDueDate_title: 'Editar data de vencimento',

View File

@@ -148,6 +148,13 @@ export default {
customFieldGroups_title: 'Grupos de campos personalizados',
customField_title: 'Campo personalizado',
customFields_title: 'Campos personalizados',
discoverPlankaPro: '✨ Mais funcionalidades para os seus quadros: Descubra o PLANKA Pro',
discoverPlankaPro_title: 'Descubra o PLANKA Pro',
upgradeTeamToPro_title: 'Atualizar equipa para Pro',
proFeatureCalendar: '✨ Vista de calendário para os seus quadros',
proFeatureRecurringCards: '✨ Cartões recorrentes e automatização',
proFeatureGuestRoles: '✨ Funções de convidado e colaboração externa',
dismissProBannerFor30Days: 'Fechar durante 30 dias',
customerPanel_title: 'Painel do cliente',
dangerZone_title: 'Zona perigosa',
date: 'Data',
@@ -452,6 +459,7 @@ export default {
download: 'Transferir',
duplicateCard_title: 'Duplicar cartão',
edit: 'Editar',
editAvatar_title: 'Editar avatar',
editColor_title: 'Editar cor',
editDescription_title: 'Editar descrição',
editDueDate_title: 'Editar data de vencimento',

View File

@@ -142,6 +142,13 @@ export default {
customFieldGroups_title: 'Grupuri de câmpuri personalizate',
customField_title: 'Câmp personalizat',
customFields_title: 'Câmpuri personalizate',
discoverPlankaPro: '✨ Mai multe funcții pentru panourile tale: Descoperă PLANKA Pro',
discoverPlankaPro_title: 'Descoperă PLANKA Pro',
upgradeTeamToPro_title: 'Actualizează echipa la Pro',
proFeatureCalendar: '✨ Vizualizare calendar pentru panourile tale',
proFeatureRecurringCards: '✨ Carduri recurente și automatizare',
proFeatureGuestRoles: '✨ Roluri invitat și colaborare externă',
dismissProBannerFor30Days: 'Închide pentru 30 de zile',
customerPanel_title: 'Panoul clientului',
dangerZone_title: 'Zona periculoasă',
date: 'Data',
@@ -446,6 +453,7 @@ export default {
download: 'Descărcați',
duplicateCard_title: 'Duplicați cardul',
edit: 'Editați',
editAvatar_title: 'Editați avatarul',
editColor_title: 'Editați culoarea',
editDescription_title: 'Editați descrierea',
editDueDate_title: 'Editați data scadentă',

View File

@@ -145,6 +145,13 @@ export default {
customFieldGroups_title: 'Группы настраиваемых полей',
customField_title: 'Настраиваемое поле',
customFields_title: 'Настраиваемые поля',
discoverPlankaPro: '✨ Больше возможностей для ваших досок: Откройте PLANKA Pro',
discoverPlankaPro_title: 'Откройте PLANKA Pro',
upgradeTeamToPro_title: 'Улучшить команду до Pro',
proFeatureCalendar: '✨ Вид календаря для ваших досок',
proFeatureRecurringCards: '✨ Повторяющиеся карточки и автоматизация',
proFeatureGuestRoles: '✨ Роли гостей и внешнее сотрудничество',
dismissProBannerFor30Days: 'Закрыть на 30 дней',
customerPanel_title: 'Панель клиента',
dangerZone_title: 'Опасная зона',
date: 'Дата',
@@ -448,6 +455,7 @@ export default {
download: 'Скачать',
duplicateCard_title: 'Дублировать карточку',
edit: 'Изменить',
editAvatar_title: 'Изменить аватар',
editColor_title: 'Изменить цвет',
editDescription_title: 'Изменить описание',
editDueDate_title: 'Изменить срок',

View File

@@ -139,6 +139,13 @@ export default {
customFieldGroups_title: 'Skupiny vlastných polí',
customField_title: 'Vlastné pole',
customFields_title: 'Vlastné polia',
discoverPlankaPro: '✨ Viac funkcií pre vaše tabule: Objavte PLANKA Pro',
discoverPlankaPro_title: 'Objavte PLANKA Pro',
upgradeTeamToPro_title: 'Inovovať tím na Pro',
proFeatureCalendar: '✨ Zobrazenie kalendára pre vaše tabule',
proFeatureRecurringCards: '✨ Opakujúce sa karty a automatizácia',
proFeatureGuestRoles: '✨ Roly hosťa a externá spolupráca',
dismissProBannerFor30Days: 'Zavrieť na 30 dní',
customerPanel_title: 'Panel zákazníka',
dangerZone_title: 'Nebezpečná zóna',
date: 'Dátum',
@@ -439,6 +446,7 @@ export default {
download: 'Stiahnuť',
duplicateCard_title: 'Duplikovať kartu',
edit: 'Upraviť',
editAvatar_title: 'Upraviť avatar',
editColor_title: 'Upraviť farbu',
editDescription_title: 'Upraviť popis',
editDueDate_title: 'Upraviť termín do',

View File

@@ -142,6 +142,13 @@ export default {
customFieldGroups_title: 'Групе прилагођених поља',
customField_title: 'Прилагођено поље',
customFields_title: 'Прилагођена поља',
discoverPlankaPro: '✨ Више функција за ваше табле: Откријте PLANKA Pro',
discoverPlankaPro_title: 'Откријте PLANKA Pro',
upgradeTeamToPro_title: 'Надоградите тим на Pro',
proFeatureCalendar: '✨ Приказ календара за ваше табле',
proFeatureRecurringCards: '✨ Понављајуће картице и аутоматизација',
proFeatureGuestRoles: '✨ Гостујуће улоге и спољна сарадња',
dismissProBannerFor30Days: 'Затвори на 30 дана',
customerPanel_title: 'Панел купца',
dangerZone_title: 'Опасна зона',
date: 'Датум',
@@ -442,6 +449,7 @@ export default {
download: 'Преузми',
duplicateCard_title: 'Клонирај картицу',
edit: 'Измени',
editAvatar_title: 'Уреди аватара',
editColor_title: 'Уреди боју',
editDescription_title: 'Измени опис',
editDueDate_title: 'Измени рок',

View File

@@ -143,6 +143,13 @@ export default {
customFieldGroups_title: 'Grupe prilagođenih polja',
customField_title: 'Prilagođeno polje',
customFields_title: 'Prilagođena polja',
discoverPlankaPro: '✨ Više funkcija za vaše table: Otkrijte PLANKA Pro',
discoverPlankaPro_title: 'Otkrijte PLANKA Pro',
upgradeTeamToPro_title: 'Nadogradite tim na Pro',
proFeatureCalendar: '✨ Prikaz kalendara za vaše table',
proFeatureRecurringCards: '✨ Ponavljajuće kartice i automatizacija',
proFeatureGuestRoles: '✨ Gostujuće uloge i spoljna saradnja',
dismissProBannerFor30Days: 'Zatvori na 30 dana',
customerPanel_title: 'Panel kupca',
dangerZone_title: 'Opasna zona',
date: 'Datum',
@@ -444,6 +451,7 @@ export default {
download: 'Preuzmi',
duplicateCard_title: 'Kloniraj karticu',
edit: 'Izmeni',
editAvatar_title: 'Uredi avatara',
editColor_title: 'Uredi boju',
editDescription_title: 'Izmeni opis',
editDueDate_title: 'Izmeni rok',

View File

@@ -149,6 +149,13 @@ export default {
customFieldGroups_title: 'Anpassade fältgrupper',
customField_title: 'Anpassat fält',
customFields_title: 'Anpassade fält',
discoverPlankaPro: '✨ Fler funktioner för dina bräden: Upptäck PLANKA Pro',
discoverPlankaPro_title: 'Upptäck PLANKA Pro',
upgradeTeamToPro_title: 'Uppgradera teamet till Pro',
proFeatureCalendar: '✨ Kalendervy för dina bräden',
proFeatureRecurringCards: '✨ Återkommande kort och automatisering',
proFeatureGuestRoles: '✨ Gästroller och externt samarbete',
dismissProBannerFor30Days: 'Stäng i 30 dagar',
customerPanel_title: 'Kundpanel',
dangerZone_title: 'Farozon',
date: 'Datum',
@@ -453,6 +460,7 @@ export default {
download: 'Ladda ner',
duplicateCard_title: 'Duplicera kort',
edit: 'Redigera',
editAvatar_title: 'Redigera avatar',
editColor_title: 'Redigera färg',
editDescription_title: 'Redigera beskrivning',
editDueDate_title: 'Redigera förfallodatum',

View File

@@ -146,6 +146,13 @@ export default {
customFieldGroups_title: 'özel alan grupları',
customField_title: 'Özel alan',
customFields_title: 'Özel alanlar',
discoverPlankaPro: "✨ Panolarınız için daha fazla özellik: PLANKA Pro'yu keşfedin",
discoverPlankaPro_title: "PLANKA Pro'yu keşfedin",
upgradeTeamToPro_title: "Ekibi Pro'ya yükseltin",
proFeatureCalendar: '✨ Panolarınız için takvim görünümü',
proFeatureRecurringCards: '✨ Yinelenen kartlar ve otomasyon',
proFeatureGuestRoles: '✨ Misafir rolleri ve harici iş birliği',
dismissProBannerFor30Days: '30 gün için kapat',
customerPanel_title: 'Müşteri paneli',
dangerZone_title: 'Tehlikeli bölge',
date: 'tarih',
@@ -449,6 +456,7 @@ export default {
download: 'İndir',
duplicateCard_title: 'Kartı kopyala',
edit: 'Düzenle',
editAvatar_title: 'Avatarı düzenle',
editColor_title: 'Rengi düzenle',
editDescription_title: 'Açıklamayı düzenle',
editDueDate_title: 'Son tarihi düzenle',

View File

@@ -144,6 +144,13 @@ export default {
customFieldGroups_title: 'Користувацькі групи полів',
customField_title: 'Користувацьке поле',
customFields_title: 'Користувацькі поля',
discoverPlankaPro: '✨ Більше можливостей для ваших дощок: Відкрийте PLANKA Pro',
discoverPlankaPro_title: 'Відкрийте PLANKA Pro',
upgradeTeamToPro_title: 'Оновити команду до Pro',
proFeatureCalendar: '✨ Вигляд календаря для ваших дощок',
proFeatureRecurringCards: '✨ Повторювані картки та автоматизація',
proFeatureGuestRoles: '✨ Ролі гостей та зовнішня співпраця',
dismissProBannerFor30Days: 'Закрити на 30 днів',
customerPanel_title: 'Панель клієнта',
dangerZone_title: 'Небезпечна зона',
date: 'Дата',
@@ -444,6 +451,7 @@ export default {
download: 'Завантажити',
duplicateCard_title: 'Дублювати картку',
edit: 'Редагувати',
editAvatar_title: 'Редагувати аватар',
editColor_title: 'Редагувати колір',
editDescription_title: 'Редагувати опис',
editDueDate_title: 'Редагувати термін виконання',

View File

@@ -140,6 +140,13 @@ export default {
customFieldGroups_title: 'Maxsus maydon guruhlari',
customField_title: 'Maxsus maydon',
customFields_title: 'Maxsus maydonlar',
discoverPlankaPro: "✨ Doskalaringiz uchun ko'proq imkoniyatlar: PLANKA Pro ni kashf eting",
discoverPlankaPro_title: 'PLANKA Pro ni kashf eting',
upgradeTeamToPro_title: 'Jamoani Pro ga yangilash',
proFeatureCalendar: "✨ Doskalaringiz uchun kalendar ko'rinishi",
proFeatureRecurringCards: '✨ Takrorlanuvchi kartalar va avtomatlashtirish',
proFeatureGuestRoles: '✨ Mehmon rollari va tashqi hamkorlik',
dismissProBannerFor30Days: '30 kunga yopish',
customerPanel_title: 'Mijoz paneli',
dangerZone_title: 'Xavfli hudud',
date: 'Sana',
@@ -442,6 +449,7 @@ export default {
download: 'Yuklab olish',
duplicateCard_title: 'Kartani nusxalash',
edit: 'Tahrirlash',
editAvatar_title: 'Avatarni tahrirlash',
editColor_title: 'Rangni tahrirlash',
editDescription_title: 'Izohni tahrirlash',
editDueDate_title: 'Muddatni tahrirlash',

View File

@@ -145,6 +145,13 @@ export default {
customFieldGroups_title: 'Các nhóm trường tùy chỉnh',
customField_title: 'Trường tùy chỉnh',
customFields_title: 'Các trường tùy chỉnh',
discoverPlankaPro: '✨ Nhiều tính năng hơn cho bảng của bạn: Khám phá PLANKA Pro',
discoverPlankaPro_title: 'Khám phá PLANKA Pro',
upgradeTeamToPro_title: 'Nâng cấp nhóm lên Pro',
proFeatureCalendar: '✨ Chế độ xem lịch cho bảng của bạn',
proFeatureRecurringCards: '✨ Thẻ định kỳ và tự động hóa',
proFeatureGuestRoles: '✨ Vai trò khách và cộng tác bên ngoài',
dismissProBannerFor30Days: 'Đóng trong 30 ngày',
customerPanel_title: 'Bảng điều khiển khách hàng',
dangerZone_title: 'Khu vực nguy hiểm',
date: 'Ngày',
@@ -444,6 +451,7 @@ export default {
download: 'Tải xuống',
duplicateCard_title: 'Nhân bản Thẻ',
edit: 'Chỉnh sửa',
editAvatar_title: 'Chỉnh sửa ảnh đại diện',
editColor_title: 'Chỉnh sửa Màu sắc',
editDescription_title: 'Chỉnh sửa Mô tả',
editDueDate_title: 'Chỉnh sửa Hạn chót',

View File

@@ -125,6 +125,13 @@ export default {
customFieldGroups_title: '自定义字段组',
customField_title: '自定义字段',
customFields_title: '自定义字段',
discoverPlankaPro: '✨ 为您的看板提供更多功能:探索 PLANKA Pro',
discoverPlankaPro_title: '探索 PLANKA Pro',
upgradeTeamToPro_title: '将团队升级到 Pro',
proFeatureCalendar: '✨ 看板的日历视图',
proFeatureRecurringCards: '✨ 重复卡片与自动化',
proFeatureGuestRoles: '✨ 访客角色与外部协作',
dismissProBannerFor30Days: '关闭 30 天',
customerPanel_title: '客户面板',
dangerZone_title: '危险区域',
date: '日期',
@@ -419,6 +426,7 @@ export default {
download: '下载',
duplicateCard_title: '复制卡片',
edit: '编辑',
editAvatar_title: '编辑头像',
editColor_title: '编辑颜色',
editDescription_title: '编辑描述',
editDueDate_title: '编辑到期时间',

View File

@@ -125,6 +125,13 @@ export default {
customFieldGroups_title: '自定義欄位群組',
customField_title: '自定義欄位',
customFields_title: '自定義欄位',
discoverPlankaPro: '✨ 為您的看板提供更多功能:探索 PLANKA Pro',
discoverPlankaPro_title: '探索 PLANKA Pro',
upgradeTeamToPro_title: '將團隊升級至 Pro',
proFeatureCalendar: '✨ 看板的日曆檢視',
proFeatureRecurringCards: '✨ 重複卡片與自動化',
proFeatureGuestRoles: '✨ 訪客角色與外部協作',
dismissProBannerFor30Days: '關閉 30 天',
customerPanel_title: '客戶面板',
dangerZone_title: '危險區域',
date: '日期',
@@ -419,6 +426,7 @@ export default {
download: '下載',
duplicateCard_title: '複製卡片',
edit: '編輯',
editAvatar_title: '編輯頭像',
editColor_title: '編輯顏色',
editDescription_title: '編輯描述',
editDueDate_title: '編輯截止時間',

View File

@@ -64,6 +64,9 @@ export default function* usersWatchers() {
takeEvery(EntryActionTypes.CURRENT_USER_USERNAME_UPDATE_ERROR_CLEAR, () =>
services.clearCurrentUserUsernameUpdateError(),
),
takeEvery(EntryActionTypes.USER_AVATAR_UPDATE, ({ payload: { id, data } }) =>
services.updateUserAvatar(id, data),
),
takeEvery(EntryActionTypes.CURRENT_USER_AVATAR_UPDATE, ({ payload: { data } }) =>
services.updateCurrentUserAvatar(data),
),

View File

@@ -1 +1 @@
export default '2.1.0';
export default '2.1.1';

View File

@@ -10,6 +10,8 @@ import svgr from 'vite-plugin-svgr';
// eslint-disable-next-line import/no-unresolved
import browserslistToEsbuild from 'browserslist-to-esbuild';
const PROXY_TARGET = process.env.PROXY_TARGET || 'http://localhost:1337';
// eslint-disable-next-line no-underscore-dangle
const __dirname = path.dirname(fileURLToPath(import.meta.url));
@@ -55,8 +57,8 @@ export default defineConfig({
port: 3000,
open: true,
proxy: {
'/api': 'http://localhost:1337',
'/socket.io': { target: 'http://localhost:1337', ws: true },
'/api': PROXY_TARGET,
'/socket.io': { target: PROXY_TARGET, ws: true },
},
},
build: {

View File

@@ -60,6 +60,7 @@ services:
# - S3_SECRET_ACCESS_KEY=
# - S3_BUCKET=
# - S3_FORCE_PATH_STYLE=true
# - S3_REQUEST_CHECKSUM_CALCULATION=
# - OIDC_ISSUER=
# - OIDC_CLIENT_ID=
@@ -111,6 +112,8 @@ services:
- ./client:/app
ports:
- 3000:3000
environment:
- PROXY_TARGET=http://planka-server:1337
postgres:
image: postgres:16-alpine

View File

@@ -76,6 +76,7 @@ services:
# - S3_SECRET_ACCESS_KEY__FILE=/run/secrets/s3_secret_access_key
# - S3_BUCKET=
# - S3_FORCE_PATH_STYLE=true
# - S3_REQUEST_CHECKSUM_CALCULATION=
# - OIDC_ISSUER=
# - OIDC_CLIENT_ID=

16
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "planka",
"version": "2.1.0",
"version": "2.1.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "planka",
"version": "2.1.0",
"version": "2.1.1",
"hasInstallScript": true,
"dependencies": {
"concurrently": "^9.2.1",
@@ -70,9 +70,9 @@
"license": "MIT"
},
"node_modules/brace-expansion": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
@@ -833,9 +833,9 @@
}
},
"node_modules/yaml": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
"license": "ISC",
"bin": {
"yaml": "bin.mjs"

View File

@@ -1,6 +1,6 @@
{
"name": "planka",
"version": "2.1.0",
"version": "2.1.1",
"private": true,
"scripts": {
"client:build": "npm run build --prefix client",

View File

@@ -51,6 +51,7 @@ SECRET_KEY=notsecretkey
# S3_SECRET_ACCESS_KEY=
# S3_BUCKET=
# S3_FORCE_PATH_STYLE=true
# S3_REQUEST_CHECKSUM_CALCULATION=
# OIDC_ISSUER=
# OIDC_CLIENT_ID=

View File

@@ -29,7 +29,7 @@ module.exports = function defineS3Hook(sails) {
sails.log.info('Initializing custom hook (`s3`)');
client = new S3Client({
const config = {
endpoint: sails.config.custom.s3Endpoint,
region: sails.config.custom.s3Region || 'eu-central-1',
credentials: {
@@ -37,7 +37,13 @@ module.exports = function defineS3Hook(sails) {
secretAccessKey: sails.config.custom.s3SecretAccessKey,
},
forcePathStyle: sails.config.custom.s3ForcePathStyle,
});
};
if (sails.config.custom.s3RequestChecksumCalculation) {
config.requestChecksumCalculation = sails.config.custom.s3RequestChecksumCalculation;
}
client = new S3Client(config);
},
getClient() {

View File

@@ -72,6 +72,7 @@ module.exports.custom = {
s3SecretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
s3Bucket: process.env.S3_BUCKET,
s3ForcePathStyle: process.env.S3_FORCE_PATH_STYLE === 'true',
s3RequestChecksumCalculation: process.env.S3_REQUEST_CHECKSUM_CALCULATION,
oidcIssuer: process.env.OIDC_ISSUER,
oidcClientId: process.env.OIDC_CLIENT_ID,

View File

@@ -11,9 +11,9 @@
"Trash": "Papierkorb",
"You Were Added to Card": "Sie wurden zur Karte hinzugefügt",
"You Were Mentioned in Comment": "Sie wurden in einem Kommentar erwähnt",
"%s added you to %s on %s": "%s hat Sie zu %s am %s hinzugefügt",
"%s created %s in %s on %s": "%s hat %s in %s am %s erstellt",
"%s left a new comment to %s on %s": "%s hat einen neuen Kommentar zu %s am %s hinterlassen",
"%s mentioned you in %s on %s": "%s hat Sie in %s am %s erwähnt",
"%s moved %s from %s to %s on %s": "%s hat %s von %s nach %s am %s verschoben"
"%s added you to %s on %s": "%s hat Sie zur Karte %s auf dem Board %s hinzugefügt",
"%s created %s in %s on %s": "%s hat die Karte %s in der Liste %s auf dem Board %s erstellt",
"%s left a new comment to %s on %s": "%s hat einen neuen Kommentar zur Karte %s auf dem Board %s hinterlassen",
"%s mentioned you in %s on %s": "%s hat Sie in der Karte %s auf dem Board %s erwähnt",
"%s moved %s from %s to %s on %s": "%s hat die Karte %s von der Liste %s in die Liste %s auf dem Board %s verschoben"
}

153
server/package-lock.json generated
View File

@@ -23,10 +23,10 @@
"istextorbinary": "^9.5.0",
"jsonwebtoken": "^9.0.3",
"knex": "^3.1.0",
"lodash": "^4.17.23",
"lodash": "^4.18.1",
"mime-types": "^3.0.2",
"moment": "^2.30.1",
"nodemailer": "^7.0.13",
"nodemailer": "^8.0.5",
"openid-client": "^5.7.1",
"patch-package": "^8.0.1",
"pg": "^8.20.0",
@@ -960,13 +960,13 @@
}
},
"node_modules/@aws-sdk/xml-builder": {
"version": "3.972.11",
"resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.11.tgz",
"integrity": "sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ==",
"version": "3.972.17",
"resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.17.tgz",
"integrity": "sha512-Ra7hjqAZf1OXRRMueB13qex7mFJRDK/pgCvdSFemXBT8KCGnQDPoKzHY1SjN+TjJVmnpSF14W5tJ1vDamFu+Gg==",
"license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^4.13.1",
"fast-xml-parser": "5.4.1",
"@smithy/types": "^4.14.0",
"fast-xml-parser": "5.5.8",
"tslib": "^2.6.2"
},
"engines": {
@@ -1757,11 +1757,11 @@
"license": "MIT"
},
"node_modules/@sailshq/binary-search-tree": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/@sailshq/binary-search-tree/-/binary-search-tree-0.2.7.tgz",
"integrity": "sha512-4q7A4I0cYzRRrPUA/mZYFQ3My26RAyWQ10IfdgHaBC6M1ZNCUpQnT7vRMZd5KgnlUBl8MSlP4JUbL5heeSHMBw==",
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/@sailshq/binary-search-tree/-/binary-search-tree-0.2.8.tgz",
"integrity": "sha512-D468YMSdHdrnaW2d3eT0MHM443+y/kcb0KuzwdhKnjEy/BLJDo/oqFhhnNYUBXdvOrOC1S8+mLuR82DIgixhFQ==",
"dependencies": {
"underscore": "1.13.1"
"underscore": "1.13.8"
}
},
"node_modules/@sailshq/csurf": {
@@ -1792,16 +1792,16 @@
"license": "MIT"
},
"node_modules/@sailshq/nedb": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sailshq/nedb/-/nedb-1.8.3.tgz",
"integrity": "sha512-MEvv/O9OalhvzQZpHOLz4EnMS1qMLzdNTjSEKyRY9cbwRfNtN7ENBSI1ftCuSJCNMOU5QXLX0AiUERuMxm1PsQ==",
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/@sailshq/nedb/-/nedb-1.8.4.tgz",
"integrity": "sha512-mcLM6lq+a6VLH7vVBogPogHVKwKldenu0jzETOnlu7m+bG6S0RJLgrPZ49r6/7OyykxzxLNJt/zWxJNORqeC/A==",
"license": "SEE LICENSE IN LICENSE",
"dependencies": {
"@sailshq/binary-search-tree": "0.2.7",
"@sailshq/binary-search-tree": "^0.2.8",
"async": "0.2.10",
"localforage": "1.3.0",
"mkdirp": "0.5.6",
"underscore": "1.13.1"
"underscore": "1.13.8"
}
},
"node_modules/@sailshq/nedb/node_modules/async": {
@@ -1810,16 +1810,16 @@
"integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
},
"node_modules/@sailshq/router": {
"version": "1.3.10",
"resolved": "https://registry.npmjs.org/@sailshq/router/-/router-1.3.10.tgz",
"integrity": "sha512-6h5IE0PrSEkF03Fze1lUwnDMnYMbBPkUgKaUG/mkthHpiO/VDzbD0QJXyD7xmhlD05dEzuZnGqrrUeY5oZIMAg==",
"version": "1.3.11",
"resolved": "https://registry.npmjs.org/@sailshq/router/-/router-1.3.11.tgz",
"integrity": "sha512-uQSnZnFm8RBO49gyCev27RgQRpBI3KY0qd6Bh4saHMDmRGCA8IdS/SiwnuuXCychjOhovDalT46GhBjHkPIiGA==",
"license": "MIT",
"dependencies": {
"array-flatten": "3.0.0",
"debug": "2.6.9",
"methods": "~1.1.2",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.12",
"path-to-regexp": "0.1.13",
"setprototypeof": "1.2.0",
"utils-merge": "1.0.1"
},
@@ -1852,9 +1852,9 @@
}
},
"node_modules/@sailshq/router/node_modules/path-to-regexp": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
"integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
"license": "MIT"
},
"node_modules/@smithy/abort-controller": {
@@ -2346,9 +2346,9 @@
}
},
"node_modules/@smithy/types": {
"version": "4.13.1",
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz",
"integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==",
"version": "4.14.0",
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.0.tgz",
"integrity": "sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@@ -3170,9 +3170,9 @@
"license": "MIT"
},
"node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
"integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -5015,9 +5015,9 @@
}
},
"node_modules/express/node_modules/path-to-regexp": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
"integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
"license": "MIT"
},
"node_modules/express/node_modules/serve-static": {
@@ -5103,9 +5103,9 @@
}
},
"node_modules/fast-xml-parser": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.1.tgz",
"integrity": "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==",
"version": "5.5.8",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz",
"integrity": "sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==",
"funding": [
{
"type": "github",
@@ -5114,8 +5114,9 @@
],
"license": "MIT",
"dependencies": {
"fast-xml-builder": "^1.0.0",
"strnum": "^2.1.2"
"fast-xml-builder": "^1.1.4",
"path-expression-matcher": "^1.2.0",
"strnum": "^2.2.0"
},
"bin": {
"fxparser": "src/cli/cli.js"
@@ -5187,9 +5188,9 @@
}
},
"node_modules/filelist/node_modules/brace-expansion": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
@@ -5373,9 +5374,9 @@
}
},
"node_modules/flatted": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz",
"integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==",
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
"integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true,
"license": "ISC"
},
@@ -5704,9 +5705,9 @@
}
},
"node_modules/glob/node_modules/brace-expansion": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6981,9 +6982,9 @@
}
},
"node_modules/lodash": {
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
"license": "MIT"
},
"node_modules/lodash.get": {
@@ -7506,9 +7507,9 @@
}
},
"node_modules/mocha/node_modules/brace-expansion": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7620,9 +7621,9 @@
}
},
"node_modules/nodemailer": {
"version": "7.0.13",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.13.tgz",
"integrity": "sha512-PNDFSJdP+KFgdsG3ZzMXCgquO7I6McjY2vlqILjtJd0hy8wEvtugS9xKRF2NWlPNGxvLCXlTNIae4serI7dinw==",
"version": "8.0.5",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.5.tgz",
"integrity": "sha512-0PF8Yb1yZuQfQbq+5/pZJrtF6WQcjTd5/S4JOHs9PGFxuTqoB/icwuB44pOdURHJbRKX1PPoJZtY7R4VUoCC8w==",
"license": "MIT-0",
"engines": {
"node": ">=6.0.0"
@@ -7668,9 +7669,9 @@
}
},
"node_modules/nodemon/node_modules/brace-expansion": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
"integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8215,9 +8216,9 @@
}
},
"node_modules/path-expression-matcher": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.1.3.tgz",
"integrity": "sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==",
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.4.0.tgz",
"integrity": "sha512-s4DQMxIdhj3jLFWd9LxHOplj4p9yQ4ffMGowFf3cpEgrrJjEhN0V5nxw4Ye1EViAGDoL4/1AeO6qHpqYPOzE4Q==",
"funding": [
{
"type": "github",
@@ -8400,9 +8401,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"license": "MIT",
"engines": {
"node": ">=8.6"
@@ -9013,9 +9014,9 @@
}
},
"node_modules/rimraf/node_modules/brace-expansion": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
"integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
"license": "MIT",
"dependencies": {
"balanced-match": "^4.0.2"
@@ -10770,9 +10771,9 @@
}
},
"node_modules/strnum": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.0.tgz",
"integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==",
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz",
"integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==",
"funding": [
{
"type": "github",
@@ -11328,9 +11329,9 @@
"license": "MIT"
},
"node_modules/underscore": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
"integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
"version": "1.13.8",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz",
"integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==",
"license": "MIT"
},
"node_modules/undici": {
@@ -12130,9 +12131,9 @@
"license": "ISC"
},
"node_modules/yaml": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
"license": "ISC",
"bin": {
"yaml": "bin.mjs"

View File

@@ -65,10 +65,10 @@
"istextorbinary": "^9.5.0",
"jsonwebtoken": "^9.0.3",
"knex": "^3.1.0",
"lodash": "^4.17.23",
"lodash": "^4.18.1",
"mime-types": "^3.0.2",
"moment": "^2.30.1",
"nodemailer": "^7.0.13",
"nodemailer": "^8.0.5",
"openid-client": "^5.7.1",
"patch-package": "^8.0.1",
"pg": "^8.20.0",

View File

@@ -42,6 +42,7 @@ start_outgoing_proxy_if_needed() {
# Basic settings
echo "pid_filename $SQUID_PID" >> "$SQUID_CONF"
echo "http_port 127.0.0.1:3128" >> "$SQUID_CONF"
echo "max_filedescriptors 4096" >> "$SQUID_CONF"
echo "acl all src all" >> "$SQUID_CONF"
# Disable caching

View File

@@ -1 +1 @@
module.exports = '2.1.0';
module.exports = '2.1.1';