mirror of
https://github.com/wekan/wekan.git
synced 2026-11-08 11:25:19 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e3149289db | ||
|
|
b680cf4938 | ||
|
|
69d454dd03 | ||
|
|
703c849482 | ||
|
|
284f440136 | ||
|
|
267becdb9a | ||
|
|
054d420dc9 | ||
|
|
0fbc6efbcf | ||
|
|
63f5c88a15 | ||
|
|
24598eaf00 | ||
|
|
2e9fca93ec | ||
|
|
c2f5355f9a | ||
|
|
9fdf739695 | ||
|
|
17f8f8f14f | ||
|
|
9a68c96585 | ||
|
|
ed2a725a2c | ||
|
|
8914d4404e | ||
|
|
c5dd0b729d | ||
|
|
f4f9c501d1 | ||
|
|
239dd1a341 | ||
|
|
ee254cb9c8 | ||
|
|
05a98fa88b | ||
|
|
5df5c7f5d7 | ||
|
|
ccea223ef7 | ||
|
|
25f9963645 | ||
|
|
b1c41518df | ||
|
|
ae09f0f008 | ||
|
|
490ad65b6e | ||
|
|
cb78501b04 | ||
|
|
65a031f29d | ||
|
|
6c94b57cfc | ||
|
|
7ae15cae27 | ||
|
|
0596595284 | ||
|
|
724d1386f6 | ||
|
|
920b32735f | ||
|
|
86aa7ff353 | ||
|
|
20d87f2299 | ||
|
|
88f05e8c4e | ||
|
|
c3bfcb78e9 | ||
|
|
83a78c792a | ||
|
|
99b2fdbf99 | ||
|
|
7ca9e8f4d3 | ||
|
|
dac85c0a03 | ||
|
|
04e04ead92 | ||
|
|
008fc806e8 | ||
|
|
af7874b700 | ||
|
|
94e1fa79b3 | ||
|
|
6694088ac7 | ||
|
|
b4c74b8d4c | ||
|
|
28612612bd | ||
|
|
f2f834e810 | ||
|
|
3e5f8f458c | ||
|
|
cffb5baa68 | ||
|
|
01d0dd3b1d | ||
|
|
c8bb3c7353 | ||
|
|
709b17805b | ||
|
|
e9982e34ed | ||
|
|
1c2c3d9dea | ||
|
|
bd26ed7f7a | ||
|
|
c48299c0dd | ||
|
|
753c54a741 | ||
|
|
48a9fe3440 | ||
|
|
be1893e66a | ||
|
|
0d67a86f2c | ||
|
|
6e979beb01 | ||
|
|
12615fef5d | ||
|
|
403e2f4cbd | ||
|
|
6b4ffa69c6 | ||
|
|
84d51393e4 | ||
|
|
51fb490c22 | ||
|
|
f9e25e028e | ||
|
|
937797356c | ||
|
|
21ae1b59d6 | ||
|
|
e25050316f | ||
|
|
2e06d466b9 | ||
|
|
5739b5d93c | ||
|
|
6b6bdddce6 | ||
|
|
dcff70c983 | ||
|
|
ad5167de55 | ||
|
|
947692693c | ||
|
|
0c8e812991 | ||
|
|
fb1742b149 | ||
|
|
054915031e | ||
|
|
ada6b8ee9c | ||
|
|
63e0597c68 | ||
|
|
c71cedf9f4 | ||
|
|
f6ee321d0f | ||
|
|
2a24720fad | ||
|
|
a7fd512124 | ||
|
|
b7f62cf5f2 | ||
|
|
dfea3d0e73 | ||
|
|
e4e1a8f4e6 | ||
|
|
43b2d71404 | ||
|
|
c9f8e111c5 | ||
|
|
67596602d7 | ||
|
|
5af4f54f4c | ||
|
|
0d7d38b358 | ||
|
|
680770a7df | ||
|
|
14c3432896 | ||
|
|
34fc724d95 | ||
|
|
1ed2c3b45a | ||
|
|
81f74f4db6 | ||
|
|
b5bc07d2e7 | ||
|
|
85fcaff678 | ||
|
|
d5247daf8a | ||
|
|
9ff87d189f | ||
|
|
2d36116823 | ||
|
|
9f0b9b29a5 | ||
|
|
1d7e08390c | ||
|
|
bbffa2eb6b | ||
|
|
52ea940265 | ||
|
|
355b358fe2 | ||
|
|
d74662bfd7 | ||
|
|
e151da7163 | ||
|
|
1c71baec81 | ||
|
|
9382c2cd04 | ||
|
|
25e50e3908 | ||
|
|
c6331830d4 | ||
|
|
4226a0bc37 | ||
|
|
693a49f852 | ||
|
|
0b797ceb7e | ||
|
|
2587e2f00a | ||
|
|
6ad83bcaeb | ||
|
|
f2815a9039 | ||
|
|
6d7e69cc9f | ||
|
|
fac1ba5952 | ||
|
|
3db14ad03a | ||
|
|
9ca26d22d0 | ||
|
|
7640c7c04d | ||
|
|
ea66eca60d | ||
|
|
0ae8de4c04 | ||
|
|
e50d69cfb7 | ||
|
|
d95436df51 | ||
|
|
3b419848d1 | ||
|
|
8efc8605a1 | ||
|
|
4f44c5bf87 | ||
|
|
4b12245537 | ||
|
|
adcc33ed7f | ||
|
|
f1482cfa94 | ||
|
|
2e354f9b1e | ||
|
|
b97c51abde | ||
|
|
8c8560cfc2 |
No files matched your search
@@ -10,7 +10,7 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v14.19.3 \
|
||||
NODE_VERSION=v14.20.0 \
|
||||
METEOR_RELEASE=1.10.2 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
|
||||
@@ -81,7 +81,7 @@ parts:
|
||||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 14.19.3
|
||||
node-engine: 14.20.0
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
@@ -9,8 +9,15 @@ on:
|
||||
schedule:
|
||||
- cron: '0 16 * * 3'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
permissions:
|
||||
actions: read # for github/codeql-action/init to get workflow details
|
||||
contents: read # for actions/checkout to fetch code
|
||||
security-events: write # for github/codeql-action/autobuild to send a status report
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -25,7 +32,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
# We must fetch at least the immediate parents so that if this is
|
||||
# a pull request then we can checkout the head.
|
||||
@@ -38,14 +45,14 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -59,4 +66,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
uses: github/codeql-action/analyze@v2
|
||||
@@ -0,0 +1,14 @@
|
||||
name: 'Dependency Review'
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@v3
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@v2
|
||||
@@ -32,13 +32,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Login against a Docker registry except on PR
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
|
||||
uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
@@ -48,14 +48,14 @@ jobs:
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
|
||||
uses: docker/metadata-action@69f6fc9d46f2f8bf0d5491e4aabe0bb8c6a4678a
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
|
||||
uses: docker/build-push-action@e551b19e49efd4e98792db7592c17c09b89db8d8
|
||||
with:
|
||||
context: .
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
@@ -5,6 +5,9 @@ on:
|
||||
branches:
|
||||
- master
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
@@ -12,6 +15,6 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v3
|
||||
- name: Build the Docker image
|
||||
run: docker build . --file Dockerfile --tag wekan:$(date +%s)
|
||||
@@ -5,12 +5,17 @@ on:
|
||||
branches:
|
||||
- master
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
release:
|
||||
permissions:
|
||||
contents: write # for helm/chart-releaser-action to push chart release and create a release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -20,6 +25,6 @@ jobs:
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
|
||||
- name: Run chart-releaser
|
||||
uses: helm/chart-releaser-action@v1.1.0
|
||||
uses: helm/chart-releaser-action@v1.4.0
|
||||
env:
|
||||
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - name: checkout
|
||||
# uses: actions/checkout@v2
|
||||
# uses: actions/checkout@v3
|
||||
#
|
||||
# - name: setup node
|
||||
# uses: actions/setup-node@v1
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
# needs: [lintcode]
|
||||
# steps:
|
||||
# - name: checkout
|
||||
# uses: actions/checkout@v2
|
||||
# uses: actions/checkout@v3
|
||||
#
|
||||
# - name: setup node
|
||||
# uses: actions/setup-node@v1
|
||||
@@ -62,7 +62,7 @@ jobs:
|
||||
# needs: [lintcode,lintstyle]
|
||||
# steps:
|
||||
# - name: checkout
|
||||
# uses: actions/checkout@v2
|
||||
# uses: actions/checkout@v3
|
||||
#
|
||||
# - name: setup node
|
||||
# uses: actions/setup-node@v1
|
||||
@@ -87,12 +87,12 @@ jobs:
|
||||
|
||||
# CHECKOUTS
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# CACHING
|
||||
- name: Install Meteor
|
||||
id: cache-meteor-install
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.meteor
|
||||
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
|
||||
@@ -101,7 +101,7 @@ jobs:
|
||||
|
||||
- name: Cache NPM dependencies
|
||||
id: cache-meteor-npm
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: v1-npm-${{ hashFiles('package-lock.json') }}
|
||||
@@ -110,7 +110,7 @@ jobs:
|
||||
|
||||
- name: Cache Meteor build
|
||||
id: cache-meteor-build
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
.meteor/local/resolver-result-cache.json
|
||||
@@ -133,7 +133,7 @@ jobs:
|
||||
run: sh ./test-wekan.sh -cv
|
||||
|
||||
- name: Upload coverage
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: coverage-folder
|
||||
path: .coverage/
|
||||
@@ -144,17 +144,17 @@ jobs:
|
||||
needs: [tests]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Download coverage
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: coverage-folder
|
||||
path: .coverage/
|
||||
|
||||
|
||||
- name: Coverage Report
|
||||
uses: VeryGoodOpenSource/very_good_coverage@v1.1.1
|
||||
uses: VeryGoodOpenSource/very_good_coverage@v1.2.1
|
||||
with:
|
||||
path: ".coverage/lcov.info"
|
||||
min_coverage: 1 # TODO add tests and increase to 95!
|
||||
+13
-18
@@ -7,7 +7,6 @@ meteor-base@1.5.1
|
||||
|
||||
# Build system
|
||||
ecmascript@0.16.2
|
||||
standard-minifier-css@1.8.1
|
||||
standard-minifier-js@2.8.0
|
||||
mquandalle:jade
|
||||
coffeescript@2.4.1!
|
||||
@@ -26,9 +25,17 @@ mongo@1.15.0
|
||||
mquandalle:collection-mutations
|
||||
|
||||
# Account system
|
||||
#wekan-ldap
|
||||
#wekan-accounts-cas
|
||||
#wekan-accounts-oidc
|
||||
accounts-password@2.3.1
|
||||
useraccounts:core
|
||||
useraccounts:flow-routing
|
||||
useraccounts:unstyled
|
||||
simple:rest-accounts-password
|
||||
wekan-ldap
|
||||
wekan-accounts-cas
|
||||
wekan-accounts-sandstorm
|
||||
wekan-accounts-lockout
|
||||
wekan-oidc
|
||||
wekan-accounts-oidc
|
||||
|
||||
# Utilities
|
||||
check@1.3.1
|
||||
@@ -62,7 +69,6 @@ rajit:bootstrap3-datepicker
|
||||
shell-server@0.5.0
|
||||
email@2.2.1
|
||||
dynamic-import@0.7.2
|
||||
|
||||
cfs:gridfs
|
||||
rzymek:fullcalendar
|
||||
msavin:usercache
|
||||
@@ -74,7 +80,7 @@ konecty:mongo-counter
|
||||
percolate:synced-cron
|
||||
cfs:filesystem
|
||||
ostrio:cookies
|
||||
ostrio:files@2.0.1
|
||||
ostrio:files@2.0.1!
|
||||
rajit:bootstrap3-datepicker-fi
|
||||
rajit:bootstrap3-datepicker-ar
|
||||
rajit:bootstrap3-datepicker-bg
|
||||
@@ -128,21 +134,10 @@ pascoual:pdfkit
|
||||
lmieulet:meteor-coverage
|
||||
meteortesting:mocha@2.0.3
|
||||
aldeed:simple-schema
|
||||
accounts-password@2.3.1
|
||||
matb33:collection-hooks
|
||||
simple:json-routes
|
||||
kadira:flow-router
|
||||
spacebars
|
||||
useraccounts:core
|
||||
useraccounts:flow-routing
|
||||
useraccounts:unstyled
|
||||
service-configuration@1.3.0
|
||||
communitypackages:picker
|
||||
simple:rest-accounts-password
|
||||
wekan-accounts-sandstorm
|
||||
wekan-accounts-lockout
|
||||
wekan-oidc
|
||||
wekan-accounts-oidc
|
||||
wekan-ldap
|
||||
wekan-accounts-cas
|
||||
czbaker:lightbox2
|
||||
minifier-css
|
||||
+1
-1
@@ -1 +1 @@
|
||||
METEOR@2.7.2
|
||||
METEOR@2.7.3
|
||||
+4
-6
@@ -11,7 +11,7 @@ arillo:flow-router-helpers@0.5.2
|
||||
audit-argument-checks@1.0.7
|
||||
autoupdate@1.8.0
|
||||
babel-compiler@7.9.0
|
||||
babel-runtime@1.5.0
|
||||
babel-runtime@1.5.1
|
||||
base64@1.0.12
|
||||
binary-heap@1.0.11
|
||||
blaze@2.6.0
|
||||
@@ -43,7 +43,6 @@ coffeescript@2.4.1
|
||||
coffeescript-compiler@2.4.1
|
||||
communitypackages:picker@1.1.0
|
||||
cottz:publish-relations@2.0.8
|
||||
czbaker:lightbox2@2.7.1_1
|
||||
dburles:collection-helpers@1.1.0
|
||||
ddp@1.4.0
|
||||
ddp-client@2.5.0
|
||||
@@ -124,10 +123,10 @@ oauth2@1.3.1
|
||||
observe-sequence@1.0.20
|
||||
ongoworks:speakingurl@1.1.0
|
||||
ordered-dict@1.1.0
|
||||
ostrio:cookies@2.7.0
|
||||
ostrio:cstorage@2.2.2
|
||||
ostrio:cookies@2.7.2
|
||||
ostrio:cstorage@4.0.1
|
||||
ostrio:files@2.0.1
|
||||
ostrio:i18n@3.1.0
|
||||
ostrio:i18n@3.2.0
|
||||
pascoual:pdfkit@1.0.7
|
||||
peerlibrary:assert@0.3.0
|
||||
peerlibrary:base-component@0.17.1
|
||||
@@ -209,7 +208,6 @@ simple:rest-json-error-handler@1.1.1
|
||||
socket-stream-client@0.5.0
|
||||
spacebars@1.3.0
|
||||
spacebars-compiler@1.3.1
|
||||
standard-minifier-css@1.8.1
|
||||
standard-minifier-js@2.8.0
|
||||
templates:tabs@2.3.0
|
||||
templating@1.4.1
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ sudo: required
|
||||
|
||||
env:
|
||||
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
|
||||
TRAVIS_NODE_VERSION: 14.19.3
|
||||
TRAVIS_NODE_VERSION: 14.20.0
|
||||
TRAVIS_NPM_VERSION: latest
|
||||
|
||||
before_install:
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ host = https://www.transifex.com
|
||||
# tap:i18n requires us to use `-` separator in the language identifiers whereas
|
||||
# Transifex uses a `_` separator, without an option to customize it on one side
|
||||
# or the other, so we need to do a Manual mapping.
|
||||
lang_map = ar_EG:ar-EG, bg_BG:bg, cs_CZ:cs-CZ, cy_GB:cy-GB, de_AT:de-AT, de_CH:de-CH, en_BR:en-BR, en_DE:en-DE, en_IT:en-IT, en_GB:en-GB, et_EE:et-EE, es_AR:es-AR, en@ysv:en-YS, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el-GR, fa_IR:fa-IR, fi_FI:fi, fr_FR:fr-FR, fr_CH:fr-CH, fy_NL:fy-NL, gl_ES:gl-ES, gu_IN:gu-IN, he_IL:he-IL, hi_IN:hi-IN, hu_HU:hu, id_ID:id, mn_MN:mn, ms_MY:ms-MY, nl_NL:nl-NL, ko_KR:ko-KR, lv_LV:lv, pl_PL:pl-PL, pt_BR:pt-BR, ro_RO:ro, ru_UA:ru-UA, sl_SI:sl, uk_UA:uk-UA, uz@Arab:uz-AR, uz@Latn:uz-LA, uz_UZ:uz-UZ, vec:ve-CC, vep:ve-PP, vls:vl-SS, war:wa-RR, vi_VN:vi-VN, zh_CN:zh-CN, zh_TW:zh-TW, zh_Hans:zh-Hans, zh_HK:zh-HK, zu_ZA:zu-ZA
|
||||
lang_map = ar_DZ:ar-DZ, ar_EG:ar-EG, az_AZ:az-AZ, az@latin:az-LA, bg_BG:bg, cs_CZ:cs-CZ, cy_GB:cy-GB, de_AT:de-AT, de_CH:de-CH, en_BR:en-BR, en_DE:en-DE, en_IT:en-IT, en_GB:en-GB, et_EE:et-EE, ast_ES:ast-ES, es_AR:es-AR, en@ysv:en-YS, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el-GR, fa_IR:fa-IR, ja_JP:ja, fi_FI:fi, fr_FR:fr-FR, fr_CH:fr-CH, fy_NL:fy-NL, gl_ES:gl-ES, gu_IN:gu-IN, he_IL:he-IL, hi_IN:hi-IN, hu_HU:hu, id_ID:id, mn_MN:mn, ms_MY:ms-MY, nl_NL:nl-NL, ko_KR:ko-KR, lv_LV:lv, pl_PL:pl-PL, pt_BR:pt-BR, ro_RO:ro, ru_UA:ru-UA, sl_SI:sl, uk_UA:uk-UA, uz@Arab:uz-AR, uz@Latn:uz-LA, uz_UZ:uz-UZ, vec:ve-CC, vep:ve-PP, vls:vl-SS, war:wa-RR, vi_VN:vi-VN, zh_CN:zh-CN, zh_TW:zh-TW, zh_Hans:zh-Hans, zh_HK:zh-HK, zu_ZA:zu-ZA
|
||||
|
||||
[wekan.application]
|
||||
file_filter = imports/i18n/data/<lang>.i18n.json
|
||||
|
||||
+127
-5
@@ -1,5 +1,127 @@
|
||||
[Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac)
|
||||
|
||||
Required versions of Node.js, MongoDB etc are listed at https://wekan.github.io
|
||||
Download section.
|
||||
|
||||
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
|
||||
|
||||
# v6.30 2022-07-11 WeKan ® release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Automatic login with OIDC](https://github.com/wekan/wekan/pull/4588).
|
||||
Thanks to Viehlieb.
|
||||
- [OIDC/OAuth2 autologin settings for Docker/Snap/Source/Bundle platforms](https://github.com/wekan/wekan/commit/284f4401369aadcec72e67fa935dfc3a9fead721).
|
||||
Thanks to xet7.
|
||||
|
||||
and tries to fix the following bugs:
|
||||
|
||||
- [Try to fix Snap](https://github.com/wekan/wekan/commit/17f8f8f14ff205d0cbb316c63a2da36f61ba4a1d).
|
||||
Thanks to xet7.
|
||||
- [On CentOS 7 Docker there is seccomp issue with glibc 6, so setting it to unconfined to get WeKan working](https://github.com/wekan/wekan/commit/054d420dc97cadee6ed7896c608d95a6fe09dc9d (HEAD -> master)
|
||||
Thanks to m-brangeon.
|
||||
- [Fix uploading attachments](https://github.com/wekan/wekan/commit/69d454dd035a989266175eb4268ffc3d7891eb95).
|
||||
Thanks to BabyFnord and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v6.29 2022-07-11 WeKan ® release
|
||||
|
||||
This release adds the following features:
|
||||
|
||||
- [Resizeable size of list width and height. Size is not saved yet. In Progress](https://github.com/wekan/wekan/commit/01d0dd3b1dd0a3c9764e7c9d31eab739db2d3ad8).
|
||||
Thanks to NLBlackEagle and xet7.
|
||||
- [00checkStartup, on error give more details on current user which run's wekan](https://github.com/wekan/wekan/pull/4581).
|
||||
Thanks to mfilser.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Updated to Node.js v14.20.0](https://github.com/wekan/wekan/commit/239dd1a3411a3d4f51b109e1a0505a5a23bc72ee).
|
||||
Thanks to Node.js developers.
|
||||
- [Docker base image to Ubuntu 22.04](https://github.com/wekan/wekan/commit/6b4ffa69c64f0186a8b1b3ac175b633ac7c24263).
|
||||
Thanks to Ubuntu developers.
|
||||
- Updated ostrio:files.
|
||||
[Part 1](https://github.com/wekan/wekan/commit/0d67a86f2c9c1c9696d8507c60e53d47a226a6ad),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/c3bfcb78e9047a84d43041bebcec56718eaa140b).
|
||||
Thanks to developers of dependencies.
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/commit/ae09f0f0083a96c2211fdc02e60b4ff6a2f413ca).
|
||||
Thanks to developers of dependencies.
|
||||
|
||||
and adds the following translations:
|
||||
|
||||
- [Added translation Asturia (Spain)](https://github.com/wekan/wekan/commit/12615fef5d44cf611b3f1d9fc0a7be3e98b8c042).
|
||||
Thanks to translators.
|
||||
- [Added translations: Arabic (Algeria) (ar_DZ), Azerbaijani (az), Azerbaijani (Azerbaijan) (az_AZ), Azerbaijani (Latin) (az@latin)](https://github.com/wekan/wekan/commit/99b2fdbf99f26ee9df2e1ff906db2d740210f902).
|
||||
Thanks to translators.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Do not show archived lists on All Boards](https://github.com/wekan/wekan/pull/4573).
|
||||
Thanks to helioguardabaxo.
|
||||
- [Fix div max-width on My Cards table view](https://github.com/wekan/wekan/pull/4574).
|
||||
Thanks to helioguardabaxo.
|
||||
- [Fixed one Typo in CSS Style Sheet](https://github.com/wekan/wekan/pull/4577).
|
||||
Thanks to JonasPfeiferb1.
|
||||
- [Comment out unused CSS](https://github.com/wekan/wekan/commit/724d1386f6943ad87b8e32f5544cc84ae211904c).
|
||||
Thanks to xet7.
|
||||
- [Move/Copy card closes now the popup if done](https://github.com/wekan/wekan/pull/4582).
|
||||
Thanks to mfilser.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v6.28 2022-06-08 WeKan ® release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Upgraded to Meteor 2.7.3](https://github.com/wekan/wekan/commit/43b2d714043e053874e3c1101ae6e464d2e61b7e).
|
||||
Thanks to Meteor developers.
|
||||
|
||||
and adds the following translations:
|
||||
|
||||
- [Added translations: Moroccan Arabic (ary) and Standard Moroccan Tamazight (zgh)](https://github.com/wekan/wekan/commit/5af4f54f4c702f9cc4df60a27ac234421e41575d).
|
||||
Thanks to translators.
|
||||
- [Try to detect Japanese (Japan) better](https://github.com/wekan/wekan/commit/e25050316f6f018f68b03bef6fccbdaea7248461).
|
||||
Thanks to takenoko14 at Transifex and xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Removed lightbox that caused bugs like Maximum stack size exceeded. TODO later: Add a new way to open attachment image bigger](https://github.com/wekan/wekan/commit/dfea3d0e735f1665a14f7e534e352e0e00871a02).
|
||||
Thanks to xet7.
|
||||
- [Move and copy card set sorting](https://github.com/wekan/wekan/pull/4557).
|
||||
Thanks to mfilser.
|
||||
- [Updated dependencies. Try to fix Binary release on releases.wekan.team lacks the CSS](https://github.com/wekan/wekan/commit/937797356ceeb99bf66eb826e13fc55f266c8739).
|
||||
Thanks to znerol, mrcancer91, BabyFnord and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v6.27 2022-05-28 WeKan ® release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Upgraded to Meteor 2.7.3-beta.0](https://github.com/wekan/wekan/commit/25e50e3908a52a7bac61f8b939ad7c78cbd79060).
|
||||
Thanks to Meteor developers.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix opening card scrolls to wrong position when many swimlanes and card at bottom of board](https://github.com/wekan/wekan/commit/adcc33ed7fe686d46a85da6c11ea448d29e94ca7).
|
||||
Thanks to xet7.
|
||||
- [Removed wekan-accounts-sandstorm .test-app directory, that could not be git cloned on Windows](https://github.com/wekan/wekan/commit/4f44c5bf872e369cd89ea0e8791482cc925294d3).
|
||||
Thanks to xet7.
|
||||
- Try to fix Snap.
|
||||
[Part 1](https://github.com/wekan/wekan/commit/3b419848d1b7a7f421db3662d860dcea1ea6af1c),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/e50d69cfb78e5f0150e96cc90337255ccbd59e76),
|
||||
[Part 3](https://github.com/wekan/wekan/commit/ea66eca60ddbf7127c9fbed9ab41df52542ad279),
|
||||
[Part 4](https://github.com/wekan/wekan/commit/9ca26d22d0c2c9bee792e50ff203a5c18c9d556b),
|
||||
[Part 5](https://github.com/wekan/wekan/commit/fac1ba5952f763d257b04a934e3407f9b1d1d37a),
|
||||
[Part 6](https://github.com/wekan/wekan/commit/f2815a90393418dea88aa49ee74c6af91fafe96d),
|
||||
[Part 7](https://github.com/wekan/wekan/commit/2587e2f00ae27742893e48e98845a3139e3f3a02),
|
||||
[Part 8](https://github.com/wekan/wekan/commit/693a49f85200adcf81f5cf0ea56c7dd795757988).
|
||||
Thanks to xet7.
|
||||
- [WeKan Gantt GPLv2: Try to fix Gantt, by adding translations, but is not visible yet](https://github.com/wekan/wekan-gantt-gpl/commit/a08c01c76eaaf2884890a39c97d1f72da222fba1).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v6.26 2022-05-21 WeKan ® release
|
||||
|
||||
This release adds the following updates:
|
||||
@@ -829,7 +951,7 @@ This release removes the following new features:
|
||||
|
||||
- [Revert change from WeKan v5.81: At Sandstorm, every WeKan user is now WeKan Admin and has Admin Panel](https://github.com/wekan/wekan/commit/ebc7741fcb9ad854234921ed0546255411adeec9).
|
||||
Thanks to ocdtrekkie and xet7.
|
||||
|
||||
|
||||
and adds the following new features:
|
||||
|
||||
- [List header contains now a button to add the card to the bottom of the list](https://github.com/wekan/wekan/pull/4195).
|
||||
@@ -1081,7 +1203,7 @@ and fixes the following bugs:
|
||||
Thanks to niklasdahlheimer.
|
||||
- [Popup fixes: Archive cards, upload attachements etc](https://github.com/wekan/wekan/pull/4101).
|
||||
Thanks to mfilser.
|
||||
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.68 2021-10-27 WeKan ® release
|
||||
@@ -2052,7 +2174,7 @@ This release adds the following new features:
|
||||
|
||||
- [Custom Field "String Template"](https://github.com/wekan/wekan/pull/3701).
|
||||
Thanks to tod31.
|
||||
- [1) Admin reports. An option added to the admin panel that has reports an admin can run.
|
||||
- [1) Admin reports. An option added to the admin panel that has reports an admin can run.
|
||||
Right now it has two reports for attachments and broken cards.
|
||||
2) Add the creator avatar to `cardDetails` and `minicard`. Avatar is only shown if it is selected in card settings.
|
||||
3) Added a new search operator `creator`.
|
||||
@@ -2785,7 +2907,7 @@ and fixes the following bugs:
|
||||
Thanks to xet7.
|
||||
- [Rules not copied during board copy](https://github.com/wekan/wekan/pull/3458).
|
||||
Thanks to jrsupplee.
|
||||
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.83 2021-01-20 Wekan release
|
||||
@@ -2806,7 +2928,7 @@ and fixes the following bugs:
|
||||
Thanks to jrsupplee.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
|
||||
# v4.82 2021-01-20 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
+7
-2
@@ -1,4 +1,4 @@
|
||||
FROM ubuntu:21.10
|
||||
FROM ubuntu:22.04
|
||||
LABEL maintainer="wekan"
|
||||
|
||||
# 2022-04-25:
|
||||
@@ -16,7 +16,7 @@ ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v14.19.3 \
|
||||
NODE_VERSION=v14.20.0 \
|
||||
METEOR_RELEASE=1.10.2 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
@@ -50,6 +50,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
|
||||
TRUSTED_URL="" \
|
||||
WEBHOOKS_ATTRIBUTES="" \
|
||||
OAUTH2_ENABLED=false \
|
||||
OIDC_REDIRECTION_ENABLED=false \
|
||||
OAUTH2_CA_CERT="" \
|
||||
OAUTH2_ADFS_ENABLED=false \
|
||||
OAUTH2_LOGIN_STYLE=redirect \
|
||||
@@ -147,6 +148,10 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
|
||||
NODE_OPTIONS="--max_old_space_size=4096" \
|
||||
WRITABLE_PATH=/data
|
||||
|
||||
#---------------------------------------------
|
||||
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
|
||||
# https://github.com/wekan/wekan/wiki/autologin
|
||||
#- OIDC_REDIRECTION_ENABLED=true
|
||||
#---------------------------------------------------------------------
|
||||
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
|
||||
# Add more Node heap:
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
|
||||
ENV QEMU_VERSION=v4.2.0-6 \
|
||||
QEMU_ARCHITECTURE=aarch64 \
|
||||
NODE_ARCHITECTURE=linux-arm64 \
|
||||
NODE_VERSION=v14.19.3 \
|
||||
NODE_VERSION=v14.20.0 \
|
||||
WEKAN_VERSION=latest \
|
||||
WEKAN_ARCHITECTURE=arm64 \
|
||||
NODE_OPTIONS="--max_old_space_size=4096"
|
||||
@@ -49,7 +49,7 @@ LABEL maintainer="wekan"
|
||||
# Set the environment variables (defaults where required)
|
||||
ENV QEMU_ARCHITECTURE=aarch64 \
|
||||
NODE_ARCHITECTURE=linux-arm64 \
|
||||
NODE_VERSION=v14.19.3 \
|
||||
NODE_VERSION=v14.20.0 \
|
||||
NODE_ENV=production \
|
||||
NPM_VERSION=latest \
|
||||
WITH_API=true \
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
## [Translate WeKan ® at Transifex](https://transifex.com/wekan/wekan)
|
||||
|
||||
Translations to non-English languages are accepted only at [Transifex](https://transifex.com/wekan/wekan) using webbrowser.
|
||||
New English strings of new features can be added as PRs to edge branch file wekan/i18n/en.i18n.json .
|
||||
New English strings of new features can be added as PRs to master branch file wekan/imports/i18n/data/en.i18n.json .
|
||||
|
||||
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
|
||||
## [WeKan ® feature requests and bugs](https://github.com/wekan/wekan/issues)
|
||||
|
||||
Please add most of your questions as GitHub issue: [WeKan ® Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
|
||||
It's better than at chat where details get lost when chat scrolls up.
|
||||
@@ -28,7 +28,7 @@ It's better than at chat where details get lost when chat scrolls up.
|
||||
|
||||
[Discussions][discussions] - WeKan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
|
||||
|
||||
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
|
||||
[WeKan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
|
||||
|
||||
## Docker: Please only use Docker release tags
|
||||
|
||||
@@ -56,8 +56,8 @@ install Wekan on your own computer or server. In fact we encourage you to do
|
||||
that by providing one-click installation on various platforms.
|
||||
|
||||
- WeKan ® is used in [most countries of the world](https://snapcraft.io/wekan).
|
||||
- Wekan largest user has 22k users using Wekan in their company.
|
||||
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 105 languages.
|
||||
- WeKan ® largest user has 22k users using WeKan ® in their company.
|
||||
- WeKan ® has been [translated](https://transifex.com/wekan/wekan) to about 105 languages.
|
||||
- [Features][features]: WeKan ® has real-time user interface.
|
||||
- [Platforms][platforms]: WeKan ® supports many platforms.
|
||||
WeKan ® is critical part of new platforms Wekan is currently being integrated to.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v6.26.0"
|
||||
appVersion: "v6.30.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -14,6 +14,7 @@ template(name="archivedBoards")
|
||||
i.fa.fa-undo
|
||||
| {{_ 'restore-board'}}
|
||||
= title
|
||||
span {{ moment archivedAt 'LLL' }}
|
||||
else
|
||||
li.no-items-message {{_ 'no-archived-boards'}}
|
||||
|
||||
|
||||
@@ -1141,7 +1141,7 @@
|
||||
color: rgba(0,0,0,0.5);
|
||||
position: absolute;
|
||||
margin-top: -34px;
|
||||
margin-let: -11px;
|
||||
margin-left: -11px;
|
||||
}
|
||||
.board-color-clearblue a.fa,
|
||||
.board-color-clearblue a i.fa {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@import url("css/reset.css") print, screen;
|
||||
/* @import url("css/reset.css") print, screen; */
|
||||
|
||||
.board-list {
|
||||
margin: 0 8px;
|
||||
|
||||
@@ -197,7 +197,7 @@ BlazeComponent.extendComponent({
|
||||
},
|
||||
boardLists(boardId) {
|
||||
let boardLists = [];
|
||||
const lists = Lists.find({'boardId' : boardId})
|
||||
const lists = Lists.find({'boardId' : boardId, 'archived': false})
|
||||
lists.forEach(list => {
|
||||
let cardCount = Cards.find({'boardId':boardId, 'listId':list._id}).count()
|
||||
boardLists.push(`${list.title}: ${cardCount}`);
|
||||
|
||||
@@ -19,7 +19,9 @@ template(name="attachmentsGalery")
|
||||
.attachments-galery
|
||||
each attachments
|
||||
.attachment-item
|
||||
a.attachment-thumbnail(href="{{link}}" title="{{name}}" data-lightbox="{{name}}")
|
||||
// TODO: Add popup of attachment image later, with some swipebox or lightbox that would not add bugs
|
||||
// a.attachment-thumbnail(href="{{link}}" title="{{name}}")
|
||||
span.attachment-thumbnail(href="{{link}}" title="{{name}}")
|
||||
if link
|
||||
if isImage
|
||||
img.attachment-thumbnail-img(src="{{link}}")
|
||||
|
||||
@@ -212,11 +212,6 @@ BlazeComponent.extendComponent({
|
||||
//-------------
|
||||
}
|
||||
|
||||
if (!Utils.isMiniScreen()) {
|
||||
Meteor.setTimeout(() => {
|
||||
this.scrollParentContainer();
|
||||
}, 500);
|
||||
}
|
||||
const $checklistsDom = this.$('.card-checklist-items');
|
||||
|
||||
$checklistsDom.sortable({
|
||||
@@ -393,7 +388,9 @@ BlazeComponent.extendComponent({
|
||||
let card = this.data();
|
||||
const listSelect = this.$('.js-select-card-details-lists')[0];
|
||||
const listId = listSelect.options[listSelect.selectedIndex].value;
|
||||
card.move(card.boardId, card.swimlaneId, listId, card.sort);
|
||||
|
||||
const minOrder = card.getMinSort(listId, card.swimlaneId);
|
||||
card.move(card.boardId, card.swimlaneId, listId, minOrder - 1);
|
||||
},
|
||||
'click .js-go-to-linked-card'() {
|
||||
Utils.goCardId(this.data().linkedId);
|
||||
@@ -440,10 +437,20 @@ BlazeComponent.extendComponent({
|
||||
'click .js-maximize-card-details'() {
|
||||
Meteor.call('toggleCardMaximized');
|
||||
autosize($('.card-details'));
|
||||
if (!Utils.isMiniScreen()) {
|
||||
Meteor.setTimeout(() => {
|
||||
this.scrollParentContainer();
|
||||
}, 500);
|
||||
}
|
||||
},
|
||||
'click .js-minimize-card-details'() {
|
||||
Meteor.call('toggleCardMaximized');
|
||||
autosize($('.card-details'));
|
||||
if (!Utils.isMiniScreen()) {
|
||||
Meteor.setTimeout(() => {
|
||||
this.scrollParentContainer();
|
||||
}, 500);
|
||||
}
|
||||
},
|
||||
'click .js-vote'(e) {
|
||||
const forIt = $(e.target).hasClass('js-vote-positive');
|
||||
@@ -672,21 +679,13 @@ Template.cardDetailsActionsPopup.events({
|
||||
'click .js-set-card-color': Popup.open('setCardColor'),
|
||||
'click .js-move-card-to-top'(event) {
|
||||
event.preventDefault();
|
||||
const minOrder = _.min(
|
||||
this.list()
|
||||
.cardsUnfiltered(this.swimlaneId)
|
||||
.map((c) => c.sort),
|
||||
);
|
||||
const minOrder = this.getMinSort();
|
||||
this.move(this.boardId, this.swimlaneId, this.listId, minOrder - 1);
|
||||
Popup.back();
|
||||
},
|
||||
'click .js-move-card-to-bottom'(event) {
|
||||
event.preventDefault();
|
||||
const maxOrder = _.max(
|
||||
this.list()
|
||||
.cardsUnfiltered(this.swimlaneId)
|
||||
.map((c) => c.sort),
|
||||
);
|
||||
const maxOrder = this.getMaxSort();
|
||||
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
|
||||
Popup.back();
|
||||
},
|
||||
@@ -831,14 +830,16 @@ Template.moveCardPopup.events({
|
||||
const listId = lSelect.options[lSelect.selectedIndex].value;
|
||||
const slSelect = $('.js-select-swimlanes')[0];
|
||||
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
|
||||
card.move(boardId, swimlaneId, listId, 0);
|
||||
|
||||
const minOrder = card.getMinSort(listId, swimlaneId);
|
||||
card.move(boardId, swimlaneId, listId, minOrder - 1);
|
||||
|
||||
// set new id's to card object in case the card is moved to top by the comment "moveCard" after this command (.js-move-card)
|
||||
this.boardId = boardId;
|
||||
this.swimlaneId = swimlaneId;
|
||||
this.listId = listId;
|
||||
|
||||
Popup.back();
|
||||
Popup.back(2);
|
||||
},
|
||||
});
|
||||
BlazeComponent.extendComponent({
|
||||
@@ -959,8 +960,10 @@ Template.copyCardPopup.events({
|
||||
const boardId = bSelect.options[bSelect.selectedIndex].value;
|
||||
const textarea = $('#copy-card-title');
|
||||
const title = textarea.val().trim();
|
||||
// insert new card to the bottom of new list
|
||||
card.sort = Lists.findOne(card.listId).cards().count();
|
||||
|
||||
// insert new card to the top of new list
|
||||
const minOrder = card.getMinSort(listId, swimlaneId);
|
||||
card.sort = minOrder - 1;
|
||||
|
||||
if (title) {
|
||||
card.title = title;
|
||||
@@ -972,7 +975,7 @@ Template.copyCardPopup.events({
|
||||
// See https://github.com/wekan/wekan/issues/80
|
||||
Filter.addException(_id);
|
||||
|
||||
Popup.back();
|
||||
Popup.back(2);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
border-left: 1px solid #ccc;
|
||||
padding: 0;
|
||||
float: left;
|
||||
min-width: 270px;
|
||||
max-width: 270px;
|
||||
width: 270px; /* Orinal width: 270px. Changes not saved yet: */
|
||||
resize: both; /* - List width and height resizeable */
|
||||
overflow: auto; /* - List width and height resizeable */
|
||||
}
|
||||
.list:first-child {
|
||||
margin-left: 5px;
|
||||
|
||||
@@ -16,6 +16,7 @@ head
|
||||
meta(name="application-name" content="Wekan")
|
||||
meta(name="msapplication-TileColor" content="#00aba9")
|
||||
meta(name="theme-color" content="#ffffff")
|
||||
//link(rel="stylesheet" type="text/css" class="__meteor-css__" href="css/html5-default-theme.css")
|
||||
|
||||
template(name="userFormsLayout")
|
||||
section.auth-layout
|
||||
|
||||
@@ -4,7 +4,7 @@ BlazeLayout.setRoot('body');
|
||||
|
||||
let alreadyCheck = 1;
|
||||
let isCheckDone = false;
|
||||
|
||||
let counter = 0;
|
||||
const validator = {
|
||||
set(obj, prop, value) {
|
||||
if (prop === 'state' && value !== 'signIn') {
|
||||
@@ -21,7 +21,7 @@ const validator = {
|
||||
|
||||
// let isSettingDatabaseFctCallDone = false;
|
||||
|
||||
Template.userFormsLayout.onCreated(function() {
|
||||
Template.userFormsLayout.onCreated(function () {
|
||||
const templateInstance = this;
|
||||
templateInstance.currentSetting = new ReactiveVar();
|
||||
templateInstance.isLoading = new ReactiveVar(false);
|
||||
@@ -37,7 +37,7 @@ Template.userFormsLayout.onCreated(function() {
|
||||
}
|
||||
|
||||
// isSettingDatabaseFctCallDone = true;
|
||||
if(currSetting && currSetting !== undefined && currSetting.customLoginLogoImageUrl !== undefined)
|
||||
if (currSetting && currSetting !== undefined && currSetting.customLoginLogoImageUrl !== undefined)
|
||||
document.getElementById("isSettingDatabaseCallDone").style.display = 'none';
|
||||
else
|
||||
document.getElementById("isSettingDatabaseCallDone").style.display = 'block';
|
||||
@@ -50,6 +50,18 @@ Template.userFormsLayout.onCreated(function() {
|
||||
}
|
||||
});
|
||||
|
||||
if (!Meteor.user()?.profile) {
|
||||
Meteor.call('isOidcRedirectionEnabled', (_, result) => {
|
||||
if (result) {
|
||||
AccountsTemplates.options.socialLoginStyle = 'redirect';
|
||||
options = {
|
||||
loginStyle: AccountsTemplates.options.socialLoginStyle,
|
||||
};
|
||||
Meteor.loginWithOidc(options);
|
||||
}
|
||||
else console.log("oidc redirect not set");
|
||||
});
|
||||
}
|
||||
Meteor.call('isDisableRegistration', (_, result) => {
|
||||
if (result) {
|
||||
$('.at-signup-link').hide();
|
||||
@@ -81,22 +93,22 @@ Template.userFormsLayout.helpers({
|
||||
// return isSettingDatabaseFctCallDone;
|
||||
// },
|
||||
|
||||
isLegalNoticeLinkExist(){
|
||||
isLegalNoticeLinkExist() {
|
||||
const currSet = Template.instance().currentSetting.get();
|
||||
if(currSet && currSet !== undefined && currSet != null){
|
||||
if (currSet && currSet !== undefined && currSet != null) {
|
||||
return currSet.legalNotice !== undefined && currSet.legalNotice.trim() != "";
|
||||
}
|
||||
else
|
||||
return false;
|
||||
},
|
||||
|
||||
getLegalNoticeWithWritTraduction(){
|
||||
getLegalNoticeWithWritTraduction() {
|
||||
let spanLegalNoticeElt = $("#legalNoticeSpan");
|
||||
if(spanLegalNoticeElt != null && spanLegalNoticeElt != undefined){
|
||||
if (spanLegalNoticeElt != null && spanLegalNoticeElt != undefined) {
|
||||
spanLegalNoticeElt.html(TAPi18n.__('acceptance_of_our_legalNotice', {}));
|
||||
}
|
||||
let atLinkLegalNoticeElt = $("#legalNoticeAtLink");
|
||||
if(atLinkLegalNoticeElt != null && atLinkLegalNoticeElt != undefined){
|
||||
if (atLinkLegalNoticeElt != null && atLinkLegalNoticeElt != undefined) {
|
||||
atLinkLegalNoticeElt.html(TAPi18n.__('legalNotice', {}));
|
||||
}
|
||||
return true;
|
||||
@@ -147,41 +159,41 @@ Template.userFormsLayout.events({
|
||||
}
|
||||
isCheckDone = false;
|
||||
},
|
||||
'click #at-signUp'(event, templateInstance){
|
||||
'click #at-signUp'(event, templateInstance) {
|
||||
isCheckDone = false;
|
||||
},
|
||||
'DOMSubtreeModified #at-oidc'(event){
|
||||
if(alreadyCheck <= 2){
|
||||
'DOMSubtreeModified #at-oidc'(event) {
|
||||
if (alreadyCheck <= 2) {
|
||||
let currSetting = Settings.findOne();
|
||||
let oidcBtnElt = $("#at-oidc");
|
||||
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
|
||||
if (currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined) {
|
||||
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
|
||||
if(alreadyCheck == 1){
|
||||
if (alreadyCheck == 1) {
|
||||
alreadyCheck++;
|
||||
oidcBtnElt.html("");
|
||||
}
|
||||
else{
|
||||
else {
|
||||
alreadyCheck++;
|
||||
oidcBtnElt.html(htmlvalue);
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
else {
|
||||
alreadyCheck = 1;
|
||||
}
|
||||
},
|
||||
'DOMSubtreeModified .at-form'(event){
|
||||
if(alreadyCheck <= 2 && !isCheckDone){
|
||||
if(document.getElementById("at-oidc") != null){
|
||||
'DOMSubtreeModified .at-form'(event) {
|
||||
if (alreadyCheck <= 2 && !isCheckDone) {
|
||||
if (document.getElementById("at-oidc") != null) {
|
||||
let currSetting = Settings.findOne();
|
||||
let oidcBtnElt = $("#at-oidc");
|
||||
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
|
||||
if (currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined) {
|
||||
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
|
||||
if(alreadyCheck == 1){
|
||||
if (alreadyCheck == 1) {
|
||||
alreadyCheck++;
|
||||
oidcBtnElt.html("");
|
||||
}
|
||||
else{
|
||||
else {
|
||||
alreadyCheck++;
|
||||
isCheckDone = true;
|
||||
oidcBtnElt.html(htmlvalue);
|
||||
@@ -189,7 +201,7 @@ Template.userFormsLayout.events({
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
else {
|
||||
alreadyCheck = 1;
|
||||
}
|
||||
},
|
||||
@@ -221,7 +233,7 @@ async function authentication(event, templateInstance) {
|
||||
switch (result) {
|
||||
case 'ldap':
|
||||
return new Promise(resolve => {
|
||||
Meteor.loginWithLDAP(match, password, function() {
|
||||
Meteor.loginWithLDAP(match, password, function () {
|
||||
resolve(FlowRouter.go('/'));
|
||||
});
|
||||
});
|
||||
@@ -233,7 +245,7 @@ async function authentication(event, templateInstance) {
|
||||
{
|
||||
provider,
|
||||
},
|
||||
function() {
|
||||
function () {
|
||||
resolve(FlowRouter.go('/'));
|
||||
},
|
||||
);
|
||||
@@ -241,7 +253,7 @@ async function authentication(event, templateInstance) {
|
||||
|
||||
case 'cas':
|
||||
return new Promise(resolve => {
|
||||
Meteor.loginWithCas(match, password, function() {
|
||||
Meteor.loginWithCas(match, password, function () {
|
||||
resolve(FlowRouter.go('/'));
|
||||
});
|
||||
});
|
||||
@@ -267,7 +279,6 @@ function getUserAuthenticationMethod(defaultAuthenticationMethod, match) {
|
||||
Meteor.subscribe('user-authenticationMethod', match, {
|
||||
onReady() {
|
||||
const user = Users.findOne();
|
||||
|
||||
const authenticationMethod = user
|
||||
? user.authenticationMethod
|
||||
: defaultAuthenticationMethod;
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
.my-cards-card-title-table {
|
||||
font-weight: bold;
|
||||
padding-left: 2px;
|
||||
max-width: 243px;
|
||||
}
|
||||
.my-cards-board-badge {
|
||||
width: 36px;
|
||||
|
||||
@@ -80,6 +80,8 @@ function initSortable(boardComponent, $listsDom) {
|
||||
Lists.update(list._id, {
|
||||
$set: {
|
||||
sort: sortIndex.base,
|
||||
width: list._id.width(),
|
||||
height: list._id.height(),
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
+35
-5
@@ -5,6 +5,16 @@ const emailField = AccountsTemplates.removeField('email');
|
||||
let disableRegistration = false;
|
||||
let disableForgotPassword = false;
|
||||
let passwordLoginDisabled = false;
|
||||
let oidcRedirectionEnabled = false;
|
||||
let oauthServerUrl = "home";
|
||||
let oauthDashboardUrl = "";
|
||||
|
||||
Meteor.call('isOidcRedirectionEnabled', (_, result) => {
|
||||
if(result)
|
||||
{
|
||||
oidcRedirectionEnabled = true;
|
||||
}
|
||||
});
|
||||
|
||||
Meteor.call('isPasswordLoginDisabled', (_, result) => {
|
||||
if (result) {
|
||||
@@ -14,6 +24,18 @@ Meteor.call('isPasswordLoginDisabled', (_, result) => {
|
||||
}
|
||||
});
|
||||
|
||||
Meteor.call('getOauthServerUrl', (_, result) => {
|
||||
if (result) {
|
||||
oauthServerUrl = result;
|
||||
}
|
||||
});
|
||||
|
||||
Meteor.call('getOauthDashboardUrl', (_, result) => {
|
||||
if (result) {
|
||||
oauthDashboardUrl = result;
|
||||
}
|
||||
});
|
||||
|
||||
Meteor.call('isDisableRegistration', (_, result) => {
|
||||
if (result) {
|
||||
disableRegistration = true;
|
||||
@@ -59,11 +81,19 @@ AccountsTemplates.configure({
|
||||
showForgotPasswordLink: !disableForgotPassword,
|
||||
forbidClientAccountCreation: disableRegistration,
|
||||
onLogoutHook() {
|
||||
const homePage = 'home';
|
||||
if (FlowRouter.getRouteName() === homePage) {
|
||||
FlowRouter.reload();
|
||||
} else {
|
||||
FlowRouter.go(homePage);
|
||||
// here comeslogic for redirect
|
||||
if(oidcRedirectionEnabled)
|
||||
{
|
||||
window.location = oauthServerUrl + oauthDashboardUrl;
|
||||
}
|
||||
else
|
||||
{
|
||||
const homePage = 'home';
|
||||
if (FlowRouter.getRouteName() === homePage) {
|
||||
FlowRouter.reload();
|
||||
} else {
|
||||
FlowRouter.go(homePage);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -127,6 +127,12 @@ services:
|
||||
# image: wekanteam/wekan
|
||||
#-------------------------------------------------------------------------------------
|
||||
container_name: wekan-app
|
||||
# On CentOS 7 there is seccomp issue with glibc 6, so setting it to unconfined
|
||||
# to get WeKan working. See:
|
||||
# - https://github.com/wekan/wekan/issues/4585
|
||||
# - https://github.com/wekan/wekan/issues/4587
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
restart: always
|
||||
networks:
|
||||
- wekan-tier
|
||||
@@ -336,6 +342,10 @@ services:
|
||||
#-----------------------------------------------------------------
|
||||
# ==== Debug OIDC OAuth2 etc ====
|
||||
#- DEBUG=true
|
||||
#---------------------------------------------
|
||||
# ==== AUTOLOGIN WITH OIDC/OAUTH2 ====
|
||||
# https://github.com/wekan/wekan/wiki/autologin
|
||||
#- OIDC_REDIRECTION_ENABLED=true
|
||||
#-----------------------------------------------------------------
|
||||
# ==== OAUTH2 ORACLE on premise identity manager OIM ====
|
||||
#- ORACLE_OIM_ENABLED=true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
apiVersion: v2
|
||||
appVersion: "6.26"
|
||||
appVersion: "6.30"
|
||||
dependencies:
|
||||
- condition: mongodb.enabled
|
||||
name: mongodb
|
||||
|
||||
@@ -14,7 +14,7 @@ serviceAccounts:
|
||||
##
|
||||
image:
|
||||
repository: quay.io/wekan/wekan
|
||||
tag: v6.26
|
||||
tag: v6.30
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## Configuration for wekan component
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,41 +1,41 @@
|
||||
{
|
||||
"accept": "قبول",
|
||||
"act-activity-notify": "اشعار النشاط",
|
||||
"act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-createBoard": "created board __board__",
|
||||
"act-createSwimlane": "created swimlane __swimlane__ to board __board__",
|
||||
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-createCustomField": "created custom field __customField__ at board __board__",
|
||||
"act-deleteCustomField": "deleted custom field __customField__ at board __board__",
|
||||
"act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-createList": "added list __list__ to board __board__",
|
||||
"act-addBoardMember": "added member __member__ to board __board__",
|
||||
"act-archivedBoard": "Board __board__ moved to Archive",
|
||||
"act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
|
||||
"act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
|
||||
"act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
|
||||
"act-importBoard": "imported board __board__",
|
||||
"act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
|
||||
"act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
|
||||
"act-addAttachment": "ماتمت اضافتة__اضافة_للكرت\n__الكرت__في قائمة__قائمة__في المنطقة العائمة \n__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-deleteAttachment": "حذف الاضافة__الاضافة__في كرت\n__كرت__في قائمة__قائمة__في المنطقة العائمة\n__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-addSubtask": "مهمة فرعية مضافة__مهمة فرعية__ للكرت\n__الكرت__في قائمة__قائمة__في المنطقة العائمة\n__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-addLabel": "العلامة المضافة__العلامة__للكرت__كرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-addedLabel": "العلامة المضافة__العلامة__للكرت__كرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-removeLabel": "العلامة المحذوفة__العلامة__من الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-removedLabel": "العلامة المحذوفة__العلامة__من الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-addChecklist": "قائمة التأكد المضافة__قائمة التأكد__للكرت__كرت__في قائمة__قائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-addChecklistItem": "عنصر قائمة التأكد المضافة__عنصر قائمة التأكد__لقائمة التأكد__قائمة التأكد__لكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-removeChecklist": " قائمة التأكد المحذوفة__عنصر قائمة التأكد__لقائمة التأكد__قائمة التأكد__لكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-removeChecklistItem": "عنصر قائمة التأكد المحذوف__عنصر قائمة التأكد__لقائمة التأكد__قائمة التأكد__لكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-checkedItem": "مختار__عنصر قائمة التأكد__لقائمة التأكد__قائمة التأكد__ لكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-uncheckedItem": "غير مختار__عنصر قائمة التأكد__لقائمة التأكد__قائمة التأكد__ لكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-completeChecklist": "قائمة تأكد مكتملة__عنصر قائمة التأكد__لقائمة التأكد__قائمة التأكد__ لكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-uncompleteChecklist": "قائمة تأكد غير مكتملة__عنصر قائمة التأكد__لقائمة التأكد__قائمة التأكد__ لكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-addComment": "تعليق على كرت__كرت__:\n__تعليق__في قائمة__قائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-editComment": "تعليق معدل على كرت__كرت__:\n__تعليق__في قائمة__قائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-deleteComment": "تعليق محذوف على كرت__كرت__:\n__تعليق__في قائمة__قائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-createBoard": "لوح مكون__لوح__",
|
||||
"act-createSwimlane": "منطقة عائمة مكونة__منطقة عائمة__في اللوح__اللوح__",
|
||||
"act-createCard": "كرت مكون__كرت__في قائمة__قائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-createCustomField": "مجال مخصوص مكون__مجال مخصوص__في اللوح__اللوح__",
|
||||
"act-deleteCustomField": "مجال مخصوص محذوف__مجال مخصوص__في اللوح__اللوح__",
|
||||
"act-setCustomField": "مجال مخصوص معدل__مجال مخصوص__:__قيمة مجال مخصوص__للكرت_الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-createList": "قائمة مضافة__قائمة__ في اللوح __اللوح__",
|
||||
"act-addBoardMember": "عضو مضاف__عضو__في اللوح__اللوح__",
|
||||
"act-archivedBoard": "اللوح__اللوح__منقول الى الارشيف",
|
||||
"act-archivedCard": "الكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في قائمة__القائمة__ منقول الى الارشيف",
|
||||
"act-archivedList": "القائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__ منقول الى الارشيف",
|
||||
"act-archivedSwimlane": "المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__ منقول الى الارشيف",
|
||||
"act-importBoard": "اللوح المستورد__اللوح__",
|
||||
"act-importCard": "الكرت المستورد__الكرت__في القائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-importList": " القائمة المستوردة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-joinMember": "العضو المضاف__العضو__للكرت_الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"act-moveCard": "الكرت المحذوف__الكرت__في اللوح_اللوح__من قائمة__قائمة قديمة__في المنطقة العائمة__منطقة عائمة قديمة__في القائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__",
|
||||
"act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-removeBoardMember": "removed member __member__ from board __board__",
|
||||
"act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
|
||||
@@ -71,7 +71,7 @@
|
||||
"add": "أضف",
|
||||
"activity-checked-item-card": "checked %s in checklist %s",
|
||||
"activity-unchecked-item-card": "unchecked %s in checklist %s",
|
||||
"activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"activity-checklist-completed-card": "قائمة تأكد مكتماة__عنصر قائمة التأكد__لقائمة التأكد__قائمة التأكد__ لكرت__الكرت__في قائمة__القائمة__في المنطقة العائمة__المنطقة العائمة__في اللوح__اللوح__",
|
||||
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
|
||||
"activity-editComment": "edited comment %s",
|
||||
"activity-deleteComment": "تعليق محذوف %s",
|
||||
@@ -107,7 +107,7 @@
|
||||
"and-n-other-card_plural": "And __count__ other بطاقات",
|
||||
"apply": "طبق",
|
||||
"app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
|
||||
"app-try-reconnect": "Try to reconnect.",
|
||||
"app-try-reconnect": "محاولة إعادة الاتصال.",
|
||||
"archive": "نقل الى الارشيف",
|
||||
"archive-all": "نقل الكل الى الارشيف",
|
||||
"archive-board": "نقل اللوح الى الارشيف",
|
||||
@@ -136,9 +136,9 @@
|
||||
"back": "رجوع",
|
||||
"board-change-color": "تغيير اللومr",
|
||||
"show-at-all-boards-page": "Show at All Boards page",
|
||||
"board-info-on-my-boards": "All Boards Settings",
|
||||
"boardInfoOnMyBoardsPopup-title": "All Boards Settings",
|
||||
"boardInfoOnMyBoards-title": "All Boards Settings",
|
||||
"board-info-on-my-boards": "جميع إعدادات اللوحات",
|
||||
"boardInfoOnMyBoardsPopup-title": "جميع إعدادات اللوحات",
|
||||
"boardInfoOnMyBoards-title": "جميع إعدادات اللوحات",
|
||||
"show-card-counter-per-list": "Show card count per list",
|
||||
"show-board_members-avatar": "Show Board members avatars",
|
||||
"board-nb-stars": "%s نجوم",
|
||||
@@ -150,13 +150,13 @@
|
||||
"boardChangeTitlePopup-title": "إعادة تسمية اللوحة",
|
||||
"boardChangeVisibilityPopup-title": "تعديل وضوح الرؤية",
|
||||
"boardChangeWatchPopup-title": "تغيير المتابعة",
|
||||
"boardMenuPopup-title": "Board Settings",
|
||||
"boardMenuPopup-title": "إعدادات اللوحة",
|
||||
"boardChangeViewPopup-title": "عرض اللوحات",
|
||||
"boards": "لوحات",
|
||||
"board-view": "عرض اللوحات",
|
||||
"board-view-cal": "التقويم",
|
||||
"board-view-swimlanes": "خطوط السباحة",
|
||||
"board-view-collapse": "Collapse",
|
||||
"board-view-collapse": "انهيار",
|
||||
"board-view-gantt": "Gantt",
|
||||
"board-view-lists": "القائمات",
|
||||
"bucket-example": "مثل « todo list » على سبيل المثال",
|
||||
@@ -193,7 +193,7 @@
|
||||
"vote-public": "Show who voted what",
|
||||
"vote-for-it": "مع",
|
||||
"vote-against": "ضد",
|
||||
"deleteVotePopup-title": "Delete vote?",
|
||||
"deleteVotePopup-title": "حذف التصويت؟",
|
||||
"vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
|
||||
"cardStartPlanningPokerPopup-title": "Start a Planning Poker",
|
||||
"card-edit-planning-poker": "Edit Planning Poker",
|
||||
@@ -208,10 +208,10 @@
|
||||
"poker-twenty": "20",
|
||||
"poker-forty": "40",
|
||||
"poker-oneHundred": "100",
|
||||
"poker-unsure": "?",
|
||||
"poker-unsure": "؟",
|
||||
"poker-finish": "Finish",
|
||||
"poker-result-votes": "Votes",
|
||||
"poker-result-who": "Who",
|
||||
"poker-result-votes": "الأصوات",
|
||||
"poker-result-who": "من",
|
||||
"poker-replay": "Replay",
|
||||
"set-estimation": "Set Estimation",
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
@@ -274,7 +274,7 @@
|
||||
"color-slateblue": "slateblue",
|
||||
"color-white": "أبيض",
|
||||
"color-yellow": "yellow",
|
||||
"unset-color": "Unset",
|
||||
"unset-color": "غير محدد",
|
||||
"comment": "تعليق",
|
||||
"comment-placeholder": "أكتب تعليق",
|
||||
"comment-only": "التعليق فقط",
|
||||
@@ -283,7 +283,7 @@
|
||||
"deleteCommentPopup-title": "Delete comment?",
|
||||
"no-comments": "لا يوجد تعليقات",
|
||||
"no-comments-desc": "Can not see comments and activities.",
|
||||
"worker": "Worker",
|
||||
"worker": "عامل",
|
||||
"worker-desc": "Can only move cards, assign itself to card and comment.",
|
||||
"computer": "حاسوب",
|
||||
"confirm-subtask-delete-popup": "Are you sure you want to delete subtask?",
|
||||
@@ -307,7 +307,7 @@
|
||||
"current": "الحالي",
|
||||
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
|
||||
"custom-field-checkbox": "Checkbox",
|
||||
"custom-field-currency": "Currency",
|
||||
"custom-field-currency": "عملة",
|
||||
"custom-field-currency-option": "Currency Code",
|
||||
"custom-field-date": "تاريخ",
|
||||
"custom-field-dropdown": "Dropdown List",
|
||||
@@ -543,7 +543,7 @@
|
||||
"restore": "استعادة",
|
||||
"save": "حفظ",
|
||||
"search": "بحث",
|
||||
"rules": "Rules",
|
||||
"rules": "قواعد",
|
||||
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
|
||||
"search-example": "Write text you search and press Enter",
|
||||
"select-color": "اختيار اللون",
|
||||
@@ -832,14 +832,14 @@
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-update": "تحديث",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "بداية",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "نهاية",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"r-remove-value-from": "إزالة القيمة من",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
@@ -862,9 +862,9 @@
|
||||
"swimlaneDeletePopup-title": "Delete Swimlane ?",
|
||||
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
|
||||
"restore-all": "Restore all",
|
||||
"delete-all": "Delete all",
|
||||
"delete-all": "حذف الكل",
|
||||
"loading": "Loading, please wait.",
|
||||
"previous_as": "last time was",
|
||||
"previous_as": "كانت آخر مرة",
|
||||
"act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
|
||||
"act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
|
||||
"act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
|
||||
@@ -893,13 +893,13 @@
|
||||
"addmore-detail": "Add a more detailed description",
|
||||
"show-on-card": "Show on Card",
|
||||
"show-on-minicard": "Show on Minicard",
|
||||
"new": "New",
|
||||
"new": "جديد",
|
||||
"editOrgPopup-title": "Edit Organization",
|
||||
"newOrgPopup-title": "New Organization",
|
||||
"editTeamPopup-title": "Edit Team",
|
||||
"newTeamPopup-title": "New Team",
|
||||
"editUserPopup-title": "Edit User",
|
||||
"newUserPopup-title": "New User",
|
||||
"newUserPopup-title": "مستخدم جديد",
|
||||
"notifications": "Notifications",
|
||||
"view-all": "View All",
|
||||
"filter-by-unread": "Filter by Unread",
|
||||
@@ -909,18 +909,18 @@
|
||||
"allowRenamePopup-title": "Allow Rename",
|
||||
"start-day-of-week": "Set day of the week start",
|
||||
"monday": "Monday",
|
||||
"tuesday": "Tuesday",
|
||||
"tuesday": "الثلاثاء",
|
||||
"wednesday": "Wednesday",
|
||||
"thursday": "Thursday",
|
||||
"thursday": "الخميس",
|
||||
"friday": "Friday",
|
||||
"saturday": "Saturday",
|
||||
"saturday": "السبت",
|
||||
"sunday": "Sunday",
|
||||
"status": "Status",
|
||||
"swimlane": "Swimlane",
|
||||
"owner": "Owner",
|
||||
"last-modified-at": "Last modified at",
|
||||
"last-activity": "Last activity",
|
||||
"voting": "Voting",
|
||||
"voting": "التصويت",
|
||||
"archived": "Archived",
|
||||
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
|
||||
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
|
||||
@@ -932,8 +932,8 @@
|
||||
"teams": "Teams",
|
||||
"displayName": "Display Name",
|
||||
"shortName": "Short Name",
|
||||
"website": "Website",
|
||||
"person": "Person",
|
||||
"website": "موقع الكتروني",
|
||||
"person": "شخص",
|
||||
"my-cards": "My Cards",
|
||||
"card": "بطاقة",
|
||||
"board": "Board",
|
||||
@@ -968,7 +968,7 @@
|
||||
"n-cards-found": "%s Cards Found",
|
||||
"n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found",
|
||||
"operator-board": "لوح",
|
||||
"operator-board-abbrev": "b",
|
||||
"operator-board-abbrev": "ب",
|
||||
"operator-swimlane": "swimlane",
|
||||
"operator-swimlane-abbrev": "s",
|
||||
"operator-list": "قائمة",
|
||||
@@ -987,7 +987,7 @@
|
||||
"operator-created": "created",
|
||||
"operator-modified": "modified",
|
||||
"operator-sort": "sort",
|
||||
"operator-comment": "comment",
|
||||
"operator-comment": "تعليق",
|
||||
"operator-has": "has",
|
||||
"operator-limit": "limit",
|
||||
"operator-debug": "debug",
|
||||
@@ -1114,12 +1114,12 @@
|
||||
"open": "مفتوح",
|
||||
"pending": "Pending",
|
||||
"closed": "مقفل",
|
||||
"resolved": "Resolved",
|
||||
"resolved": "تم الحل",
|
||||
"cancelled": "الغاء",
|
||||
"history": "تاريخ",
|
||||
"request": "Request",
|
||||
"requests": "Requests",
|
||||
"help-request": "Help Request",
|
||||
"request": "طلب",
|
||||
"requests": "الطلبات",
|
||||
"help-request": "طلب مساعدة",
|
||||
"editCardSortOrderPopup-title": "Change Sorting",
|
||||
"cardDetailsPopup-title": "نقاصيل البطاقة",
|
||||
"add-teams": "اضافة فرق",
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -135,12 +135,12 @@
|
||||
"avatar-too-big": "Das Profilbild ist zu gross (520KB max)",
|
||||
"back": "Zurück",
|
||||
"board-change-color": "Farbe ändern",
|
||||
"show-at-all-boards-page": "Show at All Boards page",
|
||||
"board-info-on-my-boards": "All Boards Settings",
|
||||
"boardInfoOnMyBoardsPopup-title": "All Boards Settings",
|
||||
"boardInfoOnMyBoards-title": "All Boards Settings",
|
||||
"show-card-counter-per-list": "Show card count per list",
|
||||
"show-board_members-avatar": "Show Board members avatars",
|
||||
"show-at-all-boards-page": "Zeigen auf der Seite \"Alle Boards\"",
|
||||
"board-info-on-my-boards": "Einstellungen für alle Boards",
|
||||
"boardInfoOnMyBoardsPopup-title": "Einstellungen für alle Boards",
|
||||
"boardInfoOnMyBoards-title": "Einstellungen für alle Boards",
|
||||
"show-card-counter-per-list": "Zeige Kartenanzahl pro Liste",
|
||||
"show-board_members-avatar": "Zeige Profilbilder der Board-Mitglieder",
|
||||
"board-nb-stars": "%s Sterne",
|
||||
"board-not-found": "Board nicht gefunden",
|
||||
"board-private-info": "Dieses Board wird <strong>privat</strong> sein.",
|
||||
@@ -288,7 +288,7 @@
|
||||
"computer": "Computer",
|
||||
"confirm-subtask-delete-popup": "Wollen Sie die Teilaufgabe wirklich löschen?",
|
||||
"confirm-checklist-delete-popup": "Wollen Sie diese Checkliste wirklich löschen?",
|
||||
"subtaskDeletePopup-title": "Delete Subtask?",
|
||||
"subtaskDeletePopup-title": "Teilaufgabe löschen?",
|
||||
"checklistDeletePopup-title": "Checkliste löschen?",
|
||||
"copy-card-link-to-clipboard": "Kopiere Link zur Karte in die Zwischenablage",
|
||||
"copy-text-to-clipboard": "Text in die Zwischenablage kopieren",
|
||||
@@ -578,8 +578,8 @@
|
||||
"has-spenttime-cards": "Hat Karten mit aufgewendeten Zeiten",
|
||||
"time": "Zeit",
|
||||
"title": "Titel",
|
||||
"toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9",
|
||||
"remove-labels-multiselect": "Multi-Selection removes labels 1-9",
|
||||
"toggle-labels": "Label 1-9 zur Karte hinzufügen. Bei Mehrfachauswahl Label 1-9 hinzufügen",
|
||||
"remove-labels-multiselect": "Labels 1-9 bei Karten-Mehrfachauswahl entfernen",
|
||||
"tracking": "Folgen",
|
||||
"tracking-info": "Sie werden über alle Änderungen an Karten benachrichtigt, an denen Sie als Ersteller oder Mitglied beteiligt sind.",
|
||||
"type": "Typ",
|
||||
@@ -707,14 +707,14 @@
|
||||
"queue": "Warteschlange",
|
||||
"subtask-settings": "Einstellungen für Teilaufgaben",
|
||||
"card-settings": "Karten-Einstellungen",
|
||||
"minicard-settings": "Minicard Settings",
|
||||
"minicard-settings": "Einstellungen für Minikarte",
|
||||
"boardSubtaskSettingsPopup-title": "Boardeinstellungen für Teilaufgaben",
|
||||
"boardCardSettingsPopup-title": "Karten-Einstellungen",
|
||||
"boardMinicardSettingsPopup-title": "Minicard Settings",
|
||||
"boardMinicardSettingsPopup-title": "Einstellungen für Minikarte",
|
||||
"deposit-subtasks-board": "Teilaufgaben in diesem Board ablegen:",
|
||||
"deposit-subtasks-list": "Zielliste für hier abgelegte Teilaufgaben:",
|
||||
"show-parent-in-minicard": "Übergeordnetes Element auf Minikarte anzeigen:",
|
||||
"description-on-minicard": "Description on minicard",
|
||||
"description-on-minicard": "Beschreibung auf Minikarte",
|
||||
"prefix-with-full-path": "Vollständiger Pfad über Titel",
|
||||
"prefix-with-parent": "Über Titel",
|
||||
"subtext-with-full-path": "Vollständiger Pfad unter Titel",
|
||||
@@ -892,7 +892,7 @@
|
||||
"cardAssigneesPopup-title": "Zugewiesen",
|
||||
"addmore-detail": "Eine detailliertere Beschreibung hinzufügen",
|
||||
"show-on-card": "Zeige auf Karte",
|
||||
"show-on-minicard": "Show on Minicard",
|
||||
"show-on-minicard": "Anzeigen auf Minikarte",
|
||||
"new": "Neu",
|
||||
"editOrgPopup-title": "Organisation bearbeiten",
|
||||
"newOrgPopup-title": "Neue Organisation",
|
||||
@@ -938,10 +938,10 @@
|
||||
"card": "Karte",
|
||||
"board": "Board",
|
||||
"context-separator": "/",
|
||||
"myCardsViewChange-title": "My Cards View",
|
||||
"myCardsViewChangePopup-title": "My Cards View",
|
||||
"myCardsViewChange-title": "Meine Kartenansicht",
|
||||
"myCardsViewChangePopup-title": "Meine Kartenansicht",
|
||||
"myCardsViewChange-choice-boards": "Boards",
|
||||
"myCardsViewChange-choice-table": "Table",
|
||||
"myCardsViewChange-choice-table": "Tabelle",
|
||||
"myCardsSortChange-title": "Meine Karten Sortierung",
|
||||
"myCardsSortChangePopup-title": "Meine Karten Sortierung",
|
||||
"myCardsSortChange-choice-board": "nach Board",
|
||||
@@ -1162,20 +1162,20 @@
|
||||
"copyChecklist": "Checkliste kopieren",
|
||||
"copyChecklistPopup-title": "Checkliste kopieren",
|
||||
"card-show-lists": "Listen anzeigen",
|
||||
"subtaskActionsPopup-title": "Subtask Actions",
|
||||
"attachmentActionsPopup-title": "Attachment Actions",
|
||||
"attachment-move-storage-fs": "Move attachment to filesystem",
|
||||
"attachment-move-storage-gridfs": "Move attachment to GridFS",
|
||||
"attachment-move": "Move Attachment",
|
||||
"move-all-attachments-to-fs": "Move all attachments to filesystem",
|
||||
"move-all-attachments-to-gridfs": "Move all attachments to GridFS",
|
||||
"move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem",
|
||||
"move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS",
|
||||
"path": "Path",
|
||||
"version-name": "Version-Name",
|
||||
"size": "Size",
|
||||
"storage": "Storage",
|
||||
"subtaskActionsPopup-title": "Teilaufgabenaktionen",
|
||||
"attachmentActionsPopup-title": "Anhang-Aktionen",
|
||||
"attachment-move-storage-fs": "Verschiebe den Anhang ins Dateisystem",
|
||||
"attachment-move-storage-gridfs": "Verschiebe den Anhang zu GridFS",
|
||||
"attachment-move": "Verschiebe den Anhang",
|
||||
"move-all-attachments-to-fs": "Verschiebe alle Anhänge ins Dateisystem",
|
||||
"move-all-attachments-to-gridfs": "Verschiebe alle Anhänge zu GridFS",
|
||||
"move-all-attachments-of-board-to-fs": "Verschiebe alle Anhänge des Boards ins Dateisystem",
|
||||
"move-all-attachments-of-board-to-gridfs": "Verschiebe alle Anhänge des Boards zu GridFS",
|
||||
"path": "Pfad",
|
||||
"version-name": "Versionsname",
|
||||
"size": "Grösse",
|
||||
"storage": "Speicher",
|
||||
"action": "Aktion",
|
||||
"board-title": "Board Title",
|
||||
"board-title": "Board-Titel",
|
||||
"attachmentRenamePopup-title": "Umbenennen"
|
||||
}
|
||||
@@ -137,8 +137,8 @@
|
||||
"board-change-color": "Farbe ändern",
|
||||
"show-at-all-boards-page": "Zeige auf \"Alle Boards\" Seite",
|
||||
"board-info-on-my-boards": "\"Alle Boards\" Einstellungen",
|
||||
"boardInfoOnMyBoardsPopup-title": "\"Alle Boards\" Einstellungen",
|
||||
"boardInfoOnMyBoards-title": "\"Alle Boards\" Einstellungen",
|
||||
"boardInfoOnMyBoardsPopup-title": "Einstellungen für Alle Boards",
|
||||
"boardInfoOnMyBoards-title": "Einstellungen für Alle Boards",
|
||||
"show-card-counter-per-list": "Zeige Kartenanzahl pro Liste",
|
||||
"show-board_members-avatar": "Zeige Profilbilder der Board-Mitglieder",
|
||||
"board-nb-stars": "%s Sterne",
|
||||
@@ -1158,7 +1158,7 @@
|
||||
"checklistActionsPopup-title": "Checklistenaktionen",
|
||||
"moveChecklist": "Checkliste verschieben",
|
||||
"moveChecklistPopup-title": "Checkliste verschieben",
|
||||
"newlineBecomesNewChecklistItem": "Neue Zeile wird ein neues Checklistenelement",
|
||||
"newlineBecomesNewChecklistItem": "Neue Zeile wird neuer Checklisteneintrag",
|
||||
"copyChecklist": "Checkliste kopieren",
|
||||
"copyChecklistPopup-title": "Checkliste kopieren",
|
||||
"card-show-lists": "Listen anzeigen",
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
"and-n-other-card_plural": "y otras __count__ tarjetas",
|
||||
"apply": "Aplicar",
|
||||
"app-is-offline": "Cargando, espera por favor. Refrescar esta página causará pérdida de datos. Si la carga no funciona, por favor comprueba que el servidor no se ha parado.",
|
||||
"app-try-reconnect": "Try to reconnect.",
|
||||
"app-try-reconnect": "Intente reconectar.",
|
||||
"archive": "Archivar",
|
||||
"archive-all": "Archivar todo",
|
||||
"archive-board": "Archivar este tablero",
|
||||
|
||||
@@ -1156,11 +1156,11 @@
|
||||
"legalNotice": "legal notice",
|
||||
"copied": "복사됨",
|
||||
"checklistActionsPopup-title": "Checklist Actions",
|
||||
"moveChecklist": "Move Checklist",
|
||||
"moveChecklistPopup-title": "Move Checklist",
|
||||
"moveChecklist": "체크리스트 이동",
|
||||
"moveChecklistPopup-title": "체크리스트 이동",
|
||||
"newlineBecomesNewChecklistItem": "Newline becomes new checklist item",
|
||||
"copyChecklist": "Copy Checklist",
|
||||
"copyChecklistPopup-title": "Copy Checklist",
|
||||
"copyChecklist": "체크리스트 복사",
|
||||
"copyChecklistPopup-title": "체크리스트 복사",
|
||||
"card-show-lists": "Card Show Lists",
|
||||
"subtaskActionsPopup-title": "Subtask Actions",
|
||||
"attachmentActionsPopup-title": "Attachment Actions",
|
||||
@@ -1171,11 +1171,11 @@
|
||||
"move-all-attachments-to-gridfs": "Move all attachments to GridFS",
|
||||
"move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem",
|
||||
"move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS",
|
||||
"path": "Path",
|
||||
"version-name": "Version-Name",
|
||||
"size": "Size",
|
||||
"storage": "Storage",
|
||||
"path": "경로",
|
||||
"version-name": "버전 이름",
|
||||
"size": "크기",
|
||||
"storage": "저장소",
|
||||
"action": "동작",
|
||||
"board-title": "Board Title",
|
||||
"board-title": "보드 제목",
|
||||
"attachmentRenamePopup-title": "새이름"
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,4 +1,10 @@
|
||||
export default {
|
||||
"ar-DZ": {
|
||||
code: "ar",
|
||||
tag: "ar-DZ",
|
||||
name: "دزيرية",
|
||||
load: () => import('./data/ar-DZ.i18n.json'),
|
||||
},
|
||||
"ar-EG": {
|
||||
code: "ar",
|
||||
tag: "ar-EG",
|
||||
@@ -11,6 +17,30 @@ export default {
|
||||
name: "العربية",
|
||||
load: () => import('./data/ar.i18n.json'),
|
||||
},
|
||||
"ary": {
|
||||
code: "ary",
|
||||
tag: "ary",
|
||||
name: "عربي مغربي",
|
||||
load: () => import('./data/ary.i18n.json'),
|
||||
},
|
||||
"az-AZ": {
|
||||
code: "az",
|
||||
tag: "az-AZ",
|
||||
name: "Azərbaycan (Azərbaycan)",
|
||||
load: () => import('./data/az-AZ.i18n.json'),
|
||||
},
|
||||
"az-LA": {
|
||||
code: "az",
|
||||
tag: "az-LA",
|
||||
name: "Azərbaycan (Latin)",
|
||||
load: () => import('./data/az-LA.i18n.json'),
|
||||
},
|
||||
"az": {
|
||||
code: "az",
|
||||
tag: "az",
|
||||
name: "Azərbaycan",
|
||||
load: () => import('./data/az.i18n.json'),
|
||||
},
|
||||
"bg": {
|
||||
code: "bg",
|
||||
tag: "bg",
|
||||
@@ -131,6 +161,12 @@ export default {
|
||||
name: "Esperanto",
|
||||
load: () => import('./data/eo.i18n.json'),
|
||||
},
|
||||
"ast-ES": {
|
||||
code: "es",
|
||||
tag: "ast-ES",
|
||||
name: "español de Asturias",
|
||||
load: () => import('./data/ast-ES.i18n.json'),
|
||||
},
|
||||
"es-AR": {
|
||||
code: "es",
|
||||
tag: "es-AR",
|
||||
@@ -323,6 +359,12 @@ export default {
|
||||
name: "日本語",
|
||||
load: () => import('./data/ja.i18n.json'),
|
||||
},
|
||||
"ja-JP": {
|
||||
code: "ja",
|
||||
tag: "ja-JP",
|
||||
name: "日本語",
|
||||
load: () => import('./data/ja.i18n.json'),
|
||||
},
|
||||
"ka": {
|
||||
code: "ka",
|
||||
tag: "ka",
|
||||
@@ -611,6 +653,12 @@ export default {
|
||||
name: "Èdè Yorùbá",
|
||||
load: () => import('./data/yo.i18n.json'),
|
||||
},
|
||||
"zgh": {
|
||||
code: "zgh",
|
||||
tag: "zgh",
|
||||
name: "ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ",
|
||||
load: () => import('./data/zgh.i18n.json'),
|
||||
},
|
||||
"zh-CN": {
|
||||
code: "zh",
|
||||
tag: "zh-CN",
|
||||
|
||||
@@ -691,6 +691,53 @@ Cards.helpers({
|
||||
return _.contains(this.labelIds, labelId);
|
||||
},
|
||||
|
||||
/** returns the sort number of a list
|
||||
* @param listId a list id
|
||||
* @param swimlaneId a swimlane id
|
||||
* top sorting of the card at the top if true, or from the bottom if false
|
||||
*/
|
||||
getSort(listId, swimlaneId, top) {
|
||||
if (!_.isBoolean(top)) {
|
||||
top = true;
|
||||
}
|
||||
if (!listId) {
|
||||
listId = this.listId;
|
||||
}
|
||||
if (!swimlaneId) {
|
||||
swimlaneId = this.swimlaneId;
|
||||
}
|
||||
const selector = {
|
||||
listId: listId,
|
||||
swimlaneId: swimlaneId,
|
||||
archived: false,
|
||||
};
|
||||
const sorting = top ? 1 : -1;
|
||||
const card = Cards.findOne(selector, { sort: { sort: sorting } });
|
||||
let ret = null
|
||||
if (card) {
|
||||
ret = card.sort;
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
|
||||
/** returns the sort number of a list from the card at the top
|
||||
* @param listId a list id
|
||||
* @param swimlaneId a swimlane id
|
||||
*/
|
||||
getMinSort(listId, swimlaneId) {
|
||||
const ret = this.getSort(listId, swimlaneId, true);
|
||||
return ret;
|
||||
},
|
||||
|
||||
/** returns the sort number of a list from the card at the bottom
|
||||
* @param listId a list id
|
||||
* @param swimlaneId a swimlane id
|
||||
*/
|
||||
getMaxSort(listId, swimlaneId) {
|
||||
const ret = this.getSort(listId, swimlaneId, false);
|
||||
return ret;
|
||||
},
|
||||
|
||||
user() {
|
||||
return Users.findOne(this.userId);
|
||||
},
|
||||
|
||||
@@ -79,6 +79,21 @@ Lists.attachSchema(
|
||||
// XXX We should probably provide a default
|
||||
optional: true,
|
||||
},
|
||||
width: {
|
||||
/**
|
||||
* list width, default 270px
|
||||
*/
|
||||
type: String,
|
||||
defaultValue: '270px',
|
||||
optional: true,
|
||||
},
|
||||
height: {
|
||||
/**
|
||||
* list height
|
||||
*/
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
updatedAt: {
|
||||
/**
|
||||
* last update of the list
|
||||
|
||||
@@ -229,6 +229,12 @@ if (Meteor.isServer) {
|
||||
]);
|
||||
}
|
||||
|
||||
function loadOidcConfig(service){
|
||||
check(service, String);
|
||||
var config = ServiceConfiguration.configurations.findOne({service: service});
|
||||
return config;
|
||||
}
|
||||
|
||||
function sendInvitationEmail(_id) {
|
||||
const icode = InvitationCodes.findOne(_id);
|
||||
const author = Users.findOne(Meteor.userId());
|
||||
@@ -495,6 +501,12 @@ if (Meteor.isServer) {
|
||||
};
|
||||
},
|
||||
|
||||
getOauthServerUrl(){
|
||||
return process.env.OAUTH2_SERVER_URL;
|
||||
},
|
||||
getOauthDashboardUrl(){
|
||||
return process.env.DASHBOARD_URL;
|
||||
},
|
||||
getDefaultAuthenticationMethod() {
|
||||
return process.env.DEFAULT_AUTHENTICATION_METHOD;
|
||||
},
|
||||
@@ -502,6 +514,12 @@ if (Meteor.isServer) {
|
||||
isPasswordLoginDisabled() {
|
||||
return process.env.PASSWORD_LOGIN_ENABLED === 'false';
|
||||
},
|
||||
isOidcRedirectionEnabled(){
|
||||
return process.env.OIDC_REDIRECTION_ENABLED === 'true' && Object.keys(loadOidcConfig("oidc")).length > 0;
|
||||
},
|
||||
getServiceConfiguration(service){
|
||||
return loadOidcConfig(service);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Generated
+313
-500
File diff suppressed because it is too large.
Load diff
+2
-6
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v6.26.0",
|
||||
"version": "v6.30.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"repository": {
|
||||
@@ -17,7 +17,6 @@
|
||||
"chai": "^4.3.6",
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"flatted": "^3.2.2",
|
||||
"puppeteer": "^1.20.0",
|
||||
"sinon": "^13.0.2",
|
||||
"sinon-chai": "^3.7.0"
|
||||
},
|
||||
@@ -25,7 +24,7 @@
|
||||
"@babel/core": "^7.15.5",
|
||||
"@babel/runtime": "^7.15.4",
|
||||
"@mapbox/node-pre-gyp": "^1.0.8",
|
||||
"@wekanteam/markdown-it-mermaid": "^0.5.4",
|
||||
"@wekanteam/markdown-it-mermaid": "^0.5.5",
|
||||
"ajv": "^6.12.6",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"bcryptjs": "^2.4.3",
|
||||
@@ -59,8 +58,5 @@
|
||||
"source-map-support": "^0.5.20",
|
||||
"summernote": "^0.8.20",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"meteor": {
|
||||
"testModule": "tests/main.js"
|
||||
}
|
||||
}
|
||||
@@ -7,11 +7,11 @@ if (Meteor.isClient) {
|
||||
callback = options;
|
||||
options = null;
|
||||
}
|
||||
|
||||
var credentialRequestCompleteCallback = Accounts.oauth.credentialRequestCompleteHandler(callback);
|
||||
Oidc.requestCredential(options, credentialRequestCompleteCallback);
|
||||
};
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
Accounts.addAutopublishFields({
|
||||
// not sure whether the OIDC api can be used from the browser,
|
||||
// thus not sure if we should be sending access tokens; but we do it
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
# This file contains information which helps Meteor properly upgrade your
|
||||
# app when you run 'meteor update'. You should check it into version control
|
||||
# with your project.
|
||||
|
||||
notices-for-0.9.0
|
||||
notices-for-0.9.1
|
||||
0.9.4-platform-file
|
||||
notices-for-facebook-graph-api-2
|
||||
1.2.0-standard-minifiers-package
|
||||
1.2.0-meteor-platform-split
|
||||
1.2.0-cordova-changes
|
||||
1.2.0-breaking-changes
|
||||
1.3.0-split-minifiers-package
|
||||
1.4.0-remove-old-dev-bundle-link
|
||||
1.4.1-add-shell-server-package
|
||||
1.4.3-split-account-service-packages
|
||||
1.5-add-dynamic-import-package
|
||||
@@ -1 +0,0 @@
|
||||
local
|
||||
@@ -1,7 +0,0 @@
|
||||
# This file contains a token that is unique to your project.
|
||||
# Check it into your repository along with the rest of this directory.
|
||||
# It can be used for purposes such as:
|
||||
# - ensuring you don't accidentally deploy one app on top of another
|
||||
# - providing package authors with aggregated statistics
|
||||
|
||||
1w4v0yxh077n01wrnl8j
|
||||
@@ -1,31 +0,0 @@
|
||||
# Meteor packages used by this project, one per line.
|
||||
# Check this file (and the other files in this directory) into your repository.
|
||||
#
|
||||
# 'meteor add' and 'meteor remove' will edit this file for you,
|
||||
# but you can also edit it by hand.
|
||||
|
||||
# List accounts-sandstorm first so that any missing dependencies it has
|
||||
# are discovered.
|
||||
kenton:accounts-sandstorm
|
||||
|
||||
# Optional dependency. Should still work commented-out.
|
||||
accounts-base@1.3.1
|
||||
|
||||
meteor-base@1.1.0 # Packages every Meteor app needs to have
|
||||
mobile-experience@1.0.4 # Packages for a great mobile UX
|
||||
mongo@1.1.19 # The database Meteor supports right now
|
||||
blaze-html-templates # Compile .html files into Meteor Blaze views
|
||||
session@1.1.7 # Client-side reactive dictionary for your app
|
||||
jquery@1.11.10 # Helpful client-side library
|
||||
tracker@1.1.3 # Meteor's client-side reactive programming library
|
||||
|
||||
es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers.
|
||||
ecmascript@0.8.1 # Enable ECMAScript2015+ syntax in app code
|
||||
|
||||
autopublish@1.0.7 # Publish all data to the clients (for prototyping)
|
||||
insecure@1.0.7 # Allow all DB writes from clients (for prototyping)
|
||||
|
||||
standard-minifier-css
|
||||
standard-minifier-js
|
||||
shell-server
|
||||
dynamic-import
|
||||
@@ -1,2 +0,0 @@
|
||||
server
|
||||
browser
|
||||
@@ -1 +0,0 @@
|
||||
METEOR@1.5.1
|
||||
@@ -1,83 +0,0 @@
|
||||
accounts-base@1.3.1
|
||||
allow-deny@1.0.6
|
||||
autopublish@1.0.7
|
||||
autoupdate@1.3.12
|
||||
babel-compiler@6.19.4
|
||||
babel-runtime@1.0.1
|
||||
base64@1.0.10
|
||||
binary-heap@1.0.10
|
||||
blaze@2.3.2
|
||||
blaze-html-templates@1.1.2
|
||||
blaze-tools@1.0.10
|
||||
boilerplate-generator@1.1.1
|
||||
caching-compiler@1.1.9
|
||||
caching-html-compiler@1.1.2
|
||||
callback-hook@1.0.10
|
||||
check@1.2.5
|
||||
ddp@1.3.0
|
||||
ddp-client@2.0.0
|
||||
ddp-common@1.2.9
|
||||
ddp-rate-limiter@1.0.7
|
||||
ddp-server@2.0.0
|
||||
deps@1.0.12
|
||||
diff-sequence@1.0.7
|
||||
dynamic-import@0.1.1
|
||||
ecmascript@0.8.2
|
||||
ecmascript-runtime@0.4.1
|
||||
ecmascript-runtime-client@0.4.3
|
||||
ecmascript-runtime-server@0.4.1
|
||||
ejson@1.0.13
|
||||
es5-shim@4.6.15
|
||||
fastclick@1.0.13
|
||||
geojson-utils@1.0.10
|
||||
hot-code-push@1.0.4
|
||||
html-tools@1.0.11
|
||||
htmljs@1.0.11
|
||||
http@1.2.12
|
||||
id-map@1.0.9
|
||||
insecure@1.0.7
|
||||
jquery@1.11.10
|
||||
kenton:accounts-sandstorm@0.7.0
|
||||
launch-screen@1.1.1
|
||||
livedata@1.0.18
|
||||
localstorage@1.1.1
|
||||
logging@1.1.17
|
||||
meteor@1.7.1
|
||||
meteor-base@1.1.0
|
||||
minifier-css@1.2.16
|
||||
minifier-js@2.1.1
|
||||
minimongo@1.2.1
|
||||
mobile-experience@1.0.4
|
||||
mobile-status-bar@1.0.14
|
||||
modules@0.9.4
|
||||
modules-runtime@0.8.0
|
||||
mongo@1.1.22
|
||||
mongo-id@1.0.6
|
||||
npm-mongo@2.2.30
|
||||
observe-sequence@1.0.16
|
||||
ordered-dict@1.0.9
|
||||
promise@0.8.9
|
||||
random@1.0.10
|
||||
rate-limit@1.0.8
|
||||
reactive-dict@1.1.9
|
||||
reactive-var@1.0.11
|
||||
reload@1.1.11
|
||||
retry@1.0.9
|
||||
routepolicy@1.0.12
|
||||
service-configuration@1.0.11
|
||||
session@1.1.7
|
||||
shell-server@0.2.4
|
||||
spacebars@1.0.15
|
||||
spacebars-compiler@1.1.3
|
||||
standard-minifier-css@1.3.4
|
||||
standard-minifier-js@2.1.1
|
||||
templating@1.3.2
|
||||
templating-compiler@1.3.2
|
||||
templating-runtime@1.3.2
|
||||
templating-tools@1.1.2
|
||||
tracker@1.1.3
|
||||
ui@1.0.13
|
||||
underscore@1.0.10
|
||||
url@1.1.0
|
||||
webapp@1.3.17
|
||||
webapp-hashing@1.0.9
|
||||
@@ -1 +0,0 @@
|
||||
/* CSS declarations go here */
|
||||
@@ -1,19 +0,0 @@
|
||||
<head>
|
||||
<title>accounts-meteor-test</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Welcome to Meteor!</h1>
|
||||
|
||||
{{> hello}}
|
||||
</body>
|
||||
|
||||
<template name="hello">
|
||||
<p>Resubscribes: {{counter}}</p>
|
||||
|
||||
<h2>server</h2>
|
||||
<pre>{{serverInfo}}</pre>
|
||||
|
||||
<h2>client</h2>
|
||||
<pre>{{clientInfo}}</pre>
|
||||
</template>
|
||||
@@ -1,48 +0,0 @@
|
||||
if (Meteor.isClient) {
|
||||
var Info = new Mongo.Collection("info");
|
||||
var Counter = new Mongo.Collection("counter");
|
||||
|
||||
Template.hello.onCreated(function () {
|
||||
Meteor.subscribe("info");
|
||||
Meteor.subscribe("counter");
|
||||
});
|
||||
|
||||
Template.hello.helpers({
|
||||
counter: function () {
|
||||
if (!Template.instance().subscriptionsReady()) return "not ready";
|
||||
return Counter.findOne("counter").counter;
|
||||
},
|
||||
|
||||
serverInfo: function () {
|
||||
var obj = Info.findOne("info");
|
||||
console.log("server", Meteor.loggingIn && Meteor.loggingIn(), obj);
|
||||
return JSON.stringify(obj, null, 2);
|
||||
},
|
||||
|
||||
clientInfo: function () {
|
||||
var obj = Meteor.sandstormUser();
|
||||
console.log("client", Meteor.loggingIn && Meteor.loggingIn(), obj);
|
||||
return JSON.stringify(obj, null, 2);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (Meteor.isServer) {
|
||||
Meteor.startup(function () {
|
||||
// code to run on server at startup
|
||||
});
|
||||
|
||||
Meteor.publish("info", function () {
|
||||
var user = Meteor.users && this.userId && Meteor.users.findOne(this.userId);
|
||||
this.added("info", "info", {userId: this.userId, user: user, sandstormUser: this.connection.sandstormUser(),
|
||||
sessionId: this.connection.sandstormSessionId(),
|
||||
tabId: this.connection.sandstormTabId()});
|
||||
this.ready();
|
||||
});
|
||||
|
||||
var counter = 0;
|
||||
Meteor.publish("counter", function () {
|
||||
this.added("counter", "counter", {counter: counter++});
|
||||
this.ready();
|
||||
});
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
../..
|
||||
@@ -1,74 +0,0 @@
|
||||
@0xb412d6a17c04e5cc;
|
||||
|
||||
using Spk = import "/sandstorm/package.capnp";
|
||||
|
||||
const pkgdef :Spk.PackageDefinition = (
|
||||
id = "y49n7yrxk6p3ud1hkgeup1mah6f7a488nancvay7v6y1wxq78cn0",
|
||||
|
||||
manifest = (
|
||||
appTitle = (defaultText = "Meteor Accounts Test App"),
|
||||
appVersion = 0,
|
||||
appMarketingVersion = (defaultText = "0.0.0"),
|
||||
actions = [
|
||||
( title = (defaultText = "New Test"),
|
||||
command = .myCommand
|
||||
)
|
||||
],
|
||||
|
||||
continueCommand = .myCommand,
|
||||
),
|
||||
|
||||
sourceMap = (
|
||||
searchPath = [
|
||||
( sourcePath = ".meteor-spk/deps" ),
|
||||
( sourcePath = ".meteor-spk/bundle" )
|
||||
]
|
||||
),
|
||||
|
||||
alwaysInclude = [ "." ],
|
||||
|
||||
bridgeConfig = (
|
||||
viewInfo = (
|
||||
permissions = [
|
||||
(
|
||||
name = "editor",
|
||||
title = (defaultText = "editor"),
|
||||
description = (defaultText = "grants ability to modify data"),
|
||||
),
|
||||
(
|
||||
name = "commenter",
|
||||
title = (defaultText = "commenter"),
|
||||
description = (defaultText = "grants ability to modify data"),
|
||||
),
|
||||
],
|
||||
roles = [
|
||||
(
|
||||
title = (defaultText = "editor"),
|
||||
permissions = [true, true],
|
||||
verbPhrase = (defaultText = "can edit"),
|
||||
description = (defaultText = "editors may view all site data and change settings."),
|
||||
),
|
||||
(
|
||||
title = (defaultText = "commenter"),
|
||||
permissions = [false, true],
|
||||
verbPhrase = (defaultText = "can comment"),
|
||||
description = (defaultText = "viewers may view what other users have written."),
|
||||
),
|
||||
(
|
||||
title = (defaultText = "viewer"),
|
||||
permissions = [false, false],
|
||||
verbPhrase = (defaultText = "can view"),
|
||||
description = (defaultText = "viewers may view what other users have written."),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
const myCommand :Spk.Manifest.Command = (
|
||||
argv = ["/sandstorm-http-bridge", "4000", "--", "node", "start.js"],
|
||||
environ = [
|
||||
(key = "PATH", value = "/usr/local/bin:/usr/bin:/bin"),
|
||||
(key = "SANDSTORM", value = "1"),
|
||||
]
|
||||
);
|
||||
@@ -47,6 +47,26 @@ See example below:
|
||||
|
||||
NOTE: orgs & teams won't be updated if they already exist.
|
||||
|
||||
5. Manages admin rights as well. If user is in Group which has isAdmin: set to true, user will get admin
|
||||
privileges in Wekan as well.
|
||||
5. Manages admin rights as well. If user is in Group which has isAdmin: set to true, user will get admin
|
||||
privileges in Wekan as well.
|
||||
If no adjustments (e.g. 1-3) are made on oidc provider's side, user will receive his/her admin rights from before.
|
||||
|
||||
## For further empowerment of oidc as sso solution
|
||||
|
||||
If you want to be redirected to your oidc provider on LOGIN without going the extra loop of signing in.
|
||||
On LOGOUT you will be redirected to the oidc provider as well.
|
||||
|
||||
Add to your .env file:
|
||||
|
||||
OIDC_REDIRECTION_ENABLED=true
|
||||
OAUTH2_SERVER_URL=http://localhost:9000
|
||||
DASHBOARD_URL=/if/session-end/wekan/
|
||||
|
||||
Example for authentik.
|
||||
The latter specifies the OIDC Dashboard you'll get redirected on logout
|
||||
|
||||
Flow:
|
||||
You need to have an oidc provider configured to get this feature
|
||||
Make sure to have
|
||||
Authorize Application (default-provider-authorization-implicit-consent)
|
||||
enabled
|
||||
@@ -12,56 +12,61 @@ Oidc.requestCredential = function (options, credentialRequestCompleteCallback) {
|
||||
options = {};
|
||||
}
|
||||
|
||||
var config = ServiceConfiguration.configurations.findOne({service: 'oidc'});
|
||||
if (!config) {
|
||||
credentialRequestCompleteCallback && credentialRequestCompleteCallback(
|
||||
new ServiceConfiguration.ConfigError('Service oidc not configured.'));
|
||||
return;
|
||||
}
|
||||
Meteor.call("getServiceConfiguration", "oidc",(_, result) => {
|
||||
if (result) {
|
||||
var config = result;
|
||||
var credentialToken = Random.secret();
|
||||
var loginStyle = OAuth._loginStyle('oidc', config, options);
|
||||
// options
|
||||
options = options || {};
|
||||
options.client_id = config.clientId;
|
||||
options.response_type = options.response_type || 'code';
|
||||
options.redirect_uri = OAuth._redirectUri('oidc', config);
|
||||
options.state = OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl);
|
||||
options.scope = config.requestPermissions || 'openid profile email';
|
||||
|
||||
var credentialToken = Random.secret();
|
||||
var loginStyle = OAuth._loginStyle('oidc', config, options);
|
||||
if (config.loginStyle && config.loginStyle == 'popup') {
|
||||
options.display = 'popup';
|
||||
}
|
||||
|
||||
// options
|
||||
options = options || {};
|
||||
options.client_id = config.clientId;
|
||||
options.response_type = options.response_type || 'code';
|
||||
options.redirect_uri = OAuth._redirectUri('oidc', config);
|
||||
options.state = OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl);
|
||||
options.scope = config.requestPermissions || 'openid profile email';
|
||||
var loginUrl = config.serverUrl + config.authorizationEndpoint;
|
||||
// check if the loginUrl already contains a "?"
|
||||
var first = loginUrl.indexOf('?') === -1;
|
||||
for (var k in options) {
|
||||
if (first) {
|
||||
loginUrl += '?';
|
||||
first = false;
|
||||
}
|
||||
else {
|
||||
loginUrl += '&'
|
||||
}
|
||||
loginUrl += encodeURIComponent(k) + '=' + encodeURIComponent(options[k]);
|
||||
}
|
||||
|
||||
if (config.loginStyle && config.loginStyle == 'popup') {
|
||||
options.display = 'popup';
|
||||
}
|
||||
//console.log('XXX: loginURL: ' + loginUrl)
|
||||
|
||||
var loginUrl = config.serverUrl + config.authorizationEndpoint;
|
||||
// check if the loginUrl already contains a "?"
|
||||
var first = loginUrl.indexOf('?') === -1;
|
||||
for (var k in options) {
|
||||
if (first) {
|
||||
loginUrl += '?';
|
||||
first = false;
|
||||
options.popupOptions = options.popupOptions || {};
|
||||
var popupOptions = {
|
||||
width: options.popupOptions.width || 320,
|
||||
height: options.popupOptions.height || 450
|
||||
};
|
||||
|
||||
OAuth.launchLogin({
|
||||
loginService: 'oidc',
|
||||
loginStyle: loginStyle,
|
||||
loginUrl: loginUrl,
|
||||
credentialRequestCompleteCallback: credentialRequestCompleteCallback,
|
||||
credentialToken: credentialToken,
|
||||
popupOptions: popupOptions,
|
||||
});
|
||||
}
|
||||
else {
|
||||
loginUrl += '&'
|
||||
else
|
||||
{
|
||||
credentialRequestCompleteCallback && credentialRequestCompleteCallback(
|
||||
new ServiceConfiguration.ConfigError('Service oidc not configured.'));
|
||||
return;
|
||||
}
|
||||
loginUrl += encodeURIComponent(k) + '=' + encodeURIComponent(options[k]);
|
||||
}
|
||||
|
||||
//console.log('XXX: loginURL: ' + loginUrl)
|
||||
|
||||
options.popupOptions = options.popupOptions || {};
|
||||
var popupOptions = {
|
||||
width: options.popupOptions.width || 320,
|
||||
height: options.popupOptions.height || 450
|
||||
};
|
||||
|
||||
OAuth.launchLogin({
|
||||
loginService: 'oidc',
|
||||
loginStyle: loginStyle,
|
||||
loginUrl: loginUrl,
|
||||
credentialRequestCompleteCallback: credentialRequestCompleteCallback,
|
||||
credentialToken: credentialToken,
|
||||
popupOptions: popupOptions,
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
@@ -19,7 +19,6 @@ var serviceData = {};
|
||||
var userinfo = {};
|
||||
|
||||
OAuth.registerService('oidc', 2, null, function (query) {
|
||||
|
||||
var debug = process.env.DEBUG || false;
|
||||
|
||||
var token = getToken(query);
|
||||
|
||||
+21
-3
@@ -7,7 +7,7 @@
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Wekan REST API v6.26</title>
|
||||
<title>Wekan REST API v6.30</title>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
@@ -1558,7 +1558,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<ul class="toc-list-h1">
|
||||
|
||||
<li>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v6.26">Wekan REST API v6.26</a>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v6.30">Wekan REST API v6.30</a>
|
||||
|
||||
</li>
|
||||
|
||||
@@ -2156,7 +2156,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="wekan-rest-api">Wekan REST API v6.26</h1>
|
||||
<h1 id="wekan-rest-api">Wekan REST API v6.30</h1>
|
||||
<blockquote>
|
||||
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
|
||||
</blockquote>
|
||||
@@ -15280,6 +15280,8 @@ System.out.println(response.toString());
|
||||
<span class="hljs-attr">"swimlaneId"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>,
|
||||
<span class="hljs-attr">"width"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"height"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"wipLimit"</span>: {
|
||||
@@ -20996,6 +20998,8 @@ UserSecurity
|
||||
<span class="hljs-attr">"swimlaneId"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>,
|
||||
<span class="hljs-attr">"width"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"height"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"updatedAt"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>,
|
||||
<span class="hljs-attr">"wipLimit"</span>: {
|
||||
@@ -21078,6 +21082,20 @@ UserSecurity
|
||||
<td>is the list sorted</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>width</td>
|
||||
<td>string¦null</td>
|
||||
<td>false</td>
|
||||
<td>none</td>
|
||||
<td>list width, default 270px</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>height</td>
|
||||
<td>string¦null</td>
|
||||
<td>false</td>
|
||||
<td>none</td>
|
||||
<td>list height</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>updatedAt</td>
|
||||
<td>string¦null</td>
|
||||
<td>false</td>
|
||||
|
||||
+11
-1
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v6.26
|
||||
version: v6.30
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
@@ -3745,6 +3745,16 @@ definitions:
|
||||
is the list sorted
|
||||
type: number
|
||||
x-nullable: true
|
||||
width:
|
||||
description: |
|
||||
list width, default 270px
|
||||
type: string
|
||||
x-nullable: true
|
||||
height:
|
||||
description: |
|
||||
list height
|
||||
type: string
|
||||
x-nullable: true
|
||||
updatedAt:
|
||||
description: |
|
||||
last update of the list
|
||||
|
||||
+2
-2
@@ -15,8 +15,8 @@ REM Install chocolatey
|
||||
|
||||
choco install -y git curl python2 dotnet4.5.2 nano mongodb-4 mongoclient
|
||||
|
||||
curl -O https://nodejs.org/dist/v14.19.3/node-v14.19.3-x64.msi
|
||||
call node-v14.19.3-x64.msi
|
||||
curl -O https://nodejs.org/dist/v14.20.0/node-v14.20.0-x64.msi
|
||||
call node-v14.20.0-x64.msi
|
||||
|
||||
call npm config -g set msvs_version 2015
|
||||
call meteor npm config -g set msvs_version 2015
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ do
|
||||
#curl -0 -L https://npmjs.org/install.sh | sudo sh
|
||||
#sudo chown -R $(id -u):$(id -g) $HOME/.npm
|
||||
sudo npm -g install n
|
||||
sudo n 14.19.3
|
||||
sudo n 14.20.0
|
||||
#sudo npm -g install npm
|
||||
## Latest npm with Meteor 2.2
|
||||
sudo npm -g install node-gyp
|
||||
|
||||
@@ -6,6 +6,21 @@ tx pull -f -l ar
|
||||
echo "Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo):"
|
||||
tx pull -f -l ar_EG
|
||||
|
||||
echo "Arabic (Moroccan):"
|
||||
tx pull -f -l ary
|
||||
|
||||
echo "Arabic (Algeria):"
|
||||
tx pull -f -l ar_DZ
|
||||
|
||||
echo "Azerbaijani:"
|
||||
tx pull -f -l az
|
||||
|
||||
echo "Azerbaijani (Azerbaijan):"
|
||||
tx pull -f -l az_AZ
|
||||
|
||||
echo "Azerbaijani (Latin):"
|
||||
tx pull -f -l az@latin
|
||||
|
||||
echo "Armenian:"
|
||||
tx pull -f -l hy
|
||||
|
||||
@@ -208,6 +223,9 @@ tx pull -f -l es
|
||||
echo "Spanish (Argentina):"
|
||||
tx pull -f -l es_AR
|
||||
|
||||
echo "Spanish (Asturia):"
|
||||
tx pull -f -l ast_ES
|
||||
|
||||
echo "Spanish (Chile):"
|
||||
tx pull -f -l es_CL
|
||||
|
||||
@@ -232,6 +250,9 @@ tx pull -f -l sk
|
||||
echo "Slovenian:"
|
||||
tx pull -f -l sl_SI
|
||||
|
||||
echo "Standard Moroccan Tamazight"
|
||||
tx pull -f -l zgh
|
||||
|
||||
echo "Swahili:"
|
||||
tx pull -f -l sw
|
||||
|
||||
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 626,
|
||||
appVersion = 630,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "6.26.0~2022-05-21"),
|
||||
appMarketingVersion = (defaultText = "6.30.0~2022-07-11"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
var fs = require('fs');
|
||||
var os = require('os');
|
||||
|
||||
let errors = [];
|
||||
if (!process.env.WRITABLE_PATH) {
|
||||
@@ -9,6 +10,7 @@ if (!process.env.WRITABLE_PATH) {
|
||||
} catch (err) {
|
||||
errors.push("can't write to " + process.env.WRITABLE_PATH, err);
|
||||
errors.push("the path of WRITABLE_PATH (" + process.env.WRITABLE_PATH + ") must be writable !!!");
|
||||
errors.push("username: " + userInfo["username"] + " - uid: " + userInfo["uid"] + " - gid: " + userInfo["gid"]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ Meteor.startup(() => {
|
||||
// OAUTH2_ID_TOKEN_WHITELIST_FIELDS || [],
|
||||
// OAUTH2_REQUEST_PERMISSIONS || 'openid profile email',
|
||||
},
|
||||
);
|
||||
);
|
||||
} else if (
|
||||
process.env.CAS_ENABLED === 'true' ||
|
||||
process.env.CAS_ENABLED === true
|
||||
|
||||
+5
-1
@@ -3,7 +3,7 @@
|
||||
# All supported keys are defined here together with descriptions and default values
|
||||
|
||||
# list of supported keys
|
||||
keys="DEBUG MONGO_LOG_DESTINATION MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM MAIL_SERVICE MAIL_SERVICE_USER MAIL_SERVICE_PASSWORD ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CA_CERT OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS OAUTH2_ADFS_ENABLED LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_AD_SIMPLE_AUTH LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD PASSWORD_LOGIN_ENABLED CAS_ENABLED CAS_BASE_URL CAS_LOGIN_URL CAS_VALIDATE_URL SAML_ENABLED SAML_PROVIDER SAML_ENTRYPOINT SAML_ISSUER SAML_CERT SAML_IDPSLO_REDIRECTURL SAML_PRIVATE_KEYFILE SAML_PUBLIC_CERTFILE SAML_IDENTIFIER_FORMAT SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE SAML_ATTRIBUTES ORACLE_OIM_ENABLED RESULTS_PER_PAGE WAIT_SPINNER NODE_OPTIONS"
|
||||
keys="DEBUG MONGO_LOG_DESTINATION MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM MAIL_SERVICE MAIL_SERVICE_USER MAIL_SERVICE_PASSWORD ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OIDC_REDIRECTION_ENABLED OAUTH2_CA_CERT OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS OAUTH2_ADFS_ENABLED LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_AD_SIMPLE_AUTH LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD PASSWORD_LOGIN_ENABLED CAS_ENABLED CAS_BASE_URL CAS_LOGIN_URL CAS_VALIDATE_URL SAML_ENABLED SAML_PROVIDER SAML_ENTRYPOINT SAML_ISSUER SAML_CERT SAML_IDPSLO_REDIRECTURL SAML_PRIVATE_KEYFILE SAML_PUBLIC_CERTFILE SAML_IDENTIFIER_FORMAT SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE SAML_ATTRIBUTES ORACLE_OIM_ENABLED RESULTS_PER_PAGE WAIT_SPINNER NODE_OPTIONS"
|
||||
|
||||
#DESCRIPTION_WRITABLE_PATH="Writable path. Default: $SNAP_COMMON/files"
|
||||
#DEFAULT_WRITABLE_PATH="$SNAP_COMMON/files"
|
||||
@@ -209,6 +209,10 @@ DESCRIPTION_OAUTH2_ENABLED="Enable the OAuth2 connection. Default: false"
|
||||
DEFAULT_OAUTH2_ENABLED="false"
|
||||
KEY_OAUTH2_ENABLED="oauth2-enabled"
|
||||
|
||||
DESCRIPTION_OIDC_REDIRECTION_ENABLED="Enable the OIDC/OAuth2 autologin. See https://github.com/wekan/wekan/wiki/autologin . Default: false"
|
||||
DEFAULT_OIDC_REDIRECTION_ENABLED="false"
|
||||
KEY_OIDC_REDIRECTION_ENABLED="oidc-redirection-enabled"
|
||||
|
||||
DESCRIPTION_OAUTH2_CA_CERT="Optional OAuth2 CA Cert, see https://github.com/wekan/wekan/issues/3299."
|
||||
DEFAULT_OAUTH2_CA_CERT=""
|
||||
KEY_OAUTH2_CA_CERT="oauth2-ca-cert"
|
||||
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
# List backups
|
||||
ls -al $SNAP_COMMON/db-backups/
|
||||
@@ -17,6 +17,46 @@ fi
|
||||
export LC_ALL=C
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/${SNAP_NAME}/current/lib/x86_64-linux-gnu
|
||||
|
||||
if test -f "$SNAP_COMMON/01-migrate-mongo3-to-mongo5.txt"; then
|
||||
touch "$SNAP_COMMON/01-migrate-mongo3-to-mongo5.txt"
|
||||
# Stop MongoDB
|
||||
touch "$SNAP_COMMON/02-disable-mongo.txt"
|
||||
snapctl stop --disable ${SNAP_NAME}.mongodb
|
||||
touch "$SNAP_COMMON/03-eval-stop-mongo.txt"
|
||||
mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS
|
||||
# Start MongoDB 4.4
|
||||
touch "$SNAP_COMMON/04-start-mongo44.txt"
|
||||
$SNAP/mongo44bin/mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/02_mongodb_log_while_migrate.txt --logappend --journal $MONGO_URL --quiet
|
||||
# Wait MongoDB 4.4 to start
|
||||
touch "$SNAP_COMMON/05-wait-2s-mongo44-start.txt"
|
||||
sleep 2s
|
||||
# Dump Old MongoDB 3.x database
|
||||
touch "$SNAP_COMMON/06-dump-database.txt"
|
||||
(cd $SNAP_COMMON && mongodump --port ${MONGODB_PORT})
|
||||
# Stop MongoDB 4.4
|
||||
touch "$SNAP_COMMON/07-stop-mongo44.txt"
|
||||
$SNAP/mongo44bin/mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS
|
||||
# Wait MongoDB 4.4 to stop
|
||||
touch "$SNAP_COMMON/08-wait-2s-mongo44-stop.txt"
|
||||
sleep 2s
|
||||
# Start MongoDB 5
|
||||
touch "$SNAP_COMMON/09-start-mongo5.txt"
|
||||
mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/10_mongodb_log_while_migrate.txt --logappend --journal $MONGO_URL --quiet
|
||||
# Restore database
|
||||
touch "$SNAP_COMMON/11-mongorestore-to-mongo5.txt"
|
||||
(cd $SNAP_COMMON && mongorestore --port ${MONGODB_PORT})
|
||||
# Wait 5s
|
||||
touch "$SNAP_COMMON/12-wait-5s-after-restore.txt"
|
||||
sleep 5s
|
||||
# Shutdown mongodb
|
||||
touch "$SNAP_COMMON/13-shutdown-mongodb.txt"
|
||||
mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS
|
||||
touch "$SNAP_COMMON/14-wait-5s-after-mongo5-shutdown.txt"
|
||||
sleep 5s
|
||||
# Enable MongoDB 5
|
||||
touch "$SNAP_COMMON/15-enable-mongo-5.txt"
|
||||
snapctl start --enable ${SNAP_NAME}.mongodb
|
||||
fi
|
||||
# When starting MongoDB, if logfile exist, delete it, because now uses syslog instead of logfile,
|
||||
# because syslog usually already has log rotation.
|
||||
# https://github.com/wekan/wekan-snap/issues/92
|
||||
|
||||
@@ -214,6 +214,12 @@ echo -e "\t$ snap set $SNAP_NAME oauth2-enabled='true'"
|
||||
echo -e "\t-Disable the OAuth2 of Wekan:"
|
||||
echo -e "\t$ snap unset $SNAP_NAME oauth2-enabled"
|
||||
echo -e "\n"
|
||||
echo -e "OIDC/OAuth2 redirection to autologin, see https://github.com/wekan/wekan/wiki/autologin"
|
||||
echo -e "To enable the autologin of Wekan:"
|
||||
echo -e "\t$ snap set $SNAP_NAME oidc-redirection-enabled='true'"
|
||||
echo -e "\t-Disable the autologin of Wekan:"
|
||||
echo -e "\t$ snap unset $SNAP_NAME oidc-redirection-enabled"
|
||||
echo -e "\n"
|
||||
echo -e "Optional OAuth2 CA Cert, see https://github.com/wekan/wekan/issues/3299"
|
||||
echo -e "To enable the OAuth2 of Wekan:"
|
||||
echo -e "\t$ snap set $SNAP_NAME oauth2-ca-cert='ABCD134'"
|
||||
|
||||
+90
-43
@@ -1,5 +1,6 @@
|
||||
name: wekan
|
||||
version: '6.26'
|
||||
version: '6.30'
|
||||
base: core20
|
||||
summary: Open Source kanban
|
||||
description: |
|
||||
WeKan ® is an Open Source and collaborative kanban board application.
|
||||
@@ -34,66 +35,89 @@ slots:
|
||||
|
||||
apps:
|
||||
wekan:
|
||||
command: wekan-control
|
||||
command: ./bin/wekan-control
|
||||
daemon: simple
|
||||
plugs: [network, network-bind]
|
||||
|
||||
mongodb:
|
||||
command: mongodb-control
|
||||
command: ./bin/mongodb-control
|
||||
daemon: simple
|
||||
plugs: [network, network-bind]
|
||||
|
||||
caddy:
|
||||
command: caddy-control
|
||||
command: ./bin/caddy-control
|
||||
daemon: simple
|
||||
plugs: [network, network-bind]
|
||||
|
||||
help:
|
||||
command: wekan-help
|
||||
command: ./bin/wekan-help
|
||||
|
||||
database-backup:
|
||||
command: mongodb-backup
|
||||
command: ./bin/mongodb-backup
|
||||
plugs: [network, network-bind]
|
||||
|
||||
database-list-backups:
|
||||
command: ls -al $SNAP_COMMON/db-backups/
|
||||
command: ./bin/database-list-backups
|
||||
|
||||
database-restore:
|
||||
command: mongodb-restore
|
||||
command: ./bin/mongodb-restore
|
||||
plugs: [network, network-bind]
|
||||
|
||||
parts:
|
||||
mongodb:
|
||||
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.22.tgz
|
||||
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-5.0.9.tgz
|
||||
plugin: dump
|
||||
stage-packages: [libssl1.0.0]
|
||||
stage-packages:
|
||||
- libssl1.1
|
||||
- libcurl4
|
||||
- libstemmer0d
|
||||
- zlib1g
|
||||
- libsnappy1v5
|
||||
- libyaml-cpp0.6
|
||||
- libpcre3
|
||||
- libpcrecpp0v5
|
||||
- libboost-system1.71.0
|
||||
- libboost-iostreams1.71.0
|
||||
- libboost-filesystem1.71.0
|
||||
- libboost-program-options1.71.0
|
||||
- libgoogle-perftools4
|
||||
filesets:
|
||||
mongo:
|
||||
- usr
|
||||
- bin
|
||||
- lib
|
||||
- usr
|
||||
stage:
|
||||
- $mongo
|
||||
prime:
|
||||
- $mongo
|
||||
|
||||
mongodb44:
|
||||
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-4.4.14.tgz
|
||||
plugin: dump
|
||||
organize:
|
||||
bin: mongo44bin
|
||||
usr: mongo44usr
|
||||
stage:
|
||||
- -init
|
||||
|
||||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 14.19.3
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
- fibers
|
||||
plugin: npm
|
||||
npm-node-version: 14.20.0
|
||||
#npm-packages:
|
||||
# - node-gyp
|
||||
# - node-pre-gyp
|
||||
# - fibers
|
||||
build-packages:
|
||||
- build-essential
|
||||
- ca-certificates
|
||||
- apt-utils
|
||||
- python
|
||||
# - python3
|
||||
# - python2
|
||||
- python3
|
||||
- g++
|
||||
- capnproto
|
||||
- curl
|
||||
- wget
|
||||
- unzip
|
||||
- execstack
|
||||
- nodejs
|
||||
- npm
|
||||
@@ -102,33 +126,50 @@ parts:
|
||||
- libfontconfig1
|
||||
override-build: |
|
||||
echo "Cleaning environment first"
|
||||
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
|
||||
#rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
|
||||
rm -rf .build
|
||||
echo "Installing meteor"
|
||||
curl https://install.meteor.com/ -o install_meteor.sh
|
||||
chmod +x install_meteor.sh
|
||||
sh install_meteor.sh
|
||||
rm install_meteor.sh
|
||||
rm -rf .build
|
||||
chmod u+w *.json
|
||||
npm install
|
||||
meteor build .build --directory --allow-superuser
|
||||
#echo "Using http npm packages so speedup install process https://stackoverflow.com/questions/39760113/callback-called-more-than-once-while-running-npm-install"
|
||||
#echo "registry=http://registry.npmjs.org/" > ~/.npmrc
|
||||
#echo "Installing npm, node-gyp, node-pre-gyp, fibers"
|
||||
#npm -g install n --unsafe-perm
|
||||
#n 14.20.0
|
||||
#npm -g install node-gyp --unsafe-perm
|
||||
#npm -g install node-pre-gyp --unsafe-perm
|
||||
#npm -g install fibers --unsafe-perm
|
||||
##echo "Installing meteor"
|
||||
##curl https://install.meteor.com/ -o install_meteor.sh
|
||||
##chmod +x install_meteor.sh
|
||||
##sh install_meteor.sh
|
||||
##rm install_meteor.sh
|
||||
#npm -g install meteor --unsafe-perm --allow-superuser
|
||||
#rm -rf .build
|
||||
##chmod u+w *.json
|
||||
#npm install --unsafe-perm
|
||||
##npm install
|
||||
##meteor build .build --directory --allow-superuser
|
||||
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
|
||||
rm -rf .build/bundle/programs/web.browser.legacy
|
||||
##rm -rf .build/bundle/programs/web.browser.legacy
|
||||
# Change to directory .build/bundle/programs/server
|
||||
cd .build/bundle/programs/server
|
||||
chmod u+w *.json
|
||||
npm install
|
||||
cd node_modules/fibers
|
||||
node build.js
|
||||
cd ../../../../../..
|
||||
##cd .build/bundle/programs/server
|
||||
##chmod u+w *.json
|
||||
#npm install --unsafe-perm
|
||||
##npm install
|
||||
##cd node_modules/fibers
|
||||
##node build.js
|
||||
##cd ../../../../../..
|
||||
# Cleanup
|
||||
cd .build/bundle
|
||||
find . -type d -name '*-garbage*' | xargs rm -rf
|
||||
find . -name '*phantom*' | xargs rm -rf
|
||||
find . -name '.*.swp' | xargs rm -f
|
||||
find . -name '*.swp' | xargs rm -f
|
||||
cd ../..
|
||||
mkdir .build
|
||||
cd .build
|
||||
wget https://github.com/wekan/wekan/releases/download/v6.30/wekan-6.30-amd64.zip
|
||||
unzip wekan-6.30-amd64.zip
|
||||
rm wekan-6.30-amd64.zip
|
||||
cd ..
|
||||
##cd .build/bundle
|
||||
##find . -type d -name '*-garbage*' | xargs rm -rf
|
||||
##find . -name '*phantom*' | xargs rm -rf
|
||||
##find . -name '.*.swp' | xargs rm -f
|
||||
##find . -name '*.swp' | xargs rm -f
|
||||
##cd ../..
|
||||
# Add fibers multi arch
|
||||
#cd .build/bundle/programs/server/node_modules/fibers/bin
|
||||
#curl https://releases.wekan.team/fibers-multi.7z -o fibers-multi.7z
|
||||
@@ -136,6 +177,12 @@ parts:
|
||||
#rm fibers-multi.7z
|
||||
#cd ../../../../../../..
|
||||
# Copy to Snap
|
||||
wget https://nodejs.org/dist/latest-v14.x/node-v14.20.0-linux-x64.tar.xz
|
||||
tar -xf node-v14.20.0-linux-x64.tar.xz node-v14.20.0-linux-x64/bin/node
|
||||
rm node-v14.20.0-linux-x64.tar.xz
|
||||
mkdir $SNAPCRAFT_PART_INSTALL/bin
|
||||
cp -p node-v14.20.0-linux-x64/bin/node $SNAPCRAFT_PART_INSTALL/bin/
|
||||
rm -rf node-v14.20.0-linux-x64
|
||||
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
|
||||
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
|
||||
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
set -euxo pipefail
|
||||
|
||||
BUILD_DEPS="bsdtar gnupg wget curl bzip2 python git ca-certificates perl-Digest-SHA"
|
||||
NODE_VERSION=v14.19.3
|
||||
NODE_VERSION=v14.20.0
|
||||
#METEOR_RELEASE=1.6.0.1 - for Stacksmith, meteor-1.8 branch that could have METEOR@1.8.1-beta.8 or newer
|
||||
USE_EDGE=false
|
||||
METEOR_EDGE=1.5-beta.17
|
||||
|
||||
@@ -128,6 +128,12 @@ REM SET WEBHOOKS_ATTRIBUTES=
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
REM ## ==== AUTOLOGIN WITH OIDC/OAUTH2 ====
|
||||
REM ## https://github.com/wekan/wekan/wiki/autologin
|
||||
REM # SET OIDC_REDIRECTION_ENABLED=true
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
REM # OAUTH2 ORACLE on premise identity manager OIM
|
||||
REM SET ORACLE_OIM_ENABLED=true
|
||||
|
||||
|
||||
@@ -137,6 +137,10 @@
|
||||
# Example: export WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
|
||||
export WEBHOOKS_ATTRIBUTES=''
|
||||
#---------------------------------------------
|
||||
# ==== AUTOLOGIN WITH OIDC/OAUTH2 ====
|
||||
# https://github.com/wekan/wekan/wiki/autologin
|
||||
#export OIDC_REDIRECTION_ENABLED=true
|
||||
#---------------------------------------------
|
||||
# OAUTH2 ORACLE on premise identity manager OIM
|
||||
#export ORACLE_OIM_ENABLED=true
|
||||
#---------------------------------------------
|
||||
|
||||
@@ -351,6 +351,10 @@ services:
|
||||
# example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
|
||||
#- WEBHOOKS_ATTRIBUTES=
|
||||
#-----------------------------------------------------------------
|
||||
# ==== AUTOLOGIN WITH OIDC/OAUTH2 ====
|
||||
# https://github.com/wekan/wekan/wiki/autologin
|
||||
#- OIDC_REDIRECTION_ENABLED=true
|
||||
#---------------------------------------------
|
||||
# ==== OAUTH2 ORACLE on premise identity manager OIM ====
|
||||
#- ORACLE_OIM_ENABLED=true
|
||||
#-----------------------------------------------------------------
|
||||
|
||||
Reference in new issue
Block a user