Compare commits

...
527 Commits
Author SHA1 Message Date
Lauri Ojansivu 8ba565042f v7.49 2024-06-11 01:40:43 +03:00
Lauri Ojansivu 6df03294bd Updated ChangeLog. 2024-06-11 01:34:19 +03:00
Lauri Ojansivu 4a40ac3ced Merge pull request #5441 from wekan/dependabot/github_actions/docker/build-push-action-5.4.0
Bump docker/build-push-action from 5.3.0 to 5.4.0
2024-06-11 01:31:44 +03:00
dependabot[bot] 2f34d65164 Bump docker/build-push-action from 5.3.0 to 5.4.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/2cdde995de11925a030ce8070c3d77a52ffcf1c0...ca052bb54ab0790a636c9b5f226502c73d547a25)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-10 20:33:21 +00:00
Lauri Ojansivu 7c68d6a710 Updated ChangeLog. 2024-06-10 16:27:51 +03:00
Lauri Ojansivu 55fb7a8f27 Merge pull request #5440 from Hekatomb/bugfix/TeamsOrgAdminCard
Fill out Org and Team in adminReports
2024-06-10 16:19:48 +03:00
Lauri Ojansivu bb9fb1187e Updated ChangeLog. 2024-06-10 14:54:13 +03:00
Lauri Ojansivu f0170c576c Updated ChangeLog. 2024-06-10 14:52:35 +03:00
Lauri Ojansivu 02caaafc52 Merge branch 'main' of github.com:wekan/wekan 2024-06-10 14:49:51 +03:00
Lauri Ojansivu 168b17ac4e Updated ChangeLog. 2024-06-10 14:47:13 +03:00
Lauri Ojansivu e3214c874e Changed back to original icon of Edit Description.
Thanks to saschafoerster, C0rn3j and xet7 !

Fixes #5413,
related https://github.com/wekan/wekan/commit/1f2fb2ccce38e9cac348f1c459784d6e5a949ded
2024-06-10 14:40:49 +03:00
hekatomb 91444cce9b Fill out Org and Team in adminReports 2024-06-07 19:58:12 +02:00
Lauri Ojansivu c952aaadec Merge pull request #5435 from Hekatomb/bugfix/TeamsOrgStrikethrough 2024-06-07 01:11:37 +03:00
hekatomb 77ab5c1690 Bugfix: Strikethrough inactive Teams and orginizations rather than strikethrough active teams and orgs 2024-06-06 23:25:16 +02:00
Lauri Ojansivu 37857935f3 Updated ChangeLog. 2024-06-06 04:58:47 +03:00
Lauri Ojansivu e5c7650fc8 WeKan new release version number from wiki to WeKan repo docs.
Thanks to xet7 !
2024-06-06 04:55:45 +03:00
Lauri Ojansivu f42e0fe507 v7.48 2024-06-06 02:12:09 +03:00
Lauri Ojansivu 58dbd78997 Updated ChangeLog. 2024-06-06 02:07:32 +03:00
Lauri Ojansivu 04b995e77f Allow Normal user to add new swimlane, list and label.
Thanks to RyanHecht, norrig and xet7 !

Fixes #4276,
fixes #4785
2024-06-06 02:03:29 +03:00
Lauri Ojansivu 82aa3fb7ee Updated ChangeLog. 2024-06-06 01:44:56 +03:00
Lauri Ojansivu ec0e88ad2e Try to show more of title of collapsed list.
Thanks to C0rn3j and xet7 !

Related #5428
2024-06-06 01:39:57 +03:00
Lauri Ojansivu cac28fde4d Updated ChangeLog. 2024-06-04 23:45:46 +03:00
Lauri Ojansivu e65a8c9017 Add changes from wiki to docs. Part 2.
Thanks to xet7 !
2024-06-04 23:44:35 +03:00
Lauri Ojansivu 4a26f80fb1 Updated ChangeLog. 2024-06-04 23:30:57 +03:00
Lauri Ojansivu bca8a72a0f Merge branch 'main' of github.com:wekan/wekan 2024-06-04 23:28:59 +03:00
Lauri Ojansivu 13be8160d5 Add changes from wiki to docs.
Thanks to xet7 !
2024-06-04 23:27:55 +03:00
Lauri Ojansivu 8efea6c4e2 Updated ChangeLog. 2024-06-04 16:05:52 +03:00
Lauri Ojansivu 36bb5e099e Fix Admin Panel pages Organizations and Teams, where HTML Tables were broken.
Thanks to Hekatomb and xet7 !

Fixes #5429
2024-06-04 16:02:03 +03:00
Lauri Ojansivu b86a24d97a Merge pull request #5430 from wekan/dependabot/github_actions/docker/login-action-3.2.0
Bump docker/login-action from 3.1.0 to 3.2.0
2024-06-04 15:17:18 +03:00
dependabot[bot] 3febe80329 Bump docker/login-action from 3.1.0 to 3.2.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/e92390c5fb421da1463c202d546fed0ec5c39f20...0d4c9c5ea7693da7b068278f7b52bda2a190a446)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 20:32:31 +00:00
Lauri Ojansivu b11a2103a4 Updated ChangeLog. 2024-06-03 05:16:50 +03:00
Lauri Ojansivu 4a9d881e47 Updated release scripts.
Thanks to xet7 !
2024-06-03 05:14:58 +03:00
Lauri Ojansivu 8e5c6af612 v7.47 2024-06-03 05:07:30 +03:00
Lauri Ojansivu ca588a4b54 Updated translations. 2024-06-03 05:00:33 +03:00
Lauri Ojansivu 258032acb0 Updated ChangeLog. 2024-06-03 04:39:55 +03:00
Lauri Ojansivu 2c9c9c4356 Updated release scripts.
Thanks to xet7 !
2024-06-03 04:38:55 +03:00
Lauri Ojansivu 88d4e8a4d9 Updated ChangeLog. 2024-06-03 04:35:16 +03:00
Lauri Ojansivu 4e2a8735bc Updated to MongoDB 6.0.15 at Snap Candidate.
Thanks to MongoDB developers !
2024-06-03 04:33:40 +03:00
Lauri Ojansivu b72d24f6d0 Updated ChangeLog. 2024-06-03 04:30:24 +03:00
Lauri Ojansivu 1f2fb2ccce Fix Edit Description button is wildly out of place.
Thanks to C0rn3j and xet7 !

Fixes #5413
2024-06-03 04:23:09 +03:00
Lauri Ojansivu 5e2b423ef8 Only show Board name edit button to BoardAdmin.
Thanks to xet7 !
2024-06-03 04:03:31 +03:00
Lauri Ojansivu 79e2001708 Update Docker base images to Ubuntu 24.04.
Thanks to xet7 !
2024-06-03 03:06:58 +03:00
Lauri Ojansivu 2ea96518ad v7.46 2024-06-03 01:16:20 +03:00
Lauri Ojansivu 2666001226 Updated ChangeLog. 2024-05-30 23:22:48 +03:00
Lauri Ojansivu 1bd30bc121 For development, only recommend Debian 12 amd64, because Sandstorm works at Debian 12.
Sandstorm does not work at Ubuntu 24.04.

Thanks to xet7 !

Related https://github.com/sandstorm-io/sandstorm/issues/3712
2024-05-30 23:19:55 +03:00
Lauri Ojansivu d6d8144476 Updated dependencies. 2024-05-29 01:03:18 +03:00
Lauri Ojansivu 68e7818c1d Updated ChangeLog. 2024-05-29 00:58:05 +03:00
Lauri Ojansivu e0e5f4514b Merge pull request #5424 from Dexus/patch-1
Update exporter.js with fix for #5416
2024-05-28 18:04:57 +03:00
Josef Fröhle c2942fa269 Update exporter.js with fix for #5416
This should fix #5416
2024-05-28 16:42:44 +02:00
Lauri Ojansivu 6f31240c74 Updated ChangeLog. 2024-05-27 23:47:50 +03:00
Lauri Ojansivu 5124265142 Updated GitHub issue template for issue instructions to be more visible.
Related #5422
2024-05-27 14:00:49 +03:00
Lauri Ojansivu f0bd5eaca9 Updated ChangeLog. 2024-05-27 00:15:42 +03:00
Lauri Ojansivu 8589f85907 Merge pull request #5420 from mfilser/remove_second_created_at_on_activities
Remove second created at on activities
2024-05-26 23:17:34 +03:00
Martin Filser 66d739b3b1 Removed second "created at" text at activites / card comment
- the same text is already at line start, it makes no sense to print it
  again at line end
2024-05-26 22:05:51 +02:00
Lauri Ojansivu 2206e34ab6 Merge pull request #5419 from mfilser/dockerfile_production_and_dev_same_build
Dockerfile production and dev same build
2024-05-26 22:06:09 +03:00
Martin Filser cc1ca4a1bb Dockerfile for production and development same build (part 2) 2024-05-26 19:55:19 +02:00
Martin Filser c8b1ef8ea6 Dockerfile for production and development same build (part 1) 2024-05-26 19:49:31 +02:00
Lauri Ojansivu f836faad48 Merge pull request #5418 from mfilser/devcontainer_reduce_image_size_and_other_dev_updates
Devcontainer, reduce image size and other necessary changes for development
2024-05-26 00:26:45 +03:00
Lauri Ojansivu 7e27b916aa Updated ChangeLog. 2024-05-25 23:59:41 +03:00
Lauri Ojansivu ae9963c1f7 Merge pull request #5412 from e-gaulue/e-gaulue-patch-1
Remove notification while copying board
2024-05-25 22:40:58 +03:00
Martin Filser 2b4f4c8d4d .devcontainer/Dockerfile, updated RUN statements to heredoc style 2024-05-25 19:53:33 +02:00
Martin Filser 68104fe578 .devcontainer/Dockerfile, use Debian 11 because Ubuntu 21.10 can not build 2024-05-25 19:53:33 +02:00
Martin Filser 6f2c46a747 .devcontainer/Dockerfile, make is needed by "meteor npm update" 2024-05-25 19:53:30 +02:00
Martin Filser e7e1f1b667 .devcontainer/Dockerfile, don't remove ca-certificates because it's needed for "meteor npm install" 2024-05-25 19:53:25 +02:00
Martin Filser 7dc20616a7 .devcontainer/Dockerfile, don't remove curl/python3 because it's needed for "meteor npm" 2024-05-25 19:53:20 +02:00
Martin Filser b5b323000a .devcontainer/Dockerfile, reduce build a bit + image size to 3.42 GB
- on a test system it reduced from 11m36s to 9m34s
2024-05-25 19:53:07 +02:00
Martin Filser 19d204c7a8 .devcontainer/Dockerfile, 3.49 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 672c279b0a .devcontainer/Dockerfile, 4.12 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 669e31ea64 .devcontainer/Dockerfile, 4.16 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 4ab72170e3 .devcontainer/Dockerfile, 4.16 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 9ca39696b3 .devcontainer/Dockerfile, 5.64 GB image size
- first copy all files, then install to make it possible to install everything
  in one RUN section
2024-05-25 19:50:16 +02:00
Martin Filser 7c36279308 .devcontainer/Dockerfile, 5.64 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 89e5b3a979 .devcontainer/Dockerfile, 6.02 GB image size 2024-05-25 19:50:14 +02:00
Martin Filser 58782c9a89 .devcontainer/Dockerfile contained duplicated logic 2024-05-25 19:49:30 +02:00
Martin Filser c3824dcbd2 .devcontainer, added missing environments 2024-05-25 19:49:30 +02:00
Lauri Ojansivu cead2bc00f Merge pull request #5417 from LanetNetwork/fix-cards-load
fixed loading of cards if there are more than 20 of them on one swimlane
2024-05-24 17:50:24 +03:00
Dmytro Novash 0d5380466a fix cards load if cards > 20 on swimlane 2024-05-24 17:15:52 +03:00
e-gaulue 58f6acbc48 Remove notification while copying board
1. It takes too long while server stops after 2 minutes (#5371).
2. It is useless, because when you copy a board, most of the time your users don't want to be notified of every copied cards.
2024-05-15 22:17:54 +02:00
Lauri Ojansivu db73fb4e37 Updated translations. 2024-05-08 18:00:31 +03:00
Lauri Ojansivu a3d4c3d948 Merge pull request #5405 from LanetNetwork/uk_upd
Update ukrainian translation
2024-05-08 17:45:41 +03:00
Dmytro Novash f9dc5c6f80 upd 2024-05-07 18:57:48 +03:00
Dmitriy Novash 96b763fb89 Merge branch 'wekan:main' into uk_upd 2024-05-07 16:51:49 +03:00
Lauri Ojansivu 98a75305e7 Merge pull request #5404 from C0rn3j/fix-deprecated-grep
Swap deprecated `egrep` for `grep -E`
2024-05-06 17:09:58 +03:00
Lauri Ojansivu 0d8739327e Merge pull request #5403 from C0rn3j/image-optim
Optimize SVGs and PNGs to save 550KB~
2024-05-06 16:54:30 +03:00
Martin Rys 7dc4d9bb71 Swap deprecated egrep for grep -E
also remove some extra whitespace in MD doc
2024-05-06 11:19:59 +02:00
Martin Rys c814221185 Run SVG logos through svgo to reduce their filesize 2024-05-06 11:16:17 +02:00
Martin Rys f2f6b57944 Losslessly optimize PNGs (-522KB)
oxipng --zopfli --opt max
2024-05-06 11:12:54 +02:00
Lauri Ojansivu f50c2af914 v7.45 2024-05-06 01:38:35 +03:00
Lauri Ojansivu 5b7442436d Updated ChangeLog. 2024-05-06 01:33:54 +03:00
Lauri Ojansivu 9cebee7347 Fix Can't set a Due Date that has a leading zero in time, errors with invalid time.
Thanks to C0rn3j and xet7 !

Fixes #5395
2024-05-06 01:30:49 +03:00
Lauri Ojansivu f311359373 Updated ChangeLog. 2024-05-04 23:17:22 +03:00
Lauri Ojansivu 31b9970c04 Merge pull request #5401 from C0rn3j/set-silver
Allow `silver` color to be set in List and Swimlane
2024-05-04 23:14:06 +03:00
Martin Rys baf0edc51e Allow silver color to be set in List and Swimlane 2024-05-04 22:09:04 +02:00
Lauri Ojansivu 69a2a76b2e Merge pull request #5400 from C0rn3j/fix-white-list-color
Fix white List color and define Silver in CSS instead of leaving it unset
2024-05-04 23:01:05 +03:00
Martin Rys 7fd894f33d Do not leave silver color unset in Swimlane and List CSS 2024-05-04 21:59:05 +02:00
Martin Rys 3f366844e2 Fix white List color 2024-05-04 21:58:08 +02:00
Lauri Ojansivu 4156b6f932 Temporarily revert collapse per user that did not work yet.
Thanks to xet7 !

Related #5388
2024-05-04 22:57:13 +03:00
Lauri Ojansivu ed801f7082 Collapse Swimlane. In Progress.
Thanks to xet7 !

Related #5388
2024-05-04 22:50:13 +03:00
Lauri Ojansivu cedd10e067 Updated translations. 2024-05-02 00:06:30 +03:00
Lauri Ojansivu 86b756b6bc Updated ChangeLog. 2024-05-02 00:04:42 +03:00
Lauri Ojansivu 259a12acf9 Merge branch 'main' of github.com:wekan/wekan 2024-05-02 00:00:43 +03:00
Lauri Ojansivu 902f86d363 Collapse Lists to be per user, not per board. In Progress.
Related #5388

Thanks to xet7 !
2024-05-01 23:58:57 +03:00
Lauri Ojansivu d5fc75e345 Merge pull request #5392 from wekan/dependabot/github_actions/meteorengineer/setup-meteor-2
Bump meteorengineer/setup-meteor from 1 to 2
2024-04-30 17:56:10 +03:00
Lauri Ojansivu 5650bd829a Merge pull request #5393 from LanetNetwork/fix_tables
fix display of tables with a large number of rows
2024-04-30 17:55:46 +03:00
Dmitriy Novash f9ad46180e upd 2024-04-30 17:43:06 +03:00
Dmitriy Novash 6e534d7543 fix display of tables with a large number of rows 2024-04-30 15:54:28 +03:00
Dmitriy Novash 9aa56a8e42 update ukr translation 2024-04-30 15:49:48 +03:00
Dmitriy Novash 4ed67832d2 remove deprecated & invalid translation 2024-04-30 15:48:32 +03:00
dependabot[bot] 3409de9ed1 Bump meteorengineer/setup-meteor from 1 to 2
Bumps [meteorengineer/setup-meteor](https://github.com/meteorengineer/setup-meteor) from 1 to 2.
- [Release notes](https://github.com/meteorengineer/setup-meteor/releases)
- [Commits](https://github.com/meteorengineer/setup-meteor/compare/v1...v2)

---
updated-dependencies:
- dependency-name: meteorengineer/setup-meteor
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-29 20:50:33 +00:00
Lauri Ojansivu e73a44d15b Updated translations. 2024-04-28 16:22:55 +03:00
Lauri Ojansivu 5cf30f05fd Updated ChangeLog. 2024-04-28 16:21:49 +03:00
Lauri Ojansivu 63117e87e7 Update Docker base container to Ubuntu 24.04, and update software versions.
Thanks to developers of dependencies !
2024-04-28 16:19:14 +03:00
Lauri Ojansivu a8e520e7f0 v7.44 2024-04-26 14:35:54 +03:00
Lauri Ojansivu e14bb16d60 Updated ChangeLog. 2024-04-26 14:29:31 +03:00
Lauri Ojansivu b704d58f0f Collapse Swimlane. In Progress, does not work yet, not visible yet.
Thanks to xet7 !
2024-04-26 14:27:09 +03:00
Lauri Ojansivu 246e9a7764 Updated translations. 2024-04-26 14:23:46 +03:00
Lauri Ojansivu 1c7b63f583 Updated ChangeLog. 2024-04-26 08:00:15 +03:00
Lauri Ojansivu e6476319bc Fix board not visible.
Thanks to xet7 !
2024-04-26 07:57:16 +03:00
Lauri Ojansivu c954934b33 Updated translations. 2024-04-26 07:41:38 +03:00
Lauri Ojansivu a72a6886f6 Updated ChangeLog. 2024-04-26 07:35:15 +03:00
Lauri Ojansivu a601ba542a Collapse Lists.
Thanks to xet7 !
2024-04-26 07:33:06 +03:00
Lauri Ojansivu f22f470ba4 Updated translations. 2024-04-19 15:04:23 +03:00
Lauri Ojansivu 3faeeac126 v7.43 2024-04-18 04:53:26 +03:00
Lauri Ojansivu 40be1d416b Updated translations. 2024-04-18 04:44:10 +03:00
Lauri Ojansivu 9ef82458b7 Updated ChangeLog. 2024-04-18 04:21:38 +03:00
Lauri Ojansivu da99e363cd Updated dependencies.
Thanks to developers of dependencies !
2024-04-18 04:20:04 +03:00
Lauri Ojansivu 3110bb48fd Updated ChangeLog. 2024-04-18 03:47:22 +03:00
Lauri Ojansivu 08e2f2f273 Updated dependencies.
Thanks to developers of dependencies !
2024-04-18 03:45:48 +03:00
Lauri Ojansivu 6636d12215 Updated ChangeLog. 2024-04-18 03:30:39 +03:00
Lauri Ojansivu 5f243d173a Updated translations. 2024-04-18 03:23:07 +03:00
Lauri Ojansivu 5ea8d3a4c6 Merge pull request #5381 from tvogel/localized-timestamps
By default, use localized long date-time format
2024-04-17 22:25:00 +03:00
Tilman Vogel dad3fd22ec By default, use localized long date-time format
because ISO 8601 is not easy to the eye (at least for non-tech people).
2024-04-17 16:52:10 +02:00
Lauri Ojansivu f381402e8f Merge pull request #5380 from verdel/fix-debug-env-check
Fix DEBUG environment variable check
2024-04-17 15:40:31 +03:00
Vadim Aleksandrov f010235ff2 Fix DEBUG environment variable check 2024-04-17 14:06:15 +03:00
Lauri Ojansivu 09f6dcbde1 Updated translations. 2024-04-14 22:50:16 +03:00
Lauri Ojansivu 224b8e3492 Updated ChangeLog. 2024-04-14 22:47:25 +03:00
Martin Rys 28612bbc8a Dockerfile: Switch RUN commands to heredoc to avoid an insane amount of ANDs and escapes 2024-04-14 17:31:19 +02:00
Martin Rys dfe4f7bb56 docker-compose.yml: Remove obsolete version parameter 2024-04-14 17:24:56 +02:00
Lauri Ojansivu 3f28c0dd22 Merge pull request #5372 from wekan/dependabot/npm_and_yarn/tar-6.2.1
Bump tar from 6.2.0 to 6.2.1
2024-04-11 20:56:35 +03:00
dependabot[bot] 959dd1a95a Bump tar from 6.2.0 to 6.2.1
Bumps [tar](https://github.com/isaacs/node-tar) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.2.0...v6.2.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-11 12:34:10 +00:00
Lauri Ojansivu d5297cd1df Updated translations. 2024-04-11 06:41:33 +03:00
Lauri Ojansivu 95404f43b7 Updated ChangeLog. 2024-04-07 18:46:08 +03:00
Lauri Ojansivu 9838af5e56 Updated Transifex URL. 2024-04-07 18:44:43 +03:00
Lauri Ojansivu dab656f8ca Updated ChangeLog. 2024-04-07 18:35:52 +03:00
Lauri Ojansivu 802eeb1e6b Updated release script for Windows On-Premise, that is without container like Docker and Snap.
Thanks to xet7 !
2024-04-07 18:33:23 +03:00
Lauri Ojansivu 98dd28818a Updated wiki. 2024-04-07 16:49:05 +03:00
Lauri Ojansivu f705373cc4 v7.42 2024-04-03 01:20:29 +03:00
Lauri Ojansivu 5bc60a8dab Updated ChangeLog. 2024-04-03 01:17:13 +03:00
Lauri Ojansivu 1c8f783767 Updated dependencies.
Thanks to developers of dependencies !
2024-04-03 01:15:08 +03:00
Lauri Ojansivu 24d3075c85 Updated ChangeLog. 2024-04-03 01:13:20 +03:00
Lauri Ojansivu c461adff11 Fixed CRITICAL SECURITY ISSUE by updating meteor-node-stubs.
Thanks to Meteor developers !
2024-04-03 00:53:47 +03:00
Lauri Ojansivu b172f7207d Merge pull request #5363 from jghaanstra/main
Small tweaks to moderndark theme
2024-04-01 17:27:31 +03:00
Jelger Haanstra ef31fffa40 Small tweaks to moderndark theme 2024-03-28 19:27:35 +01:00
Lauri Ojansivu 426632a307 Updated translations. 2024-03-27 20:59:32 +02:00
Lauri Ojansivu 2c708b6df6 Updated translations. 2024-03-25 14:10:34 +02:00
Lauri Ojansivu b555d0ccc8 Merge pull request #5360 from dyercode/patch-1
Update README.md
2024-03-21 22:05:55 +02:00
Jon Dyer e1724c8a12 Update README.md
change link to the thing you're talking about (presumably) instead of cyclically linking to the page the link is on
2024-03-21 08:30:32 -04:00
Lauri Ojansivu cd35574c0b Merge pull request #5356 from wekan/dependabot/github_actions/docker/login-action-3.1.0
Bump docker/login-action from 3.0.0 to 3.1.0
2024-03-19 07:50:28 +02:00
Lauri Ojansivu d016cbcffc Merge pull request #5355 from wekan/dependabot/github_actions/docker/build-push-action-5.3.0
Bump docker/build-push-action from 5.2.0 to 5.3.0
2024-03-19 07:50:13 +02:00
dependabot[bot] 7e4b672888 Bump docker/login-action from 3.0.0 to 3.1.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/343f7c4344506bcbf9b4de18042ae17996df046d...e92390c5fb421da1463c202d546fed0ec5c39f20)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-18 20:06:55 +00:00
dependabot[bot] 06d9abf6f6 Bump docker/build-push-action from 5.2.0 to 5.3.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/af5a7ed5ba88268d5278f7203fb52cd833f66d6e...2cdde995de11925a030ce8070c3d77a52ffcf1c0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-18 20:06:52 +00:00
Lauri Ojansivu a1a6dae5c6 v7.41 2024-03-18 02:32:43 +02:00
Lauri Ojansivu c5f40f1be9 Updated ChangeLog. 2024-03-18 02:26:26 +02:00
Lauri Ojansivu 4358cb5e57 Merge pull request #5350 from lorodoes/main
Update mongodb-control
2024-03-18 01:46:46 +02:00
lorodoes a591bf05e0 Update mongodb-control
Missed a few mongosh lines.
2024-03-17 19:28:50 -04:00
Lauri Ojansivu 568b7538ad Merge pull request #5349 from lorodoes/main
Update mongodb-control
2024-03-18 01:06:54 +02:00
lorodoes bbd7765432 Update mongodb-control
Fixes for mongosh to allow snap packages to update to the edge/candidate version
2024-03-17 19:04:07 -04:00
Lauri Ojansivu 558024785f v7.40 2024-03-17 04:03:51 +02:00
Lauri Ojansivu 76043cc5b6 Updated ChangeLog. 2024-03-17 03:53:50 +02:00
Lauri Ojansivu 583fca1814 Fixed In RTL, hamburger margin is too much in mobile.
Thanks to mohammadZahedian and xet7 !

Fixes #5337
2024-03-17 03:49:46 +02:00
Lauri Ojansivu 806201b8cb Updated ChangeLog. 2024-03-17 03:38:26 +02:00
Lauri Ojansivu 24c89aeb64 Fixed centering of text below custom login logo.
Thanks to xet7 !
2024-03-17 03:36:05 +02:00
Lauri Ojansivu 8f0d88d9e0 v7.39 2024-03-16 15:08:24 +02:00
Lauri Ojansivu e92d8dc127 Updated ChangeLog. 2024-03-16 14:59:15 +02:00
Lauri Ojansivu 8a99e8f796 Merge pull request #5346 from kuba-orlik/patch-1
Make the contents of the cards grow to the list width
2024-03-14 20:38:18 +02:00
Kuba Orlik c0246c6834 Make the contents of the cards grow to the list width 2024-03-14 11:42:56 +01:00
Lauri Ojansivu 42ed92f346 Merge pull request #5344 from wekan/dependabot/github_actions/VeryGoodOpenSource/very_good_coverage-3.0.0
Bump VeryGoodOpenSource/very_good_coverage from 2.2.0 to 3.0.0
2024-03-13 16:06:19 +02:00
Lauri Ojansivu df0bd90fae Merge pull request #5343 from wekan/dependabot/github_actions/docker/build-push-action-5.2.0
Bump docker/build-push-action from 5.1.0 to 5.2.0
2024-03-13 16:05:57 +02:00
dependabot[bot] 3453f94b43 Bump VeryGoodOpenSource/very_good_coverage from 2.2.0 to 3.0.0
Bumps [VeryGoodOpenSource/very_good_coverage](https://github.com/verygoodopensource/very_good_coverage) from 2.2.0 to 3.0.0.
- [Release notes](https://github.com/verygoodopensource/very_good_coverage/releases)
- [Changelog](https://github.com/VeryGoodOpenSource/very_good_coverage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/verygoodopensource/very_good_coverage/compare/v2.2.0...v3.0.0)

---
updated-dependencies:
- dependency-name: VeryGoodOpenSource/very_good_coverage
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 20:01:56 +00:00
dependabot[bot] ca537e266d Bump docker/build-push-action from 5.1.0 to 5.2.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/4a13e500e55cf31b7a5d59a38ab2040ab0f42f56...af5a7ed5ba88268d5278f7203fb52cd833f66d6e)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 20:01:53 +00:00
Lauri Ojansivu 8f3c948614 Updated docs. 2024-03-11 15:53:23 +02:00
Lauri Ojansivu 059743ad34 Merge pull request #5341 from e-gaulue/e-gaulue-wiki-1
Clarify usage of api.py
2024-03-11 15:29:04 +02:00
e-gaulue 33ccf68e17 Update New-card-with-Python3-and-REST-API.md 2024-03-11 14:17:20 +01:00
e-gaulue b6f22712f9 Update New-card-with-Python3-and-REST-API.md
Clarify usage, at least for me.
2024-03-11 14:14:42 +01:00
Lauri Ojansivu 9e413b3961 Merge pull request #5340 from e-gaulue/ED1 2024-03-11 11:49:55 +02:00
Lauri Ojansivu 5dd318a481 v7.38 2024-03-10 23:47:29 +01:00
Lauri Ojansivu 1783257c0e v7.38 2024-03-10 08:42:04 +02:00
Lauri Ojansivu 966852c212 Updated ChangeLog. 2024-03-10 08:37:21 +02:00
Lauri Ojansivu 07d6c1e514 Upgraded to MongoDB 6.0.14 at Snap Candidate.
Thanks to MongoDB developers !
2024-03-10 08:35:55 +02:00
Lauri Ojansivu 09be915ea5 Updated ChangeLog. 2024-03-10 08:34:27 +02:00
Lauri Ojansivu abd3c95dfa Fixed In RTL, hamburger needs margin.
Thanks to mohammadZahedian and xet7 !

Fixes #5337
2024-03-10 08:31:33 +02:00
Lauri Ojansivu 3fa61ac23c Updated ChangeLog. 2024-03-10 08:21:10 +02:00
Lauri Ojansivu 00bbc26698 Fixed text below custom login logo not visible.
Thanks to xet7 !
2024-03-10 08:18:50 +02:00
Lauri Ojansivu 3004f54b5d Updated ChangeLog. 2024-03-08 23:14:20 +02:00
Lauri Ojansivu ef5b888779 Add info about GitHub top committers at Finland.
Thanks to xet7 !
2024-03-08 23:02:41 +02:00
Lauri Ojansivu 835e33bf09 Added script to count lines of code changed per committer email address, because GitHub removed that feature from web UI.
Thanks to bgwines and xet7 !
2024-03-08 22:57:38 +02:00
Lauri Ojansivu 8ba3a05648 Updated contributing to wiki. 2024-03-08 21:36:29 +02:00
Lauri Ojansivu 73ae73d4c3 Added docs from wekan.wiki and wekan-snap.wiki 2024-03-08 21:24:14 +02:00
Lauri Ojansivu 76175a711a Merge pull request #5336 from xator91/patch-12
Update api.py
2024-03-08 14:18:55 +02:00
Mirko Genovese 574acd6744 Update api.py
#5322 Fix error during delete.
2024-03-08 11:45:34 +01:00
Lauri Ojansivu 9e0e052bba Updated ChangeLog. 2024-03-07 20:18:51 +02:00
Lauri Ojansivu ffafb30b9b Fixed API get_all_cards doesn't return SwimlaneId. Please test.
Thanks to mohammadZahedian, xator91 and xet7.

Fixes #5319
2024-03-07 13:36:42 +02:00
Lauri Ojansivu 9c4e402e6c v7.37 2024-03-07 13:27:49 +02:00
Lauri Ojansivu f6f9dbb5e3 Updated ChangeLog. 2024-03-07 13:14:23 +02:00
Lauri Ojansivu 7beced1e68 Fixed API get swimlane cards wrong order. Please test.
Thanks to mohammadZahedian, xator91 and xet7.

Fixes #5319
2024-03-07 13:10:41 +02:00
Lauri Ojansivu c8921b77f0 v7.36 2024-03-06 12:14:54 +02:00
Lauri Ojansivu 482ce0a265 Updated ChangeLog. 2024-03-06 12:10:03 +02:00
Lauri Ojansivu c570405d02 Try to fix API get cards wrong order. Please test.
Thanks to mohammadZahedian, xator91 and xet7.

Fixes #5319
2024-03-06 12:07:18 +02:00
Lauri Ojansivu 35ed465e10 Updated ChangeLog. 2024-03-06 11:57:26 +02:00
Lauri Ojansivu 747bc4c088 Fixed Card image cover should be margin-top:6px since hamburger menu and due date at the top.
Thanks to e-gaulue and xet7 !

Fixes #5331
2024-03-06 11:54:10 +02:00
Lauri Ojansivu 7c156927e4 Updated ChangeLog. 2024-02-28 23:08:10 +02:00
Lauri Ojansivu 13f0c77fb6 Merge pull request #5326 from xator91/patch-11
Update api.py
2024-02-28 23:03:03 +02:00
Mirko Genovese 82d9f77eb3 Update api.py
Added new 4 command. 

checklistid, checklistinfo, get_list_cards_count and get_board_cards_count
2024-02-28 07:58:19 +01:00
Lauri Ojansivu 151699ceb9 v7.35 2024-02-27 14:56:48 +02:00
Lauri Ojansivu cc5d5bdd01 Updated ChangeLog. 2024-02-27 14:50:30 +02:00
Lauri Ojansivu f43dadc068 Added back Mathjax that has bug of showing math twice.
Thanks to macthecadillac, Dexus and xet7 !

Related https://github.com/wekan/wekan/commit/19703fed311c894b61e9269cc0b973d0b0275a6a#commitcomment-139091804,
opens #5117
2024-02-27 14:36:51 +02:00
Lauri Ojansivu b24694bea3 Updated translations. 2024-02-27 14:28:13 +02:00
Lauri Ojansivu f4b31aa771 v7.34 2024-02-23 22:18:24 +02:00
Lauri Ojansivu 3cd5d00b0b Updated translations. 2024-02-23 22:05:58 +02:00
Lauri Ojansivu 7112584139 v7.33 2024-02-23 08:52:59 +02:00
Lauri Ojansivu 639b9c8f56 Updated translations. 2024-02-23 08:46:56 +02:00
Lauri Ojansivu 791ebc6406 Updated translations. 2024-02-22 20:07:31 +02:00
Lauri Ojansivu 059134d3d0 Updated ChangeLog. 2024-02-22 19:44:23 +02:00
Lauri Ojansivu 3b0616c150 Updated docs for WeKan 7.32. 2024-02-22 19:39:15 +02:00
Lauri Ojansivu ad5c4fdca2 Updated ChangeLog. 2024-02-22 19:38:32 +02:00
Lauri Ojansivu b219b8fb65 Merge pull request #5321 from bentiss/fix-docs
openapi: fix breakage introduced with blank return
2024-02-22 19:35:27 +02:00
Benjamin Tissoires 73a170a388 openapi: fix breakage introduced with blank return
Introduced by commit f8ef2e33de ("cards.js Added a control to check
error if card is not updated"), a blank return was added at line 3914.

The generate_openapi script assumed a return statement always has an
argument, and this was crashing.

Fixes #5320
2024-02-22 16:31:11 +01:00
Lauri Ojansivu e55e9c73b9 v7.32 2024-02-22 16:10:40 +02:00
Lauri Ojansivu 71ed5d3427 Updated translations. 2024-02-22 16:10:17 +02:00
Lauri Ojansivu 8b7bdfe0c7 Updated translations. 2024-02-22 15:45:24 +02:00
Lauri Ojansivu ed6018fad1 Updated ChangeLog. 2024-02-22 15:34:26 +02:00
Lauri Ojansivu b5f4be36d4 Fixed Error 500 when adding user to a board and multiple same avatar icons by revert back from Meteor 2.15 to 2.14.
Thanks to xator91 and xet7 !

Fixes #5302,
fixes #5317
2024-02-22 15:19:51 +02:00
Lauri Ojansivu 5c0a46b006 Updated ChangeLog. 2024-02-22 15:07:15 +02:00
Lauri Ojansivu 54ed46447a Updated translations. 2024-02-22 14:59:48 +02:00
Lauri Ojansivu 84fe3c2f40 Merge pull request #5318 from DevOpsNB/main
Add shortcut to filter by assignees
2024-02-22 14:50:11 +02:00
nikolaj.bassauer e30329a18c Add text to new shortcut 2024-02-22 13:32:59 +01:00
nikolaj.bassauer 22b40aab5d Set Shortcut to filter assignees 2024-02-22 13:21:52 +01:00
Lauri Ojansivu c3c8b1eb70 Merge pull request #5313 from xator91/patch-10
Update api.py Deleteallcards
2024-02-22 11:37:51 +02:00
Lauri Ojansivu ce82ee8d0d Merge pull request #5312 from xator91/patch-9
cards.js Added a control to check error if card is not updated
2024-02-22 11:36:40 +02:00
Mirko Genovese 04f0967b18 Update api.py Deleteallcards
Will delete all cards from Swimlanes automatically, will retrieve automatically all list id and delete everything.
2024-02-22 07:55:09 +01:00
Mirko Genovese f8ef2e33de cards.js Added a control to check error if card is not updated 2024-02-22 07:50:21 +01:00
Lauri Ojansivu 20a8ac7c98 Updated ChangeLog. 2024-02-22 08:46:08 +02:00
Lauri Ojansivu 37e9236bde Merge pull request #5311 from xator91/patch-8
Update api.py Addchecklist with multiple items also or just title
2024-02-22 08:43:44 +02:00
Mirko Genovese fc11ff13c5 Update api.py Addchecklist command with multiple items also or just title 2024-02-22 07:22:24 +01:00
Lauri Ojansivu c92586ee64 Updated ChangeLog. 2024-02-21 17:29:50 +02:00
Lauri Ojansivu 38e2308d94 Merge pull request #5309 from xator91/patch-7
Update api.py EDITCARDCOLOR
2024-02-21 17:28:13 +02:00
Mirko Genovese 03044250a3 Update api.py EDITCARDCOLOR 2024-02-21 12:03:14 +01:00
Lauri Ojansivu ebe7ec40e4 Updated ChangeLog. 2024-02-21 11:59:20 +02:00
Lauri Ojansivu 412626052b Merge pull request #5308 from xator91/patch-6
Update api.py Add createlabel
2024-02-21 11:55:43 +02:00
Mirko Genovese 2a0af154c6 Update api.py Add createlabel 2024-02-21 08:17:38 +01:00
Lauri Ojansivu 87debbd26b Updated translations. 2024-02-19 18:20:33 +02:00
Lauri Ojansivu 10e88fccd6 v7.31 2024-02-17 18:03:09 +02:00
Lauri Ojansivu cc781c0082 Updated ChangeLog. 2024-02-16 17:16:08 +02:00
Lauri Ojansivu 5198ee997c Updated to Meteor 2.15.
Thanks to Meteor developers !
2024-02-16 17:14:34 +02:00
Lauri Ojansivu 4843d6cdc1 Updated ChangeLog. 2024-02-16 17:00:14 +02:00
Lauri Ojansivu 8ca0b2d9c3 Merge pull request #5301 from xator91/patch-4
Update api.py EDIT BOARD TITLE
2024-02-16 16:22:45 +02:00
Mirko Genovese cf589cb792 Update api.py EDIT BOARD TITLE 2024-02-16 11:29:20 +01:00
Lauri Ojansivu eda05e0157 Merge pull request #5300 from xator91/patch-3
Update boards.js - New update board title function
2024-02-16 12:01:33 +02:00
Mirko Genovese 4ae8a0308e Update boards.js - New update board title function 2024-02-16 10:50:52 +01:00
Lauri Ojansivu 88c6ce1c7e Updates. 2024-02-12 22:34:09 +02:00
Lauri Ojansivu b714e2fca0 Updated readme. 2024-02-12 22:29:53 +02:00
Lauri Ojansivu ce3a931c59 Updated ChangeLog. 2024-02-09 14:53:10 +02:00
Lauri Ojansivu 69f5d90e91 Merge pull request #5293 from xator91/patch-2
Update api.py
2024-02-09 14:45:20 +02:00
Mirko Genovese 1a6ab68752 Update api.py
Typo error on instructions
2024-02-09 08:17:59 +01:00
Lauri Ojansivu f13001e53a Updated ChangeLog. 2024-02-07 17:47:24 +02:00
Lauri Ojansivu 824b537db0 Merge pull request #5290 from xator91/patch-1
Update api.py
2024-02-07 17:44:50 +02:00
Mirko Genovese 42e4bc3105 Update api.py
Add card with label and add a label to a card
2024-02-07 16:03:03 +01:00
Lauri Ojansivu ebcedcffec Updated ChangeLog. 2024-02-07 15:56:25 +02:00
Lauri Ojansivu b8cc84261f Merge pull request #5287 from xator91/xator91-patch-2
Update api.py
2024-02-07 15:51:16 +02:00
xator91 4e2475502a Update api.py
Added getcard and cardsbyswimlane
2024-02-07 14:38:49 +01:00
Lauri Ojansivu 7dd9bcce2b Updated translations. 2024-02-07 12:15:55 +02:00
Lauri Ojansivu 620628dca3 Merge pull request #5284 from wekan/dependabot/github_actions/docker/metadata-action-5.5.1
Bump docker/metadata-action from 5.5.0 to 5.5.1
2024-02-05 22:31:17 +02:00
dependabot[bot] 5ee7d52e8c Bump docker/metadata-action from 5.5.0 to 5.5.1
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.5.0 to 5.5.1.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/dbef88086f6cef02e264edb7dbf63250c17cef6c...8e5442c4ef9f78752691e2d8f8d19755c6f78e81)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 20:28:06 +00:00
Lauri Ojansivu 26004b1f73 Updated ChangeLog. 2024-02-03 21:09:23 +02:00
Lauri Ojansivu 59c42bc1a3 Updated to Meteor 2.15-rc.1 and removed duplicate nodemailer package because of some errors.
Thanks to Meteor developers !
2024-02-03 21:03:34 +02:00
Lauri Ojansivu c8a7d539f3 Updated translations. 2024-02-01 13:17:45 +02:00
Lauri Ojansivu 98c86bcc0f Updated translations. 2024-01-29 21:56:38 +02:00
Lauri Ojansivu 1b138e14c3 Updated ChangeLog. 2024-01-28 14:16:20 +02:00
Lauri Ojansivu a54e52d34b Try to fix Snap.
Thanks to xet7 !
2024-01-28 14:11:38 +02:00
Lauri Ojansivu 67218fb61d Updated ChangeLog. 2024-01-28 13:39:41 +02:00
Lauri Ojansivu 4eb0085243 Release scripts: Commented out not currently in use builds of WeKan bundle.
Thanks to xet7 !
2024-01-28 13:36:50 +02:00
Lauri Ojansivu 38a8fcb69a v7.30 2024-01-28 13:33:17 +02:00
Lauri Ojansivu 64592d734c Back to MongoDB 6.
Thanks to xet7 1
2024-01-28 13:17:44 +02:00
Lauri Ojansivu abddc8a864 v7.29 2024-01-27 22:50:39 +02:00
Lauri Ojansivu 09b45aca4f Updated ChangeLog. 2024-01-27 20:44:06 +02:00
Lauri Ojansivu f624211620 Upgraded to MongoDB 7.0.5 at Snap Candidate and Docker.
Thanks to MongoDB developers !
2024-01-27 20:39:29 +02:00
Lauri Ojansivu c19cde53d6 Updated ChangeLog. 2024-01-27 20:39:07 +02:00
Lauri Ojansivu cf8694fcd1 Updated translations. 2024-01-27 20:28:44 +02:00
Lauri Ojansivu 28d640afb4 Updated to Meteor 2.14.1-beta.0 .
Thanks to Meteor developers !
2024-01-25 12:28:05 +02:00
Lauri Ojansivu 7b432078a0 Updated ChangeLog. 2024-01-23 23:36:19 +02:00
Lauri Ojansivu 19703fed31 Removed markdown-it-mathjax3.
Fixes #5117

Thanks to Dexus and xet7 !
2024-01-23 23:32:46 +02:00
Lauri Ojansivu b01e127cc3 v7.28 2024-01-23 00:51:09 +02:00
Lauri Ojansivu f0c2d81352 Updated ChangeLog. 2024-01-23 00:44:30 +02:00
Lauri Ojansivu 67896adefc Updated dependencies.
Thanks to developers of dependencies !
2024-01-23 00:42:54 +02:00
Lauri Ojansivu d1b29b6e61 Updated translations. 2024-01-23 00:36:55 +02:00
Lauri Ojansivu ef93aad659 Updated ChangeLog. 2024-01-23 00:35:31 +02:00
Lauri Ojansivu 616b433409 Updated ChangeLog. 2024-01-23 00:26:39 +02:00
Lauri Ojansivu 515d96eef0 Merge pull request #5271 from wekan/dependabot/github_actions/actions/cache-4
Bump actions/cache from 3 to 4
2024-01-23 05:46:23 +08:00
Lauri Ojansivu 85963cc58d Merge pull request #5270 from wekan/dependabot/github_actions/actions/dependency-review-action-4
Bump actions/dependency-review-action from 3 to 4
2024-01-23 05:45:56 +08:00
Lauri Ojansivu e15611a0ea Merge pull request #5265 from gustavengstrom/master
Added archive option to  of Wekan API
2024-01-23 05:45:30 +08:00
dependabot[bot] f89a2ab91d Bump actions/cache from 3 to 4
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 21:00:40 +00:00
dependabot[bot] 18d3fb75ac Bump actions/dependency-review-action from 3 to 4
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 3 to 4.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 21:00:32 +00:00
Gustav Engström f5bc2b08f9 Added archive option to of Wekan API 2024-01-15 12:32:24 +01:00
Lauri Ojansivu 80e5916394 Merge pull request #5263 from wekan/dependabot/github_actions/docker/metadata-action-5.5.0
Bump docker/metadata-action from 5.4.0 to 5.5.0
2024-01-08 23:50:02 +02:00
dependabot[bot] 48c47f9911 Bump docker/metadata-action from 5.4.0 to 5.5.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.4.0 to 5.5.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/9dc751fe249ad99385a2583ee0d084c400eee04e...dbef88086f6cef02e264edb7dbf63250c17cef6c)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 20:41:32 +00:00
Lauri Ojansivu c3f5849f11 Updated translations. 2024-01-02 23:02:29 +02:00
Lauri Ojansivu c73346eda0 v7.27 2024-01-02 14:59:38 +02:00
Lauri Ojansivu d976455a12 Updated ChangeLog. 2024-01-02 14:54:39 +02:00
Lauri Ojansivu f10f80f655 Fix missing maximize card.
Thanks to xet7 !
2024-01-02 14:52:13 +02:00
Lauri Ojansivu b680d03da2 v7.26 2024-01-02 13:24:21 +02:00
Lauri Ojansivu 9590fec3fc Updated translations. 2024-01-02 13:18:28 +02:00
Lauri Ojansivu e9fc5537e4 Updated ChangeLog. 2024-01-02 13:16:58 +02:00
Lauri Ojansivu 8ae47cb2f8 Fix some public board buttons.
Thanks to xet7 !
2024-01-02 13:14:24 +02:00
Lauri Ojansivu 2fefaf1b5b Updated translations. 2024-01-02 12:30:58 +02:00
Lauri Ojansivu 5554cd7567 v7.25 2023-12-30 22:32:29 +02:00
Lauri Ojansivu 442ea7595a Updated ChangeLog. 2023-12-30 21:29:50 +02:00
Lauri Ojansivu 0e6d83c085 Updated dependencies.
Thanks to developers of dependencies !
2023-12-30 21:27:50 +02:00
Lauri Ojansivu 3199da4b3d Updated ChangeLog. 2023-12-30 20:22:11 +02:00
Lauri Ojansivu 23c2a2bc22 Translations: Added German (Germany) (de_DE) and Odia (India) (or_IN).
Thanks to translators !
2023-12-30 20:19:12 +02:00
Lauri Ojansivu 554bec4f1e Merge pull request #5252 from Lewiscowles1986/fix/export-html-popup
Fix: export html popup
2023-12-30 15:59:01 +02:00
Lewis Cowles 4d6e6a85e0 feat: download webfonts as well
Prior to this I was manually saving the fonts, and I don't remember documenting either.

Now there should be no documentation needed.
2023-12-30 06:41:10 +00:00
Lewis Cowles fe887b7b5e fix: export HTML currently exports JS popups 2023-12-30 06:26:53 +00:00
Lauri Ojansivu d954b97aac Updated ChangeLog. 2023-12-19 01:28:37 +02:00
Lauri Ojansivu 374e673107 Snap: Added MongoDB 3 binaries for migrating to MongoDB 6. Part 3.
Thanks to xet7 !
2023-12-19 01:27:05 +02:00
Lauri Ojansivu 68c0d3fbe5 Updated ChangeLog. 2023-12-19 01:22:30 +02:00
Lauri Ojansivu 335f0451e0 Snap: Added MongoDB 3 binaries for migrating to MongoDB 6. Part 2.
Thanks to xet7 !
2023-12-19 01:20:31 +02:00
Lauri Ojansivu b5a071f51e Updated ChangeLog. 2023-12-19 01:12:29 +02:00
Lauri Ojansivu 805458a763 Snap: Added MongoDB 3 binaries for migrating to MongoDB 6.
Thanks to xet7 !
2023-12-19 01:09:15 +02:00
Lauri Ojansivu 4f8e711a5f Updated ChangeLog. 2023-12-19 00:51:37 +02:00
Lauri Ojansivu 06397e9e11 Updated percolate:synced-cron.
Thanks to developers of percolate:synced-cron !
2023-12-19 00:44:57 +02:00
Lauri Ojansivu 94be762f68 Merge pull request #5245 from wekan/dependabot/github_actions/actions/download-artifact-4
Bump actions/download-artifact from 3 to 4
2023-12-19 00:42:32 +02:00
Lauri Ojansivu ccb48d0711 Merge pull request #5244 from wekan/dependabot/github_actions/docker/metadata-action-5.4.0
Bump docker/metadata-action from 5.3.0 to 5.4.0
2023-12-19 00:42:06 +02:00
Lauri Ojansivu b6014ca992 Merge pull request #5243 from wekan/dependabot/github_actions/actions/upload-artifact-4
Bump actions/upload-artifact from 3 to 4
2023-12-19 00:41:32 +02:00
Lauri Ojansivu 02c5f2e3cf Updated ChangeLog. 2023-12-19 00:33:38 +02:00
Lauri Ojansivu 84a228fc1a Snap: Organized file locations.
Thanks to xet7 !
2023-12-19 00:30:21 +02:00
dependabot[bot] 356fddc182 Bump actions/download-artifact from 3 to 4
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 20:11:05 +00:00
dependabot[bot] c4853b9aa7 Bump docker/metadata-action from 5.3.0 to 5.4.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/31cebacef4805868f9ce9a0cb03ee36c32df2ac4...9dc751fe249ad99385a2583ee0d084c400eee04e)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 20:11:02 +00:00
dependabot[bot] d6cb460186 Bump actions/upload-artifact from 3 to 4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 20:10:57 +00:00
Lauri Ojansivu a0f9b81113 v7.24 2023-12-17 14:10:52 +02:00
Lauri Ojansivu 15b9497a72 Updated ChangeLog. 2023-12-17 14:02:45 +02:00
Lauri Ojansivu 93be112a94 Azure AD B2C login using OAuth2. https://github.com/wekan/wekan/wiki/B2C
Thanks to snowsky and xet7 !

Fixes #5242
2023-12-17 13:54:55 +02:00
Lauri Ojansivu 5a9a5df448 Updated ChangeLog. 2023-12-13 15:56:28 +02:00
Lauri Ojansivu 75383fe477 Upgrade to Meteor 2.14 .
Thanks to Meteor developers !
2023-12-13 15:54:01 +02:00
Lauri Ojansivu 3f0109e810 v7.23 2023-12-11 23:44:57 +02:00
Lauri Ojansivu c21db857fb Updated ChangeLog. 2023-12-11 23:40:45 +02:00
Lauri Ojansivu e3a0a480ed Updated dependencies.
Thanks to developers of dependencies !
2023-12-11 23:39:08 +02:00
Lauri Ojansivu 3917d8c4a3 Updated ChangeLog. 2023-12-11 23:37:32 +02:00
Lauri Ojansivu 6a3b8a668b Upgraded to Meteor 2.14-rc.3 .
Thanks to Meteor developers !
2023-12-11 23:35:08 +02:00
Lauri Ojansivu edfa9783c3 Updated ChangeLog. 2023-12-07 14:54:40 +02:00
Lauri Ojansivu b4c9c1df9a Updated security.md about mitm.
Thanks to xet7 !
2023-12-07 14:52:20 +02:00
Lauri Ojansivu 85353d9f90 Merge pull request #5234 from wekan/dependabot/github_actions/docker/metadata-action-5.3.0
Bump docker/metadata-action from 5.0.0 to 5.3.0
2023-12-04 23:01:42 +02:00
dependabot[bot] 905f0316b6 Bump docker/metadata-action from 5.0.0 to 5.3.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.0.0 to 5.3.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/96383f45573cb7f253c731d3b3ab81c87ef81934...31cebacef4805868f9ce9a0cb03ee36c32df2ac4)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-04 20:52:10 +00:00
Lauri Ojansivu b3961609e1 Updated translations. 2023-12-04 18:39:11 +02:00
Lauri Ojansivu 8ad4a1aa96 v7.22 2023-12-01 14:01:23 +02:00
Lauri Ojansivu 3fd1f4f5ec Updated ChangeLog. 2023-12-01 13:57:02 +02:00
Lauri Ojansivu 31ca78c17b Upgraded to MongoDB 6.0.12 at Snap Candidate.
Thanks to MongoDB developers !
2023-12-01 13:55:06 +02:00
Lauri Ojansivu a628c0fc03 Updated ChangeLog. 2023-12-01 13:52:50 +02:00
Lauri Ojansivu 3cc10c77f9 Fixed Markdown and copy buttons on top of text.
Thanks to mueller-ma and xet7 !

Fixes #5230
2023-12-01 13:49:59 +02:00
Lauri Ojansivu a727f8a62c Updated ChangeLog. 2023-12-01 13:35:02 +02:00
Lauri Ojansivu f324286911 New feature: Sidebar / Card Settings / Creator at minicard.
Thanks to Roemer and xet7 !

Related https://github.com/wekan/wekan/discussions/5217
2023-12-01 13:31:16 +02:00
Lauri Ojansivu 7f7d06be65 Updated translations. 2023-12-01 13:17:23 +02:00
Lauri Ojansivu c9f1278651 Updated translations 2023-12-01 13:13:54 +02:00
Lauri Ojansivu dd69966def Updated ChangeLog. 2023-12-01 13:03:23 +02:00
Lauri Ojansivu 2f2a039e3c At right sidebar, moved Minicard Settings to Card Settings popup.
Thanks to xet7 !
2023-12-01 12:59:29 +02:00
Lauri Ojansivu 80db4cd645 v7.21 2023-11-27 00:36:10 +02:00
Lauri Ojansivu ed9338608e Updated ChangeLog. 2023-11-27 00:32:37 +02:00
Lauri Ojansivu fef0c0e490 Updated dependencies.
Thanks to developers of dependencies !
2023-11-27 00:30:38 +02:00
Lauri Ojansivu e0e703dc72 Updated translations. 2023-11-27 00:23:43 +02:00
Lauri Ojansivu 8aca32179e Updated translations. 2023-11-26 23:37:10 +02:00
Lauri Ojansivu ab823795cf v7.20 2023-11-26 19:07:41 +02:00
Lauri Ojansivu d90ab03bbe Upgraded to Meteor 2.14-beta.4.
Thanks to Meteor developers !
2023-11-26 19:00:22 +02:00
Lauri Ojansivu bf053e0018 Updated ChangeLog. 2023-11-26 10:40:25 +02:00
Lauri Ojansivu 46c911bb2a Removed extra text. 2023-11-26 10:36:52 +02:00
Lauri Ojansivu 2bc8df9188 Updated translations. 2023-11-24 09:31:16 +02:00
Lauri Ojansivu 6367b18f4f Updated readme. 2023-11-24 09:29:58 +02:00
Lauri Ojansivu a307bfa1ec Added standard for public code. 2023-11-24 08:28:30 +02:00
Lauri Ojansivu cfb3caf504 Updated future.md 2023-11-22 23:57:33 +02:00
Lauri Ojansivu daf524238b Updated future.md 2023-11-22 22:50:13 +02:00
Lauri Ojansivu 5435604448 Updated future.md. 2023-11-22 22:48:45 +02:00
Lauri Ojansivu 64500f1f73 Updated future.md 2023-11-22 22:38:17 +02:00
Lauri Ojansivu d5ee0b567a Added future.md 2023-11-22 22:35:20 +02:00
Lauri Ojansivu 5ec4988efe Added FUTURE.md 2023-11-22 22:08:56 +02:00
Lauri Ojansivu e41072dcdf Updated ChangeLog. 2023-11-21 02:50:43 +02:00
Lauri Ojansivu 126ddda45d Upgraded to Meteor 2.14-beta.2.
Thanks to Meteor developers!
2023-11-21 02:48:19 +02:00
Lauri Ojansivu bec460f77e Merge pull request #5215 from wekan/dependabot/github_actions/docker/build-push-action-5.1.0
Bump docker/build-push-action from 5.0.0 to 5.1.0
2023-11-21 01:32:21 +02:00
Lauri Ojansivu fd56d4c63c Merge pull request #5214 from wekan/dependabot/github_actions/VeryGoodOpenSource/very_good_coverage-2.2.0
Bump VeryGoodOpenSource/very_good_coverage from 2.1.0 to 2.2.0
2023-11-21 01:31:53 +02:00
dependabot[bot] d9cefb84b8 Bump docker/build-push-action from 5.0.0 to 5.1.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/0565240e2d4ab88bba5387d719585280857ece09...4a13e500e55cf31b7a5d59a38ab2040ab0f42f56)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 20:49:16 +00:00
dependabot[bot] 3013114c1f Bump VeryGoodOpenSource/very_good_coverage from 2.1.0 to 2.2.0
Bumps [VeryGoodOpenSource/very_good_coverage](https://github.com/verygoodopensource/very_good_coverage) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/verygoodopensource/very_good_coverage/releases)
- [Changelog](https://github.com/VeryGoodOpenSource/very_good_coverage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/verygoodopensource/very_good_coverage/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: VeryGoodOpenSource/very_good_coverage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 20:49:11 +00:00
Lauri Ojansivu 095dfdb24f Updated ChangeLog. 2023-11-20 22:31:02 +02:00
Lauri Ojansivu a032586aaf v7.19 2023-11-20 21:57:18 +02:00
Lauri Ojansivu d16c141821 Updated translations. 2023-11-20 21:51:30 +02:00
Lauri Ojansivu dcf75f0bcd Updated ChangeLog. 2023-11-20 21:50:05 +02:00
Lauri Ojansivu 282a9e3097 Merge pull request #5213 from scout-ch/feature/default-board-for-users
Permissions for default board
2023-11-20 21:39:24 +02:00
Diego Steiner 0e4b121209 Merge branch 'main' into feature/default-board-for-users 2023-11-20 16:59:38 +01:00
Diego Steiner 3e469c5a44 feature: add permissions for default boards 2023-11-20 16:01:18 +01:00
Lauri Ojansivu e760a4140b Updated ChangeLog. 2023-11-20 14:22:18 +02:00
Lauri Ojansivu 2048975e92 Snap: Disable apparmor="DENIED" in syslog.
Thanks to diegargon, webenefits and xet7 !

Fixes #4855
2023-11-20 14:18:38 +02:00
Lauri Ojansivu cf5312ed2e Updated ChangeLog. 2023-11-20 02:37:27 +02:00
Lauri Ojansivu 8f33ab3487 Updated ChangeLog. 2023-11-20 01:31:04 +02:00
Lauri Ojansivu d4d6a5f96d Fix to not anymore require website for Organization and Team.
Thanks to xet7 !
2023-11-20 01:28:14 +02:00
Lauri Ojansivu a55992276d Updated ChangeLog. 2023-11-20 01:23:48 +02:00
Lauri Ojansivu 6405c35bc0 Fix to not anymore show confusing Organization Id and Team Id fields at Admin Panel / People / People / Edit user.
Thanks to xet7 !
2023-11-20 01:20:30 +02:00
Lauri Ojansivu bd3d7ec9c9 Updated ChangeLog. 2023-11-20 00:55:01 +02:00
Lauri Ojansivu cd51ad7508 Fix typos at oidc_server.js .
Thanks to xet7 !
2023-11-20 00:53:37 +02:00
Lauri Ojansivu bd5bb2a8a9 Updated ChangeLog. 2023-11-20 00:03:28 +02:00
Lauri Ojansivu 9bc6366993 When user logins, "Automatically add user with the domain name" (at Admin Panel / Organizations) to Organization. Part 2.
Thanks to xet7 !
2023-11-20 00:02:19 +02:00
Lauri Ojansivu b6c7737f73 Updated translations. 2023-11-19 23:55:58 +02:00
Lauri Ojansivu 6a9d738348 Updated ChangeLog. 2023-11-19 23:47:30 +02:00
Lauri Ojansivu 6e2f84673e When user logins, "Automatically add user with the domain name" (at Admin Panel / Organizations) to Organization. Part 1.
Thanks to xet7 !
2023-11-19 23:33:40 +02:00
Diego Steiner 63201e992c feature: add permissions for default boards 2023-11-19 14:08:16 +01:00
Lauri Ojansivu f512047ac6 Updates. 2023-11-16 15:59:01 +02:00
Lauri Ojansivu c4293ecd95 Updates. 2023-11-16 15:49:39 +02:00
Lauri Ojansivu f047c6da29 Updated security.md 2023-11-16 15:38:53 +02:00
Lauri Ojansivu 59874d16b9 Updated. 2023-11-16 15:37:40 +02:00
Lauri Ojansivu 026236edc9 Updated. 2023-11-16 15:36:40 +02:00
Lauri Ojansivu e91e68c48c Updated contributing. 2023-11-16 15:35:50 +02:00
Lauri Ojansivu d840cb3be7 Updated contributing. 2023-11-16 15:23:29 +02:00
Lauri Ojansivu 2b1d2222cc Added governance. 2023-11-16 15:09:29 +02:00
Lauri Ojansivu b6fdbbd2bb Updated ChangeLog. 2023-11-14 05:44:55 -05:00
Lauri Ojansivu 0c54c1540c Removed console.log.
Thanks to xet7 !
2023-11-14 05:42:03 -05:00
Lauri Ojansivu fae5f6d64a Merge pull request #5205 from gustavengstrom/master
Updated swimlane (restore and changed title) and board (changed title) webhooks
2023-11-14 12:41:26 +02:00
gustavengstrom 17c4c44426 Merge branch 'wekan:main' into master 2023-11-14 09:50:28 +01:00
Gustav Engström 67835e3421 Added change board title to available webhooks 2023-11-14 09:49:10 +01:00
Gustav Engström 832bd6187c Added restore swimlane and swimlane title to webhooks 2023-11-14 08:16:40 +01:00
Lauri Ojansivu 6507d2be71 v7.18 2023-11-14 02:26:23 +02:00
Lauri Ojansivu 21785a9322 Updated ChangeLog. 2023-11-13 19:17:39 -05:00
Lauri Ojansivu fc387d0ddf Merge pull request #5198 from gustavengstrom/master
Added restore list and changing list title to outgoing webhooks
2023-11-14 02:15:39 +02:00
Lauri Ojansivu 27e749abb8 Updated ChangeLog. 2023-11-13 19:15:10 -05:00
Lauri Ojansivu 83143ee570 Updated ChangeLog. 2023-11-13 19:12:46 -05:00
Lauri Ojansivu d4252f3056 Updated release scripts. 2023-11-13 19:10:54 -05:00
Gustav Engström 1dd97ebd49 Added restore list and change list title to webhooks 2023-11-12 20:42:25 +01:00
Gustav Engström bfa15d4719 Added missing activity Type: restoredList 2023-11-12 09:59:35 +01:00
Lauri Ojansivu 4b22f29826 Merge pull request #5196 from mueller-ma/add-source-label
Add label org.opencontainers.image.source
2023-11-10 14:40:55 +02:00
mueller-ma 0f14bd3358 Add label org.opencontainers.image.source
Closes #5191
2023-11-10 13:32:26 +01:00
Lauri Ojansivu f7d5d65c0c v7.17 2023-11-09 21:23:01 +02:00
Lauri Ojansivu 86fbfd3c50 Updated ChangeLog. 2023-11-09 21:09:54 +02:00
Lauri Ojansivu cfde9d5a61 Merge pull request #5194 from mfilser/reactiveMiniMonIndex_for_server_side
ReactiveMiniMongoIndex for Server-Side
2023-11-09 21:04:34 +02:00
Martin Filser a9932823c4 ReactiveMiniMongoIndex for Server-Side
- fixes: #5069 (move card rule on checklist complete doesn't work)
2023-11-09 19:45:22 +01:00
Lauri Ojansivu 67b99a88fc Updated translations. 2023-11-09 17:43:16 +02:00
Lauri Ojansivu 455ec8c3d8 v7.16 2023-11-09 17:20:46 +02:00
Lauri Ojansivu 42ece21fa1 Fix users.save is not a function.
Thanks to xet7 !
2023-11-09 17:16:02 +02:00
Lauri Ojansivu 663ecab51e v7.15 2023-11-09 13:09:53 +02:00
Lauri Ojansivu dbae718f4d Updated ChangeLog. 2023-11-09 12:59:46 +02:00
Lauri Ojansivu 52e76c5496 Add more Docker Labels to Dockerfile.
Thanks to mueller-ma and xet7 !

Fixes #5191
2023-11-09 12:57:41 +02:00
Lauri Ojansivu 71b6cd630a Updated ChangeLog. 2023-11-09 12:47:52 +02:00
Lauri Ojansivu 2c36fe3d45 Commented out links at My Cards Table, because they unexpectly caused to go elsewhere from current view.
Thanks to xet7 !
2023-11-09 12:45:21 +02:00
Lauri Ojansivu 28b14777c2 Updated ChangeLog. 2023-11-09 12:15:29 +02:00
Lauri Ojansivu 4e97a5351a Fix missing profile/avatar pictures.
Thanks to kovacs-andras and xet7 !

Fixes #5147
2023-11-09 12:11:36 +02:00
Lauri Ojansivu 2ab5009de7 v7.14 2023-11-09 07:17:55 +02:00
Lauri Ojansivu 65668e91fe Updated translations. 2023-11-09 07:13:38 +02:00
Lauri Ojansivu d6098dbedf Updated ChangeLog. 2023-11-09 07:06:27 +02:00
Lauri Ojansivu fe6b94e539 Merge pull request #5189 from mfilser/notifications_are_now_displayed_correctly_again
Notifications are now displayed correctly again
2023-11-09 07:03:32 +02:00
Martin Filser 00e60ff855 notifications are now always ordered from newest to oldest activity 2023-11-08 23:23:10 +01:00
Martin Filser c4882707e9 use ReactiveMiniMongoIndex for notifications 2023-11-08 23:23:10 +01:00
Martin Filser 402528d97e notifications are now displayed correctly again 2023-11-08 23:23:10 +01:00
Lauri Ojansivu 4e25e335a9 Updated ChangeLog. 2023-11-08 12:57:18 +02:00
Lauri Ojansivu 972981a579 Removed double edit text from card description.
Thanks to derbolle and xet7 !

Fixes #5187
2023-11-08 12:54:34 +02:00
Lauri Ojansivu ce5abf8299 Updated translations. 2023-11-08 12:38:57 +02:00
Lauri Ojansivu 8bb31861a7 Merge pull request #5184 from wekan/dependabot/github_actions/helm/chart-releaser-action-1.6.0
Bump helm/chart-releaser-action from 1.5.0 to 1.6.0
2023-11-06 23:04:26 +00:00
dependabot[bot] 7d2e40ee47 Bump helm/chart-releaser-action from 1.5.0 to 1.6.0
Bumps [helm/chart-releaser-action](https://github.com/helm/chart-releaser-action) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/helm/chart-releaser-action/releases)
- [Commits](https://github.com/helm/chart-releaser-action/compare/v1.5.0...v1.6.0)

---
updated-dependencies:
- dependency-name: helm/chart-releaser-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 20:54:17 +00:00
Lauri Ojansivu f0de48a3c4 Updated translations. 2023-11-05 21:47:33 +02:00
Lauri Ojansivu 799e66c078 Updated ChangeLog. 2023-11-05 21:46:08 +02:00
Lauri Ojansivu 55903472aa Upgraded to Meteor 2.14-beta.0.
Thanks to Meteor developers!
2023-11-05 21:40:19 +02:00
Lauri Ojansivu 22c7d3b07f v7.12 2023-11-03 01:20:40 +02:00
Lauri Ojansivu 485737f6b0 Updated ChangeLog. 2023-11-03 01:15:05 +02:00
Lauri Ojansivu b756150f76 Fix Add List button too wide at themes: Clearblue, Modern, Exodark.
Thanks to xet7 !

Fixes #5179
2023-11-03 01:12:18 +02:00
Lauri Ojansivu 40108d63bb Updated API docs for WeKan v7.11 2023-11-03 00:15:36 +02:00
Lauri Ojansivu 8f3103e329 Updated ChangeLog. 2023-11-02 19:58:50 +00:00
Lauri Ojansivu 9bf1478587 Updated ChangeLog. 2023-11-02 21:20:47 +02:00
Lauri Ojansivu 91cf377948 Merge branch 'main' of github.com:wekan/wekan 2023-11-02 21:18:41 +02:00
Lauri Ojansivu ff4c8a5d23 Updated Snap Candidate MongoDb to 6.0.11.
Thanks to MongoDB developers!
2023-11-02 21:17:34 +02:00
Lauri Ojansivu 439f76e48a Updated ChangeLog. 2023-11-02 19:12:35 +00:00
Lauri Ojansivu 720d4223e2 Fix Windows build bundle script.
Thanks to xet7 !
2023-11-02 19:10:54 +00:00
Lauri Ojansivu 4518e2d23c v7.11 2023-11-02 19:49:56 +02:00
Lauri Ojansivu c9a24c38d4 Updated ChangeLog. 2023-11-02 05:40:52 +02:00
Lauri Ojansivu b54d17467c Updated dependencies.
Thanks to exceljs developers!
2023-11-02 05:39:07 +02:00
Lauri Ojansivu 5c93de8911 Updated ChangeLog. 2023-11-01 21:39:16 +02:00
Lauri Ojansivu 8323649cf0 Updated dependencies.
Thanks to zodern.
2023-11-01 21:37:51 +02:00
Lauri Ojansivu 75fbf00eb7 Updated translations. 2023-11-01 21:17:37 +02:00
Lauri Ojansivu 820908ab05 Updated ChangeLog. 2023-10-31 16:07:04 +02:00
Lauri Ojansivu 4fe168b03b Fix Security issue: Hyperlink injection.
Thanks to mc-marcy and xet7 !

Fixes #5176
2023-10-31 16:04:25 +02:00
Lauri Ojansivu 4825bcec8d Updated ChangeLog. 2023-10-31 15:13:15 +02:00
Lauri Ojansivu 0f99f22fa5 Docker base image to Ubuntu 23.10.
Thanks to Ubuntu developers!
2023-10-31 15:11:47 +02:00
Lauri Ojansivu 051d1670b7 For reporting secrity issues, mention a way at top, trying to make it more clear.
Related #5176
2023-10-30 11:16:49 -04:00
Lauri Ojansivu ef0e1f9089 Updated ChangeLog. 2023-10-27 10:58:32 -04:00
Lauri Ojansivu 974c177237 Updated dependencies. 2023-10-27 10:53:47 -04:00
Lauri Ojansivu 75de7b119d Updated translations. 2023-10-27 10:53:19 -04:00
Lauri Ojansivu b088763272 Updated dependencies. 2023-10-25 16:17:42 -04:00
Lauri Ojansivu c45bf4e368 Updated dependencies.
Thanks to developers of dependencies !
2023-10-25 10:40:07 -04:00
Lauri Ojansivu af5054e7fb Updated translations. 2023-10-25 10:30:17 -04:00
Lauri Ojansivu 9529d71732 Updated translations. 2023-10-23 03:49:20 -04:00
Lauri Ojansivu 74ea237c2a Updated ChangeLog. 2023-10-20 08:39:31 +03:00
Lauri Ojansivu c8f1d99fe6 Merge pull request #5168 from mfilser/open_card_details_always_in_the_middle_of_the_screen
Open card details always in the middle of the screen
2023-10-20 01:38:37 +03:00
Martin Filser a22631915b remove old open card code to scroll the screen 2023-10-19 21:51:43 +02:00
Martin Filser 05df419a46 maximized card is now always visible 2023-10-19 21:51:43 +02:00
Martin Filser 0f1b57fee4 remove old open card code 2023-10-19 21:51:43 +02:00
Martin Filser e69a9f17b8 open card details always in the center of the screen 2023-10-19 21:51:43 +02:00
Lauri Ojansivu de3467a6d5 Updated translations. 2023-10-16 09:12:22 -04:00
Lauri Ojansivu 7214f6d49a Updated ChangeLog. 2023-10-16 08:50:38 -04:00
Lauri Ojansivu c1bc6d4733 Updated translations. 2023-10-11 10:59:44 -04:00
Lauri Ojansivu 3d4f97364c Updated ChangeLog. 2023-10-11 09:50:34 -04:00
Lauri Ojansivu 2c74240bcb Updated security.md 2023-10-11 09:46:24 -04:00
Lauri Ojansivu 90da40fde0 Updated security.md 2023-10-11 08:56:36 -04:00
Lauri Ojansivu fe985e219a Updated security.md. 2023-10-11 08:16:08 -04:00
Lauri Ojansivu f5355422ee Added dot. 2023-10-11 08:10:33 -04:00
Lauri Ojansivu aae7960f25 Updated security.md.
Thanks to xet7 !
2023-10-11 08:07:45 -04:00
Lauri Ojansivu b99f878c98 Merge pull request #5161 from faburem/main
Fixes issue #5131 (at least partly)
2023-10-11 11:39:44 +03:00
Fabian Kromer 4b61f38cba Fixes issue #5131 (at least partly)
You still have to click on "Template" twice to trigger the popup but IMHO it's better than the feature being completely broken.
2023-10-10 14:48:15 +02:00
Lauri Ojansivu 4085a98bcd Updated ChangeLog. 2023-10-09 09:20:19 -04:00
Lauri Ojansivu 524e3b098f Merge pull request #5159 from faburem/main
Fix LDAP login (#issue 5156)
2023-10-09 16:17:25 +03:00
Fabian Kromer dc8595ad68 Fully replace bunyan with meteor/logging for the LDAP logger (fixes issue #5156) 2023-10-09 11:45:44 +02:00
Lauri Ojansivu a76067abfa Updated translations. 2023-10-06 16:18:59 +03:00
Lauri Ojansivu 6ef10a54bd Updated ChangeLog. 2023-10-03 14:15:44 -04:00
Lauri Ojansivu c9e80eaa03 Added info to docker-compose.yml about newest docker image of newest git commit automatic build.
Thanks to xet7 !
2023-10-03 14:13:54 -04:00
Lauri Ojansivu e47dcf734a Updated ChangeLog. 2023-10-03 11:18:10 -04:00
Lauri Ojansivu 4dfcc31506 Updated translations. 2023-10-03 11:10:59 -04:00
Lauri Ojansivu 14e5c96f73 Updated ChangeLog. 2023-10-03 09:59:23 -04:00
Lauri Ojansivu 53e569d285 Fixed can not close sidebar at Modern theme.
Thanks to xet7 !
2023-10-03 09:56:37 -04:00
Lauri Ojansivu 71381dce95 Updated ChangeLog. 2023-10-03 09:37:50 -04:00
Lauri Ojansivu 0cc63b810c Feature: Copy Card Details code block to clipboard.
Thanks to C0rn3j and xet7 !

Fixes #5149
2023-10-03 09:35:18 -04:00
Lauri Ojansivu 7724b0d5bb Updated translations. 2023-10-03 07:09:12 -04:00
Lauri Ojansivu 6206eca725 Updated ChangeLog. 2023-10-03 06:46:16 -04:00
Lauri Ojansivu 069e2c69b2 Feature: Convert to Markdown button at editor of Card Description and Comment. Useful when there is no WYSIWYG editor.
Thanks to BabyFnord and xet7 !

Fixes #5012,
fixes #3003,
fixes #3399,
fixes #2968,
fixes #2933
2023-10-03 06:38:15 -04:00
Lauri Ojansivu 0e902d73a8 Updated year at license. 2023-10-01 18:37:38 -04:00
Lauri Ojansivu be72274ca5 Updated screenshot at readme. 2023-10-01 16:25:38 -04:00
Lauri Ojansivu ab0dacc65a Updated ChangeLog. 2023-09-29 13:24:02 +03:00
Lauri Ojansivu cfa0a063ce docker-compose.yml back to latest docker image tag.
Thanks to xet7 !
2023-09-29 13:21:28 +03:00
582 changed files with 30632 additions and 6923 deletions

No files matched your search

+102 -94
View File
@@ -1,20 +1,24 @@
FROM ubuntu:21.10
LABEL maintainer="sgr"
FROM ubuntu:24.04
LABEL maintainer="wekan"
LABEL org.opencontainers.image.ref.name="ubuntu"
LABEL org.opencontainers.image.version="24.04"
LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
# 2022-04-25:
# - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
# so changing to 21.10. https://github.com/wekan/wekan/issues/4488
ENV BUILD_DEPS="gnupg gosu libarchive-tools wget curl bzip2 g++ build-essential python3 git ca-certificates iproute2"
ENV DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ iproute2 apt-transport-https libarchive-tools git"
ENV DEV_DEPS="curl python3 ca-certificates build-essential"
ARG DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v14.21.4 \
METEOR_RELEASE=METEOR@2.13 \
METEOR_RELEASE=METEOR@2.14 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
NPM_VERSION=6.14.17 \
FIBERS_VERSION=4.0.1 \
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
@@ -28,15 +32,14 @@ ENV \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
ATTACHMENTS_STORE_PATH="" \
ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
ATTACHMENTS_UPLOAD_MIME_TYPES="" \
ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
AVATARS_UPLOAD_MIME_TYPES="" \
AVATARS_UPLOAD_MAX_SIZE=0 \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
@@ -48,12 +51,15 @@ ENV \
MATOMO_SITE_ID="" \
MATOMO_DO_NOT_TRACK=true \
MATOMO_WITH_USERNAME=false \
METRICS_ALLOWED_IP_ADDRESSES="" \
BROWSER_POLICY_ENABLED=true \
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OIDC_REDIRECTION_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_B2C_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
OAUTH2_CLIENT_ID="" \
OAUTH2_SECRET="" \
@@ -70,6 +76,9 @@ ENV \
LDAP_ENABLE=false \
LDAP_PORT=389 \
LDAP_HOST="" \
LDAP_AD_SIMPLE_AUTH="" \
LDAP_USER_AUTHENTICATION=false \
LDAP_USER_AUTHENTICATION_FIELD=uid \
LDAP_BASEDN="" \
LDAP_LOGIN_FALLBACK=false \
LDAP_RECONNECT=true \
@@ -87,8 +96,6 @@ ENV \
LDAP_ENCRYPTION=false \
LDAP_CA_CERT="" \
LDAP_REJECT_UNAUTHORIZED=false \
LDAP_USER_AUTHENTICATION=false \
LDAP_USER_AUTHENTICATION_FIELD=uid \
LDAP_USER_SEARCH_FILTER="" \
LDAP_USER_SEARCH_SCOPE="" \
LDAP_USER_SEARCH_FIELD="" \
@@ -143,69 +150,32 @@ ENV \
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
DEFAULT_WAIT_SPINNER="" \
ORACLE_OIM_ENABLED=false \
WAIT_SPINNER="" \
WRITABLE_PATH=/data \
S3=""
# \
# NODE_OPTIONS="--max_old_space_size=4096"
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#- OIDC_REDIRECTION_ENABLED=true
#---------------------------------------------------------------------
# Install OS
RUN set -o xtrace \
&& useradd --user-group -m --system --home-dir /home/wekan wekan \
&& apt-get update \
&& apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
&& apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
# OLD:
# && curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$ARCHITECTURE.tar.xz" \
# && curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/SHASUMS256.txt.asc" \
# Install NodeJS
RUN set -o xtrace \
&& cd /tmp \
&& curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.xz" \
&& curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt" \
&& grep " node-$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs \
&& mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config \
&& npm install -g npm@${NPM_VERSION} \
&& chown wekan:wekan --recursive /home/wekan/.config
ENV DEBIAN_FRONTEND=dialog
USER wekan
# Install Meteor
RUN set -o xtrace \
&& cd /home/wekan \
&& curl https://install.meteor.com/?release=$METEOR_VERSION --output /home/wekan/install-meteor.sh \
# Replace tar with bsdtar in the install script; https://github.com/jshimko/meteor-launchpad/issues/39
&& sed --in-place "s/tar -xzf.*/bsdtar -xf \"\$TARBALL_FILE\" -C \"\$INSTALL_TMPDIR\"/g" /home/wekan/install-meteor.sh \
&& sed --in-place 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' /home/wekan/install-meteor.sh \
&& printf "\n[-] Installing Meteor $METEOR_VERSION...\n\n" \
&& sh /home/wekan/install-meteor.sh
ENV PATH=$PATH:/home/wekan/.meteor/
USER root
RUN echo "export PATH=$PATH" >> /etc/environment
USER wekan
RUN <<EOR
echo "export PATH=$PATH" >> /etc/environment
EOR
# Copy source dir
RUN set -o xtrace \
&& mkdir -p /home/wekan/app/.meteor \
&& mkdir -p /home/wekan/app/packages
RUN <<EOR
set -o xtrace
mkdir -p /home/wekan/app/.meteor
mkdir -p /home/wekan/app/packages
EOR
COPY \
.meteor/.finished-upgraders \
@@ -230,44 +200,83 @@ COPY \
packages \
/home/wekan/app/packages/
USER root
# Install OS
RUN <<EOR
set -o xtrace
RUN set -o xtrace \
&& chown -R wekan:wekan /home/wekan/app /home/wekan/.meteor
# Add non-root user wekan
useradd --user-group --system --home-dir /home/wekan wekan
# OS dependencies
apt-get update --assume-yes
apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS} ${DEV_DEPS}
USER wekan
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
cp $(which tar) $(which tar)~
ln -sf $(which bsdtar) $(which tar)
RUN \
set -o xtrace && \
# Build app
cd /home/wekan/app && \
/home/wekan/.meteor/meteor add standard-minifier-js && \
/home/wekan/.meteor/meteor npm install && \
/home/wekan/.meteor/meteor build --directory /home/wekan/app_build
# Install NodeJS
cd /tmp
RUN \
set -o xtrace && \
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w package.json npm-shrinkwrap.json && \
npm install && \
cd node_modules/fibers && \
node build.js
# Download nodejs
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz"
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt"
# Verify nodejs authenticity
grep "node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz" "SHASUMS256.txt" | shasum -a 256 -c -
rm -f "SHASUMS256.txt"
# Install Node
tar xzf "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" -C /usr/local --strip-components=1 --no-same-owner
rm "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" "SHASUMS256.txt"
ln -s "/usr/local/bin/node" "/usr/local/bin/nodejs"
mkdir -p "/opt/nodejs/lib/node_modules/fibers/.node-gyp" "/root/.node-gyp/${NODE_VERSION} /home/wekan/.config"
# Install node dependencies
npm install -g npm@${NPM_VERSION}
chown --recursive wekan:wekan /home/wekan/.config
# Install Meteor
cd /home/wekan
chown --recursive wekan:wekan /home/wekan
echo "Starting meteor ${METEOR_RELEASE} installation... \n"
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh
mv /root/.meteor /home/wekan/
chown --recursive wekan:wekan /home/wekan/.meteor
# sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
cd /home/wekan/.meteor
gosu wekan:wekan /home/wekan/.meteor/meteor -- help
# Build app (Development)
cd /home/wekan/app
gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js
gosu wekan:wekan /home/wekan/.meteor/meteor npm install
# Put back the original tar
mv $(which tar)~ $(which tar)
USER root
# Cleanup
RUN \
set -o xtrace && \
apt-get clean -y && \
apt-get autoremove -y && \
rm -Rf /tmp/* && \
rm -Rf /home/wekan/app_build && \
rm -Rf /var/cache/apt /var/lib/apt/lists && \
rm -Rf /var/lib/apt/lists/*
apt-get remove --purge --assume-yes ${BUILD_DEPS}
apt-get install --assume-yes --no-install-recommends build-essential
apt-get autoremove --assume-yes
apt-get clean --assume-yes
rm -Rf /tmp/*
rm -Rf /var/lib/apt/lists/*
rm -Rf /var/cache/apt
rm -Rf /var/lib/apt/lists
rm -Rf /home/wekan/app_build
mkdir /data
chown wekan --recursive /data
EOR
USER wekan
ENV PORT=3000
EXPOSE $PORT
STOPSIGNAL SIGKILL
WORKDIR /home/wekan/app
#---------------------------------------------------------------------
@@ -277,7 +286,6 @@ WORKDIR /home/wekan/app
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------------------------------
#TODO:
#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
#
CMD ["/home/wekan/.meteor/meteor", "run", "--verbose", "--settings", "settings.json"]
+32 -14
View File
@@ -1,18 +1,24 @@
## Issue
<!--
**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to the newest WeKan ® before reporting an issue.
Please report these issues elsewhere:
- SECURITY ISSUES, PGP EMAIL: https://github.com/wekan/wekan/blob/main/SECURITY.md
- UCS: https://github.com/wekan/univention/issues
**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to the newest
WeKan ® before reporting an issue, if possible.
Please search existing Open and Closed issues, most questions have already been answered.
If you can not login for any reason: https://github.com/wekan/wekan/wiki/Forgot-Password
Email settings, only SMTP MAIL_URL and MAIL_FROM are in use: https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
The following types of issues should be reported separately:
- SECURITY ISSUES: https://github.com/wekan/wekan/blob/main/SECURITY.md
- UCS: https://github.com/wekan/univention/issues
-->
Email settings, only SMTP MAIL_URL and MAIL_FROM are in use:
https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
### Server Setup Information
<!-- Please anonymize info, and do not any of your Wekan board URLs, passwords, API tokens etc to this public issue. -->
Please anonymize info, and do not any of your Wekan board URLs, passwords,
API tokens etc to this public issue.
* Did you test in newest Wekan?:
* Did you configure root-url correctly so Wekan cards open correctly (see https://github.com/wekan/wekan/wiki/Settings)?
* Operating System:
@@ -23,13 +29,25 @@ The following types of issues should be reported separately:
* What webbrowser version are you using (Wekan should work on all modern browsers that support Javascript)?
### Problem description
<!-- Add a recorded animated gif (e.g. with https://github.com/phw/peek) about how it works currently, and screenshot mockups how it should work. -->
Add a recorded animated gif (e.g. with https://github.com/phw/peek) about
how it works currently, and screenshot mockups how it should work.
#### Reproduction Steps
#### Logs
<!-- Check Right Click>Inspect>Console in you browser - generally Chrome shows more detailed info than Firefox. -->
<!-- Please anonymize logs.
#### Logs
Check Right Click / Inspect / Console in you browser - generally Chromium
based browsers show more detailed info than Firefox based browsers.
Please anonymize logs.
Snap: sudo snap logs wekan.wekan
Docker: sudo docker logs wekan-app
If logs are very long, attach them in .zip file -->
If logs are very long, attach them in .zip file
+1 -1
View File
@@ -11,4 +11,4 @@ jobs:
- name: 'Checkout Repository'
uses: actions/checkout@v4
- name: 'Dependency Review'
uses: actions/dependency-review-action@v3
uses: actions/dependency-review-action@v4
+3 -3
View File
@@ -38,7 +38,7 @@ jobs:
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d
uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446
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@96383f45573cb7f253c731d3b3ab81c87ef81934
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81
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@0565240e2d4ab88bba5387d719585280857ece09
uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
+1 -1
View File
@@ -25,6 +25,6 @@ jobs:
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.5.0
uses: helm/chart-releaser-action@v1.6.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+7 -7
View File
@@ -95,7 +95,7 @@ jobs:
# CACHING
- name: Install Meteor
id: cache-meteor-install
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/.meteor
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
@@ -104,7 +104,7 @@ jobs:
- name: Cache NPM dependencies
id: cache-meteor-npm
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/.npm
key: v1-npm-${{ hashFiles('package-lock.json') }}
@@ -113,7 +113,7 @@ jobs:
- name: Cache Meteor build
id: cache-meteor-build
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
.meteor/local/resolver-result-cache.json
@@ -125,7 +125,7 @@ jobs:
v1-meteor_build_cache-
- name: Setup meteor
uses: meteorengineer/setup-meteor@v1
uses: meteorengineer/setup-meteor@v2
with:
meteor-release: '2.2'
@@ -136,7 +136,7 @@ jobs:
run: sh ./test-wekan.sh -cv
- name: Upload coverage
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: coverage-folder
path: .coverage/
@@ -150,14 +150,14 @@ jobs:
uses: actions/checkout@v4
- name: Download coverage
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
name: coverage-folder
path: .coverage/
- name: Coverage Report
uses: VeryGoodOpenSource/very_good_coverage@v2.1.0
uses: VeryGoodOpenSource/very_good_coverage@v3.0.0
with:
path: ".coverage/lcov.info"
min_coverage: 1 # TODO add tests and increase to 95!
+6 -6
View File
@@ -6,7 +6,7 @@
meteor-base@1.5.1
# Build system
ecmascript@0.16.7
ecmascript@0.16.8
standard-minifier-js@2.8.1
mquandalle:jade
coffeescript@2.4.1!
@@ -20,11 +20,11 @@ cottz:publish-relations
dburles:collection-helpers
idmontie:migrations
easy:search
mongo@1.16.7
mongo@1.16.8
mquandalle:collection-mutations
# Account system
accounts-password@2.3.4
accounts-password@2.4.0
useraccounts:core
useraccounts:flow-routing
useraccounts:unstyled
@@ -42,7 +42,7 @@ jquery@3.0.0!
random@1.2.1
reactive-dict@1.3.1
session@1.2.1
tracker@1.3.2
tracker@1.3.3
underscore@1.0.13
arillo:flow-router-helpers
audit-argument-checks@1.0.7
@@ -83,14 +83,14 @@ matb33:collection-hooks
simple:json-routes
kadira:flow-router
spacebars
service-configuration@1.3.1
service-configuration@1.3.2
communitypackages:picker
minifier-css@1.6.4
blaze
kadira:blaze-layout
peerlibrary:blaze-components
ejson@1.1.3
logging@1.3.2
logging@1.3.3
wekan-fullcalendar
momentjs:moment@2.29.3
wekan-fontawesome
+1 -1
View File
@@ -1 +1 @@
METEOR@2.13.3
METEOR@2.14
+24 -23
View File
@@ -1,6 +1,6 @@
accounts-base@2.2.8
accounts-oauth@1.4.2
accounts-password@2.3.4
accounts-base@2.2.10
accounts-oauth@1.4.3
accounts-password@2.4.0
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
@@ -10,13 +10,13 @@ allow-deny@1.1.1
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.8.0
babel-compiler@7.10.4
babel-compiler@7.10.5
babel-runtime@1.5.1
base64@1.0.12
binary-heap@1.0.11
blaze@2.7.1
blaze-tools@1.1.3
boilerplate-generator@1.7.1
boilerplate-generator@1.7.2
caching-compiler@1.2.2
caching-html-compiler@1.2.1
callback-hook@1.5.1
@@ -29,22 +29,22 @@ dburles:collection-helpers@1.1.0
ddp@1.4.1
ddp-client@2.6.1
ddp-common@1.4.0
ddp-rate-limiter@1.2.0
ddp-server@2.6.2
ddp-rate-limiter@1.2.1
ddp-server@2.7.0
deps@1.0.12
diff-sequence@1.1.2
dynamic-import@0.7.3
easy:search@2.2.1
easysearch:components@2.2.2
easysearch:core@2.2.2
ecmascript@0.16.7
ecmascript@0.16.8
ecmascript-runtime@0.8.1
ecmascript-runtime-client@0.12.1
ecmascript-runtime-server@0.11.0
ejson@1.1.3
email@2.2.5
es5-shim@4.8.0
fetch@0.1.3
fetch@0.1.4
geojson-utils@1.0.11
hot-code-push@1.0.4
html-tools@1.1.3
@@ -60,10 +60,10 @@ kadira:flow-router@2.12.1
konecty:mongo-counter@0.0.5_3
lmieulet:meteor-coverage@1.1.4
localstorage@1.2.0
logging@1.3.2
logging@1.3.3
matb33:collection-hooks@1.3.0
mdg:validation-error@0.5.1
meteor@1.11.3
meteor@1.11.5
meteor-autosize@5.0.1
meteor-base@1.5.1
meteorhacks:aggregate@1.3.0
@@ -77,11 +77,11 @@ minifier-css@1.6.4
minifier-js@2.7.5
minifiers@1.1.8-faster-rebuild.0
minimongo@1.9.3
modern-browsers@0.1.9
modules@0.19.0
modern-browsers@0.1.10
modules@0.20.0
modules-runtime@0.13.1
momentjs:moment@2.29.3
mongo@1.16.7
mongo@1.16.8
mongo-decimal@0.1.3
mongo-dev-server@1.1.0
mongo-id@1.0.8
@@ -94,8 +94,8 @@ mquandalle:jade-compiler@0.4.5
mquandalle:jquery-textcomplete@0.8.0_1
mquandalle:mousetrap-bindglobal@0.0.1
msavin:usercache@1.8.0
npm-mongo@4.16.0
oauth@2.2.0
npm-mongo@4.17.2
oauth@2.2.1
oauth2@1.3.2
observe-sequence@1.0.21
ongoworks:speakingurl@1.1.0
@@ -111,19 +111,19 @@ peerlibrary:blaze-components@0.23.0
peerlibrary:computed-field@0.10.0
peerlibrary:data-lookup@0.3.0
peerlibrary:reactive-field@0.6.0
percolate:synced-cron@1.3.2
percolate:synced-cron@1.5.2
promise@0.12.2
raix:eventemitter@0.1.3
raix:handlebar-helpers@0.2.5
random@1.2.1
rate-limit@1.1.1
react-fast-refresh@0.2.7
react-fast-refresh@0.2.8
reactive-dict@1.3.1
reactive-var@1.0.12
reload@1.3.1
retry@1.1.0
routepolicy@1.1.1
service-configuration@1.3.1
service-configuration@1.3.3
session@1.2.1
sha@1.0.9
shell-server@0.5.0
@@ -132,7 +132,7 @@ simple:json-routes@2.3.1
simple:rest-accounts-password@1.2.2
simple:rest-bearer-token-parser@1.1.1
simple:rest-json-error-handler@1.1.1
socket-stream-client@0.5.1
socket-stream-client@0.5.2
spacebars@1.4.1
spacebars-compiler@1.3.1
standard-minifier-js@2.8.1
@@ -141,14 +141,15 @@ templating@1.4.1
templating-compiler@1.4.1
templating-runtime@1.5.0
templating-tools@1.2.2
tracker@1.3.2
tracker@1.3.3
typescript@4.9.5
ui@1.0.13
underscore@1.0.13
url@1.3.2
useraccounts:core@1.16.2
useraccounts:flow-routing@1.15.0
useraccounts:unstyled@1.14.2
webapp@1.13.5
webapp@1.13.6
webapp-hashing@1.1.1
wekan-accounts-cas@0.1.0
wekan-accounts-lockout@1.0.0
@@ -162,4 +163,4 @@ wekan-markdown@1.0.9
wekan-oidc@1.0.12
yasaricli:slugify@0.0.7
zimme:active-route@2.3.2
zodern:types@1.0.9
zodern:types@1.0.10
+718 -14
View File
@@ -1,25 +1,729 @@
[Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac)
Newest Node.js is at https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4
Newest WeKan at these amd64 platforms:
Required versions of Node.js, MongoDB etc are listed at https://wekan.github.io
Download section.
- Windows and Linux bundle
- Snap Candidate
- Docker
- Kubernetes
Newest WeKan is on platforms: Snap Candidate, Docker, Kubernetes, Source/Bundle. Download section at https://wekan.github.io
Fixing other platforms In Progress.
In Progress is:
- Getting newest WeKan to all platforms, fixing any migration and upgrade issues
- Adding more platforms
- Developing all paid features and fixes https://wekan.team/commercial-support/
- More info and news at https://github.com/wekan/wekan/issues/4578#issuecomment-1505909376
Note:
- Snap Candidate has newest WeKan with MongoDB 6 https://github.com/wekan/wekan/issues/4824#issuecomment-1425753485
- Snap Beta has old WeKan with MongoDB 5 https://github.com/wekan/wekan/issues/4780#issuecomment-1427625571
- Snap Stable has old WeKan 6.09 with MongoDB 3.2.2
- Install info at Server part of webpage https://wekan.github.io
- Newest Node.js is at https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4
- MongoDB 6.x
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
# v7.49 2024-06-11 WeKan ® release
This release adds the following updates:
- [WeKan new release version number from wiki to WeKan repo docs](https://github.com/wekan/wekan/commit/e5c7650fc8eb5c3fcc6216f12e806ceb56fd94d9).
Thanks to xet7.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5430),
[Part 2](https://github.com/wekan/wekan/pull/5441).
Thanks to dependabot.
and fixes the following bugs:
- [Bugfix: Strikethrough inactive Teams and orginizations logic was inverted](https://github.com/wekan/wekan/pull/5435).
Thanks to Hekatomb.
- [Changed back to original icon of Edit Description](https://github.com/wekan/wekan/commit/e3214c874ec9369ab6b865154f7964da8ec55f45).
Thanks to saschafoerster, C0rn3j and xet7.
- [Fill out Org and Team in adminReports](https://github.com/wekan/wekan/pull/5440).
Thanks to Hekatomb.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.48 2024-06-06 WeKan ® release
This release adds the following updates:
- [Updated release scripts](https://github.com/wekan/wekan/commit/4a9d881e47751ec49d24af5bf4fd1c5452ceb194).
Thanks to xet7.
- Add changes from wiki to docs.
[Part 1](https://github.com/wekan/wekan/commit/13be8160d5b6a894c674d04c37ff9e653e7bd4b0),
[Part 2](https://github.com/wekan/wekan/commit/e65a8c90177cd948ca8212486a365b65cd7d5372).
Thanks to xet7.
and fixes the following bugs:
- [Fix Admin Panel pages Organizations and Teams, where HTML Tables were broken](https://github.com/wekan/wekan/commit/36bb5e099ed9f1f88c0399867bd76f040467745c).
Thanks to Hekatomb and xet7.
- [Try to show more of title of collapsed list](https://github.com/wekan/wekan/commit/ec0e88ad2e914437b4767456a160f2c1138fc5f2).
Thanks to C0rn3j and xet7.
- [Allow Normal user to add new swimlane, list and label](https://github.com/wekan/wekan/commit/04b995e77fdb5abc186e02482a75aba6a5cf0759).
Thanks to RyanHecht, norrig and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.47 2024-06-03 WeKan ® release
This release adds the following updates:
- [Update Docker base images to Ubuntu 24.04](https://github.com/wekan/wekan/commit/79e2001708b5110b26cf54b15bbbf90f7977fe90).
Thanks to xet7.
- [Updated to MongoDB 6.0.15 at Snap Candidate](https://github.com/wekan/wekan/commit/4e2a8735bc2e449a2a3c949d042fb625052a1152).
Thanks to MongoDB developers.
- [Updated release scripts](https://github.com/wekan/wekan/commit/2c9c9c43561093801004f0268d58b29d9a10b570).
Thanks to xet7.
and fixes the following bugs:
- [Only show Board name edit button to BoardAdmin](https://github.com/wekan/wekan/commit/5e2b423ef87c62a70a6b08abd2f185fd560f391f).
Thanks to xet7.
- [Fix Edit Description button is wildly out of place](https://github.com/wekan/wekan/commit/1f2fb2ccce38e9cac348f1c459784d6e5a949ded).
Thanks to C0rn3j and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.46 2024-06-03 WeKan ® release
This release adds the following updates:
- [Update ukrainian translation](https://github.com/wekan/wekan/pull/5405).
Thanks to novashdima.
- [Updated GitHub issue template for issue instructions to be more visible](https://github.com/wekan/wekan/commit/5124265142c94d5044b81f81eaaa9c3bc01cef58).
Thanks to xet7.
- [For development, only recommend Debian 12 amd64, because Sandstorm works at Debian 12. Sandstorm does not work at Ubuntu 24.04](https://github.com/wekan/wekan/commit/1bd30bc12129be8cc8a633a561bb8a5be76823d7).
Thanks to xet7. Related https://github.com/sandstorm-io/sandstorm/issues/3712
and fixes the following bugs:
- [Optimize SVGs and PNGs to save 550KB](https://github.com/wekan/wekan/pull/5403).
Thanks to C0rn3j.
- [Swap deprecated egrep for grep -E](https://github.com/wekan/wekan/pull/5404).
Thanks to C0rn3j.
- [Remove notification while copying board](https://github.com/wekan/wekan/pull/5412).
Thanks to e-gaulue.
- [Fixed loading of cards if there are more than 20 of them on one swimlane](https://github.com/wekan/wekan/pull/5417).
Thanks to novashdima.
- [Devcontainer, reduce image size and other necessary changes for development](https://github.com/wekan/wekan/pull/5418).
Thanks to mfilser.
- [Dockerfile production and dev same build](https://github.com/wekan/wekan/pull/5419).
Thanks to mfilser.
- [Remove second created at on activities](https://github.com/wekan/wekan/pull/5420).
Thanks to mfilser.
- [Fix Export CSV/TSV from Board create unhandled Exception](https://github.com/wekan/wekan/pull/5424).
Thanks to Dexus.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.45 2024-05-06 WeKan ® release
This release adds the following updates:
- [Update Docker base container to Ubuntu 24.04, and update software versions](https://github.com/wekan/wekan/commit/63117e87e759af965c8eeceaaa41f52815630d20).
Thanks to developers of dependencies.
- [Updated dependencies](https://github.com/wekan/wekan/pull/5392).
Thanks to developers of dependencies.
and fixes the following bugs:
- [Fix display of tables with a large number of rows](https://github.com/wekan/wekan/pull/5393).
Thanks to novashdima.
- [Fix white List color and define Silver in CSS instead of leaving it unset](https://github.com/wekan/wekan/pull/5400).
Thanks to C0rn3j.
- [Allow silver color to be set in List and Swimlane](https://github.com/wekan/wekan/pull/5401).
Thanks to C0rn3j.
- [Fix Can't set a Due Date that has a leading zero in time, errors with invalid time](https://github.com/wekan/wekan/commit/9cebee734740790145ca574c539ccebd067cee7e).
Thanks to C0rn3j and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.44 2024-04-26 WeKan ® release
This release adds the following new features:
- [Collapse Lists](https://github.com/wekan/wekan/commit/a601ba542aebefdfa8b5d683d22405ab3d5f8569).
Thanks to xet7.
- [Collapse Swimlanes. In Progress, does not work yet, not visible yet](https://github.com/wekan/wekan/commit b704d58f0f3cf5e7785b79d5a6c9f6c63da4159c).
Thanks to xet7.
and fixes the following bugs:
- [Fix board not visible at Collapse Lists](https://github.com/wekan/wekan/commit/e6476319bcb06cc71fa0eefa0a608ec3a7b89767).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.43 2024-04-18 WeKan ® release
This release adds the following updates:
- [Updated release script for Windows On-Premise, that is without container like Docker and Snap](https://github.com/wekan/wekan/commit/802eeb1e6bb87c45fa79298f67ff690e87f939f8).
Thanks to xet7.
- [Updated translations Transifex URL at readme](https://github.com/wekan/wekan/commit/9838af5e5630a6ef34175e110ddfb6bfc225b40c).
Thanks to xet7.
- [Improve Docker files](https://github.com/wekan/wekan/pull/5377).
Thanks to C0rn3j.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/commit/08e2f2f2731856255e0b40eb692328424efdf9ac),
[Part 2](https://github.com/wekan/wekan/commit/da99e363cd72cda7d400ce65785a6650e42c72cf).
Thanks to developers of dependencies.
and fixes the following bugs:
- [Fix DEBUG environment variable check](https://github.com/wekan/wekan/pull/5380).
Thanks to verdel.
- [By default, use localized long date-time format](https://github.com/wekan/wekan/pull/5381).
Thanks to tvogel.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.42 2024-04-03 WeKan ® release
This release fixes the following CRITICAL SECURITY ISSUES:
- [Fixed CRITICAL SECURITY ISSUE by updating meteor-node-stubs](https://github.com/wekan/wekan/commit/c461adff11456734fcb9193b5522cc6451078732).
Thanks to Meteor developers.
and adds the following updates:
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5355),
[Part 2](https://github.com/wekan/wekan/pull/5356),
[Part 3](https://github.com/wekan/wekan/commit/1c8f783767a680758f2219d2f416ce3ae2fb0c57).
Thanks to dependabot and developers of dependencies.
- [Small tweaks to moderndark theme](https://github.com/wekan/wekan/pull/5363).
Thanks to jghaanstra.
and fixes the following bugs:
- [Fixed link at readme](https://github.com/wekan/wekan/pull/5360).
Thanks to dyercode.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.41 2024-03-18 WeKan ® release
This release fixes the following bugs:
- Fixes for mongosh to allow snap packages to update to the edge/candidate version.
[Part 1](https://github.com/wekan/wekan/pull/5349),
[Part 2](https://github.com/wekan/wekan/pull/5350).
Thanks to lorodoes.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.40 2024-03-17 WeKan ® release
This release fixes the following bugs:
- [Fixed centering of text below custom login logo](https://github.com/wekan/wekan/commit/24c89aeb64cf6266d95f42124419d4f070864631).
Thanks to xet7.
- [Fixed In RTL, hamburger margin is too much in mobile](https://github.com/wekan/wekan/commit/583fca1814d916490b04947ba8d97dd85168fb22).
Thanks to mohammadZahedian and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.39 2024-03-16 WeKan ® release
This release adds the following updates:
- Clarify usage of api.py.
[Part 1](https://github.com/wekan/wekan/pull/5341).
[Part 2](https://github.com/wekan/wekan/commit/8f3c948614df0641b0971d1882cc241587d9d3b4).
Thanks to e-gaulue and xet7.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5343),
[Part 2](https://github.com/wekan/wekan/pull/5344).
and fixes the following bugs:
- [Make the contents of the cards grow to the list width](https://github.com/wekan/wekan/pull/5346).
Thanks to kuba-orlik.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.38 2024-03-10 WeKan ® release
This release adds the following new features:
- [Added docs wikis to WeKan repo directory docs, to make possible to send PRs](https://github.com/wekan/wekan/commit/73ae73d4c38640e9daedbe8ef9e5b25b877ee804).
Thanks to e-gaulue, C0rn3j and xet7.
- [Added script to count lines of code changed per committer email address, because GitHub removed that feature from web UI](https://github.com/wekan/wekan/commit/835e33bf090022875f50916412f80b6a9b4a3b21).
Thanks to bgwines and xet7.
- [Add info about GitHub top committers at Finland](https://github.com/wekan/wekan/commit/ef5b8887799a75ab797655f39483bc08841815d2).
Thanks to xet7.
and adds the following updates:
- [Updated contributing to wiki](https://github.com/wekan/wekan/commit/8ba3a05648818f6162b2021affeb33066f91c400).
Thanks to xet7.
- [Upgraded to MongoDB 6.0.14 at Snap Candidate](https://github.com/wekan/wekan/commit/07d6c1e5148eb0392357d55d0486a9672378c16f).
Thanks to MongoDB developers.
and tried to fix the following bugs:
- [Fix error during delete](https://github.com/wekan/wekan/pull/5336).
Thanks to xator91.
- [Fixed text below custom login logo not visible](https://github.com/wekan/wekan/commit/00bbc2669814247c0ff79bd816be7bf34bcf08a2).
Thanks to xet7.
- [Fixed In RTL, hamburger needs margin](https://github.com/wekan/wekan/commit/abd3c95dfa13cd697ff2fb7e299c85287406772a).
Thanks to mohammadZahedian and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.37 2024-03-07 WeKan ® release
This release fixes the following bugs:
- [Fixed API get swimlane cards wrong order. Please test](https://github.com/wekan/wekan/commit/7beced1e683c2eb2960b0ee40d5ec927d235fa6a).
Thanks to mohammadZahedian, xator91 and xet7.
- [Fixed API get_all_cards doesn't return SwimlaneId. Please test](https://github.com/wekan/wekan/commit/ffafb30b9b394188e1b60ec836ad83f1738c266d).
Thanks to mohammadZahedian, xator91 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.36 2024-03-06 WeKan ® release
This release adds the following features:
- [api.py: checklistid, checklistinfo, get_list_cards_count and get_board_cards_count](https://github.com/wekan/wekan/pull/5326).
Thanks to xator91.
and fixes the following bugs:
- [Fixed Card image cover should be margin-top:6px since hamburger menu and due date at the top](https://github.com/wekan/wekan/commit/747bc4c08837ad9781d63b9f16b97a64b0bfe7b8).
Thanks to e-gaulue and xet7.
- [Try to fix API get cards wrong order. Please test](https://github.com/wekan/wekan/commit/c570405d0267e28f2b2644005d48fb097eac385b).
Thanks to mohammadZahedian, xator91 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.35 2024-02-27 WeKan ® release
This release adds the following features and bugs:
- [Added back Mathjax that has bug of showing math twice](https://github.com/wekan/wekan/commit/f43dadc06894d874281ec0e449dcc4c81b3c59ad).
Thanks to macthecadillac, Dexus and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.34 2024-02-23 WeKan ® release
This release adds the following updates:
- [Updated translations](https://github.com/wekan/wekan/commit/3cd5d00b0b8d74acb2cd2afbc12f5b9d7aafcbd8).
Thanks to translators.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.33 2024-02-23 WeKan ® release
This release adds the following updates:
- [Updated docs for previous version of WeKan](https://github.com/wekan/wekan/commit/3b0616c1500b5070e660d2ba00968d59600958eb).
Thanks to xet7.
and fixes the following bugs:
- [OpenAPI: Fix breakage introduced with blank return](https://github.com/wekan/wekan/pull/5321).
Thanks to bentiss.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.32 2024-02-22 WeKan ® release
This release adds the following new features:
- [api.py: Added create label](https://github.com/wekan/wekan/pull/5308).
Thanks to xator91.
- [api.py: Edit card color](https://github.com/wekan/wekan/pull/5309).
Thanks to xator91.
- [api.py: Add checklist with multiple items also or just title](https://github.com/wekan/wekan/pull/5311).
Thanks to xator91.
- [api.py: Delete all cards. Will delete all cards from Swimlanes automatically, will retrieve automatically all list id and delete everything](https://github.com/wekan/wekan/pull/5313).
Thanks to xator91.
- [cards.js: Added a control to check error if card is not updated](https://github.com/wekan/wekan/pull/5312).
Thanks to xator91.
- [Shortcut a to filter by assignees](https://github.com/wekan/wekan/pull/5318).
Thanks to DevOpsNB.
and fixes the following bugs:
- [Fixed Error 500 when adding user to a board and multiple same avatar icons by reverting back from Meteor 2.15 to 2.14](https://github.com/wekan/wekan/commit/b5f4be36d4577c391ad19c5e5dd9de3036b8998f).
Thanks to xator91, mariogalan, bbyszio, zeo101, laurentm255, johnnytolengo and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.31 2024-02-17 WeKan ® release
This release adds the following new features:
- [api.py: Added getcard and cardsbyswimlane](https://github.com/wekan/wekan/pull/5287).
Thanks to xator91.
- [api.py: Add card with label and add a label to a card](https://github.com/wekan/wekan/pull/5290).
Thanks to xator91.
- [api.py: Fix BoardID to SwimlaneID in cardsbyswimlane](https://github.com/wekan/wekan/pull/5290).
Thanks to xator91.
- [boards.js: New update board title function for API](https://github.com/wekan/wekan/pull/5300).
Thanks to xator91.
- [api.py: EDIT BOARD TITLE](https://github.com/wekan/wekan/pull/5301).
Thanks to xator91.
and adds the following updates:
- [Release scripts: Commented out not currently in use builds of WeKan bundle](https://github.com/wekan/wekan/commit/4eb0085243672071a392dc32f77dba3103c592ab).
Thanks to xet7.
- [Try to fix Snap](https://github.com/wekan/wekan/commit/a54e52d34bdab02befda7eefad46d16814d2c46e).
Thanks to xet7.
- [Updated to Meteor 2.15-rc.1 and removed duplicate nodemailer package because of some errors](https://github.com/wekan/wekan/commit/59c42bc1a3a1792a50379be2f9251fce9b45c1a3).
Thanks to Meteor developers.
- [Updated to Meteor 2.15](https://github.com/wekan/wekan/commit/5198ee997cb43b503fcb2edaf781b0521d8096cd).
Thanks to Meteor developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.30 2024-01-28 WeKan ® release
This release adds the following updates:
- [Back to MongoDB 6.0.13](https://github.com/wekan/wekan/commit/64592d734cfdbe10b48c3aa3ea74e0ba35903976).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.29 2024-01-27 WeKan ® release
This release removes the following features:
- [Removed markdown-it-mathjax3](https://github.com/wekan/wekan/commit/19703fed311c894b61e9269cc0b973d0b0275a6a).
Thanks to Dexus and xet7.
and adds the following updates:
- [Updated to Meteor 2.14.1-beta.0](https://github.com/wekan/wekan/commit/28d640afb40f4d7c9070fa514c910fbf7065a724).
Thanks to Meteor developers.
- [Updated to MongoDB 7.0.5 at Snap Candidate and Docker](https://github.com/wekan/wekan/commit/f624211620c5e42ccdd6f931ba473be62437a62c).
Thanks to MongoDB developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.28 2024-01-23 WeKan ® release
This release adds the following new features:
- [Added archive option to of Wekan API](https://github.com/wekan/wekan/pull/5265).
Thanks to gustavengstrom.
and adds the following updates:
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5270),
[Part 2](https://github.com/wekan/wekan/pull/5271),
[Part 3](https://github.com/wekan/wekan/commit/67896adefc4a12a93fed7575f621f8aa924a2ab8).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.27 2024-01-02 WeKan ® release
This release fixes the following bugs:
- [Fix missing maximize card](https://github.com/wekan/wekan/commit/f10f80f6559a6cdee020d5ca34fd5991e07617cf).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.26 2024-01-02 WeKan ® release
This release fixes the following bugs:
-[Fix some public board buttons](https://github.com/wekan/wekan/commit/8ae47cb2f82bcc2078cc9c9987f7d7b7f6394493).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.25 2023-12-30 WeKan ® release
This release adds the following updates:
- [Snap: Organized file locations](https://github.com/wekan/wekan/commit/84a228fc1a7ced2b8b146795acc13eb5abb13d24).
Thanks to xet7.
- Updated GitHub Actions.
[Part 1](https://github.com/wekan/wekan/pulls/5243),
[Part 2](https://github.com/wekan/wekan/pulls/5244),
[Part 3](https://github.com/wekan/wekan/pulls/5245).
- [Updated percolate:synced-cron](https://github.com/wekan/wekan/commit/06397e9e11a689a0a2e6a95ae785749d5a6a695b).
Thanks to developers of percolate:synced-cron.
- Snap: Added MongoDB 3 binaries for migrating to MongoDB 6.
[Part 1](https://github.com/wekan/wekan/commit/805458a7638ff6213929bfa70a46b5afeacaedf1),
[Part 2](https://github.com/wekan/wekan/commit/335f0451e07d6ff924c0af3e5a934676c8e69f4c),
[Part 3](https://github.com/wekan/wekan/commit/374e67310723f3c0d3ab20f6b2e4bd0b273bce2b).
Thanks to xet7.
- [Updated dependencies](https://github.com/wekan/wekan/commit/0e6d83c0852b2da4430f9c902b84c16f5c2ee8bc).
Thanks to developers of dependencies.
and adds the following translations:
- [Translations: Added German (Germany) (de_DE) and Odia (India) (or_IN)](https://github.com/wekan/wekan/commit/23c2a2bc224e2def4722a35c20f32a21062b4154).
Thanks to translators.
and fixes the following bugs:
- [Fix: Export HTML popup](https://github.com/wekan/wekan/pull/5252).
Thanks to Lewiscowles1986.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.24 2023-12-17 WeKan ® release
This release adds the following new features:
- [Azure AD B2C login using OAuth2](https://github.com/wekan/wekan/commit/93be112a9454c894c1ce3146ed377e6a6aeca64a).
https://github.com/wekan/wekan/wiki/B2C .
Thanks to snowsky and xet7.
and adds the following updates:
- [Upgrade to Meteor 2.14](https://github.com/wekan/wekan/commit/75383fe477874a7aaf5caa3b913e2173694efe13).
Thanks to Meteor developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.23 2023-12-11 WeKan ® release
This release adds the following updates:
- [Updated security.md about mitm](https://github.com/wekan/wekan/commit/b4c9c1df9a7e89d263b1864407a7007338ce770d).
Thanks to xet7.
- [Upgraded to Meteor 2.14-rc.3](https://github.com/wekan/wekan/commit/6a3b8a668bc84c89714e44c3865168be81c8e2ed).
Thanks to Meteor developers.
- [Updated dependencies](https://github.com/wekan/wekan/commit/e3a0a480ed960d30fc80f7c7c1a6c7471368d0e8).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.22 2023-12-01 WeKan ® release
This release adds the following new features:
- [At right sidebar, moved Minicard Settings to Card Settings popup](https://github.com/wekan/wekan/commit/2f2a039e3c1957b8921f3800315508d4f51c21b7).
Thanks to Roemer and xet7.
- [New feature: Sidebar / Card Settings / Creator at minicard](https://github.com/wekan/wekan/commit/f3242869110738210b712761dda67fec34932307).
Thanks to Roemer and xet7.
and adds the following updates:
- [Upgraded to MongoDB 6.0.12 at Snap Candidate](https://github.com/wekan/wekan/commit/31ca78c17b0c734087cef99d481b939ac9533612).
Thanks to MongoDB developers.
and fixes the following bugs:
- [Fixed Markdown and copy buttons on top of text](https://github.com/wekan/wekan/commit/3cc10c77f99db344d0af3d6d862eb05c909fbf2c).
Thanks to mueller-ma and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.21 2023-11-27 WeKan ® release
This release adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/commit/fef0c0e490ef0d90b6504074312bf827ff5f2d61).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.20 2023-11-26 WeKan ® release
This release adds the following updates:
- [Added standard for public code assessment](https://github.com/wekan/wekan/commit/a307bfa1ec82b66d97714bff32d4201aa8e6e6f7).
Thanks to those that participated to making of assessment.
- [Upgraded to Meteor 2.14-beta.2](https://github.com/wekan/wekan/commit/126ddda45d07769f9fef67aa74241c9afa04b6a8).
Thanks to Meteor developers.
- [Upgraded to Meteor 2.14-beta.4](https://github.com/wekan/wekan/commit/d90ab03bbe9f13d211aaca2e72542386fdf2a6ba).
Thanks to Meteor developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.19 2023-11-20 WeKan ® release
This release adds the following new features:
- [Updated swimlane (restore and changed title) and board (changed title) webhooks](https://github.com/wekan/wekan/pull/5205).
Thanks to gustavengstrom.
- When user logins, "Automatically add user with the domain name" (at Admin Panel / Organizations) to Organization. In Progress.
[Part 1](https://github.com/wekan/wekan/commit/6e2f84673e98abec07a10c843ab83bed50774b35),
[Part 2](https://github.com/wekan/wekan/commit/9bc63669933bd763930add22ad7d05d89566d3ee).
Thanks to xet7.
- [Permissions for default board after OIDC/OAuth2 login](https://github.com/wekan/wekan/pull/5213).
Thanks to diegosteiner.
and adds the following updates:
- [Added governance.md](https://github.com/wekan/wekan/commit/2b1d2222cc900e8c815c30a4d07c897e30ba3636).
Thanks to xet7.
- Updated contributing.md.
[Part 1](https://github.com/wekan/wekan/commit/d840cb3be7b1788a4dbdd09ef45690afcf6b3dd4),
[Part 2](https://github.com/wekan/wekan/commit/e91e68c48c6392814fbc1362b7ae15ead34e7e47),
[Part 3](https://github.com/wekan/wekan/commit/026236edc962a8fc3863b9a4f7dc1d1f5dec3b5c),
[Part 4](https://github.com/wekan/wekan/commit/59874d16b9cf95ff05d92dd4d3bbdcb42fd37a94).
- [Updated security.md](https://github.com/wekan/wekan/commit/f047c6da295c4ab5ddc6d4d0a8137f419d8704d5).
- Updated code of conduct.md.
[Part 1](https://github.com/wekan/wekan/commit/c4293ecd95b9faec846060bcbcb8362cb58a54e6),
[Part 2](https://github.com/wekan/wekan/commit/f512047ac6439e53f92359f45ab907c629d225a9).
and fixes the following bugs:
- [Removed console.log](https://github.com/wekan/wekan/commit/0c54c1540c494bb7ffeb61a89cbc9a79c8f05d19).
Thanks to xet7.
- [Fix typos at oidc_server.js](https://github.com/wekan/wekan/commit/cd51ad75086950f29adf245b6d6c0b43e69da171).
Thanks to xet7.
- [Fix to not anymore show confusing Organization Id and Team Id fields at Admin Panel / People / People / Edit user](https://github.com/wekan/wekan/commit/6405c35bc08fc73657a4111c6fd72a8bd72ded70).
Thanks to xet7.
- [Fix to not anymore require website for Organization and Team](https://github.com/wekan/wekan/commit/d4d6a5f96d88a89eb47ee56ba9857e859203a53c).
Thanks to xet7.
- [Snap: Disable apparmor="DENIED" in syslog](https://github.com/wekan/wekan/commit/2048975e92152bb1c397b61fc2fd0a8124fade58).
Thanks to diegargon, webenefits and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.18 2023-11-14 WeKan ® release
This release adds the following new features:
- [Added restore list and changing list title to outgoing webhooks](https://github.com/wekan/wekan/pull/5198).
Thanks to gustavengstrom.
and adds the following updates:
- [Updated release scripts](https://github.com/wekan/wekan/commit/d4252f30567665897c6314b578dff1fe294265de).
Thanks to xet7.
and fixes the following bugs:
- [Add Docker label org.opencontainers.image.source](https://github.com/wekan/wekan/pull/5196).
Thanks to mueller-ma.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.17 2023-11-09 WeKan ® release
This release fixes the following bugs:
- [Fix move card rule on checklist complete doesn't work, with ReactiveMiniMongoIndex for Server-Side](https://github.com/wekan/wekan/pull/5194).
Thanks to mfilser.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.16 2023-11-09 WeKan ® release
This release fixes the following bugs:
- [Fix users.save is not a function](https://github.com/wekan/wekan/commit/42ece21fa14113a28792bf97dfd899a064f0ea56).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.15 2023-11-09 WeKan ® release
This release fixes the following bugs:
- [Fix missing profile/avatar pictures](https://github.com/wekan/wekan/commit/4e97a5351a4ac715d21503a129f12fe5bf3f4016).
Thanks to kovacs-andras and xet7.
- [Commented out links at My Cards Table, because they unexpectly caused to go elsewhere from current view](https://github.com/wekan/wekan/commit/2c36fe3d45a0f95f8ba18526ffd1dc230f6f46a8).
Thanks to xet7.
- [Add more Docker Labels to Dockerfile](https://github.com/wekan/wekan/commit/52e76c5496b6621916b61f35d5b68687685e0809).
Thanks to mueller-ma and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.14 2023-11-09 WeKan ® release
This release adds the following updates:
- [Upgraded to Meteor 2.14-beta.0](https://github.com/wekan/wekan/commit/55903472aae0032a49f03529cc9013007a20475e).
Thanks to Meteor developers.
and fixes the following bugs:
- [Removed double edit text from card description](https://github.com/wekan/wekan/commit/972981a57997fdaeb5202a3c588cd9eb83516360).
Thanks to derbolle and xet7.
- [Fix Notifications are identical until one is marked read](https://github.com/wekan/wekan/pull/5189).
Thanks to mfilser.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.12 2023-11-02 WeKan ® release
This release adds the following updates:
- [Updated Snap Candidate MongoDB to 6.0.11](https://github.com/wekan/wekan/commit/ff4c8a5d23d9315ad12970c35cf2928b204b073b).
Thanks to MongoDB developers.
and fixes the following bugs:
- [Fix Add List button too wide at themes: Clearblue, Modern, Exodark](https://github.com/wekan/wekan/commit/b756150f76c711cf93aa486a55d0e3340f558c01).
Thanks to xet7.
- [Fix Windows build bundle script](https://github.com/wekan/wekan/commit/720d4223e21da7fa6651dcb51def81a8e081750d).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.11 2023-11-02 WeKan ® release
Known issues: At some non-amd64 platforms, Node.js 14.x may show segmentation fault.
This will be fixed when upgrading to Node.js 18.x or newer works.
This release fixes the following CRITICAL SECURITY ISSUES:
- [Fix Security issue: Hyperlink injection](https://github.com/wekan/wekan/commit/4fe168b03b1f4303c2b117d24ad63ca9f40a02d2).
Thanks to mc-marcy and xet7.
and adds the following new features:
- [Feature: Convert to Markdown button at editor of Card Description and Comment. Useful when there is no WYSIWYG editor](https://github.com/wekan/wekan/commit/069e2c69b2e00e402628a3123164af257533ddc6).
Thanks to BabyFnord and xet7.
- [Feature: Copy Card Details code block to clipboard](https://github.com/wekan/wekan/commit/0cc63b810c5a9e23a8a3939a11176f25c1fa8dc7).
Thanks to C0rn3j and xet7.
and adds the following updates:
- [docker-compose.yml back to latest docker image tag](https://github.com/wekan/wekan/commit/cfa0a063ce4ac5b2dcfa9952764cb15ce21bc263).
Thanks to xet7.
- [Updated year at license](https://github.com/wekan/wekan/commit/0e902d73a881e4f1a17ee7f2028e1b041872ab61).
Thanks to xet7.
- [Updated screenshot at readme](https://github.com/wekan/wekan/commit/be72274ca515dc7b652cb1b93361e97089186166).
Thanks to xet7.
- [Added info to docker-compose.yml about newest docker image of newest git commit automatic build](https://github.com/wekan/wekan/commit/c9e80eaa03e42d1976576ad6553c056840f3060c).
Thanks to xet7.
- Updated SECURITY.md.
[Part 1](https://github.com/wekan/wekan/commit/aae7960f251fe626d8bb319643e4cd939a8fbfa9),
[Part 2](https://github.com/wekan/wekan/commit/f5355422ee21d54e26785f483a7eaecade3d1b64),
[Part 3](https://github.com/wekan/wekan/commit/fe985e219a9e467973e9449762fc17c6a94e9031),
[Part 4](https://github.com/wekan/wekan/commit/90da40fde0b2c68d3f751fe8ff2a06f3180cf6d9),
[Part 5](https://github.com/wekan/wekan/commit/2c74240bcb9d24e206ffe4e59bc8242a6abd07d9).
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/commit/c45bf4e36882c898055db248bf54a8e7e0add3c4),
[Part 1](https://github.com/wekan/wekan/commit/b08876327237c549783a2ee7d07db7f2dd0904a7),
[Part 1](https://github.com/wekan/wekan/commit/75de7b119d868e0e1ef650d7d795b7349b1c9281),
[Part 1](https://github.com/wekan/wekan/commit/974c17723705d58b660154bb2fd8997c018ddddc).
Thanks to developers of dependencies.
- [Docker base image to Ubuntu 23.10](https://github.com/wekan/wekan/commit/0f99f22fa5bfc7d3764de2a7f34165f699571449).
Thanks to Ubuntu developers.
- [Updated dependencies](https://github.com/wekan/wekan/commit/8323649cf098388684ea5e690dcb233171440345).
Thanks to zodern.
- [Updated dependencies](https://github.com/wekan/wekan/commit/b54d17467cd2868091c52240594630923875946c).
Thanks to exceljs developers.
and fixed the following bugs:
- [Fixed can not close sidebar at Modern theme](https://github.com/wekan/wekan/commit/53e569d28582a04d7bac49c23cd04ed8f546ed71).
Thanks to xet7.
- [Fix LDAP login](https://github.com/wekan/wekan/pull/5159).
Thanks to faburem.
- [Fix can't use card template](https://github.com/wekan/wekan/pull/5161).
Thanks to faburem.
- [Open card details always in the middle of the screen](https://github.com/wekan/wekan/pull/5168).
Thanks to mfilser.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.10 2023-09-29 WeKan ® release
This release adds the following new features:
+22
View File
@@ -0,0 +1,22 @@
# Code of Conduct
For all code at WeKan GitHub Organization https://github.com/wekan
- All code in pull requests need to have permission already to add it to WeKan with MIT license, and will become MIT license.
- All code xet7 add is MIT license.
- For any dependencies, permissive licenses like https://copyfree.org are preferred
- For anything currently that is non-permissive (like GPL, AGPL, SSPL), those will be replaced with permissive-licensed alternatives
# Reporting about violations or something else
## Private reports
- Email support (at) wekan.team using [this PGP public key](support-at-wekan.team_pgp-publickey.asc) if possible
- Security issues: [SECURITY.md](SECURITY.md)
- License violations
- Anything private, sensitive or negative
## Public
- Feature Requests and Bug Reports https://github.com/wekan/wekan/issues
- Anything happy, positive, encouraging, helping, at friendly WeKan Global FOSS Community
+28 -14
View File
@@ -1,3 +1,23 @@
## About money
Not paid:
- Money is not paid for these, everyone uses their own time at their own cost:
- Security reports, see [SECURITY.md](SECURITY.md)
- Pull requests
- xet7 checking pull requests
- Public Community Support
- https://github.com/wekan/wekan/issues
Paid by customers of WeKan Team:
- Commercial Support at https://wekan.team/commercial-support/
- Support
- Private Chat
- Features
- Fixes
- Hosting
## Contributing Security related
For responsible security disclosure, please follow this process:
@@ -7,13 +27,9 @@ CVE Hall of Fame is at https://wekan.github.io/hall-of-fame/
## Contributing to Documentation Wiki
Please clone wiki:
```
git clone https://github.com/wekan/wekan.wiki
```
Edit .md files, and add changed files in .zip attachment
directly to comment of new issue at
https://github.com/wekan/wekan/issues
Fork WeKan repo https://github.com/wekan/wekan ,
edit `docs` directory content at GitHub web interface,
and click send PR.
## Contributing code
@@ -42,7 +58,7 @@ About 300 persons have contributed to WeKan, stats at:
https://www.openhub.net/p/wekan
WeKan maintainer xet7 checks PR for typos etc before accepting to WeKan,
WeKan maintainer xet7 reviews PR for typos etc before accepting to WeKan,
so that WeKan code will still work OK.
## Contributing translations
@@ -62,12 +78,10 @@ new release.
## About WeKan Organization https://github.com/wekan
xet7 rarely adds any new members to GitHub Organization,
because xet7 prefers to check PRs.
Only xet7 has write access to WeKan Organization.
For some repos (other than https://github.com/wekan/wekan ),
some contributors have direct commit access.
xet7 reviews all PRs before merging.
Some contributors are mentioned at this outdated page:
There has been over 300 contributors to WeKan, newest stats at:
https://github.com/wekan/wekan/wiki/Team
https://www.openhub.net/p/wekan
+99 -104
View File
@@ -1,10 +1,8 @@
FROM --platform=linux/amd64 ubuntu:23.04 as wekan
FROM ubuntu:24.04
LABEL maintainer="wekan"
# 2022-09-04:
# - above "--platform=linux/amd64 ubuntu:22.04 as wekan" is needed to build Dockerfile
# correctly on Mac M1 etc, to not get this error:
# https://stackoverflow.com/questions/71040681/qemu-x86-64-could-not-open-lib64-ld-linux-x86-64-so-2-no-such-file-or-direc
LABEL org.opencontainers.image.ref.name="ubuntu"
LABEL org.opencontainers.image.version="24.04"
LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
# 2022-04-25:
# - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
@@ -13,19 +11,17 @@ LABEL maintainer="wekan"
# 2021-09-18:
# - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
# to Quay to avoid Docker Hub rate limits.
# Set the environment variables (defaults where required)
# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
# ENV BUILD_DEPS="paxctl"
ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3"
ENV \
DEBUG=false \
NODE_VERSION=v14.21.4 \
METEOR_RELEASE=METEOR@2.13.3 \
METEOR_RELEASE=METEOR@2.14 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=9.8.1 \
NPM_VERSION=6.14.17 \
FIBERS_VERSION=4.0.1 \
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
@@ -66,6 +62,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
OIDC_REDIRECTION_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_B2C_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
OAUTH2_CLIENT_ID="" \
OAUTH2_SECRET="" \
@@ -161,7 +158,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
WRITABLE_PATH=/data \
S3=""
# NODE_OPTIONS="--max_old_space_size=4096" \
# NODE_OPTIONS="--max_old_space_size=4096"
#---------------------------------------------
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
@@ -172,99 +169,98 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
RUN \
set -o xtrace && \
# Add non-root user wekan
useradd --user-group --system --home-dir /home/wekan wekan && \
\
# OS dependencies
apt-get update -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
\
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
cp $(which tar) $(which tar)~ && \
ln -sf $(which bsdtar) $(which tar) && \
\
# Download nodejs
wget https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
wget https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt && \
#wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
#wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
#---------------------------------------------------------------------------------------------
\
# Verify nodejs authenticity
grep node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt | shasum -a 256 -c - && \
rm -f SHASUMS256.txt && \
#grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
#rm -f SHASUMS256.txt.asc && \
\
# Install Node
tar xvzf node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
rm node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs && \
ln -s /opt/nodejs/bin/node /usr/bin/node && \
ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config && \
chown wekan --recursive /home/wekan/.config && \
\
#DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
#paxctl -mC `which node` && \
\
# Install Node dependencies. Python path for node-gyp.
#npm install -g npm@${NPM_VERSION} && \
\
# Change user to wekan and install meteor
cd /home/wekan/ && \
chown wekan --recursive /home/wekan && \
echo "Starting meteor ${METEOR_RELEASE} installation... \n" && \
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh && \
mv /root/.meteor /home/wekan/ && \
chown wekan --recursive /home/wekan/.meteor && \
\
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js && \
cd /home/wekan/.meteor && \
gosu wekan:wekan /home/wekan/.meteor/meteor -- help; \
\
# Build app
cd /home/wekan/app && \
mkdir -p /home/wekan/.npm && \
chown wekan --recursive /home/wekan/.npm /home/wekan/.config /home/wekan/.meteor && \
chmod u+w *.json && \
gosu wekan:wekan meteor npm install && \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w *.json && \
gosu wekan:wekan meteor npm install && \
cd node_modules/fibers && \
node build.js && \
cd ../.. && \
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy && \
mv /home/wekan/app_build/bundle /build && \
\
# Put back the original tar
mv $(which tar)~ $(which tar) && \
\
# Cleanup
apt-get remove --purge -y ${BUILD_DEPS} && \
apt-get autoremove -y && \
npm uninstall -g api2html &&\
rm -R /tmp/* && \
rm -R /var/lib/apt/lists/* && \
rm -R /home/wekan/.meteor && \
rm -R /home/wekan/app && \
rm -R /home/wekan/app_build && \
mkdir /data && \
chown wekan --recursive /data
#cat /home/wekan/python/esprima-python/files.txt | xargs rm -R && \
#rm -R /home/wekan/python
#rm /home/wekan/install_meteor.sh
# Install OS
RUN <<EOR
set -o xtrace
# Add non-root user wekan
useradd --user-group --system --home-dir /home/wekan wekan
# OS dependencies
apt-get update --assume-yes
apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
cp $(which tar) $(which tar)~
ln -sf $(which bsdtar) $(which tar)
# Install NodeJS
cd /tmp
# Download nodejs
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz"
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt"
# Verify nodejs authenticity
grep "node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz" "SHASUMS256.txt" | shasum -a 256 -c -
rm -f "SHASUMS256.txt"
# Install Node
tar xzf "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" -C /usr/local --strip-components=1 --no-same-owner
rm "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" "SHASUMS256.txt"
ln -s "/usr/local/bin/node" "/usr/local/bin/nodejs"
mkdir -p "/opt/nodejs/lib/node_modules/fibers/.node-gyp" "/root/.node-gyp/${NODE_VERSION} /home/wekan/.config"
# Install node dependencies
npm install -g npm@${NPM_VERSION}
chown --recursive wekan:wekan /home/wekan/.config
# Install Meteor
cd /home/wekan
chown --recursive wekan:wekan /home/wekan
echo "Starting meteor ${METEOR_RELEASE} installation... \n"
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh
mv /root/.meteor /home/wekan/
chown --recursive wekan:wekan /home/wekan/.meteor
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
cd /home/wekan/.meteor
gosu wekan:wekan /home/wekan/.meteor/meteor -- help
# Build app (Production)
cd /home/wekan/app
mkdir -p /home/wekan/.npm
chown --recursive wekan:wekan /home/wekan/.npm
chmod u+w *.json
gosu wekan:wekan meteor npm install
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build
cd /home/wekan/app_build/bundle/programs/server/
chmod u+w *.json
gosu wekan:wekan meteor npm install
cd node_modules/fibers
node build.js
cd ../..
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy
mv /home/wekan/app_build/bundle /build
# Put back the original tar
mv $(which tar)~ $(which tar)
# Cleanup
apt-get remove --purge --assume-yes ${BUILD_DEPS}
npm uninstall -g api2html
apt-get autoremove --assume-yes
apt-get clean --assume-yes
rm -Rf /tmp/*
rm -Rf /var/lib/apt/lists/*
rm -Rf /var/cache/apt
rm -Rf /var/lib/apt/lists
rm -Rf /home/wekan/app_build
rm -Rf /home/wekan/app
rm -Rf /home/wekan/.meteor
mkdir /data
chown wekan --recursive /data
EOR
USER wekan
ENV PORT=8080
EXPOSE $PORT
USER wekan
STOPSIGNAL SIGKILL
WORKDIR /home/wekan/app
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
@@ -275,6 +271,5 @@ STOPSIGNAL SIGKILL
#---------------------------------------------------------------------
#
# CMD ["node", "/build/main.js"]
#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
# CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node /build/main.js"]
+40
View File
@@ -0,0 +1,40 @@
# Future
## Moved Import/Export/Sync issues to Big Picture Roadmap wiki page
This change is limited to only Import/Export/Sync issues, while those are In Progress of being fixed.
2023-11-21 xet7 closed 261 issues that are linked at https://github.com/wekan/wekan/wiki/Sync ,
that is Roadmap of Import/Export/Sync in WeKan. It means, that those issues progress will be
updated at that wiki page, when xet7 and other WeKan contributors fix those.
Many of those issues are In Progress of being fixed and added.
## Platform Updates
Issues related to platforms are being closed, because only list of working platforms is mentioned now
at WeKan website https://wekan.github.io Install section and at [ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md)
where is this new text:
> Newest WeKan at amd64 platforms: Linux bundle, Snap Candidate, Docker, Kubernetes. Fixing other platforms In Progress.
Platform support changes often, because:
- There are many dependencies, that update or break or change often
- Node.js segfaults at some CPU/OS
- Some platforms have build errors
Roadmap is to update all existing platforms, and add more platforms.
Upcoming platform upgrades:
- Fix migrations, so that newest WeKan can be released to Snap Stable. (Currently newest is at Snap Candidate).
## WeKan features
Most Meteor WeKan features are listed here:
https://github.com/wekan/wekan/wiki/Deep-Dive-Into-WeKan
Remaining features and all changes are listed here:
https://github.com/wekan/wekan/blob/main/CHANGELOG.md
+10
View File
@@ -0,0 +1,10 @@
# Governance
Anyone can send pull request to https://github.com/wekan/wekan/wiki/pulls ,
if there is permission to add code to WeKan with MIT license.
As maintainer, xet7 checks all pull requests and merges them.
Only xet7 has write access to repo https://github.com/wekan/wekan
+1 -1
View File
@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2014-2019 The Wekan Team
Copyright (c) 2014-2023 The Wekan Team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+15 -4
View File
@@ -2,23 +2,34 @@
# WeKan ® - Open Source kanban
## Downloads
https://wekan.github.io / Install WeKan ® Server
## Docker Containers
- [GitHub](https://github.com/wekan/wekan/pkgs/container/wekan)
- [Quay](https://quay.io/repository/wekan/wekan)
- [Docker Hub](https://hub.docker.com/r/wekanteam/wekan)
Other platforms and compatible software versions at https://wekan.github.io Download section.
docker-compose.yml at https://github.com/wekan/wekan/blob/main/docker-compose.yml
## Standards
- [WeKan and Standard for Public Code](https://wekan.github.io/standard-for-public-code/) assessment was made at 2023-11.
Currently Wekan meets 8 out of 16 criteria out of the box.
Some others could be met with small changes.
## Code stats
- [CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619)
- [Code Climate](https://codeclimate.com/github/wekan/wekan)
- [Open Hub](https://www.openhub.net/p/wekan)
- [OSS Insight](https://ossinsight.io/analyze/wekan/wekan)
- [CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619)
## [Translate WeKan ® at Transifex](https://app.transifex.com/wekan/)
Translations to non-English languages are accepted only at [Transifex](https://app.transifex.com/wekan/) using webbrowser.
Translations to non-English languages are accepted only at [Transifex](https://app.transifex.com/wekan/wekan) using webbrowser.
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)
@@ -109,7 +120,7 @@ with [Meteor](https://www.meteor.com).
[platforms]: https://github.com/wekan/wekan/wiki/Platforms
[dev_docs]: https://github.com/wekan/wekan/wiki/Developer-Documentation
[screenshot_wekan]: https://wekan.github.io/wekan-markdown.png
[screenshot_wekan]: https://wekan.github.io/wekan-dark-mode.png
[features]: https://github.com/wekan/wekan/wiki/Features
[roadmap_wekan]: https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license
[wekan_issues]: https://github.com/wekan/wekan/issues
+125 -28
View File
@@ -1,3 +1,5 @@
About money, see [CONTRIBUTING.md](CONTRIBUTING.md)
Security is very important to us. If you discover any issue regarding security, please disclose
the information responsibly by sending an email to support (at) wekan.team using
[this PGP public key](support-at-wekan.team_pgp-publickey.asc) and not by
@@ -29,7 +31,7 @@ added to the Wekan Hall of Fame.
## Which domains are in scope?
No public domains, because all those are donated to Wekan Open Source project,
and we don't have any permissions to do security scans on those donated servers
and we don't have any permissions to do security scans on those donated servers.
Please don't perform research that could impact other users. Secondly, please keep
the reports short and succinct. If we fail to understand the logics of your bug, we will tell you.
@@ -48,31 +50,132 @@ like Snap and Docker have their own specific sandboxing etc features.
Standalone Wekan by default does not load any files from Internet, like fonts, CSS, etc.
This also means all Standalone Wekan functionality works in offline local networks.
Wekan is used by companies that have [thousands of users](https://github.com/wekan/wekan/wiki/AWS) and at healthcare.
WeKan is used at most countries of the world https://snapcraft.io/wekan
and by by companies that have 30k users.
Wekan uses xss package for input fields like cards, as you can see from
[package.json](https://github.com/wekan/wekan/blob/main/package.json). Other used versions can be seen from
[Meteor versions file](https://github.com/wekan/wekan/blob/main/.meteor/versions).
Forms can include markdown links, html, image tags etc like you see at https://wekan.github.io .
It's possible to add attachments to cards, and markdown/html links to files.
- Wekan private board attachments are not accessible without logging in.
- There is feature to set board public, so that board is visible without logging in in readonly mode, with realtime updates.
- Admin Panel has feature to disable all public boards, so all boards are private.
Wekan attachments are not accessible without logging in. Import from Trello works by copying
Trello export JSON to Wekan Trello import page, and in Trello JSON file there is direct links to all publicly
accessible Trello attachment files, that Standalone Wekan downloads directly to Wekan MongoDB database in
[CollectionFS](https://github.com/wekan/wekan/pull/875) format. When Wekan board is exported in
Wekan JSON format, all board attachments are included in Wekan JSON file as base64 encoded text.
That Wekan JSON format file can be imported to Sandstorm Wekan with all the attachments, when we get
latest Wekan version working on Sandstorm, only couple of bugs are left before that. In Sandstorm it's not
possible yet to import from Trello with attachments, because Wekan does not implement Sandstorm-compatible
access to outside of Wekan grain.
## SSL/TLS
Standalone Wekan only has password auth currently, there is work in progress to add
[oauth2](https://github.com/wekan/wekan/pull/1578), [Openid](https://github.com/wekan/wekan/issues/538),
[LDAP](https://github.com/wekan/wekan/issues/119) etc. If you need more login security for Standalone Wekan now,
it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
like for example [AWS WAF](https://aws.amazon.com/waf/).
- SSL/TLS encrypts traffic between webbrowser and webserver.
- If you are thinking about TLS MITM, look at https://github.com/caddyserver/caddy/issues/2530
- Let's Encrypt TLS requires publicly accessible webserver, that Let's Encrypt TLS validation servers check.
- If firewall limits to only allowed IP addresses, you may need non-Let's Encrypt TLS cert.
- For On Premise:
- https://caddyserver.com/docs/automatic-https#local-https
- https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config
- https://github.com/wekan/wekan/wiki/Azure
- https://github.com/wekan/wekan/wiki/Traefik-and-self-signed-SSL-certs
[All Wekan Platforms](https://github.com/wekan/wekan/wiki/Platforms)
## XSS
- Dompurify https://www.npmjs.com/package/dompurify
- WeKan uses dompurify npm package to filter for XSS at fields like cards, as you can see from
[package.json](https://github.com/wekan/wekan/blob/main/package.json). Other used versions can be seen from
[Meteor versions file](https://github.com/wekan/wekan/blob/main/.meteor/versions).
- Forms can include markdown links, html, image tags etc like you see at https://wekan.github.io .
- It's possible to add attachments to cards, and markdown/html links to files.
- Dompurify cleans up viewed code, so Javascript in input fields does not execute
- https://wekan.github.io/hall-of-fame/fieldbleed/
- Reaction in comment is now checked, that it does not have extra added code
- https://wekan.github.io/hall-of-fame/reactionbleed/
- https://github.com/wekan/wekan/blob/main/packages/markdown/src/template-integration.js#L76
## QA about PubSub
Q:
Hello,
I have just seen the Meteor DevTools Evolved extension and was wondering if anyone had asked themselves the question of security.
Insofar as all data is shown in the minimongo tab in plain text.
How can data be hidden from this extension?
A:
## PubSub
- It is not security issue to show some text or image, that user has permission to see. It is a security issue, if browserside is some text or image that user should not see.
- Meteor has browserside minimongo database, made with Javascript, updated with Publish/Subscribe, PubSub.
- Publish/Subscribe means, that realtime web framework reads database changes stream, and then immediately updates webpage,
like like dashboards, chat, kanban. That is the point in any realtime web framework in any programming language.
- Yes, you should check with Meteor DevTools Evolved Chromium/Firefox extension that at minimongo is only text that user has permission to see.
- Do checking as logged in user, and logged out user.
- Check permissions and sanitize before allowing some change, because someone could modify content of input field,
PubSub/websocket data (for example with Burp Suite Community Edition), etc.
- If you have REST API, also check that only those that have login token, and have permission, can view or edit text
- You should not include any data user is not allowed to see. Not to webpage text, not to websockets/PubSub, etc.
- Minimongo should not have password hashes PubSub https://wekan.github.io/hall-of-fame/userbleed/
- PubSub uses Websockets, so you need those to be enabled at webserver like Caddy/Nginx/Apache etc, examples of settings
at right menu of https://github.com/wekan/wekan/wiki
- Clientside https://github.com/wekan/wekan/tree/main/client/components subscribes to
PubSub https://github.com/wekan/wekan/tree/main/server/publications or calls meteor methods at https://github.com/wekan/wekan/tree/main/models
- For Admin:
- You can have input field for password https://github.com/wekan/wekan/blob/main/client/components/cards/attachments.js#L303-L312
- You can save password to database https://github.com/wekan/wekan/blob/main/client/components/cards/attachments.js#L303-L312
- Check that only current user or Admin can change password https://github.com/wekan/wekan/blob/main/client/components/cards/attachments.js#L303-L312
- Note that currentUser uses code like Meteor.user() in .js file
- Do not have password hashes in PubSub https://github.com/wekan/wekan/blob/main/server/publications/users.js
- Only show Admin Panel to Admin https://github.com/wekan/wekan/blob/main/client/components/settings/settingBody.jade#L3
- If there is a lot of data, use pagination https://github.com/wekan/wekan/blob/main/client/components/settings/peopleBody.js
- Only have limited amount of data published in PubSub. Limit in MongoDB query in publications how much is published. Too much could make browser too slow.
- Use Environment variables for any email etc passwords.
- But what if you would like to remove minimongo? And only use Meteor methods for saving? In that case, you don't have realtime updates,
and you need to write much more code to load and save data yourself, handle any multi user data saving conflicts yourself,
and many Meteor Atmospherejs.com PubSub using packages would not work anymore https://github.com/wekan/we
## PubSub: Fix that user can not change to Admin
- With PubSub, there is checking, that someone modifying Websockets content, like permission isAdmin, can not change to Admin.
- https://github.com/wekan/wekan/commit/cbad4cf5943d47b916f64b4582f8ca76a9dfd743
- https://wekan.github.io/hall-of-fame/adminbleed/
## Permissions and Roles
- For any user permissions, it's best to use Meteor package package https://github.com/Meteor-Community-Packages/meteor-roles .
- Currently WeKan has custom hardcoded permissions, WeKan does not yet use that meteor-roles package.
- Using permissions at WeKan sidebar https://github.com/wekan/wekan/blob/main/client/components/sidebar/sidebar.js#L1854-L1875
- List of roles https://github.com/wekan/wekan/wiki/REST-API-Role . Change at board or Admin Panel. Also Organizations/Teams.
- Worker role: https://github.com/wekan/wekan/issues/2788
- Not implemented yet: Granular Roles https://github.com/wekan/wekan/issues/3022
- Check is user logged in, with `if (Meteor.user()) {`
- Check is code running at server `if (Meteor.isServer()) {` or client `if Meteor.isClient()) {` .
- Here is some authentication code https://github.com/wekan/wekan/blob/main/server/authentication.js
## Environment variables
- For any passwords, use environment variables, those are serverside
- Do not copy environment variable to public variable that is visible browserside https://github.com/wekan/wekan/blob/main/server/max-size.js
```
Meteor.startup(() => {
if (process.env.HEADER_LOGIN_ID) {
Meteor.settings.public.attachmentsUploadMaxSize = process.env.ATTACHMENTS_UPLOAD_MAX_SIZE;
Meteor.settings.public.attachmentsUploadMimeTypes = process.env.ATTACHMENTS_UPLOAD_MIME_TYPES;
Meteor.settings.public.avatarsUploadMaxSize = process.env.AVATARS_UPLOAD_MAX_SIZE;
```
- For serverside, you can set Meteor.settings.variablename, without text public
- For WeKan kanban, there is feature for setting board public, it can be viewed by anyone, there is realtime updates. But
- Some of those permissions are checked at users.js models at https://github.com/wekan/wekan/tree/main/models
- Environment variables are used for email server passwords, etc, at all platforms https://github.com/wekan/wekan/commit/a781c0e7dcfdbe34c1483ee83cec12455b7026f7
## Escape HTML comment tags so that HTML comments are visible
- Someone reported, that it is problem that content of HTML comments in edit mode, are not visible at at view mode, so this makes HTML comments visible.
- https://github.com/wekan/wekan/commit/167863d95711249e69bb3511175d73b34acbbdb3
- https://wekan.github.io/hall-of-fame/invisiblebleed/
## Attachments: XSS in filename is sanitized
- https://github.com/wekan/wekan/blob/main/client/components/cards/attachments.js#L303-L312
- https://wekan.github.io/hall-of-fame/filebleed/
## Brute force login protection
- https://github.com/wekan/wekan/commit/23e5e1e3bd081699ce39ce5887db7e612616014d
- https://github.com/wekan/wekan/tree/main/packages/wekan-accounts-lockout
### Sandstorm Wekan Security
@@ -105,12 +208,6 @@ a security issue, we'd like to know about it, and also how to fix it:
Typical already known or "no impact" bugs such as:
- Brute force password guessing. Currently there is
[brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v080-2018-04-04-wekan-release).
- Security issues related to that Wekan uses Meteor 1.6.0.1 related packages, and upgrading to newer
Meteor 1.6.1 is complicated process that requires lots of changes to many dependency packages.
Upgrading [has been tried many times, spending a lot of time](https://github.com/meteor/meteor/issues/9609)
but there still is issues. Helping with package upgrades is very welcome.
- [Wekan API old tokens not replaced correctly](https://github.com/wekan/wekan/issues/1437)
- Missing Cookie flags on non-session cookies or 3rd party cookies
- Logout CSRF
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v7.10.0"
appVersion: "v7.49.0"
files:
userUploads:
- README.md
+355 -2
View File
@@ -37,9 +37,24 @@ If *nix: chmod +x api.py => ./api.py users
python3 api.py customfields BOARDID # Custom Fields of BOARDID
python3 api.py customfield BOARDID CUSTOMFIELDID # Info of CUSTOMFIELDID
python3 api.py addcustomfieldtoboard AUTHORID BOARDID NAME TYPE SETTINGS SHOWONCARD AUTOMATICALLYONCARD SHOWLABELONMINICARD SHOWSUMATTOPOFLIST # Add Custom Field to Board
python3 api.py editcustomfield BOARDID LISTID CARDID CUSTOMFIELDID NEWCUSTOMFIELDVALUE
python3 api.py editcustomfield BOARDID LISTID CARDID CUSTOMFIELDID NEWCUSTOMFIELDVALUE # Edit Custom Field
python3 api.py listattachments BOARDID # List attachments
python3 api.py cardsbyswimlane SWIMLANEID LISTID # Retrieve cards list on a swimlane
python3 api.py getcard BOARDID LISTID CARDID # Get card info
python3 api.py addlabel BOARDID LISTID CARDID LABELID # Add label to a card
python3 api.py addcardwithlabel AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION LABELIDS # Add a card and a label
python3 api.py editboardtitle BOARDID NEWBOARDTITLE # Edit board title
python3 api.py copyboard BOARDID NEWBOARDTITLE # Copy a board
python3 api.py createlabel BOARDID LABELCOLOR LABELNAME (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Create a new label
python3 api.py editcardcolor BOARDID LISTID CARDID COLOR (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Edit card color
python3 api.py addchecklist BOARDID CARDID TITLE ITEM1 ITEM2 ITEM3 ITEM4 (You can add multiple items or just one, or also without any item, just TITLE works as well. * If items or Title contains spaces, you should add ' between them.) # Add checklist + item on a card
python3 api.py deleteallcards BOARDID SWIMLANEID ( * Be careful will delete ALL CARDS INSIDE the swimlanes automatically in every list * ) # Delete all cards on a swimlane
python3 api.py checklistid BOARDID CARDID # Retrieve Checklist ID attached to a card
python3 api.py checklistinfo BOARDID CARDID CHECKLISTID # Get checklist info
python3 api.py get_list_cards_count BOARDID LISTID # Retrieve how many cards in a list
python3 api.py get_board_cards_count BOARDID # Retrieve how many cards in a board
Admin API:
python3 api.py users # All users
python3 api.py boards # All Public Boards
@@ -179,6 +194,52 @@ if arguments == 10:
print(body.text)
# ------- ADD CUSTOM FIELD TO BOARD END -----------
if arguments == 8:
if sys.argv[1] == 'addcardwithlabel':
# ------- ADD CARD WITH LABEL START -----------
authorid = sys.argv[2]
boardid = sys.argv[3]
swimlaneid = sys.argv[4]
listid = sys.argv[5]
cardtitle = sys.argv[6]
carddescription = sys.argv[7]
labelIds = sys.argv[8] # Aggiunto labelIds
cardtolist = wekanurl + apiboards + boardid + s + l + s + listid + s + cs
# Add card
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {
'authorId': '{}'.format(authorid),
'title': '{}'.format(cardtitle),
'description': '{}'.format(carddescription),
'swimlaneId': '{}'.format(swimlaneid),
'labelIds': labelIds
}
body = requests.post(cardtolist, data=post_data, headers=headers)
print(body.text)
# If ok id card
if body.status_code == 200:
card_data = body.json()
new_card_id = card_data.get('_id')
# Updating card
if new_card_id:
edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + new_card_id
put_data = {'labelIds': labelIds}
body = requests.put(edcard, data=put_data, headers=headers)
print("=== EDIT CARD ===\n")
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}', "}\n")
print(data2)
else:
print("Error obraining ID.")
else:
print("Error adding card.")
# ------- ADD CARD WITH LABEL END -----------
if arguments == 7:
if sys.argv[1] == 'addcard':
@@ -237,7 +298,53 @@ if arguments == 6:
print(data2)
# ------- EDIT CUSTOMFIELD END -----------
if arguments == 4:
if arguments == 5:
if sys.argv[1] == 'addlabel':
# ------- EDIT CARD ADD LABEL START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
labelIds = sys.argv[5]
edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid
print(edcard)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
put_data = {'labelIds': labelIds}
body = requests.put(edcard, data=put_data, headers=headers)
print("=== ADD LABEL ===\n")
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- EDIT CARD ADD LABEL END -----------
if sys.argv[1] == 'editcardcolor':
# ------- EDIT CARD COLOR START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
newcolor = sys.argv[5]
valid_colors = ['white', 'green', 'yellow', 'orange', 'red', 'purple', 'blue', 'sky', 'lime', 'pink', 'black',
'silver', 'peachpuff', 'crimson', 'plum', 'darkgreen', 'slateblue', 'magenta', 'gold', 'navy',
'gray', 'saddlebrown', 'paleturquoise', 'mistyrose', 'indigo']
if newcolor not in valid_colors:
print("Invalid color. Choose a color from the list.")
sys.exit(1)
edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid
print(edcard)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
put_data = {'color': '{}'.format(newcolor)}
body = requests.put(edcard, data=put_data, headers=headers)
print("=== EDIT CARD COLOR ===\n")
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}', "}\n")
print(data2)
# ------- EDIT CARD COLOR END -----------
if arguments >= 4:
if sys.argv[1] == 'newuser':
@@ -251,9 +358,155 @@ if arguments == 4:
print("=== CREATE NEW USER ===\n")
print(body.text)
# ------- CREATE NEW USER END -----------
if sys.argv[1] == 'getcard':
# ------- LIST OF CARD START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
listone = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== INFO OF ONE LIST ===\n")
print("URL:", listone) # Stampa l'URL per debug
try:
response = requests.get(listone, headers=headers)
print("=== RESPONSE ===\n")
print("Status Code:", response.status_code) # Stampa il codice di stato per debug
if response.status_code == 200:
data2 = response.text.replace('}', "}\n")
print(data2)
else:
print(f"Error: {response.status_code}")
print(f"Response: {response.text}")
except Exception as e:
print(f"Error in the GET request: {e}")
# ------- LISTS OF CARD END -----------
if sys.argv[1] == 'createlabel':
# ------- CREATE LABEL START -----------
boardid = sys.argv[2]
labelcolor = sys.argv[3]
labelname = sys.argv[4]
label_url = wekanurl + apiboards + boardid + s + 'labels'
print(label_url)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
# Object to send
put_data = {'label': {'color': labelcolor, 'name': labelname}}
print("URL:", label_url)
print("Headers:", headers)
print("Data:", put_data)
try:
response = requests.put(label_url, json=put_data, headers=headers)
print("=== CREATE LABELS ===\n")
print("Response Status Code:", response.status_code)
print("Response Text:", response.text)
except Exception as e:
print("Error:", e)
# ------- CREATE LABEL END -----------
if sys.argv[1] == 'addchecklist':
# ------- ADD CHECKLIST START -----------
board_id = sys.argv[2]
card_id = sys.argv[3]
checklist_title = sys.argv[4]
# Aggiungi la checklist
checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists'
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
data = {'title': checklist_title}
response = requests.post(checklist_url, data=data, headers=headers)
response.raise_for_status()
result = json.loads(response.text)
checklist_id = result.get('_id')
print(f"Checklist '{checklist_title}' created. ID: {checklist_id}")
# Aggiungi gli items alla checklist
items_to_add = sys.argv[5:]
for item_title in items_to_add:
checklist_item_url = wekanurl + apiboards + board_id + s + cs + s + card_id + s + 'checklists' + s + checklist_id + '/items'
item_data = {'title': item_title}
item_response = requests.post(checklist_item_url, data=item_data, headers=headers)
item_response.raise_for_status()
item_result = json.loads(item_response.text)
checklist_item_id = item_result.get('_id')
print(f"Item '{item_title}' added. ID: {checklist_item_id}")
if sys.argv[1] == 'checklistinfo':
# ------- ADD CHECKLIST START -----------
board_id = sys.argv[2]
card_id = sys.argv[3]
checklist_id = sys.argv[4]
checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists' + s + checklist_id
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
response = requests.get(checklist_url, headers=headers)
response.raise_for_status()
checklist_info = response.json()
print("Checklist Info:")
print(checklist_info)
if arguments == 3:
if sys.argv[1] == 'editboardtitle':
# ------- EDIT BOARD TITLE START -----------
boardid = sys.argv[2]
boardtitle = sys.argv[3]
edboardtitle = wekanurl + apiboards + boardid + s + 'title'
print(edboardtitle)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'title': boardtitle}
body = requests.put(edboardtitle, json=post_data, headers=headers)
print("=== EDIT BOARD TITLE ===\n")
#body = requests.get(edboardtitle, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
if body.status_code == 200:
print("Succesfull!")
else:
print(f"Error: {body.status_code}")
print(body.text)
# ------- EDIT BOARD TITLE END -----------
if sys.argv[1] == 'copyboard':
# ------- COPY BOARD START -----------
boardid = sys.argv[2]
boardtitle = sys.argv[3]
edboardcopy = wekanurl + apiboards + boardid + s + 'copy'
print(edboardcopy)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'title': boardtitle}
body = requests.post(edboardcopy, json=post_data, headers=headers)
print("=== COPY BOARD ===\n")
#body = requests.get(edboardcopy, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
if body.status_code == 200:
print("Succesfull!")
else:
print(f"Error: {body.status_code}")
print(body.text)
# ------- COPY BOARD END -----------
if sys.argv[1] == 'createlist':
# ------- CREATE LIST START -----------
@@ -293,6 +546,90 @@ if arguments == 3:
print(data2)
# ------- INFO OF CUSTOM FIELD END -----------
if sys.argv[1] == 'cardsbyswimlane':
# ------- RETRIEVE CARDS BY SWIMLANE ID START -----------
boardid = sys.argv[2]
swimlaneid = sys.argv[3]
cardsbyswimlane = wekanurl + apiboards + boardid + s + sws + s + swimlaneid + s + cs
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== CARDS BY SWIMLANE ID ===\n")
print("URL:", cardsbyswimlane) # Debug
try:
body = requests.get(cardsbyswimlane, headers=headers)
print("Status Code:", body.status_code) # Debug
data = body.text.replace('}', "}\n")
print("Data:", data)
except Exception as e:
print("Error GET:", e)
# ------- RETRIEVE CARDS BY SWIMLANE ID END -----------
if sys.argv[1] == 'deleteallcards':
boardid = sys.argv[2]
swimlaneid = sys.argv[3]
# ------- GET SWIMLANE CARDS START -----------
get_swimlane_cards_url = wekanurl + apiboards + boardid + s + "swimlanes" + s + swimlaneid + s + "cards"
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
try:
response = requests.get(get_swimlane_cards_url, headers=headers)
response.raise_for_status()
cards_data = response.json()
# Print the details of each card
for card in cards_data:
# ------- DELETE CARD START -----------
delete_card_url = wekanurl + apiboards + boardid + s + "lists" + s + card['listId'] + s + "cards" + s + card['_id']
try:
response = requests.delete(delete_card_url, headers=headers)
if response.status_code == 404:
print(f"Card not found: {card['_id']}")
else:
response.raise_for_status()
deleted_card_data = response.json()
print(f"Card Deleted Successfully. Card ID: {deleted_card_data['_id']}")
except requests.exceptions.RequestException as e:
print(f"Error deleting card: {e}")
# ------- DELETE CARD END -----------
except requests.exceptions.RequestException as e:
print(f"Error getting swimlane cards: {e}")
sys.exit(1)
# ------- GET SWIMLANE CARDS END -----------
if sys.argv[1] == 'get_list_cards_count':
# ------- GET LIST CARDS COUNT START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
get_list_cards_count_url = wekanurl + apiboards + boardid + s + l + s + listid + s + "cards_count"
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
try:
response = requests.get(get_list_cards_count_url, headers=headers)
response.raise_for_status()
data = response.json()
print(f"List Cards Count: {data['list_cards_count']}")
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# ------- GET LIST CARDS COUNT END -----------
if sys.argv[1] == 'checklistid':
# ------- ADD CHECKLIST START -----------
board_id = sys.argv[2]
card_id = sys.argv[3]
checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists'
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
response = requests.get(checklist_url, headers=headers)
response.raise_for_status()
checklists = response.json()
print("Checklists:")
for checklist in checklists:
print(checklist)
if arguments == 2:
# ------- BOARDS LIST START -----------
@@ -364,6 +701,22 @@ if arguments == 2:
print(data2)
# ------- LISTS OF ATTACHMENTS END -----------
if sys.argv[1] == 'get_board_cards_count':
# ------- GET BOARD CARDS COUNT START -----------
boardid = sys.argv[2]
get_board_cards_count_url = wekanurl + apiboards + boardid + s + "cards_count"
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
try:
response = requests.get(get_board_cards_count_url, headers=headers)
response.raise_for_status()
data = response.json()
print(f"Board Cards Count: {data['board_cards_count']}")
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# ------- GET BOARD CARDS COUNT END -----------
if arguments == 1:
if sys.argv[1] == 'users':
@@ -242,5 +242,3 @@ template(name="activity")
= ' @'
else if(currentData.timeValue)
| {{_ activity.activityType currentData.timeValue}}
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
-1
View File
@@ -19,7 +19,6 @@
.board-wrapper .board-canvas.is-sibling-sidebar-open {
margin-right: 248px;
}
.board-wrapper .board-canvas.overlayed {overflow:hidden}
.board-wrapper .board-canvas .board-overlay {
position: fixed;
left: 0;
+1 -2
View File
@@ -21,8 +21,7 @@ template(name="boardBody")
.board-canvas.js-swimlanes(
class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}"
class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}"
class="{{#if draggingActive.get}}is-dragging-active{{/if}}"
class="{{#if showOverlay.get}}overlayed{{/if}}")
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
if showOverlay.get
.board-overlay
if currentBoard.isTemplatesBoard
+49 -16
View File
@@ -1060,8 +1060,13 @@
.board-color-clearblue .swimlane {
background: none;
}
.board-color-clearblue .list:first-child {
margin-left: 15px;
.board-color-clearblue .swimlane .list:first-child {
min-width: 20px;
margin-left: 0px;
border-left: none;
}
.board-color-clearblue .swimlane .list:nth-child {
flex: 0 0 265px;
}
.board-color-clearblue .list {
background: rgba(255,255,255,0.35);
@@ -1073,8 +1078,10 @@
background: rgba(255,255,255,0.1);
height: min-content;
flex: unset;
width: 270px;
padding-bottom: 16px;
min-width: 20px;
margin-left: 0px;
border-left: none;
}
.board-color-clearblue .list.list-composer .open-list-composer {
border-radius: 7px;
@@ -1082,6 +1089,7 @@
padding: 7px 10px;
display: block;
}
.board-color-clearblue .list.list-composer .open-list-composer:hover i,
.board-color-clearblue .list.list-composer .open-list-composer:hover {
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
background: rgba(255,255,255,0.7);
@@ -1452,12 +1460,17 @@
background: none;
box-shadow: none;
}
.board-color-modern .list:first-child {
margin-left: 5px;
.board-color-modern .swimlane .list:first-child {
min-width: 20px;
margin-left: 0px;
border-left: none;
}
.board-color-modern .swimlane .list:nth-child {
flex: 0 0 265px;
}
.board-color-modern .list.list-composer.js-list-composer {
transition: all 0.3s ease;
min-width: 80px;
min-width: 20px;
}
.board-color-modern .open-list-composer.js-open-inlined-form:hover {
color: #222;
@@ -1536,9 +1549,6 @@
.board-color-modern .sidebar .sidebar-shadow {
box-shadow: 0 0 60px rgba(0,0,0,0.2);
}
.board-color-modern .sidebar .sidebar-content {
padding: 30px;
}
.board-color-modern .board-color-modern section#notifications-drawer {
border-radius: 5px;
}
@@ -1680,6 +1690,11 @@
padding: 4px;
font-size: 14px;
}
@media screen and (max-width: 800px) {
.board-color-moderndark#header-quick-access {
padding: 0;
}
}
.board-color-moderndark#header-quick-access .allBoards {
padding: 5px 10px 0 10px;
}
@@ -1776,6 +1791,10 @@
@media screen and (max-width: 800px) {
.board-color-moderndark .list-header .list-header-name {
line-height: 40px;
padding-top: 10px;
}
.board-color-moderndark .list-header-black, .board-color-moderndark .mini-list {
border-bottom: 0;
}
}
@media screen and (min-width: 801px) {
@@ -1787,7 +1806,6 @@
}
}
.board-color-moderndark .list-header .list-header-menu {
padding: 10px;
top: 0;
}
.board-color-moderndark .list-header .list-header-plus-top {
@@ -1884,17 +1902,20 @@
}
@media screen and (max-width: 800px) {
.board-color-moderndark .card-details {
width: 98%;
width: 94%;
}
.card-details-popup {
padding: 0px;
.board-color-moderndark .card-details-popup {
padding: 0;
}
.card-details-left, .card-details-right {
padding: 0px 10px;
.board-color-moderndark .card-details-left, .board-color-moderndark .card-details-right {
padding: 0px 20px;
}
.card-details .card-details-header .card-details-menu-mobile-web {
.board-color-moderndark .card-details .card-details-header .card-details-menu-mobile-web {
margin-right: 0;
}
.board-color-moderndark .pop-over > .content-wrapper > .popup-container-depth-0 > .content {
width: calc(100% - 20px);
}
}
@media screen and (min-width: 801px) {
.board-color-moderndark .card-details {
@@ -2104,6 +2125,18 @@
box-shadow: inset 15px 15px 37px #1c1c1c, inset -15px -15px 37px #282828;
border: none;
}
.board-color-exodark .swimlane .list:first-child {
min-width: 20px;
margin-left: 0px;
border-left: none;
}
.board-color-exodark .swimlane .list:nth-child {
flex: 0 0 265px;
}
.board-color-exodark .list.list-composer.js-list-composer {
transition: all 0.3s ease;
min-width: 0;
}
.board-color-exodark .list-header {
border-top-right-radius: 15px;
border-top-left-radius: 15px;
+3 -2
View File
@@ -12,8 +12,9 @@ template(name="boardHeaderBar")
if currentBoard
if currentUser
with currentBoard
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
i.fa.fa-pencil-square-o
if currentUser.isBoardAdmin
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
i.fa.fa-pencil-square-o
a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
+3 -2
View File
@@ -51,8 +51,9 @@ template(name="attachmentGallery")
.attachment-gallery
a.attachment-item.add-attachment.js-add-attachment
i.fa.fa-plus.icon
if canModifyCard
a.attachment-item.add-attachment.js-add-attachment
i.fa.fa-plus.icon
each attachments
+10 -3
View File
@@ -196,6 +196,9 @@
margin-right: 10px;
padding: 10px;
}
.card-details .card-description i.fa.fa-pencil-square-o {
float: right;
}
.card-details .card-description textarea {
min-height: 100px;
}
@@ -245,10 +248,10 @@
padding-top: 10px;
}
@media screen and (min-width: 801px) {
.card-details-maximized {
.card-details {
top: 97px;
left: 0;
right:0;
left: calc(50% - (600px / 2));
width: 600px;
bottom: 0;
position: fixed;
resize: both;
@@ -267,6 +270,10 @@
box-shadow: 0 0 7px 0 #b3b3b3;
transition: flex-basis 0.1s;
box-sizing: border-box;
top: 97px;
left: 0px;
height: calc(100% - 20px);
width: calc(100% - 20px);
float: left;
}
.card-details-maximized .card-details-left {
+12 -12
View File
@@ -13,11 +13,12 @@ template(name="cardDetails")
unless isMiniScreen
unless isPopup
a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
if cardMaximized
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
else
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
if currentUser.isBoardMember
if canModifyCard
if cardMaximized
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
else
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
if canModifyCard
a.fa.fa-navicon.card-details-menu.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
a.fa.fa-link.card-copy-button.js-copy-link(
id="cardURL_copy"
@@ -29,7 +30,7 @@ template(name="cardDetails")
else
unless isPopup
a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
if currentUser.isBoardMember
if canModifyCard
a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
a.fa.fa-link.card-copy-mobile-button.js-copy-link(
id="cardURL_copy"
@@ -524,12 +525,11 @@ template(name="cardDetails")
a.fa.fa-times-thin.js-close-inlined-form
else
if currentBoard.allowsDescriptionText
a.js-open-inlined-form
if getDescription
+viewer
= getDescription
else
| {{_ 'edit'}}
a.js-open-inlined-form(title="{{_ 'edit'}}" value=title)
i.fa.fa-pencil-square-o
if getDescription
+viewer
= getDescription
if (hasUnsavedValue 'cardDescription' _id)
p.quiet
| {{_ 'unsaved-description'}}
-76
View File
@@ -76,66 +76,6 @@ BlazeComponent.extendComponent({
return !Utils.getPopupCardId() && ReactiveCache.getCurrentUser().hasCardMaximized();
},
scrollParentContainer() {
const cardPanelWidth = 600;
const parentComponent = this.parentComponent();
/*
// Incomplete fix about bug where opening card scrolls to wrong place
// https://github.com/wekan/wekan/issues/4572#issuecomment-1184149395
// TODO sometimes parentComponent is not available, maybe because it's not
// yet created?!
//
// uncommented again by chrisi51
// only with that, the autoscroll feature is working properly
// after my fixes, all scrollings where correct
*/
if (!parentComponent) return;
const bodyBoardComponent = parentComponent.parentComponent();
//On Mobile View Parent is Board, Not Board Body. I cant see how this funciton should work then.
if (bodyBoardComponent === null) return;
const $cardView = this.$(this.firstNode());
const $cardContainer = bodyBoardComponent.$('.js-swimlanes');
/*
// Incomplete fix about bug where opening card scrolls to wrong place
// https://github.com/wekan/wekan/issues/4572#issuecomment-1184149395
// TODO sometimes cardContainer is not available, maybe because it's not yet
// created?!
if (!$cardContainer) return;
*/
const cardContainerScroll = $cardContainer.scrollLeft();
const cardContainerWidth = $cardContainer.width();
const cardViewStart = $cardView.offset().left;
const cardViewEnd = cardViewStart + cardPanelWidth;
let offset = false;
if (cardViewStart < 0) {
offset = cardViewStart;
} else if (cardViewEnd > cardContainerWidth) {
offset = cardViewEnd - cardContainerWidth;
}
if (offset) {
bodyBoardComponent.scrollLeft(cardContainerScroll + offset);
}
//Scroll top
const cardViewStartTop = $cardView.offset().top;
const cardContainerScrollTop = $cardContainer.scrollTop();
let topOffset = false;
if (cardViewStartTop !== 100) {
topOffset = cardViewStartTop - 100;
}
if (topOffset !== false) {
bodyBoardComponent.scrollTop(cardContainerScrollTop + topOffset);
}
},
presentParentTask() {
let result = this.currentBoard.presentParentTask;
if (result === null || result === undefined) {
@@ -221,12 +161,6 @@ BlazeComponent.extendComponent({
//-------------
}
if (!Utils.isMiniScreen()) {
Meteor.setTimeout(() => {
this.scrollParentContainer();
}, 500);
}
const $checklistsDom = this.$('.card-checklist-items');
$checklistsDom.sortable({
@@ -452,20 +386,10 @@ 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');
+1 -2
View File
@@ -37,5 +37,4 @@ template(name="cardLabelsPopup")
= name
if(isLabelSelected ../_id)
i.card-label-selectable-icon.fa.fa-check
if currentUser.isBoardAdmin
a.quiet-button.full.js-add-label {{_ 'label-create'}}
a.quiet-button.full.js-add-label {{_ 'label-create'}}
+3 -2
View File
@@ -56,10 +56,12 @@
float: right;
font-size: 18px;
padding-right: 30px;
padding-left: 5px;
}
.minicard-details-menu {
float: right;
font-size: 18px;
padding-left: 5px;
}
@media print {
.minicard-details-menu,
@@ -99,7 +101,7 @@
background-size: contain;
height: 145px;
user-select: none;
margin: -6px -8px 6px -8px;
margin: 6px -8px 6px -8px;
border-radius: top 2px;
}
.minicard .minicard-labels {
@@ -173,7 +175,6 @@
.minicard .minicard-title .viewer {
display: block;
word-wrap: break-word;
max-width: 230px;
}
}
.minicard .dates {
+10 -10
View File
@@ -3,12 +3,13 @@ template(name="minicard")
class="{{#if isLinkedCard}}linked-card{{/if}}"
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")
if isTouchScreenOrShowDesktopDragHandles
a.fa.fa-navicon.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
.handle
.fa.fa-arrows
else
a.fa.fa-navicon.minicard-details-menu.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
if canModifyCard
if isTouchScreenOrShowDesktopDragHandles
a.fa.fa-navicon.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
.handle
.fa.fa-arrows
else
a.fa.fa-navicon.minicard-details-menu.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
.dates
if getReceived
unless getStart
@@ -129,12 +130,12 @@ template(name="minicard")
each getMembers
+userAvatar(userId=this)
if showCreator
if showCreatorOnMinicard
.minicard-creator
+userAvatar(userId=this.userId noRemove=true)
.badges
unless currentUser.isNoComments
if canModifyCard
if comments.length
.badge(title="{{_ 'card-comments-title' comments.length }}")
span.badge-icon.fa.fa-comment-o.badge-comment.badge-text
@@ -189,12 +190,11 @@ template(name="editCardSortOrderPopup")
template(name="minicardDetailsActionsPopup")
ul.pop-over-list
if currentUser.isBoardAdmin
if canModifyCard
li
a.js-move-card
i.fa.fa-arrow-right
| {{_ 'moveCardPopup-title'}}
unless currentUser.isWorker
li
a.js-copy-card
i.fa.fa-copy
+4 -4
View File
@@ -37,15 +37,15 @@ BlazeComponent.extendComponent({
return ret;
},
showCreator() {
showCreatorOnMinicard() {
// cache "board" to reduce the mini-mongodb access
const board = this.data().board();
let ret = false;
if (board) {
ret =
board.allowsCreator === null ||
board.allowsCreator === undefined ||
board.allowsCreator
board.allowsCreatorOnMinicard === null ||
board.allowsCreatorOnMinicard === undefined ||
board.allowsCreatorOnMinicard
;
}
return ret;
+33 -3
View File
@@ -7,7 +7,7 @@
border-left: 1px solid #ccc;
padding: 0;
float: left;
min-width: 100px; /* TODO(mark-i-m): hardcoded? */
/* min-width: 100px; TODO(mark-i-m): hardcoded? */
/*max-width: 270px;*/
/* Reverted incomplete change list width: */
/* https://github.com/wekan/wekan/issues/4558 */
@@ -81,6 +81,20 @@
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
}
.list-rotated {
width: 10px;
height: 250px;
margin-top: -90px;
margin-left: -110px;
margin-right: 0;
transform: rotate(90deg);
position: relative;
text-overflow: ellipsis;
white-space: nowrap;
}
.list-header .list-rotated {
}
.list-header .list-header-watch-icon {
padding-left: 10px;
@@ -99,6 +113,23 @@
color: #a6a6a6;
margin-right: 15px;
}
.list-header .list-header-collapse-right {
color: #a6a6a6;
}
.list-header .list-header-collapse-left {
color: #a6a6a6;
margin-right: 15px;
}
.list-header .list-header-uncollapse-left {
color: #a6a6a6;
}
.list-header .list-header-uncollapse-right {
color: #a6a6a6;
}
.list-header .list-header-collapse {
color: #a6a6a6;
margin-right: 15px;
}
.list-header .highlight {
color: #ce1414;
}
@@ -297,7 +328,6 @@
}
.list-header-white {
border-bottom: 6px solid #fff;
border: 1px solid #eee;
}
.list-header-green {
border-bottom: 6px solid #3cb500;
@@ -330,7 +360,7 @@
border-bottom: 6px solid #51e898;
}
.list-header-silver {
border-bottom: 6px solid unset;
border-bottom: 6px solid #e4e4e4;
}
.list-header-peachpuff {
border-bottom: 6px solid #ffdab9;
+2 -1
View File
@@ -1,6 +1,7 @@
template(name='list')
.list.js-list(id="js-list-{{_id}}"
style="width:{{listWidth}}px;")
style="{{#unless collapsed}}width:{{listWidth}}px;{{/unless}}"
class="{{#if collapsed}}list-collapsed{{/if}}")
+listHeader
+listBody
+32 -31
View File
@@ -1,37 +1,38 @@
template(name="listBody")
.list-body
.minicards.clearfix.js-minicards(class="{{#if reachedWipLimit}}js-list-full{{/if}}")
if cards.length
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
ul.sidebar-list
each customFieldsSum
li
+viewer
= name
if $eq customFieldsSum.type "number"
unless collapsed
.list-body
.minicards.clearfix.js-minicards(class="{{#if reachedWipLimit}}js-list-full{{/if}}")
if cards.length
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
ul.sidebar-list
each customFieldsSum
li
+viewer
= value
if $eq customFieldsSum.type "currency"
+viewer
= formattedCurrencyCustomFieldValue(value)
each (cardsWithLimit (idOrNull ../../_id))
a.minicard-wrapper.js-minicard(href=originRelativeUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
if MultiSelection.isActive
.materialCheckBox.multi-selection-checkbox.js-toggle-multi-selection(
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
+minicard(this)
if (showSpinner (idOrNull ../../_id))
+spinnerList
= name
if $eq customFieldsSum.type "number"
+viewer
= value
if $eq customFieldsSum.type "currency"
+viewer
= formattedCurrencyCustomFieldValue(value)
each (cardsWithLimit (idOrNull ../../_id))
a.minicard-wrapper.js-minicard(href=originRelativeUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
if MultiSelection.isActive
.materialCheckBox.multi-selection-checkbox.js-toggle-multi-selection(
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
+minicard(this)
if (showSpinner (idOrNull ../../_id))
+spinnerList
if canSeeAddCard
+inlinedForm(autoclose=false position="bottom")
+addCardForm(listId=_id position="bottom")
else
a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}")
i.fa.fa-plus
if canSeeAddCard
+inlinedForm(autoclose=false position="bottom")
+addCardForm(listId=_id position="bottom")
else
a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}")
i.fa.fa-plus
template(name="spinnerList")
.sk-spinner.sk-spinner-list(
+1
View File
@@ -646,6 +646,7 @@ BlazeComponent.extendComponent({
if (this.isTemplateSearch) {
const boardId = (ReactiveCache.getCurrentUser().profile || {}).templatesBoardId;
if (boardId) {
subManager.subscribe('board', boardId, false);
this.board = ReactiveCache.getBoard(boardId);
}
} else {
+48 -23
View File
@@ -5,22 +5,43 @@ template(name="listHeader")
+inlinedForm
+editListTitleForm
else
unless isMiniScreen
if collapsed
a.js-collapse(title="{{_ 'uncollapse'}}")
i.fa.fa-arrow-left.list-header-uncollapse-left
i.fa.fa-arrow-right.list-header-uncollapse-right
if isMiniScreen
if currentList
a.list-header-left-icon.fa.fa-angle-left.js-unselect-list
h2.list-header-name(
title="{{ moment modifiedAt 'LLL' }}"
class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}")
+viewer
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}}
|/#{wipLimit.value})
if showCardsCountForList cards.length
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}}
unless isMiniScreen
if collapsed
if showCardsCountForList cards.length
br
span.cardCount {{cardsCount}}
if isMiniScreen
h2.list-header-name(
title="{{ moment modifiedAt 'LLL' }}"
class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}")
+viewer
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}}
|/#{wipLimit.value})
unless isMiniScreen
div(class="{{#if collapsed}}list-rotated{{/if}}")
h2.list-header-name(
title="{{ moment modifiedAt 'LLL' }}"
class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}")
+viewer
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}}
|/#{wipLimit.value})
unless collapsed
if showCardsCountForList cards.length
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}}
if isMiniScreen
if currentList
if isWatching
@@ -36,16 +57,20 @@ template(name="listHeader")
else if currentUser.isBoardMember
if isWatching
i.list-header-watch-icon.fa.fa-eye
div.list-header-menu
unless currentUser.isCommentOnly
//if isBoardAdmin
// a.fa.js-list-star.list-header-plus-top(class="fa-star{{#unless starred}}-o{{/unless}}")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}")
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
if currentUser.isBoardAdmin
if isTouchScreenOrShowDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
unless collapsed
div.list-header-menu
unless currentUser.isCommentOnly
//if isBoardAdmin
// a.fa.js-list-star.list-header-plus-top(class="fa-star{{#unless starred}}-o{{/unless}}")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}")
a.js-collapse(title="{{_ 'collapse'}}")
i.fa.fa-arrow-right.list-header-collapse-right
i.fa.fa-arrow-left.list-header-collapse-left
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
if currentUser.isBoardAdmin
if isTouchScreenOrShowDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
template(name="editListTitleForm")
.list-composer
+15
View File
@@ -31,6 +31,17 @@ BlazeComponent.extendComponent({
return !status;
}
},
collapsed(check = undefined) {
const list = Template.currentData();
const status = list.isCollapsed();
if (check === undefined) {
// just check
return status;
} else {
list.collapse(!status);
return !status;
}
},
editTitle(event) {
event.preventDefault();
const newTitle = this.childComponents('inlinedForm')[0]
@@ -104,6 +115,10 @@ BlazeComponent.extendComponent({
event.preventDefault();
this.starred(!this.starred());
},
'click .js-collapse'(event) {
event.preventDefault();
this.collapsed(!this.collapsed());
},
'click .js-open-list-menu': Popup.open('listAction'),
'click .js-add-card.list-header-plus-top'(event) {
const listDom = $(event.target).parents(
+13 -1
View File
@@ -1,7 +1,19 @@
.new-comment a.fa.fa-brands.fa-markdown,
.inlined-form a.fa.fa-brands.fa-markdown {
float: right;
position: absolute;
top: -20px;
right: 60px;
}
.new-comment a.fa.fa-copy,
.inlined-form a.fa.fa-copy {
float: right;
position: relative;
position: absolute;
top: -20px;
right: 6px;
}
.js-inlined-form.viewer.btn-sm {
position: absolute;
top: 20px;
right: 6px;
}
+1
View File
@@ -1,4 +1,5 @@
template(name="editor")
a.fa.fa-brands.fa-markdown(title="{{_ 'convert-to-markdown'}}")
a.fa.fa-copy(title="{{_ 'copy-text-to-clipboard'}}")
span.copied-tooltip {{_ 'copied'}}
textarea.editor(
+42 -1
View File
@@ -1,4 +1,6 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
var converter = require('@wekanteam/html-to-markdown');
const specialHandles = [
{userId: 'board_members', username: 'board_members'},
@@ -9,6 +11,33 @@ const specialHandleNames = specialHandles.map(m => m.username);
BlazeComponent.extendComponent({
onRendered() {
// Start: Copy <pre> code https://github.com/wekan/wekan/issues/5149
// TODO: Try to make copyPre visible at Card Details after editing or closing editor or Card Details.
// - Also this same TODO below at event, if someone gets it working.
var copy = function(target) {
var textArea = document.createElement('textarea');
textArea.setAttribute('style','width:1px;border:0;opacity:0;');
document.body.appendChild(textArea);
textArea.value = target.innerHTML;
textArea.select();
document.execCommand('copy');
document.body.removeChild(textArea);
}
var pres = document.querySelectorAll(".viewer > pre");
pres.forEach(function(pre){
var button = document.createElement("a");
button.className = "fa fa-copy btn btn-sm right";
// TODO: Translate text 'Copy text to clipboard'
button.setAttribute('title','Copy text to clipboard');
button.innerHTML = '';
pre.parentNode.insertBefore(button, pre);
button.addEventListener('click', function(e){
e.preventDefault();
copy(pre.childNodes[0]);
})
})
// End: Copy <pre> code
const textareaSelector = 'textarea';
const mentions = [
// User mentions
@@ -44,12 +73,14 @@ BlazeComponent.extendComponent({
index: 1,
},
];
const enableTextarea = function() {
const $textarea = this.$(textareaSelector);
autosize($textarea);
$textarea.escapeableTextComplete(mentions);
};
if (Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR !== false) {
/*
if (Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR === true || Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR === 'true') {
const isSmall = Utils.isMiniScreen();
const toolbar = isSmall
? [
@@ -269,6 +300,8 @@ BlazeComponent.extendComponent({
} else {
enableTextarea();
}
*/
enableTextarea();
},
events() {
return [
@@ -280,6 +313,14 @@ BlazeComponent.extendComponent({
const $tooltip = this.$('.copied-tooltip');
Utils.showCopied(promise, $tooltip);
},
'click a.fa.fa-brands.fa-markdown'(event) {
const $editor = this.$('textarea.editor');
$editor[0].value = converter.convert($editor[0].value);
},
// TODO: Try to make copyPre visible at Card Details after editing or closing editor or Card Details.
//'click .js-close-inlined-form'(event) {
// Utils.copyPre();
//},
}
]
}
+1
View File
@@ -470,6 +470,7 @@ a:not(.disabled).is-active i.fa {
.select-authentication {
width: 100%;
}
.textBelowCustomLoginLogo,
.auth-layout {
display: flex;
flex-direction: column;
+7 -4
View File
@@ -37,10 +37,13 @@ template(name="userFormsLayout")
else
img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto")
br
if currentSetting.textBelowCustomLoginLogo
+viewer
| {{currentSetting.textBelowCustomLoginLogo}}
br
if currentSetting.textBelowCustomLoginLogo
hr
section.textBelowCustomLoginLogo
+viewer
| {{currentSetting.textBelowCustomLoginLogo}}
hr
section.auth-layout
section.auth-dialog
if isLoading
+loader
+4 -3
View File
@@ -70,13 +70,14 @@ template(name="myCards")
unless isMiniScreen
.my-cards-board-badge(class=board.colorClass, id="header")
.my-cards-card-title-table
a.minicard-wrapper(href=card.originRelativeUrl)
| {{card.title}}
| {{card.title}}
//a.minicard-wrapper(href=card.originRelativeUrl)
// | {{card.title}}
td
| {{list.title}}
td
a(href=board.originRelativeUrl)
| {{board.title}}
//a(href=board.originRelativeUrl)
td
| {{swimlane.title}}
@@ -11,7 +11,7 @@ template(name='notificationsDrawer')
a.fa.fa-times-thin.close
ul.notifications
each transformedProfile.notifications
+notification(activityData=activity index=dbIndex read=read)
+notification(activityData=activityObj index=dbIndex read=read)
if($gt unreadNotifications 0)
a.all-read {{_ 'mark-all-as-read'}}
if ($and ($.Session.get 'showReadNotifications') ($gt readNotifications 0))
+63 -54
View File
@@ -58,18 +58,20 @@ template(name="rulesReport")
h1 {{_ 'rulesReportTitle'}}
if resultsCount
table
tr
th Rule Title
th Board Title
th actionType
th activityType
thead
tr
th Rule Title
th Board Title
th actionType
th activityType
each rule in results
tr
td {{ rule.title }}
td {{ rule.boardTitle }}
td {{ rule.action.actionType }}
td {{ rule.trigger.activityType }}
tbody
tr
td {{ rule.title }}
td {{ rule.boardTitle }}
td {{ rule.action.actionType }}
td {{ rule.trigger.activityType }}
else
div {{_ 'no-results' }}
@@ -77,22 +79,24 @@ template(name="filesReport")
h1 {{_ 'filesReportTitle'}}
if resultsCount
table
tr
th Filename
th.right Size (kB)
th MIME Type
th Attachment ID
th Board ID
th Card ID
thead
tr
th Filename
th.right Size (kB)
th MIME Type
th Attachment ID
th Board ID
th Card ID
each att in results
tr
td {{ att.name }}
td.right {{ fileSize att.size }}
td {{ att.type }}
td {{ att._id }}
td {{ att.meta.boardId }}
td {{ att.meta.cardId }}
tbody
tr
td {{ att.name }}
td.right {{ fileSize att.size }}
td {{ att.type }}
td {{ att._id }}
td {{ att.meta.boardId }}
td {{ att.meta.cardId }}
else
div {{_ 'no-results' }}
@@ -100,22 +104,24 @@ template(name="cardsReport")
h1 {{_ 'cardsReportTitle'}}
if resultsCount
table.table
tr
th Card Title
th Board
th Swimlane
th List
th Members
th Assignees
thead
tr
th Card Title
th Board
th Swimlane
th List
th Members
th Assignees
each card in results
tr
td {{abbreviate card.title }}
td {{abbreviate card.board.title }}
td {{abbreviate card.swimlane.title }}
td {{abbreviate card.list.title }}
td {{userNames card.members }}
td {{userNames card.assignees }}
tbody
tr
td {{abbreviate card.title }}
td {{abbreviate card.board.title }}
td {{abbreviate card.swimlane.title }}
td {{abbreviate card.list.title }}
td {{userNames card.members }}
td {{userNames card.assignees }}
else
div {{_ 'no-results' }}
@@ -123,22 +129,25 @@ template(name="boardsReport")
h1 {{_ 'boardsReportTitle'}}
if resultsCount
table.table
tr
th Title
th Id
th Permission
th Archived?
th Members
th Organizations
th Teams
each board in results
thead
tr
td {{abbreviate board.title }}
td {{abbreviate board._id }}
td {{ board.permission }}
td
= yesOrNo(board.archived)
td {{userNames board.members }}
th Title
th Id
th Permission
th Archived?
th Members
th Organizations
th Teams
each board in results
tbody
tr
td {{abbreviate board.title }}
td {{abbreviate board._id }}
td {{ board.permission }}
td
= yesOrNo(board.archived)
td {{userNames board.members }}
td {{orgs board.orgs }}
td {{teams board.teams }}
else
div {{_ 'no-results' }}
@@ -170,8 +170,27 @@ class AdminReport extends BlazeComponent {
.join(", ");
return ret;
}
teams(memberTeams) {
const ret = (memberTeams || [])
.map(_memberTeam => {
const _ret = ReactiveCache.getTeam(_memberTeam.teamId)?.teamDisplayName || _memberTeam.teamId;
return _ret;
})
.join(", ");
return ret;
}
orgs(orgs) {
const ret = (orgs || [])
.map(_orgs => {
const _ret = ReactiveCache.getOrg(_orgs.orgId)?.orgDisplayName || _orgs.orgId;
return _ret;
})
.join(", ");
return ret;
}
}.register('boardsReport'));
(class extends AdminReport {
collection = Cards;
+25 -8
View File
@@ -73,22 +73,25 @@ template(name="people")
template(name="orgGeneral")
table
tbody
thead
tr
th {{_ 'displayName'}}
th {{_ 'description'}}
th {{_ 'shortName'}}
th {{_ 'autoAddUsersWithDomainName'}}
th {{_ 'website'}}
th {{_ 'createdAt'}}
th {{_ 'active'}}
th
+newOrgRow
tbody
tr
each org in orgList
+orgRow(orgId=org._id)
template(name="teamGeneral")
table
tbody
thead
tr
th {{_ 'displayName'}}
th {{_ 'description'}}
@@ -98,6 +101,8 @@ template(name="teamGeneral")
th {{_ 'active'}}
th
+newTeamRow
tbody
tr
each team in teamList
+teamRow(teamId=team._id)
@@ -105,7 +110,7 @@ template(name="peopleGeneral")
#divAddOrRemoveTeamContainer
+modifyTeamsUsers
table
tbody
thead
tr
th
+selectAllUser
@@ -123,6 +128,8 @@ template(name="peopleGeneral")
th {{_ 'teams'}}
th
+newUserRow
tbody
tr
each user in peopleList
+peopleRow(userId=user._id)
@@ -159,6 +166,10 @@ template(name="orgRow")
td {{ orgData.orgShortName }}
else
td <s>{{ orgData.orgShortName }}</s>
if orgData.orgIsActive
td {{ orgData.orgAutoAddUsersWithDomainName }}
else
td <s>{{ orgData.orgAutoAddUsersWithDomainName }}</s>
if orgData.orgIsActive
td {{ orgData.orgWebsite }}
else
@@ -307,9 +318,12 @@ template(name="editOrgPopup")
label
| {{_ 'shortName'}}
input.js-orgShortName(type="text" value=org.orgShortName required)
label
| {{_ 'autoAddUsersWithDomainName'}}
input.js-orgAutoAddUsersWithDomainName(type="text" value=org.orgAutoAddUsersWithDomainName)
label
| {{_ 'website'}}
input.js-orgWebsite(type="text" value=org.orgWebsite required)
input.js-orgWebsite(type="text" value=org.orgWebsite)
label
| {{_ 'active'}}
select.select-active.js-org-isactive
@@ -335,7 +349,7 @@ template(name="editTeamPopup")
input.js-teamShortName(type="text" value=team.teamShortName required)
label
| {{_ 'website'}}
input.js-teamWebsite(type="text" value=team.teamWebsite required)
input.js-teamWebsite(type="text" value=team.teamWebsite)
label
| {{_ 'active'}}
select.select-active.js-team-isactive
@@ -405,7 +419,7 @@ template(name="editUserPopup")
each value in orgsDatas
option(value="{{value._id}}") {{value.orgDisplayName}}
input#jsUserOrgsInPut.js-userOrgs(type="text" value=user.orgsUserBelongs, disabled)
input#jsUserOrgIdsInPut.js-userOrgIds.hide(type="text" value=user.orgIdsUserBelongs)
input#jsUserOrgIdsInPut.js-userOrgIds.hide(type="hidden" value=user.orgIdsUserBelongs)
label
| {{_ 'teams'}}
i.fa.fa-plus-square#addUserTeam
@@ -415,7 +429,7 @@ template(name="editUserPopup")
each value in teamsDatas
option(value="{{value._id}}") {{_ value.teamDisplayName}}
input#jsUserTeamsInPut.js-userteams(type="text" value=user.teamsUserBelongs, disabled)
input#jsUserTeamIdsInPut.js-userteamIds.hide(type="text" value=user.teamIdsUserBelongs)
input#jsUserTeamIdsInPut.js-userteamIds.hide(type="hidden" value=user.teamIdsUserBelongs)
hr
label
@@ -436,6 +450,9 @@ template(name="newOrgPopup")
label
| {{_ 'shortName'}}
input.js-orgShortName(type="text" value="" required)
label
| {{_ 'autoAddUsersWithDomainName'}}
input.js-orgAutoAddUsersWithDomainName(type="text" value="")
label
| {{_ 'website'}}
input.js-orgWebsite(type="text" value="" required)
@@ -462,7 +479,7 @@ template(name="newTeamPopup")
input.js-teamShortName(type="text" value="" required)
label
| {{_ 'website'}}
input.js-teamWebsite(type="text" value="" required)
input.js-teamWebsite(type="text" value="")
label
| {{_ 'active'}}
select.select-active.js-team-isactive
+6
View File
@@ -576,12 +576,14 @@ Template.editOrgPopup.events({
.value.trim();
const orgDesc = templateInstance.find('.js-orgDesc').value.trim();
const orgShortName = templateInstance.find('.js-orgShortName').value.trim();
const orgAutoAddUsersWithDomainName = templateInstance.find('.js-orgAutoAddUsersWithDomainName').value.trim();
const orgWebsite = templateInstance.find('.js-orgWebsite').value.trim();
const orgIsActive = templateInstance.find('.js-org-isactive').value.trim() == 'true';
const isChangeOrgDisplayName = orgDisplayName !== org.orgDisplayName;
const isChangeOrgDesc = orgDesc !== org.orgDesc;
const isChangeOrgShortName = orgShortName !== org.orgShortName;
const isChangeOrgAutoAddUsersWithDomainName = orgAutoAddUsersWithDomainName !== org.orgAutoAddUsersWithDomainName;
const isChangeOrgWebsite = orgWebsite !== org.orgWebsite;
const isChangeOrgIsActive = orgIsActive !== org.orgIsActive;
@@ -589,6 +591,7 @@ Template.editOrgPopup.events({
isChangeOrgDisplayName ||
isChangeOrgDesc ||
isChangeOrgShortName ||
isChangeOrgAutoAddUsersWithDomainName ||
isChangeOrgWebsite ||
isChangeOrgIsActive
) {
@@ -598,6 +601,7 @@ Template.editOrgPopup.events({
orgDisplayName,
orgDesc,
orgShortName,
orgAutoAddUsersWithDomainName,
orgWebsite,
orgIsActive,
);
@@ -920,6 +924,7 @@ Template.newOrgPopup.events({
.value.trim();
const orgDesc = templateInstance.find('.js-orgDesc').value.trim();
const orgShortName = templateInstance.find('.js-orgShortName').value.trim();
const orgAutoAddUsersWithDomainName = templateInstance.find('.js-orgAutoAddUsersWithDomainName').value.trim();
const orgWebsite = templateInstance.find('.js-orgWebsite').value.trim();
const orgIsActive =
templateInstance.find('.js-org-isactive').value.trim() == 'true';
@@ -929,6 +934,7 @@ Template.newOrgPopup.events({
orgDisplayName,
orgDesc,
orgShortName,
orgAutoAddUsersWithDomainName,
orgWebsite,
orgIsActive,
);
@@ -7,11 +7,13 @@
display: -moz-flex;
display: -ms-flexbox;
display: flex;
height: 100%;
}
.setting-content {
color: #727479;
background: #dedede;
width: 100%;
height: 100%;
position: absolute;
}
.setting-content .content-title {
@@ -56,6 +58,8 @@
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
max-height: 100%;
overflow: auto;
}
.setting-content .content-body .main-body ul li {
padding: 0.5rem 0.5rem;
@@ -34,13 +34,14 @@ template(name="translation")
template(name="translationGeneral")
table
tbody
thead
tr
th {{_ 'language'}}
th {{_ 'text'}}
th {{_ 'translation-text'}}
th
+newTranslationRow
tbody
each translation in translationList
+translationRow(translationId=translation._id)
+32 -36
View File
@@ -175,7 +175,7 @@ template(name="boardInfoOnMyBoardsPopup")
template(name="boardCardSettingsPopup")
form.board-card-settings
h3 {{_ 'show-on-card'}}
h3 {{_ 'show-on-card'}}, {{_ 'show-on-minicard'}}
div.check-div
a.flex.js-field-has-receiveddate(class="{{#if allowsReceivedDate}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsReceivedDate}}is-checked{{/if}}")
@@ -206,14 +206,18 @@ template(name="boardCardSettingsPopup")
span
i.fa.fa-users
| {{_ 'members'}}
div.check-div
a.flex.js-field-has-creator(class="{{#if allowsCreator}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsCreator}}is-checked{{/if}}")
span
i.fa.fa-user
| {{_ 'creator'}}
div.check-div
a.flex.js-field-has-creator-on-minicard(class="{{#if allowsCreatorOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsCreatorOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-user
| {{_ 'creator-on-minicard'}}
div.check-div
a.flex.js-field-has-assignee(class="{{#if allowsAssignee}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsAssignee}}is-checked{{/if}}")
@@ -238,6 +242,12 @@ template(name="boardCardSettingsPopup")
span
i.fa.fa-sort
| {{_ 'card-sorting-by-number'}}
div.check-div
a.flex.js-field-has-card-sorting-by-number-on-minicard(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-sort
| {{_ 'card-sorting-by-number-on-minicard'}}
div.check-div
a.flex.js-field-has-card-show-lists(class="{{#if allowsShowLists}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsShowLists}}is-checked{{/if}}")
@@ -271,6 +281,12 @@ template(name="boardCardSettingsPopup")
i.fa.fa-align-left
| {{_ 'description'}}
| {{_ 'custom-field-text'}}
div.check-div
a.flex.js-field-has-description-text-on-minicard(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-align-left
| {{_ 'description-on-minicard'}}
div.check-div
a.flex.js-field-has-checklists(class="{{#if allowsChecklists}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsChecklists}}is-checked{{/if}}")
@@ -289,6 +305,19 @@ template(name="boardCardSettingsPopup")
span
i.fa.fa-paperclip
| {{_ 'attachments'}}
div.check-div
a.flex.js-field-has-badge-attachment-on-minicard(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-paperclip
| {{_ 'badge-attachment-on-minicard'}}
div.check-div
a.flex.js-field-has-cover-attachment-on-minicard(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-book
i.fa.fa-picture-o
| {{_ 'cover-attachment-on-minicard'}}
//div.check-div
// a.flex.js-field-has-comments(class="{{#if allowsComments}}is-checked{{/if}}")
// .materialCheckBox(class="{{#if allowsComments}}is-checked{{/if}}")
@@ -302,35 +331,6 @@ template(name="boardCardSettingsPopup")
// i.fa.fa-history
// | {{_ 'activities'}}
template(name="boardMinicardSettingsPopup")
form.board-minicard-settings
h3 {{_ 'show-on-minicard'}}
div.check-div
a.flex.js-field-has-description-text-on-minicard(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-align-left
| {{_ 'description-on-minicard'}}
div.check-div
a.flex.js-field-has-cover-attachment-on-minicard(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-book
i.fa.fa-picture-o
| {{_ 'cover-attachment-on-minicard'}}
div.check-div
a.flex.js-field-has-badge-attachment-on-minicard(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-paperclip
| {{_ 'badge-attachment-on-minicard'}}
div.check-div
a.flex.js-field-has-card-sorting-by-number-on-minicard(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}")
span
i.fa.fa-sort
| {{_ 'card-sorting-by-number-on-minicard'}}
template(name="boardSubtaskSettingsPopup")
form.board-subtask-settings
h3 {{_ 'show-parent-in-minicard'}}
@@ -473,10 +473,6 @@ template(name="boardMenuPopup")
a.js-card-settings
i.fa.fa-id-card-o
| {{_ 'card-settings'}}
li
a.js-minicard-settings
i.fa.fa-id-card-o
| {{_ 'minicard-settings'}}
li
a.js-subtask-settings
i.fa.fa-sitemap
+54 -70
View File
@@ -236,7 +236,6 @@ Template.boardMenuPopup.events({
'click .js-import-board': Popup.open('chooseBoardSource'),
'click .js-subtask-settings': Popup.open('boardSubtaskSettings'),
'click .js-card-settings': Popup.open('boardCardSettings'),
'click .js-minicard-settings': Popup.open('boardMinicardSettings'),
'click .js-export-board': Popup.open('exportBoard'),
});
@@ -921,6 +920,14 @@ BlazeComponent.extendComponent({
);
},
allowsCreatorOnMinicard() {
return (
this.currentBoard.allowsCreatorOnMinicard === null ||
this.currentBoard.allowsCreatorOnMinicard === undefined ||
this.currentBoard.allowsCreatorOnMinicard
);
},
allowsMembers() {
return this.currentBoard.allowsMembers;
},
@@ -984,6 +991,22 @@ BlazeComponent.extendComponent({
);
},
allowsDescriptionTextOnMinicard() {
return this.currentBoard.allowsDescriptionTextOnMinicard;
},
allowsCoverAttachmentOnMinicard() {
return this.currentBoard.allowsCoverAttachmentOnMinicard;
},
allowsBadgeAttachmentOnMinicard() {
return this.currentBoard.allowsBadgeAttachmentOnMinicard;
},
allowsCardSortingByNumberOnMinicard() {
return this.currentBoard.allowsCardSortingByNumberOnMinicard;
},
boards() {
const ret = ReactiveCache.getBoards(
{
@@ -1106,6 +1129,19 @@ BlazeComponent.extendComponent({
this.currentBoard.allowsCreator,
);
},
'click .js-field-has-creator-on-minicard'(evt) {
evt.preventDefault();
this.currentBoard.allowsCreatorOnMinicard = !this.currentBoard.allowsCreatorOnMinicard;
this.currentBoard.setAllowsCreatorOnMinicard(this.currentBoard.allowsCreatorOnMinicard);
$(`.js-field-has-creator-on-minicard ${MCB}`).toggleClass(
CKCLS,
this.currentBoard.allowsCreatorOnMinicard,
);
$('.js-field-has-creator-on-minicard').toggleClass(
CKCLS,
this.currentBoard.allowsCreatorOnMinicard,
);
},
'click .js-field-has-members'(evt) {
evt.preventDefault();
this.currentBoard.allowsMembers = !this.currentBoard.allowsMembers;
@@ -1241,6 +1277,22 @@ BlazeComponent.extendComponent({
this.currentBoard.allowsCardNumber,
);
},
'click .js-field-has-description-text-on-minicard'(evt) {
evt.preventDefault();
this.currentBoard.allowsDescriptionTextOnMinicard = !this.currentBoard
.allowsDescriptionTextOnMinicard;
this.currentBoard.setallowsDescriptionTextOnMinicard(
this.currentBoard.allowsDescriptionTextOnMinicard,
);
$(`.js-field-has-description-text-on-minicard ${MCB}`).toggleClass(
CKCLS,
this.currentBoard.allowsDescriptionTextOnMinicard,
);
$('.js-field-has-description-text-on-minicard').toggleClass(
CKCLS,
this.currentBoard.allowsDescriptionTextOnMinicard,
);
},
'click .js-field-has-description-text'(evt) {
evt.preventDefault();
this.currentBoard.allowsDescriptionText = !this.currentBoard
@@ -1318,74 +1370,6 @@ BlazeComponent.extendComponent({
this.currentBoard.allowsActivities,
);
},
},
];
},
}).register('boardCardSettingsPopup');
BlazeComponent.extendComponent({
onCreated() {
this.currentBoard = Utils.getCurrentBoard();
},
allowsDescriptionTextOnMinicard() {
return this.currentBoard.allowsDescriptionTextOnMinicard;
},
allowsCoverAttachmentOnMinicard() {
return this.currentBoard.allowsCoverAttachmentOnMinicard;
},
allowsBadgeAttachmentOnMinicard() {
return this.currentBoard.allowsBadgeAttachmentOnMinicard;
},
allowsCardSortingByNumberOnMinicard() {
return this.currentBoard.allowsCardSortingByNumberOnMinicard;
},
lists() {
return ReactiveCache.getLists(
{
boardId: this.currentBoard._id,
archived: false,
},
{
sort: ['title'],
},
);
},
hasLists() {
return this.lists().length > 0;
},
isListSelected() {
return (
this.currentBoard.dateSettingsDefaultBoardId === this.currentData()._id
);
},
events() {
return [
{
'click .js-field-has-description-text-on-minicard'(evt) {
evt.preventDefault();
this.currentBoard.allowsDescriptionTextOnMinicard = !this.currentBoard
.allowsDescriptionTextOnMinicard;
this.currentBoard.setallowsDescriptionTextOnMinicard(
this.currentBoard.allowsDescriptionTextOnMinicard,
);
$(`.js-field-has-description-text-on-minicard ${MCB}`).toggleClass(
CKCLS,
this.currentBoard.allowsDescriptionTextOnMinicard,
);
$('.js-field-has-description-text-on-minicard').toggleClass(
CKCLS,
this.currentBoard.allowsDescriptionTextOnMinicard,
);
},
'click .js-field-has-cover-attachment-on-minicard'(evt) {
evt.preventDefault();
this.currentBoard.allowsCoverAttachmentOnMinicard = !this.currentBoard
@@ -1437,7 +1421,7 @@ BlazeComponent.extendComponent({
},
];
},
}).register('boardMinicardSettingsPopup');
}).register('boardCardSettingsPopup');
BlazeComponent.extendComponent({
onCreated() {
@@ -24,9 +24,17 @@ template(name="swimlaneFixedHeader")
| {{isTitleDefault title}}
.swimlane-header-menu
unless currentUser.isCommentOnly
if currentUser.isBoardAdmin
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
a.fa.fa-navicon.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}")
//// TODO: Collapse Swimlane: make button working, etc.
//unless collapsed
// a.js-collapse-swimlane(title="{{_ 'collapse'}}")
// i.fa.fa-arrow-down.swimlane-header-collapse-down
// i.fa.fa-arrow-up.swimlane-header-collapse-up
//if collapsed
// a.js-collapse-swimlane(title="{{_ 'uncollapse'}}")
// i.fa.fa-arrow-up.swimlane-header-collapse-up
// i.fa.fa-arrow-down.swimlane-header-collapse-down
unless isTouchScreen
if isShowDesktopDragHandles
a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle
@@ -18,10 +18,25 @@ BlazeComponent.extendComponent({
swimlane.rename(newTitle.trim());
}
},
collapsed(check = undefined) {
const swimlane = Template.currentData();
const status = swimlane.isCollapsed();
if (check === undefined) {
// just check
return status;
} else {
swimlane.collapse(!status);
return !status;
}
},
events() {
return [
{
'click .js-collapse-swimlane'(event) {
event.preventDefault();
this.collapsed(!this.collapsed());
},
'click .js-open-swimlane-menu': Popup.open('swimlaneAction'),
'click .js-open-add-swimlane-menu': Popup.open('swimlaneAdd'),
submit: this.editTitle,
+25 -37
View File
@@ -1,38 +1,3 @@
/*
// Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp
.accordion
cursor: pointer
width: 30px
height: 20px
border: none
outline: none
font-size: 18px
transition: 0.4s
padding-top: 0px
margin-top: 0px
.accordion:after
// Unicode triagle right:
content: '\25B6'
color: #777
font-weight: bold
float: left
.active:after
// Unicode triangle down:
content: '\25BC'
.panel
width: 100%
max-height: 0
overflow: hidden
transition: max-height 0.2s ease-out
margin: 0px
padding: 0px
// Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp
*/
@media screen and (min-width: 801px) {
.swimlane.ui-sortable {
width: max-content;
@@ -46,7 +11,30 @@
background: #dedede;
display: flex;
flex-direction: row;
overflow: 0;
overflow: auto;
max-height: 100%;
}
.swimlane-header-menu .swimlane-header-collapse-down {
font-size: 50%;
color: #a6a6a6;
position: absolute;
top: 5px;
left: 100px;
}
.swimlane-header-menu .swimlane-header-collapse-up {
font-size: 50%;
color: #a6a6a6;
position: absolute;
bottom: 5px;
left: 100px;
}
.swimlane-header-menu .swimlane-header-uncollapse-up {
font-size: 50%;
color: #a6a6a6;
}
.swimlane-header-menu .swimlane-header-uncollapse-down {
font-size: 50%;
color: #a6a6a6;
}
.swimlane.placeholder {
background-color: rgba(0,0,0,0.2);
@@ -170,7 +158,7 @@
color: #4d4d4d !important;
}
.swimlane-silver {
background: unset !important;
background: #ccc !important;
color: #4d4d4d !important;
}
.swimlane-peachpuff {
+2 -2
View File
@@ -46,8 +46,8 @@ template(name="listsGroup")
template(name="addListForm")
unless currentUser.isWorker
.list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}")
if currentUser.isBoardAdmin
unless currentUser.isCommentOnly
.list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}")
.list-header-add
+inlinedForm(autoclose=false)
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
+4 -4
View File
@@ -26,9 +26,9 @@ template(name="orgAvatar")
template(name="boardOrgRow")
tr
if orgData.orgIsActive
td <s>{{ orgData.orgDisplayName }}</s>
else
td {{ orgData.orgDisplayName }}
else
td <s>{{ orgData.orgDisplayName }}</s>
td
if currentUser.isBoardAdmin
a.member.orgOrTeamMember.add-member.js-manage-board-removeOrg(title="{{_ 'remove-from-board'}}")
@@ -39,9 +39,9 @@ template(name="boardOrgRow")
template(name="boardTeamRow")
tr
if teamData.teamIsActive
td <s>{{ teamData.teamDisplayName }}</s>
else
td {{ teamData.teamDisplayName }}
else
td <s>{{ teamData.teamDisplayName }}</s>
td
if currentUser.isBoardAdmin
a.member.orgOrTeamMember.add-member.js-manage-board-removeTeam(title="{{_ 'remove-from-board'}}")
+1 -1
View File
@@ -47,7 +47,7 @@ Blaze.registerHelper('isTouchScreenOrShowDesktopDragHandles', () =>
Blaze.registerHelper('moment', (...args) => {
args.pop(); // hash
const [date, format] = args;
return moment(date).format(format);
return moment(date).format(format ?? 'LLLL');
});
Blaze.registerHelper('canModifyCard', () =>
+3 -2
View File
@@ -6,10 +6,11 @@ import moment from 'moment/min/moment-with-locales';
function adjustedTimeFormat() {
return moment
.localeData()
.longDateFormat('LT')
.replace(/HH/i, 'H');
.longDateFormat('LT');
}
// .replace(/HH/i, 'H');
export class DatePicker extends BlazeComponent {
template() {
return 'datepicker';
+48
View File
@@ -57,6 +57,9 @@ window.ExportHtml = Popup => {
Array.from(
document.querySelectorAll('#header-main-bar .board-header-btns'),
).forEach(elem => elem.remove());
Array.from(
document.querySelectorAll('.js-pop-over, .pop-over'),
).forEach(elem => elem.remove());
Array.from(document.querySelectorAll('.list-composer')).forEach(elem =>
elem.remove(),
);
@@ -152,6 +155,50 @@ window.ExportHtml = Popup => {
);
};
const getWebFonts = () => {
fontUrls = [];
for (let sheet of document.styleSheets) {
// Get the base URL of the stylesheet
let baseUrl = sheet.href ? new URL(sheet.href).origin : window.location.origin;
try {
for (let rule of sheet.cssRules) {
if (rule.type === CSSRule.FONT_FACE_RULE) {
let src = rule.style.getPropertyValue('src');
let urlMatch = src.match(/url\(["']?(.+?)["']?\)/);
if (urlMatch) {
let fontUrl = urlMatch[1];
// Resolve the URL relative to the stylesheet's base URL
let resolvedUrl = new URL(fontUrl, baseUrl);
fontUrls.push(resolvedUrl.href); // Using .href to get the absolute URL
}
}
}
} catch (e) {
console.log('Access to stylesheet blocked:', e);
}
}
return fontUrls;
};
const downloadFonts = async(elements, zip) => {
await asyncForEach(elements, async elem => {
const response = await fetch(elem);
const responseBody = await response.blob();
const filename = elem.split('/')
.pop()
.split('?')
.shift()
.split('#')
.shift();
const fileFullPath = `webfonts/${filename}`;
zip.file(fileFullPath, responseBody);
});
}
const downloadCardCovers = async (elements, zip, boardSlug) => {
await asyncForEach(elements, async elem => {
const response = await fetch(
@@ -194,6 +241,7 @@ window.ExportHtml = Popup => {
await downloadStylesheets(getStylesheetList(), zip);
await downloadSrcAttached(getSrcAttached(), zip, boardSlug);
await downloadCardCovers(getCardCovers(), zip, boardSlug);
await downloadFonts(getWebFonts(), zip);
addBoardHTMLToZip(boardSlug, zip);
+12
View File
@@ -33,6 +33,14 @@ Mousetrap.bind('q', () => {
}
});
Mousetrap.bind('a', () => {
const currentBoardId = Session.get('currentBoard');
const currentUserId = Meteor.userId();
if (currentBoardId && currentUserId) {
Filter.assignees.toggle(currentUserId);
}
});
Mousetrap.bind('x', () => {
if (Filter.isActive()) {
Filter.reset();
@@ -181,6 +189,10 @@ Template.keyboardShortcuts.helpers({
keys: ['q'],
action: 'shortcut-filter-my-cards',
},
{
keys: ['a'],
action: 'shortcut-filter-my-assigned-cards',
},
{
keys: ['f'],
action: 'shortcut-toggle-filterbar',
+7 -4
View File
@@ -1,5 +1,3 @@
version: '2'
# Note: Do not add single quotes '' to variables. Having spaces still works without quotes where required.
#---------------------------------------------------------------------------------------------------------
# ==== CREATING USERS AND LOGGING IN TO WEKAN ====
@@ -120,7 +118,10 @@ services:
# image: quay.io/wekan/wekan:v6.89
# image: wekanteam/wekan:v6.89
# b) GitHub Container registry.
image: ghcr.io/wekan/wekan:main
# b1) Latest release tag:
image: ghcr.io/wekan/wekan:latest
# b2) Newest git commit automatic build:
#image: ghcr.io/wekan/wekan:main
# c) Quay:
#image: quay.io/wekan/wekan:latest
# d) Docker Hub:
@@ -365,7 +366,7 @@ services:
#-----------------------------------------------------------------
# ==== OUTGOING WEBHOOKS ====
# What to send to Outgoing Webhook, or leave out. If commented out the default values will be: cardId,listId,oldListId,boardId,comment,user,card,commentId,swimlaneId,customerField,customFieldValue
#- WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
#- WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,board,list,swimlane,commentId
#-----------------------------------------------------------------
# ==== Debug OIDC OAuth2 etc ====
#- DEBUG=true
@@ -388,6 +389,8 @@ services:
#- OAUTH2_CA_CERT=ABCD1234
# Use OAuth2 ADFS additional changes. Also needs OAUTH2_ENABLED=true setting.
#- OAUTH2_ADFS_ENABLED=false
# Azure AD B2C. https://github.com/wekan/wekan/issues/5242
#- OAUTH2_B2C_ENABLED=false
# OAuth2 login style: popup or redirect.
#- OAUTH2_LOGIN_STYLE=redirect
# Application GUID captured during app registration:
@@ -0,0 +1,27 @@
## a) Install all Snap updates automatically between 02:00AM and 04:00AM
```
snap set core refresh.schedule=02:00-04:00
```
## b) Update once a week at Sunday between 02:00AM and 04:00AM
```
snap set core refresh.schedule=sun,02:00-04:00
```
## c) Update last Sunday of the month between 02:00AM and 04:00AM
```
snap set core refresh.schedule=sun5,02:00-04:00
```
## [Update until specific day](https://snapcraft.io/docs/keeping-snaps-up-to-date#heading--refresh-hold) and other examples.
## If required, you can disable all Snap updates
at `/etc/hosts` by adding a line:
```
127.0.0.1 api.snapcraft.io
```
## No schedule set
Automatic upgrades happen sometime after Wekan is released, usually quite soon.
## Manual update immediately
`sudo snap refresh`
@@ -0,0 +1,96 @@
Also see [Docker Backup and Restore](https://github.com/wekan/wekan/wiki/Export-Docker-Mongo-Data)
# MongoDB client based backup
## Install MongoDB shell 3.2.x
[MongoDB 3.2.x shell for Ubuntu](https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-ubuntu/)
## Backup script for MongoDB Data, if running Snap MongoDB at port 27019
```sh
#!/bin/bash
now=$(date +'%Y-%m-%d_%H.%M.%S')
mkdir -p backups/$now
cd backups/$now
mongodump --port 27019
# if running on source install, run for example: mongodump --port 27017)
cd ..
zip -r $now.zip $now
cd ../..
echo "\nBACKUP DONE."
echo "Backup is at directory backups/${now}."
echo "Backup is also archived to .zip file backups/${now}.zip"
```
# Manual Backup
## Stop Wekan and Backup to directory called dump
```
sudo snap stop wekan.wekan
mongodump --port 27019
sudo snap start wekan.wekan
```
## Stop Wekan and Restore
```
sudo snap stop wekan.wekan
## Only if you get errors about existing indexes, use this instead:
## mongorestore -d wekan --drop --noIndexRestore --port 27019
mongorestore -d wekan --drop --port 27019
sudo snap start wekan.wekan
```
***
# Snap based backup (less reliable, can disappear with snap remove wekan)
## Setup backup directory
Create backup directory and set permissions
```
$ sudo mkdir /var/snap/wekan/common/db-backups
$ sudo chmod 777 /var/snap/wekan/common/db-backups
```
## Backup
As normal user as archive:
```
$ wekan.database-backup
```
Backup is created in directory:
```
/var/snap/wekan/common/db-backups
```
There is optional Backup file is optional parameter `$ wekan.database-backup BACKUPFILENAME`, but probably it does not work.
## List backups
You need to first create one backup, otherwise this command shows error.
To list existing backups in default directory, as normal user:
```
$ wekan.database-list-backups
```
## Restore backup
As normal user:
```
$ wekan.database-restore FULL-PATH-TO-BACKUP-FILENAME
```
@@ -0,0 +1,276 @@
# NOTE: Using Candidate, that has MongoDB 6, that is newest version
Required time: If your database size is 500 GB, maybe 4 to 8 hours, or more. So bring enough of pizza, party snacks, limonade etc.
Warning: If you don't have enough disk space, you could get data loss.
Warning2: When starting WeKan Candidate, it could temporarily save all attachments to `/var/snap/wekan/common/files/` or other directory below `common`. That's why xet7 is working on trying to create separate migration app that moves attachments to S3, and that WeKan could upload to S3. This upgrade experience could be improved later. It's just that there are some unknown unknows if there would be automatic upgrade, could it handle all upgrade and migration cases.
If you are have time to try tro update Snap from WeKan Stable to newest WeKan Candidate, to see does update work or not.
If you have problems, add comment to issue https://github.com/wekan/wekan/issues/4780
## From WeKan Stable to Candidate
### Preparation
#### 1. Please read through all these below steps before starting, if possible.
#### 2. Check your database size, and do you have enough disk space for upgrade:
```
sudo du -sh /var/snap/wekan/common
df -h
```
For example, if your database size is 500 GB, and disk is nearly full, you need to stop WeKan and move to bigger disk. If disk gets full, there is possibility to MongoDB database corruption. Making mongodump could maybe take 2x of current size, or more.
Some external disk related steps are at https://github.com/wekan/wekan/wiki/Repair-MongoDB
#### 3. Problems usually are only, are attachments visible or not. Upgrade steps do not delete any files, if commands below are written correctly.
Optional steps:
a) Optionally, you could use [nosqlbooster](https://github.com/wekan/wekan/wiki/Backup#using-nosqlbooster-closed-source-mongodb-gui-with-wekan-snap-to-edit-mongodb-database) to save attachments to files, and export JSON to textfiles, before trying to update. There could also be files at `/var/snap/wekan/common/files` or other subdirectories. When saving attachments, note that there could be many files with same filename.
b) Optinally, you can also save [all database content to JSON](https://github.com/wekan/wekan/wiki/Export-from-Wekan-Sandstorm-grain-.zip-file#11b-dump-database-to-json-text-files), but if your database is about 500 GB then it could be too much disk space required, because attachments are at base64 encoded text in JSON files. It's better ot save attachments with [nosqlbooster](https://github.com/wekan/wekan/wiki/Backup#using-nosqlbooster-closed-source-mongodb-gui-with-wekan-snap-to-edit-mongodb-database).
#### 4. ssh to your server
```
ssh wekanserver
```
#### 5. Save snap settings and set it as executeable
```
sudo snap get wekan > snap-settings.sh
chmod +x snap-settings.sh
```
#### 6. Edit `snap-settings.sh` to look like this, with nano or similar
```
sudo snap set wekan root-url='https://wekan.example.com'
sudo snap set wekan port='80'
```
At nano, Save: Ctrl-o Enter
At nano. Exit: Ctrl-x
#### 7. Download newest MongoDB tools for your distro version that will work with MongoDB 5.x, but do not install it yet
https://www.mongodb.com/try/download/database-tools
For example, for Ubuntu 22.04, [mongodb-database-tools-ubuntu2204-x86_64-100.6.1.deb](https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2204-arm64-100.6.1.deb)
#### 8. Remove old versions of MongoDB tools etc, if you have those
List them:
```
dpkg -l | grep mongo
```
If that shows that you have old mongodb server also, check do you really use it, what is the size of database server files?
```
sudo du -sh /var/lib/mongodb
```
Do you have these files, or similar, that show where else mongodb raw database directory could be?
```
/etc/mongod.conf
/etc/mongod/mongod.conf
```
Try to connect to it, and see if there is anything?
```
mongo
```
If it does not connect, maybe start MongoDB database, for example some of these commands:
```
sudo systemctl enable mongod
sudo systemctl start mongod
sudo systemctl enable mongodb
sudo systemctl start mongod
sudo /etc/init.d/mongod start
```
Try then again connect, and view what is there. In this example, if there is wekan database listed with `show dbs`:
```
mongo
show dbs
use wekan
show collections
db.users.count()
db.users.find()
```
Also look is there `mongodb.list` packages repo?
```
sudo ls /etc/apt/sources.list.d/
```
If you have all of mongodb-org, try to remove all of them, with all related files:
```
sudo apt-get --purge remove mongo*
```
Delete mongodb repo:
```
sudo ls /etc/apt/sources.list.d/mongo*
sudo apt update
sudo apt clean
sudo apt -y autoclean
sudo apt -y autoremove
```
### Upgrade
#### 9. Stop wekan app
```
sudo snap stop wekan.wekan
```
#### 10. Use WeKan Stable Snap mongodump version for dumping database
```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan/current/bin"
mongodump --port 27019
```
#### 11. Move common directory contents. There are raw database files and maybe some attachments.
```
sudo snap stop wekan
sudo mkdir common
sudo mv /var/snap/wekan/common/* common/
sudo rm -rf /var/snap/wekan/common/*
```
#### 12. Change from Stable to Candidate
```
sudo snap refresh wekan --channel=latest/candidate
```
#### 13. Exit ssh and connect again, to not use old mongodump version anymore
```
exit
ssh wekanserver
```
#### 14. Install mongodb tools for your distro version (from [step 7](#7-download-newest-mongodb-tools-for-your-distro-version-that-will-work-with-mongodb-5x-but-do-not-install-it-yet) above)
```
sudo dpkg -i mongodb-database-tools-ubuntu2204-x86_64-100.6.1.deb
```
If there is any errors, please copy all text from install process to comment to issue https://github.com/wekan/wekan/issues/4780
When installing some package, if some dependendencies are missing, they can usually be installed with some of these commands, and installing continued with::
```
sudo apt-get -f install
sudo dpkg --configure -a
```
If you get this kind of error, it means you have existing version of MongoDB Tools still installed, you should remove all those like at step 7 above:
```
Unpacking mongodb-database-tools (100.6.1) ...
dpkg: error processing archive mongodb-database-tools-ubuntu2004-x86_64-100.6.1.deb (--install):
trying to overwrite '/usr/bin/bsondump', which is also in package mongo-tools 3.6.3-0ubuntu1
```
Sure there are options to force install this, for example this way, but not recommended:
```
sudo rm /usr/bin/bsondump
sudo dpkg -i ...
```
Or other not recommended way, forcing overwrite:
```
sudo dpkg -i --force-overwrite mongodb-database-tools-ubuntu2004-x86_64-100.6.1.deb
```
But better would be to use that [step 7](#7-download-newest-mongodb-tools-for-your-distro-version-that-will-work-with-mongodb-5x-but-do-not-install-it-yet) above to remove all old mongodb packages and repo, and then install MongoDB tools.
#### 15. Restore
```
sudo snap stop wekan
sudo snap start wekan.mongodb
mongorestore --drop --port 27019 --noIndexRestore
```
#### 16. Add back settings
Recommended is to use [Caddy 2](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config) instead of Caddy1 that is included in WeKan Snap currently at 2022-12-21. Caddy 2 maybe will be included to WeKan Snap later.
See if in your `snap-settings.sh` is this kind of command, are you using Caddy1 ?
```
sudo snap set wekan caddy-enabled='true'
```
If you use Caddy1, and have any domain settings in your `common/Caddyfile`, copy it back:
```
sudo cp common/Caddyfile /var/snap/wekan/common/
```
At [step 6](#6-edit-snap-settingssh-to-look-like-this-with-nano-or-similar) above, you did create script that adds back snap settings. Run it to restore those settings:
```
./snap-settings.sh
```
You could also copy that file to common directory, if you like, or just keep it in your current directory:
```
sudo cp snap-settings.sh /var/snap/wekan/common/
```
#### 17. Start WeKan
```
sudo snap start wekan
```
#### 18. Test are WeKan attachments visible
#### 19. If you are using WeKan Snap Caddy1, if it does not work, change to Caddy2 https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config
#### 20. Backup and cleanup
Create archive of old files, and transer it to your local laptop, save somewhere safe:
```
ssh wekanserver
sudo su
7z a old-wekan.7z snap-settings.sh common dump
exit
scp wekanserver:/root/old-wekan.7z .
```
And then delete old files from server. Do not delete `snap-settings.sh`.
```
ssh wekanserver
rm -rf common dump
```
Also, keep [Daily Backups](https://github.com/wekan/wekan/wiki/Backup)
## Oops it did not work. From WeKan Candidate back to Stable
```
sudo snap stop wekan
sudo rm -rf /var/snap/wekan/common/*
sudo snap refresh wekan --channel=latest/stable
sudo snap stop wekan
sudo rm -rf /var/snap/wekan/common/*
sudo mv common/* /var/snap/wekan/common/
sudo snap start wekan
./snap-settings.sh
```
If you have problems, add comment to issue https://github.com/wekan/wekan/issues/4780
## From WeKan Gantt GPL to WeKan Candidate
- This is discontinued, Gantt features will be later added to WeKan MIT version.
- Gantt version files are instead at `/var/snap/wekan-gantt-gpl/`
- Gantt snap name is wekan-gantt-gpl
+249
View File
@@ -0,0 +1,249 @@
## CentOS 7 and RHEL7 and newer
Alternatives:
- Snap install like below. Automatic updates. Some time ago there were problems with [Snap on CentOS 7](https://github.com/wekan/wekan-snap/issues/103#issuecomment-571223099), that can result in updating not working properly, but that is a long time ago, and Snap version is currently 2020-04-29 installed at about 400 servers worldwide, according to Snap statistics that show only wordwide and per-country stats, not any more specific info. Please keep [daily backups](https://github.com/wekan/wekan/wiki/Backup).
- Docker or Bash/SystemD install from https://wekan.github.io
***
[Wekan snap bug reports and feature requests](https://github.com/wekan/wekan-snap/issues)
# Distro specific info how to install Snap on 64bit Linux
https://snapcraft.io
- CentOS 7, RHEL7 and newer, instructions below
# Install Wekan
### 1) Use root
```
sudo su
```
### 2) Install snap
2019-11-12 If instead of Caddy you use Nginx in front of Wekan on CentOS 7, you should
[disable selinux to prevent Nginx permission denied error](https://github.com/wekan/wekan/issues/2792).
2018-11-05 Also see [new snapd on EPEL](https://forum.snapcraft.io/t/snapd-updates-in-fedora-epel-for-enterprise-linux/8310).
Source: [Experimental CentOS7 snap](https://copr.fedorainfracloud.org/coprs/ngompa/snapcore-el7/) and [Forum post](https://forum.snapcraft.io/t/install-snapd-on-centos/1495/21)
```
yum makecache fast
yum install yum-plugin-copr epel-release
yum copr enable ngompa/snapcore-el7
yum install snapd
systemctl enable --now snapd.socket
```
### 3) Install Wekan. Set URL like (subdomain.)example.com(/suburl)
```
snap install wekan
snap set wekan root-url='https://boards.example.com'
```
[MORE ROOT-URL EXAMPLES](https://github.com/wekan/wekan/wiki/Settings)
### 4) Set port where Wekan runs, for example 80 if http, or local port 3001, if running behing proxy like Caddy
```
snap set wekan port='3001'
systemctl restart snap.wekan.wekan
```
### 5) Install all Snap updates automatically between 02:00AM and 04:00AM
```
snap set core refresh.schedule=02:00-04:00
```
Automatic upgrades happen sometime after Wekan is released, or at scheduled time, or with `sudo snap refresh`
### 6) Email and Other Settings
```
sudo snap set wekan mail-url='smtps://user:pass@mailserver.example.com:453'
sudo snap set wekan mail-from='Wekan Boards <support@example.com>'
```
[Troubleshooting Email](https://github.com/wekan/wekan/wiki/Troubleshooting-Mail)
## LDAP
See [Supported Settings Keys](Supported-settings-keys#ldap)
## [Matomo Web Analytics integration](Supported-settings-keys#matomo-web-analytics-integration)
See [Supported Settings Keys](Supported-settings-keys#matomo-web-analytics-integration)
## [Rocket.Chat providing OAuth2 login to Wekan](https://github.com/wekan/wekan/wiki/OAuth2)
Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when Rocket.Chat is providing OAuth2 login to Wekan.
# Optional: Install Caddy - Every Site on HTTPS
a) Personal non-commercial use only, included
b) Commercial use: see https://caddyserver.com/products/licenses
and [commercial usage issue](https://github.com/wekan/wekan-snap/issues/39),
contact Wekan maintainer x@xet7.org about how to enable commercial version
of caddy.
### 7) Add domain to Caddy config
```
nano /var/snap/wekan/common/Caddyfile
```
### 8) Replace first top line of text with (subdomain.)example.com(/suburl), without any beginning of http/https
Example Caddyfile config.
"alpn http/1.1" is because Firefox Inspect Console does not support http/2, so [turning it off](https://github.com/wekan/wekan/issues/934) so that Firefox would not show wss websocket errors. Chrome console supports http/2.
This uses free Let's Encrypt SSL. You can also use [free CloudFlare wildcard SSL or any other SSL cert](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config).
```
boards.example.com {
tls {
alpn http/1.1
}
proxy / localhost:3001 {
websocket
transparent
}
}
```
Caddyfile example of static directory listing:
```
# Files have these permissions:
# chown root:root /var/snap/wekan/common/download.example.com
download.example.com {
root /var/snap/wekan/common/download.example.com
browse
}
```
[MORE Caddyfile EXAMPLES](https://github.com/caddyserver/examples)
### 9) Enable Caddy automatic https
```
snap set wekan caddy-enabled='true'
```
## 10) Reboot
## 11) Disable and enable wekan
```
$ sudo snap disable wekan
$ sudo snap enable wekan
```
If you use the mongodb port for another app, then, change it too:
```
$ sudo snap set wekan mongodb-port=27019
```
## 12) Add users
[Add users](https://github.com/wekan/wekan/wiki/Adding-users)
[Forgot Password](https://github.com/wekan/wekan/wiki/Forgot-Password)
## MongoDB CLI
1) Install MongoDB 3.2.x tools, and run on CLI:
`mongo --port 27019`
***
# Older install docs
```
$ sudo snap install wekan
```
IMPORTANT: SETUP [URL SETTINGS](#url-settings) BELOW, SO OPENING CARDS ETC WORKS CORRECTLY. More info at [Supported settings keys](Supported-settings-keys).
**IMPORTANT: Wekan Snap is bleeding edge, so any commits made to the wekan repository are pushed to the snap directly. Decide for yourself if you want to run wekan snap in production**
Make sure you have connected all interfaces, check more by calling
```
$ snap interfaces
```
Wekan has two services, to check status/restart/stop use systemd commands:
You can use these service commands:
- status
- start
- stop
- restart
MongoDB service:
```
$ sudo systemctl status snap.wekan.mongodb
```
Wekan service:
```
$ sudo systemctl status snap.wekan.wekan
```
## URL settings
[Nginx and Snap settings for https://example.com/wekan sub-url](https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config)
Full URL to your Wekan, for example:
### Run Wekan on local network on selected port on computer IP address
```
$ sudo snap set wekan root-url='http://192.168.10.100:5000'
```
### Run Wekan only locally on selected port
```
$ sudo snap set wekan root-url='http://localhost:5000'
```
### Nginx or Caddy webserver in front of Wekan
[Nginx](https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config) or [Caddy](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config) is in front, full URL to real web address URL of Nginx or Caddy.
```
$ sudo snap set wekan root-url='https://example.com'
```
or
```
$ sudo snap set wekan root-url='https://example.com/wekan'
```
## Port settings
Localhost port where Wekan is running. This does not need to be exposed to Internet when running behind Nginx or Caddy.
```
$ sudo snap set wekan port='<your_port>'
```
## Restart Wekan after changes
```
$ sudo systemctl restart snap.wekan.wekan
```
When running without any additional settings, Wekan is at http://localhost:8080
+20
View File
@@ -0,0 +1,20 @@
Using CentOS 8 Stream.
1. Install Snap https://snapcraft.io/docs/installing-snap-on-centos
2. Reboot
3. With terminal, test latest release candidate, to your server IP address:
```
su
snap install wekan --channel=latest/candidate
snap set wekan root-url='http://YOUR-IP-ADDRESS'
snap set wekan port='80'
```
4. For additional server options, see https://github.com/wekan/wekan/wiki/Settings
5. For adding users, see https://github.com/wekan/wekan/wiki/Adding-users
6. For other login option, see right menu at https://github.com/wekan/wekan/wiki
+14
View File
@@ -0,0 +1,14 @@
Welcome to the wekan-snap documentation wiki!
## Wekan snap at web
https://uappexplorer.com/snap/ubuntu/wekan
## Help command after installing
```
$ wekan.help
```
**All of commandline help is also in this wiki, categorized to their own wiki pages.**
See also [Wekan documentation](https://github.com/wekan/wekan/wiki)
@@ -0,0 +1,15 @@
## Ansible install by Pavel Stratil
[Info source](https://github.com/wekan/wekan/issues/1106)
## Original repos, please add feature requests there
https://github.com/Vaizard/mage-wekan
https://github.com/vaizard/mage-snapd
## Wekan's forked version
https://github.com/wekan/mage-wekan
https://github.com/wekan/mage-snapd
+261
View File
@@ -0,0 +1,261 @@
Snap for Linux, install to your own server or laptop. Automatic Updates. Only Standalone Wekan.
If on Snap Stable automatic update breaks something, [report Wekan for Snap bugs and feature requests here](https://github.com/wekan/wekan-snap/issues), so it can be fixed on some automatic update. If security is critical, keep behind firewall, without any ports open to Internet.
# Distro specific info how to install Snap on 64bit Linux
https://snapcraft.io
- Recommended: Newest 1) Ubuntu 2) Debian based distro
- Arch
- Fedora
- Solus
- OpenSUSE
- Gentoo
- Manjaro
- Elementary OS
- [CentOS 7, RHEL7 and newer](CentOS-7)
- [CentOS 8](CentOS8)
How ROOT_URL is set:
https://github.com/wekan/wekan/wiki/Settings
Here is how to add users:
https://github.com/wekan/wekan/wiki/Adding-users
How to switch between WeKan and WeKan Gantt GPL:
https://github.com/wekan/wekan/issues/2870#issuecomment-721364824
Newest Snap WeKan does not yet have migration to newest MongoDB. Here is how to try newer WeKan test candidate version, and migrate database manually:
https://github.com/wekan/wekan/issues/4505#issuecomment-1158380746
Below is how to install Snap.
# Install Wekan
### 1) Use root
```
sudo su
```
### 2) Install snap
a) Debian or Ubuntu
```
apt install snapd
```
b) Other distros
See [Snapcraft website](https://snapcraft.io).
### 3) Install Wekan. Set URL like (subdomain.)example.com(/suburl)
```
snap install wekan
snap set wekan root-url='https://wekan.example.com'
```
[MORE ROOT-URL EXAMPLES](https://github.com/wekan/wekan/wiki/Settings)
### 4) Set port where Wekan runs, for example 80 if http, or local port 3001, if running behing proxy like Caddy
```
snap set wekan port='3001'
systemctl restart snap.wekan.wekan
```
### 5) Install all Snap updates automatically between 02:00AM and 04:00AM
```
snap set core refresh.schedule=02:00-04:00
```
Update once a week at Sunday between 02:00AM and 04:00AM
```
snap set core refresh.schedule=sun,02:00-04:00
```
Update last Sunday of the month between 02:00AM and 04:00AM
```
snap set core refresh.schedule=sun5,02:00-04:00
```
[Update until specific day](https://snapcraft.io/docs/keeping-snaps-up-to-date#heading--refresh-hold) and other examples.
If required, you can disable all Snap updates at `/etc/hosts` by adding a line:
```
127.0.0.1 api.snapcraft.io
```
Automatic upgrades happen sometime after Wekan is released, or at scheduled time, or with `sudo snap refresh`
### 6) Email and Other Settings
```
sudo snap set wekan mail-url='smtps://user:pass@mailserver.example.com:453'
sudo snap set wekan mail-from='Wekan Boards <support@example.com>'
```
[Troubleshooting Email](https://github.com/wekan/wekan/wiki/Troubleshooting-Mail)
## LDAP
See [Supported Settings Keys](Supported-settings-keys#ldap)
## [Matomo Web Analytics integration](Supported-settings-keys#matomo-web-analytics-integration)
See [Supported Settings Keys](Supported-settings-keys#matomo-web-analytics-integration)
## [Rocket.Chat providing OAuth2 login to Wekan](https://github.com/wekan/wekan/wiki/OAuth2)
Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when Rocket.Chat is providing OAuth2 login to Wekan.
# Optional: Install Caddy - Every Site on HTTPS
### 7) Add domain to Caddy config
```
nano /var/snap/wekan/common/Caddyfile
```
### 8) Replace first top line of text with (subdomain.)example.com(/suburl), without any beginning of http/https
Example Caddyfile config.
"alpn http/1.1" is because Firefox Inspect Console does not support http/2, so [turning it off](https://github.com/wekan/wekan/issues/934) so that Firefox would not show wss websocket errors. Chrome console supports http/2.
This uses free Let's Encrypt SSL. You can also use [free CloudFlare wildcard SSL or any other SSL cert](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config).
```
boards.example.com {
tls {
alpn http/1.1
}
proxy / localhost:3001 {
websocket
transparent
}
}
```
Caddyfile example of static directory listing:
```
# Files have these permissions:
# chown root:root /var/snap/wekan/common/download.example.com
download.example.com {
root /var/snap/wekan/common/download.example.com
browse
}
```
[MORE Caddyfile EXAMPLES](https://github.com/caddyserver/examples)
### 9) Enable Caddy automatic https
```
snap set wekan caddy-enabled='true'
```
## 10) Reboot
## 11) Disable and enable wekan
```
$ sudo snap disable wekan
$ sudo snap enable wekan
```
If you use the mongodb port for another app, then, change it too:
```
$ sudo snap set wekan mongodb-port=27019
```
## 12) Add users
[Add users](https://github.com/wekan/wekan/wiki/Adding-users)
[Forgot Password](https://github.com/wekan/wekan/wiki/Forgot-Password)
## MongoDB CLI
1) Install MongoDB 3.2.x tools, and run on CLI:
`mongo --port 27019`
***
# Older install docs
```
$ sudo snap install wekan
```
IMPORTANT: SETUP [URL SETTINGS](#url-settings) BELOW, SO OPENING CARDS ETC WORKS CORRECTLY. More info at [Supported settings keys](Supported-settings-keys).
**IMPORTANT: Wekan Snap is bleeding edge, so any commits made to the wekan repository are pushed to the snap directly. Decide for yourself if you want to run wekan snap in production**
Make sure you have connected all interfaces, check more by calling
```
$ snap interfaces
```
Wekan has two services, to check status/restart/stop use systemd commands:
You can use these service commands:
- status
- start
- stop
- restart
MongoDB service:
```
$ sudo systemctl status snap.wekan.mongodb
```
Wekan service:
```
$ sudo systemctl status snap.wekan.wekan
```
## URL settings
[Nginx and Snap settings for https://example.com/wekan sub-url](https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config)
Full URL to your Wekan, for example:
### Run Wekan on local network on selected port on computer IP address
```
$ sudo snap set wekan root-url='http://192.168.10.100:5000'
```
### Run Wekan only locally on selected port
```
$ sudo snap set wekan root-url='http://localhost:5000'
```
### Nginx or Caddy webserver in front of Wekan
[Nginx](https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config) or [Caddy](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config) is in front, full URL to real web address URL of Nginx or Caddy.
```
$ sudo snap set wekan root-url='https://example.com'
```
or
```
$ sudo snap set wekan root-url='https://example.com/wekan'
```
## Port settings
Localhost port where Wekan is running. This does not need to be exposed to Internet when running behind Nginx or Caddy.
```
$ sudo snap set wekan port='<your_port>'
```
## Restart Wekan after changes
```
$ sudo systemctl restart snap.wekan.wekan
```
When running without any additional settings, Wekan is at http://localhost:8080
@@ -0,0 +1,31 @@
If you have some users logging to your server, that don't have root access, and you want to limit snap to root user only, you can do the following:
## 1) Set snap refresh schedule, for example
```
sudo snap set core refresh.schedule=02:00-03:00
```
## 2) Set cron to limit permissions to root users after updates
For example, sudo to root, and edit root cron with nano:
```
sudo su
export EDITOR=nano
crontab -e
```
and add there that at 03:10 permissions are limited to root again:
```
10 3 * * * chmod og-rwx /usr/bin/snap
10 3 * * * chmod -R og-rwx /var/snap
```
You can see crontab syntax help at https://crontab.guru
`snap` is the command, and `/var/snap` is where data is stored.
## Future snap features for permissions
For more advanced user permission control in snap, sometime new features will be added:<br />
https://forum.snapcraft.io/t/multiple-users-and-groups-in-snaps/1461/3
@@ -0,0 +1,54 @@
# Installing snapcraft from source
This is old and already fixed, was only needed when [snap build servers were broken](https://github.com/wekan/wekan-snap/issues/58) and [snapcraft had bug](https://forum.snapcraft.io/t/permission-denied-when-building-with-snapcore-snapcraft/7186/14?u=xet7) that has [fix that was not released to snap channel yet](https://github.com/snapcore/snapcraft/pull/2240). All this is fixed now.
So I removed snap version, and installed snapcraft from source, and it seems to work for me.
## Snapcraft source install on Ubuntu 16.04 64bit
Add to /root/.bashrc:
```
export PATH="$PATH:/home/user/repos/snapcraft/bin"
```
## Install dependencies
```
sudo apt install python3-yaml python3-tabulate python3-pymacaroons \
python3-progressbar python3-requests-unixsocket python3-petname \
python3-pyelftools python3-click python3-simplejson \
python3-requests-toolbelt python3-jsonschema xdelta3
```
## Install snapcraft
```
cd ~/repos
git clone https://github.com/snapcore/snapcraft.git
cd snapcraft
sudo python3 setup.py install
```
## [Workaround bug](https://bugs.launchpad.net/snapcraft/+bug/1656884/comments/1)
```
sudo ln -s /usr/local/lib/python3.5/dist-packages/snapcraft-2.43-py3.5.egg/share/snapcraft/ /usr/share/snapcraft
```
## Build package
```
cd ~/repos/wekan
sudo snapcraft
```
## Install snap package locally to test it
```
sudo snap install --dangerous wekan_1.*_amd64.snap
```
## Changing back to stable or edge snap
https://github.com/wekan/wekan-snap/wiki/Snap-Developer-Docs
## Login to snapcraft
If you have access to publishing snaps.
## Push package to snap store
```
sudo snapcraft push wekan_1.*_amd64.snap
```
## Publish at snap store
https://dashboard.snapcraft.io/dev/snaps/7867
+9
View File
@@ -0,0 +1,9 @@
## Triggering git import process manually
https://code.launchpad.net/~wekan-team/wekan/+git/wekan
## When ready, uploaded to store. Check and release.
Once you snap is uploaded you should see it here:
https://dashboard.snapcraft.io/dev/snaps/7867
+466
View File
@@ -0,0 +1,466 @@
https://github.com/wekan/wekan-snap/wiki/Many-Snaps-on-LXC#lxd-init-cidr
# NEW WAY: Parallel Snap Installs
Note: This presumes that your laptop runs newest Ubuntu or Kubuntu, and that server is Ubuntu.
1) Install Caddy2 https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config
2) Optional, recommended: Encrypted VM. Idea: Bare Metal Caddy => Proxy to encrypted VM ports => Each customer separate Snap WeKan port. Snap sandbox files at /common, snap code can not access files outside of it's /common directories. Newest WeKan is Snap Candidate. Snap has automatic updates.
2.1) If your server has additional harddrives, format them:
```
ls /dev
mkfs.ext4 /dev/nvme0n1
```
2.2) Look at that above command text output, what is created disk UUID. Add those to /etc/fstab:
```
UUID=12345-678-90 /data ext4 errors=remount-ro 0 1
```
2.3) Create directories for mounting disk, and mount all drives:
```
sudo su
cd /
mkdir /data
mount -a
```
2.4) Install to your laptop and bare metal server packages for using remote desktop with KVM:
```
sudo apt install virt-manager qemu-system
```
2.5) Check that you can ssh to server with ssh public key as root. For that, create ssh key on your laptop, press enter many times until it's done:
```
ssh-keygen
```
2.6) copy laptop .ssh/id_rsa.pub content to server /root/.ssh/authorized_keys .
2.7) At server disable password login at /etc/ssh/sshd_config , password login enabled false. And `sudo systemctl restart ssh`
2.8) At your laptop edit .ssh/config , there add your server IP address etc. This server here is named x1.
```
Host x1
Hostname 123.123.123.123
User root
IdentityFile ~/.ssh/id_rsa
```
2.9) Check that you can ssh from laptop to server as root without prompts.
2.10) Start virt-manager GUI at your laptop:
- File / Add connection
- Hypervisor: QEMU/KVM
- [X] Connect to remote host via SSH
- Username: root
- Machine name: x1
- Connect automatically: [X]
- Click [Connect]
2.11) AT SERVER: Create harddrive image: `qemu-img create -f qcow2 web.qcow2 700G`
2.12) Download newest Kubuntu desktop iso with wget.
2.13) Install kubuntu with full disk encryption. Modify amount of RAM (here 32 GB), file locations etc. Do not select to allocate encrypted disk image immediately, let image size grow.
2.14) Create growing disk with max size:
```
qemu-img create -f qcow2 web.qcow2 700G
```
2.15) Start install from .iso image. Here RAM -r 32 GB, name web, change disk and iso locations below, vcpu 20 (check your server with nproc, should be less that all):
```
sudo virt-install -r 32000 -n web --os-type=linux --os-variant=ubuntu16.04 \
--disk /data/VMs/web.qcow2,device=disk,format=qcow2 \
-c /data/VMs/iso/kubuntu-22.10-desktop-amd64.iso \
--vcpus=20 --vnc --noautoconsole
```
It will appear to your laptop virt-manager GUI.
If you have shutdown KVM VM, you can start it from virt-manager, or this way without .iso image:
```
sudo virt-install -r 32000 -n web --boot hd --video=vga --os-type=linux --os-variant=ubuntu16.04 \
--disk /data/VMs/web.qcow2,device=disk,format=qcow2 \
--vcpus=20 --vnc --noautoconsole
```
3) Use Parallel Snap installs https://snapcraft.io/docs/parallel-installs
For example:
```
sudo snap set system experimental.parallel-instances=true
```
4) With newest WeKan Candidate like https://github.com/wekan/wekan-snap/wiki/CentOS8 . Note: Each user has different wekan port and mongodb port.
```
sudo snap install wekan --channel=latest/candidate
sudo snap install wekan wekan_customer1 --channel=latest/candidate
sudo snap disable wekan
sudo snap set wekan_customer1 caddy-enabled='false'
```
Check that each WeKan uses candidate:
```
sudo snap list
```
If not, change to candidate:
```
sudo snap refresh wekan_customer1 --channel=latest/candidate
```
If it complains about old database version (was at stable), stop it, move old files somewhere safe, and start again.
WARNING: this deletes
```
sudo su
mkdir old_customer1_common
snap stop wekan_customer1
mv /var/snap/wekan_customer1/common/* old_customer1_common/
snap start wekan_customer1
```
5) Add some settings, for example Google login and [AWS SES email sending](https://github.com/wekan/wekan/wiki/Troubleshooting-Mail#example-aws-ses):
For each customer, node and mongodb needs to be in different ports, for example:
```
sudo snap set wekan_customer1 port='5001'
sudo snap set wekan_customer1 mongodb-port='25001'
sudo snap set wekan_customer2 port='5002'
sudo snap set wekan_customer2 mongodb-port='25002'
```
For customer1:
```
sudo snap set wekan_customer1 port='5001'
sudo snap set wekan_customer1 mongodb-port='25001'
sudo snap set wekan_customer1 root-url='https://wekan.customer1.com'
sudo snap set wekan_customer1 mail-url='smtp://username:password@email-smtp.eu-west-1.amazonaws.com:587?tls={ciphers:"SSLv3"}&secureConnection=false'
sudo snap set wekan_customer1 mail-from='Wekan Customer1 Support <board@customer1.com>'
sudo snap set wekan_customer1 oauth2-auth-endpoint='https://accounts.google.com/o/oauth2/v2/auth'
sudo snap set wekan_customer1 oauth2-client-id='YOUR-GOOGLE-LOGIN-CLIENT_ID.apps.googleusercontent.com'
sudo snap set wekan_customer1 oauth2-secret='YOUR-GOOGLE-LOGIN-SECRET'
sudo snap set wekan_customer1 oauth2-email-map='email'
sudo snap set wekan_customer1 oauth2-enabled='true'
sudo snap set wekan_customer1 oauth2-fullname-map='name'
sudo snap set wekan_customer1 oauth2-id-map='sub'
sudo snap set wekan_customer1 oauth2-request-permissions='openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email'
sudo snap set wekan_customer1 oauth2-token-endpoint='https://oauth2.googleapis.com/token'
sudo snap set wekan_customer1 oauth2-userinfo-endpoint='https://openidconnect.googleapis.com/v1/userinfo'
sudo snap set wekan_customer1 oauth2-username-map='nickname'
```
You can check with [nosqlbooster](https://github.com/wekan/wekan/wiki/Backup#using-nosqlbooster-closed-source-mongodb-gui-with-wekan-snap-to-edit-mongodb-database) that each database has correct data.
When restoring data, stop that wekan, and restore to that port, when you have subdirectory dump:
```
sudo snap stop wekan_customer2.wekan
mongorestore --drop --port 25002
sudo snap start wekan_customer2.wekan
```
If there is errors, try again without restoring indexes:
```
mongorestore --drop --noIndexRestore --port 25002
```
To empty database, use [mongodb shell](https://www.mongodb.com/try/download/shell):
```
mongosh --port 25002
show dbs
use wekan
db.dropDatabase()
```
To see is settings written correctly, use:
```
sudo snap get wekan_customer1
sudo snap get wekan_customer2
```
And that at `Caddyfile` each subdomain is proxied to correct port like 3001 etc.
And that if there is snap called wekan, it's not in use:
```
sudo snap disable wekan
```
or has different port:
```
sudo snap get wekan
sudo snap set wekan port='6001'
sudo snap set wekan mongodb-port='28001'
```
6) Example backup script, that backups MongoDB databases. Although, maybe files directories needed to be added too.
Note: Here customer1 likes to get backup copy of backups, so this copies customer1 backup to separate directory that is synced only to that customer with Syncthing. Via email was asked customer syncthing ID, and added sync.
Set it as executeable:
```
chmod +x backup.sh
```
To run it:
```
sudo su
cd backup
./backup.sh
```
Here is backup.sh, using [mongodb tools](https://www.mongodb.com/try/download/database-tools) for mongodump/mongorestore etc:
```
#!/bin/bash
# Backup all MongoDB databases from different ports.
# Note: You may need to check also is there files directory,
# and also backup that, like /var/snap/wekan/common/files etc
function backup {
cd /home/wekan/backup
# >> /home/wekan/backup/backup-log.txt
mkdir -p /home/wekan/backup/new/$1
cd /home/wekan/backup/new/$1
mongodump --port $2
sudo snap get wekan_$1 > snap-settings.txt
cd ..
7z a $(date -u +$1-wekan-backup-%Y-%m-%d_%H.%M_UTC.7z) $1
mkdir /home/wekan/$3
chown wekan:wekan *.7z
mv *.7z /home/wekan/$3/
rm -rf $1
cd /home/wekan/backup
}
function backupchat {
cd /home/wekan/backup >> /home/wekan/backup/backup-log.txt
mkdir -p /home/wekan/backup/new/$1 >> /home/wekan/backup/backup-log.txt
cd /home/wekan/backup/new/$1 >> /home/wekan/backup/backup-log.txt
mongodump >> /home/wekan/backup/backup-log.txt
cd ..
7z a $(date -u +$1-backup-%Y-%m-%d_%H.%M_UTC.7z) $1
mkdir /home/wekan/$3
chown wekan:wekan *.7z
mv *.7z /home/wekan/$3/
rm -rf $1
cd /home/wekan/backup
}
# Syntax:
# backup customername port backupdir
function websync {
# Backup WeKan Kanban Snaps to different Syncthing sync directories
backup "customer1" "25001" "backup-wekan-customer1"
backup "customer1" "25001" "websync"
backup "customer2" "25002" "websync"
backup "customer3" "25003" "websync"
backup "customer4" "25004" "websync"
backup "customer5" "25005" "websync"
# Backup RocketChat Snap
backupchat "chat" "27027" "websync"
cd ~/websync
## backup the backup scripts
# 7z a $(date -u +wekan-backup-scripts-%Y-%m-%d_%H.%M_UTC.7z) ~/backup
}
(websync) >> /home/wekan/backup/backup-log.txt 2>&1
```
7. At bare metal server is installed [Caddy2](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config).
Each customer has set in their nameserver to WeKan hosting server IP address:
```
A 123.123.123.123
```
After that, when ping wekan.company1.com shows 123.123.123.123 correctly, it's possible to get
automatic Let's Encrypt SSL/TLS cert with Caddy2.
At encrypted KVM VM type `ip address`, it shows what is KVM VM internal IP address.
Caddy2 proxies with Let's Encrypt TLS HTTPS to encrypted VM HTTP IP address and port where WeKan (Node.js) is running.
/etc/caddy/Caddyfile . Examples when in /etc/caddy directory as root: `caddy start`, `caddy stop`, `caddy validate`, `caddy --help`
```
(redirect) {
@http {
protocol http
}
redir @http https://{host}{uri}
}
kanban.customer1.com {
tls {
alpn http/1.1
}
reverse_proxy 192.168.123.23:5001
}
kanban.customer2.com {
tls {
alpn http/1.1
}
reverse_proxy 192.168.123.23:5002
}
```
Other non-kanban examples:
```
# Static website that uses free CloudFlare TLS certificates
company.com {
tls {
load /data/websites/certificates/company
alpn http/1.1
}
root * /data/websites/company.com
file_server
}
# RocketChat
chat.company.com {
tls {
alpn http/1.1
}
reverse_proxy 192.168.123.23:3000
}
# Browseable files listing static website
files.company.com {
tls {
alpn http/1.1
}
root * /data/websites/files.company.com
file_server browse
}
```
***
# OLD WAY: Many Snaps on LXC
## LXD init CIDR
IPv4 CIDR: 10.1.1.1/24
```
sudo apt install snapd
sudo reboot
sudo snap install lxd
lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (dir, lvm, btrfs, ceph) [default=btrfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 10.1.1.1/24
Would you like LXD to NAT IPv4 traffic on your bridge? [default=yes]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like the LXD server to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
```
> The value you have specified is the “network address”, i.e “.0” is the network address of the subnet “10.1.1.0/24”. Instead you need to specify an IP in that network, such as “.1”, e.g. “10.1.1.1/24”
https://discuss.linuxcontainers.org/t/failed-lxd-init-what-is-cidr/7181/2
## 1) Main Snap on bare metal
[Install Wekan Snap](Install) to newest Ubuntu bare metal server. Snaps have automatic updates.
For example:
```
sudo apt-get install snapd
reboot
sudo snap install wekan
```
For Let's Encrypt SSL, like this to `/var/snap/wekan/common/Caddyfile`. We will be proxying to inside LXD container:
```
boards.example.com {
tls {
alpn http/1.1
}
proxy / 10.10.10.231:3001 {
websocket
transparent
}
}
```
For [CloudFlare SSL](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config), like this to `/var/snap/wekan/common/Caddyfile`:
```
http://boards.example.com https://boards.example.com {
tls {
load /var/snap/wekan/common/certificates
alpn http/1.1
}
proxy / 10.10.10.231:3001 {
websocket
transparent
}
}
```
## 2) New LXC container
So when I start new lxc container:
```
lxc launch images:ubuntu/20.04 lxccontainername
```
## 3) Snapd and Wekan
Then I go inside container and install snapd:
```
lxc exec lxccontainername -- /bin/bash
apt -y install snapd
reboot
lxc exec lxccontainername -- /bin/bash
snap install wekan
snap set wekan root-url='https://boards.example.com'
sudo snap set wekan port='3001'
sudo snap set wekan mail-from='Wekan Team Boards <info@example.com>'
sudo snap set wekan mail-url='smtps://username:password@email-smtp.eu-west-1.amazonaws.com:587'
ip address
exit
```
That `ip address` command does show current IP address of container, that you can then add to bare metal `/var/snap/wekan/common/Caddyfile`.
You can also add more lxc containers to different subdomains and proxy to them in main Caddyfile.
## 4) Some LXC commands
### New Ubuntu container
```
lxc launch images:ubuntu/20.04 lxccontainername
```
### Inside LXC container
```
lxc exec lxccontainername -- /bin/bash
```
### Running command in LXC
```
lxc exec lxccontainername -- apt install p7zip-full
```
### Limit RAM available to LXC
```
lxc config set lxccontainername limits.memory 4GB
```
### New Debian container
```
lxc launch images:debian/buster mydebiancontainername
```
### New CentOS 7 container
```
lxc launch images:centos/7/amd64 centos
```
### List containers
```
lxc list -cns
```
Result:
```
+---------------+---------+
| NAME | STATE |
+---------------+---------+
| mycontainer | RUNNING |
+---------------+---------+
```
### Stop and delete container
```
lxc stop mycontainer
lxc delete mycontainer
```
@@ -0,0 +1,78 @@
# Older way to make releases, does not work.
***
## Triggering git import process manually
[Info source](https://github.com/wekan/wekan-snap/issues/2#issuecomment-311324364)
To make build quicker, it's possible to trigger git import process manually in launchpad, so you don't need to wait for next sync.
https://code.launchpad.net/~wekan-team/wekan/+git/wekan
## Launchpad project
[Info source](https://github.com/wekan/wekan-snap/pull/3#issuecomment-310764751)
kubiko created launchpad wekan project and wekan team where xet7 is admin in and contributor. xet7 can feel free to add other people on the list.
Wekan project has wekan-snap repo mirrored from github one:
https://code.launchpad.net/~wekan-team/wekan/+git/wekan-snap
Sync happens every ~5 hours
There is snap package enabled for this repo which has automatic build upon change in repo enabled, you can see there also build queue:
https://code.launchpad.net/~wekan-team/+snap/wekan-devel
It has also auto push to store enabled, so once built snap is uploaded to candidate channel.
Once you snap is uploaded you should see it here:
https://dashboard.snapcraft.io/dev/snaps/7867
kubiko got email from launchpad account and added xet7 as collaborator list, so xet7 can control promotion to stable channel once candidate version is tested. There xet7 can see there some other interesting stats about snap adoption.
For the future once xet7 makes change in wekan-snap build and upload should happen automatically, no need for additional interaction.
Next thing for kubiko would be to move people from wekan-ondra to wekan, not quite sure how to announce this though….. From stats kubiko did see there are ~320 downloads/installs of version 0.23.
kubiko also created pull request to wekan repo, which enabled continuous integration from master, typically this would be pushing builds to edge channel, from where xet7 can do testing, or more adventures users can use edge channel to track Wekan master branch….
## Snapcraft build support from source
[Info source](https://github.com/wekan/wekan/pull/1091)
Adding snapcraft build support. This can be used together with launchpad build system for continuous integration.
Intention is to push snaps build from devel branch to edge channel, which can be installed by calling:
```
$ snap install -edge wekan
```
device will keep automatically updating to revisions as they are released to edge channel
@xet7 Snap build job is now created, you can see it here:
https://code.launchpad.net/~wekan-team/+snap/wekan-devel
It's building from devel branch, fee free to change that if you prefer it to build from different branch.
Same as for release apply here, auto builds on change, only resulting snap is pushed to edge channel instead.
Also check please version name if you want it to be something different than:
```
0.26-SNAPSHOT
```
## Old links, not in use
( Old trigger git import https://code.launchpad.net/~wekan-team/wekan/+git/wekan-snap )
( Old build queue, not in use: https://code.launchpad.net/~wekan-team/+snap/wekan-release )
( Old build queue, not in use: https://code.launchpad.net/~ondrak/+snap/wekan-devel )
+1
View File
@@ -0,0 +1 @@
https://github.com/wekan/wekan/wiki/OpenSuse
+14
View File
@@ -0,0 +1,14 @@
## Share MongoDB to other snaps
- connect mongodb-slot with plug from corresponding snap(s)
- configure corresponding service to use mongodb unix socket in shared directory, socket file name is: mongodb-.sock
## Sharing MongoDB from other snap to wekan
- connect mongodb-plug with slot from snap providing mongodb
- disable mongodb in wekan by calling:
```
$ snap set wekan set disable-mongodb='true'
```
- set mongodb-bind-unix-socket to point to serving mongodb. Use relative path inside shared directory, e.g run/mongodb-27017.sock
@@ -0,0 +1,125 @@
Wekan supports settings key values:
```
$ snap set wekan <key name>='<key value>'
```
## List all possible settings
```
$ wekan.help | less
```
## List your current snap settings
```
sudo snap get wekan
```
## LDAP
- Settings can be seen with command `wekan.help` and [this config file](https://raw.githubusercontent.com/wekan/wekan/master/snap-src/bin/config).
- LDAP repo https://github.com/wekan/wekan-ldap
- Bugs and Feature Requests LDAP repo https://github.com/wekan/wekan-ldap/issues
Example from setting listed at [this config file](https://raw.githubusercontent.com/wekan/wekan/master/snap-src/bin/config):
```
sudo snap set wekan ldap-enable='true'
sudo snap set wekan default-authentication-method='ldap'
sudo snap set wekan ldap-fullname-field='CN'
```
## List of supported keys
```
mongodb-bind-unix-socket: mongodb binding unix socket:
Default behaviour will preffer binding over unix socket, to
disable unix socket binding set value to 'nill' string
To bind to instance of mongodb provided through content
interface, set value to relative path to the socket inside
'shared' directory.
Default value: set to use unix socket binding
mongodb-bind-ip: mongodb binding ip address: eg 127.0.0.1 for localhost
If not defined default unix socket binding is used instead
Default value: ''
mongodb-port: mongodb binding port: eg 27017 when using localhost
Default value: '27019'
mail-url: wekan mail binding
Example: 'smtps://user:pass@mailserver.examples.com:453/'
Default value: 'smtp://user:pass@mailserver.examples.com:25/'
mail-from: wekan's admin mail from name email address
For example: 'Boards Support <support@example.com>'
Default value: 'wekan-admin@example.com'
root-url: wekan's root url, eg http://127.0.0.1, https://example.com,
https://wekan.example.com, http://example.com/wekan
Default value: 'http://127.0.0.1'
port: port wekan is exposed at
Default value: '8080'
disable-mongodb: Disable mongodb service: use only if binding to
database outside of Wekan snap. Valid values: [true,false]
Default value: 'false'
caddy-enabled: Enable caddy service (caddy - Every Site on HTTPS).
see https://caddyserver.com/products/licenses and
https://github.com/wekan/wekan-snap/issues/39 ,
use personal non-commercial license or
contact Wekan maintainer x@xet7.org about enabling
commercial license for Caddy.
Set to 'true' to enable caddy.
caddy settings are handled through
/var/snap/wekan/common/Caddyfile
Default value: 'false'
caddy-bind-port: Port on which caddy will expect proxy, same value
will be also set in Caddyfile
Default value: '3001'
with-api: To enable the API of wekan. If API is disabled,
exporting board to JSON does not work.
Default value: 'true'
cors: Set Access-Control-Allow-Origin header. Example:
snap set wekan cors='*'
Default value, disabled: ''
browser-policy-enabled: Enable browser policy and allow one
trusted URL that can have iframe that has
Wekan embedded inside.
Setting this to false is not recommended,
it also disables all other browser policy protections
and allows all iframing etc. See wekan/server/policy.js
Default value: 'true'
trusted-url: When browser policy is enabled, HTML code at this URL
can have iframe that embeds Wekan inside.
Example: trusted-url='https://example.com'
Default value: ''
webhooks-attributes: What to send to Outgoing Webhook, or leave out.
Example, that includes all that are default:
cardId,listId,oldListId,boardId,comment,user,card,commentId .
To enable the Webhooks Attributes of Wekan:
snap set wekan webhooks-attributes=cardId,listId,oldListId,boardId,comment,user,card,commentId
Disable the Webhooks Attributest of Wekan to send all default ones:
snap set wekan webhooks-attributes=''
```
## Rocket.Chat providing OAuth2 login to Wekan
Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when Rocket.Chat is providing OAuth2 login to Wekan.
[OAuth2 Login Docs](https://github.com/wekan/wekan/wiki/OAuth2)
## [Matomo web analytics](https://matomo.org) integration
Example:
```
sudo snap set wekan matomo-address='https://matomo.example.com/'
sudo snap set wekan matomo-site-id='25'
sudo snap set wekan matomo-with-username='true'
sudo snap set wekan matomo-do-not-track='false'
```
Matomo settings keys:
```
matomo-address: The address of the server where matomo is hosted
No value set, using default value: ''
matomo-site-id: The value of the site ID given in matomo server for wekan
No value set, using default value: ''
matomo-do-not-track: The option do not track which enables users to not be tracked by matomo
Current value set to: 'true', (default value: 'true')
matomo-with-username: The option that allows matomo to retrieve the username
Current value set to: 'false', (default value: 'false')
```
**When settings are changed, wekan/mongo/caddy services are automatically restarted for changes to take effect.**
@@ -0,0 +1,81 @@
Please:
- Test does WeKan on some non-stable channel work, [add a new issue](https://github.com/wekan/wekan-snap/issues) about can it be added to stable channel.
- Check [is there PR about fixing some bug already](https://github.com/wekan/wekan/pulls)
- Please report bugs [by adding a new issue](https://github.com/wekan/wekan-snap/issues).
- Make backups first, so you are not using your only copy of production data
- Have time to test
- Have enough disk space. For example, some update migration could write all attachments from database to some subdirectory of `/var/snap/wekan/common` or `/var/snap/wekan-gantt-gpl/common`.
- You can try bleeding edge versions of Wekan Snap, that contains cool new features, and could be broken in many ways.
- Sometimes Snap builds fail, so then there is no package file to upload to Snap store at all, only successfully built are visible at Snap store. Successfully built does not mean that every feature works.
[Changing between WeKan and WeKan Gantt GPL](https://github.com/wekan/wekan/issues/2870#issuecomment-721364824)
## 1) Stop WeKan
```
sudo snap stop wekan
```
or
```
sudo snap stop wekan-gantt-gpl
```
## 2) Create Backup
2.1 Backup settings:
```
sudo snap get wekan > snap-settings.txt
```
or
```
sudo snap get wekan-gantt-gpl > snap-settings.txt
```
2.2 https://github.com/wekan/wekan/wiki/Backup
2.3 Copy files to safe place from /var/snap/wekan/common or /var/snap/wekan-gantt-gpl/common . There could be some board attachments etc.
## 3) Check what is available at various channels
https://snapcraft.io/wekan
https://snapcraft.io/wekan-gantt-gpl
- Stable: Current working version
- Beta: Maybe work, or not
- Edge: Newest that did build, no idea does it work or not
This is how you can try snap beta channel:
```
sudo snap refresh wekan --beta --amend
```
This is how to change back to snap stable channel, that most Wekan users have installed:
```
sudo snap refresh wekan --stable --amend
```
Wekan stable versions are numbered v1.x
## 4) Update all Snaps to newest on that channel
[Check you don't have Snap updates disabled](Automatic-update-schedule#if-required-you-can-disable-all-snap-updates)
```
sudo snap refresh
```
## 5) Start WeKan
```
sudo snap stop wekan
```
or
```
sudo snap stop wekan-gantt-gpl
```
## Other docs
* [Adding Snap settings to code](https://github.com/wekan/wekan/wiki/Adding-new-Snap-settings-to-code)
* [Wekan Developer Docs](https://github.com/wekan/wekan/wiki/Developer-Documentation)
+65
View File
@@ -0,0 +1,65 @@
[Info source](https://github.com/wekan/wekan-snap/issues/4#issuecomment-311355296)
1) All you need to do is
```
$ snap install wekan
```
2) Enable/disable is not needed, it is there for cases when for example you want to stop wekan, but do not want to uninstall it (uninstall will delete also all user data)
3) Wekan is service, so apart of help, it does not have any "user executables"
4) You can check status of wekan with:
```
$ sudo systemctl status snap.wekan.*
```
there should be two services, mongodb and wekan running, of either of them is showing error, that would be place to look first. To get detailed look, use
```
$ sudo journalctl -u snap.wekan.*
```
or detailed look of one of services:
```
$ sudo journalctl -u snap.wekan.wekan.service
```
or
```
$ snap.wekan.mongodb.service
```
5) Content interface for mongodb (wekan:mongodb-slot, wekan:mongodb-plug) is there only for more complex cases where for reason you want to:
a) share wekan's mongodb instance with other services, use wekan:mongodb-slot
b) you want to use mongodb instance from some other service, use wekan:mongodb-plug
so connecting wekan:mongodb-plug to wekan:mongodb-slot really makes no sense :)
As @xet7 suggested, first thing to make sure is that update your machine, so you are running up to date snapd. You can check your version with
```
$ snap version
```
Currently we are on 2.26
Otherwise shared folders are created under:
```
/var/snap/wekan/current where writable data lives
```
Databases and other settings live under:
```
/var/snap/wekan/common/
/snap/wekan/current is read only mount of squashfs wekan's image.
```
[Troubleshooting Email](https://github.com/wekan/wekan/wiki/Troubleshooting-Mail)
+54
View File
@@ -0,0 +1,54 @@
List what snaps you have installed. Core is part of snap itself.
```
sudo snap list
```
List what snap services are running:
```
sudo snap services
```
Uninstall Wekan snap and delete all Wekan data. If you have other snaps installed, you can remove them too. Don't remove core, it's part of snap itself.
```
sudo snap stop wekan
sudo snap disable wekan
sudo snap remove wekan
```
OPTIONAL ALTERNATIVE WAY, NOT REQUIRED: Disable some services of wekan using systemd:
```
sudo systemctl stop snap.wekan.wekan
sudo systemctl stop snap.wekan.mongodb
sudo systemctl stop snap.wekan.caddy
sudo systemctl disable snap.wekan.wekan
sudo systemctl disable snap.wekan.mongodb
sudo systemctl disable snap.wekan.caddy
```
Uninstall snap at CentOS:
```
sudo systemctl disable --now snapd.socket
sudo yum copr disable ngompa/snapcore-el7
sudo yum remove yum-plugin-copr snapd
```
Uninstall snap at Debian/Ubuntu/Mint:
```
sudo systemctl stop snapd
sudo systemctl disable snapd
sudo apt --purge remove snapd
```
Uninstall snap at [Ubuntu 14.04](https://github.com/wekan/wekan-snap/issues/34#issuecomment-378295168):
```
sudo service snapd stop
sudo update-rc.d -f snapd remove
sudo apt-get --purge remove snapd
```
@@ -0,0 +1,5 @@
Update all snap packages, like Wekan and others, with commmand:
```
sudo snap refresh
```
+22
View File
@@ -0,0 +1,22 @@
## ADFS 4.0 using OAuth 2 and OpenID
[Related issue](https://github.com/wekan/wekan/issues/3184)
There is these settings.
## Snap
```
sudo snap set oauth2-enabled='true'
sudo snap set oauth2-adfs-enabled='true'
```
Unset:
```
sudo snap unset oauth2-enabled
sudo snap unset oauth2-adfs-enabled
```
## Docker and .sh/.bat
```
OAUTH2_ENABLED=true
OAUTH2_ADFS_ENABLED=true
```
To disable, uncomment or remove that line.
+186
View File
@@ -0,0 +1,186 @@
[Scaling Meteor](https://medium.freecodecamp.org/scaling-meteor-a-year-on-26ee37588e4b)
## Production setup at AWS for thousands of users
* 3-4x m4.large for Node (ECS Cluster)
* 3x r4.large for Mongo (1 Primary for read and write, 2 replicas)
This setup runs very well for thousands of users.
To improve scalability even more, add [Redis Oplog support](https://github.com/cult-of-coders/redis-oplog), also see related [Redis Oplog discussion forum post](https://forums.meteor.com/t/meteor-scaling-redis-oplog-status-prod-ready/30855/479). At AWS you can use AWS ElastiCache that has Redis support.
### Mongo URL AND Oplog settings
From [comment at issue](https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-378343587):
We've fixed our CPU usage problem today with an environment
change around Wekan. I wasn't aware during implementation
that if you're using more than 1 instance of Wekan
(or any MeteorJS based tool) you're supposed to set
MONGO_OPLOG_URL as an environment variable.
Without setting it, Meteor will perform a pull-and-diff
update of it's dataset. With it, Meteor will update from
the OPLOG. See here
https://blog.meteor.com/tuning-meteor-mongo-livedata-for-scalability-13fe9deb8908
After setting in [docker-compose.yml](https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml):
```
MONGO_OPLOG_URL=mongodb://<username>:<password>@<mongoDbURL>/local?authSource=admin&replicaSet=rsWekan
```
the CPU usage for all Wekan instances dropped to an average
of less than 10% with only occasional spikes to high usage
(I guess when someone is doing a lot of work)
```
- MONGO_URL=mongodb://wekandb:27017/wekan
- MONGO_OPLOG_URL=mongodb://<username>:<password>@<mongoDbURL>/local?authSource=admin&replicaSet=rsWekan
```
If there is other ideas to improve scalability, add info to [existing scalability issue](https://github.com/wekan/wekan-mongodb/issues/2) or [scalability forum post](https://discourse.wekan.io/t/cpu-utilization-problems-with-large-userbase/579/15), there is also mentioned that smart-disconnect is already in Wekan.
For Enterprises using Wekan xet7 recommends participating in Wekan development, see [Benefits of contributing your features to Upstream Wekan](https://blog.wekan.team/2018/02/benefits-of-contributing-your-features-to-upstream-wekan/index.html), having your own developers working on Wekan daily, and using Commercial Support at https://wekan.team , as Wekan Team [already has access to high performance bare metal servers at CNCF / Packet for running high load testing](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html). With the benefits you get by using Wekan, it’s [time well spent](https://blog.wekan.team/2018/02/time-well-spent/index.html). Some [DTrace and eBPF info here](https://news.ycombinator.com/item?id=16375938).
## Single Server Install for small teams
1) Add AWS Security Group with for example name wekan, and incoming ports 80 and 443 for all. Only add ssh access to your own IP address CIDR like 123.123.123.123/32 so it means one IP address.
2) Start Ubuntu 17.10 64bit EC2 instance that has at least 2 GB RAM, 30 GB diskspace, probably you need more when you add more customers. Add your SSH public key to instance or let it create new.
3) Add new Elastic IP address pointing to your EC2 instance. That way IP address stays same, and you can also make snapshot of EC2 instance and start that as new EC2 instance with more RAM and change Elastic IP to point to new EC2 instance with minimal downtime, but prefer times when there is no active changes to Wekan.
4) Set your subdomain.yourdomain.com address DNS pointing to your Elastic IP address as A record in Route 53, Namecheap or elsewhere where your domain control panel is. It will take max 24h for DNS to propagate globally.
5) ssh to your server, for example:
```
ssh -i pubkey.pem ubuntu@server-ip-address
(or: root@)
```
6) Update all packages:
```
sudo apt update
sudo apt -y dist-upgrade
reboot
```
7) Install Docker CE and docker-compose for ubuntu from www.docker.com , also add user ubuntu to group docker in post-install step.
8) Install nginx, for example:
```
sudo apt install nginx
(or: nginx-full)
sudo systemctl start nginx
sudo systemctl enable nginx
```
[Example nginx config](Nginx-Webserver-Config)
Test nginx config with:
```
sudo nginx -t
```
And take config into use with:
```
sudo systemctl reload nginx
```
9) Install certbot from https://certbot.eff.org for Let's Encrypt SSL certs, redirect http to https
10) For different customers, you use different location /customer1 2 etc block and wekan running behind nginx proxy on different localhost port in same nginx virtualhost subdomain config file.
11) Get latest wekan release info from https://github.com/wekan/wekan/releases , read docker-compose.yml file from https://github.com/wekan/wekan-mongodb where all settings are explained, so you setup ROOT_URL=https://sub.yourdomain.com/customer1 and for example the 8080:80 for local server port 8080 to go inside docker port 80.
For example Wekan v0.70, use in docker-compose.yml file:
image: quay.io/wekan/wekan:v0.70
Only use release version tags, because latest tag can be broken sometimes.
12) For email, in AWS SES add email address to domain, verify SPF and DKIM with Route53 wizard if you have domain at Route53 as I recommend. At SES create new SMTP credentials and [add them to docker-compose.yml SMTP settings](Troubleshooting-Mail)
13) Start wekan and mongodb database containers with command:
```
docker-compose up -d
```
So it goes nginx SSL port 443 => proxy to localhost port 8080 or any other => wekan-app port 80 inside docker
14) For different customers have different docker-compose.yml script in directories named by customer names. You may need to rename docker containers from wekan-app to wekan-customer1 etc, and probably also docker internal network names.
15) [Backup, restore, and moving data outside/inside docker](Export-Docker-Mongo-Data)
16) Register as user at https://subdomain.yourdomain.com/customer1/sign-up and login at https://subdomain.yourdomain.com/customer1/sign-in , first user will be admin. Click your username at top right corner / Admin Panel, and there chang settings to invite only.
## Upgrading Wekan
1) Go to directory where docker-compose.yml is, as in install step 14) , and create directory for backup
```
cd wekan-customer1
mkdir backup-2018-02-03
cd backup-2018-02-03
```
2) Make backup of database outside docker in that backup directory, as in install step 15)
3) Edit docker-compose.yml to have new Wekan release number:
```
image: quay.io/wekan/wekan:v0.71
```
4) Restart Wekan:
```
docker-compose stop
docker-compose start
```
5) Login to Wekan and check at Admin Panel that Wekan version is updated.
6) If version is not updated, you could also need some of these:
Seeing what Docker containers are running:
```
docker ps
```
Seeing what Docker images are installed:
```
docker images
```
Stopping containers (or start, if starting containers)
```
docker stop wekan-app
docker stop CONTAINER-ID-HERE
```
Removing containers:
```
docker rm wekan-app
docker rm CONTAINER-ID-HERE
```
Removing images:
```
docker rmi quay.io/wekan/wekan:latest
docker rmi quay.io/wekan/wekan:v0.70
```
Starting new containers from docker-compose.yml file:
```
docker-compose up -d
```
TODO:
- allow resend invites https://github.com/wekan/wekan/issues/1320
- changing logo everywhere, whitelabeling https://github.com/wekan/wekan/issues/1196
+14
View File
@@ -0,0 +1,14 @@
## Brute force protection
For settings, see:
- Snap: `wekan.help | grep lockout`
- Docker: Search lockout from docker-compose.yml at https://github.com/wekan/wekan
[Removing lockout from users](https://github.com/wekan/wekan/issues/3306)
For UCS, it's UCS VM and inside it Docker container. You just ssh your ucs VM like this, with same username password you used when installin UCS and administering UCS apps, su to root:
```
ssh Administrator@192.168.0.100
su
```
And then use those Docker commands https://github.com/wekan/wekan/issues/3306#issuecomment-712743002
@@ -0,0 +1,91 @@
# Also see Snap Developer Docs
[Snap Developer Docs](https://github.com/wekan/wekan-snap/wiki/Snap-Developer-Docs)
# When adding settings to code you or somebody else wrote
Add all necessary settings that you find on code.
After doing all changes, [fix lint errors](Developer-Documentation#preventing-travis-ci-lint-errors-before-submitting-pull-requests) and if possible warnings too. You can silence errors if you really can't find solution.
Submit pull request to Wekan edge branch https://github.com/wekan/wekan/tree/edge
# Changes to server code
To use environment variables in your serverside code, use:
```
process.env.YOURSETTING
```
Example: [wekan/server/policy.js](https://github.com/wekan/wekan/blob/edge/server/policy.js)
# Changes to [config](https://github.com/wekan/wekan/blob/edge/snap-src/bin/config)
## 1) Add to beginning
At beginning there is this line:
```
# list of supported keys
keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP ..."
```
To the end of it, add name of new setting. For example:
```
keys="... AWESOME_FEATURE_ENABLED"
```
## 2) Add to bottom
Example 1: Set features not enabled as default.
```
DESCRIPTION_LDAP_ENABLED="LDAP enabled. Default: false"
DEFAULT_LDAP_ENABLED="false"
KEY_LDAP_ENABLED="ldap-enabled"
```
Example 2: If setting is different for every server, leave it empty.
```
DESCRIPTION_OAUTH2_TOKEN_ENDPOINT="OAuth2 token endpoint. Example: /oauth/token"
DEFAULT_OAUTH2_TOKEN_ENDPOINT=""
KEY_OAUTH2_TOKEN_ENDPOINT="oauth2-token-endpoint"
```
Example 3: If there is same for every server, set it to general setting.
```
DESCRIPTION_LDAP_SEARCH_FILTER="LDAP search filter. Default: (&(objectCategory=person)(objectClass=user)(!(cn=andy)))"
DEFAULT_LDAP_SEARCH_FILTER="(&(objectCategory=person)(objectClass=user)(!(cn=andy)))"
KEY_LDAP_ENABLED="ldap-enabled"
```
Example 4: If you don't know example, leave it without example.
```
DESCRIPTION_TURBO_FILTER="Turbo filter. Default: ''"
DEFAULT_TURBO_FILTER=""
KEY_TURBO_FILTER="turbo-filter"
```
# Changes to [Snap help](https://github.com/wekan/wekan/blob/edge/snap-src/bin/wekan-help)
## 1) How to quote examples
Snap settings need to be lowercase, and inside single quotes. For example:
```
snap set wekan ldap-user-search-filter='(&(objectCategory=person)(objectClass=user)(!(cn=andy)))'
```
The setting inside single quotes is the actual setting.
Actual settings can include double quotes, spaces, etc, but not single quotes. For example:
```
snap set wekan ldap-user-search-filter='"(&(objectCategory=person)(objectClass=user)(!(cn=andy)))"'
```
## 2) What to add as setting to Wekan help
Example 1:
```
echo -e "OAuth2 Token Endpoint. Example: /oauth/token"
echo -e "To enable the OAuth2 Token Endpoint of Wekan:"
echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT='/oauth/token'"
echo -e "\t-Disable the OAuth2 Token Endpoint of Wekan:"
echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT=''"
echo -e "\n"
```
So all you add need to be above of this line:
```
# parse config file for supported settings keys
```
+32
View File
@@ -0,0 +1,32 @@
## Standalone Wekan: Snap, (Docker, Source, VirtualBox)
1) [Install Wekan Snap](https://github.com/wekan/wekan-snap/wiki/Install)
2) Go to your Wekan URL like https://example.com/sign-up (your address + /sign-up)
3) Register your username, email address and password. First registered user will be admin, and next ones normal users. If you want other admins too, you can change their permission to admin at Admin Panel.
4) **If you get Internal Server Error when creating account, it's because you have not configured email, and you can ignore it. WORKING EMAIL IS NOT REQUIRED. Wekan works without setting up email.**
If you really want email sending, do for example:
```
sudo snap set wekan mail-url='smtps://user:pass@mailserver.example.com:457/'
sudo snap set wekan mail-from='Example Wekan Support <support@example.com>'
```
For more options see [Troubleshooting Email](Troubleshooting-Mail)
5) Login to Wekan at https://example.com/sign-in (your address + /sign-in)
6) Click on top right your username / Admin Panel. You can change permissions, name, email address and password in Admin Panel.
![Admin Panel](https://wekan.github.io/wekan-admin-panel.png)
7) For registering other users:
a) Let them self-register, or open webbrowser incongnito window, and register them at https://example.com/sign-up (your address + /sign-up)
b) If your email works, click Admin Panel / Settings / Registration / [X] Disable self-registration. Then invite new users to selected boards by email address.
## Deleting Users
[No delete feature yet](https://github.com/wekan/wekan/issues/1289)
@@ -0,0 +1,3 @@
[Wekan v5.55 and newer](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v555-2021-08-31-wekan-release)
<img src="https://wekan.github.io/allow-private-boards-only.png" width="60%" alt="Allow private boards only" />
+55
View File
@@ -0,0 +1,55 @@
### Running Wekan server at Android
Requirements:
- arm64 or x64 Android with at least 3 GB RAM. Tested with with arm64 OnePlus 3 that has 6 GB RAM.
- It is not necessary to root Android.
## 1) Install AnLinux and Termux from Play Store
At AnLinux choose:
- Ubuntu
- XFCE4
- Copy those commands to Termux to install Linux.
## 2) At Termux
When you get from Termux to Ubuntu bash, you can install Wekan similarly like arm64 or x64:
https://github.com/wekan/wekan/wiki/Raspberry-Pi
Edit start-wekan.sh so you can start Wekan for example:
```
ROOT_URL=http://localhost:2000
PORT=2000
```
At Android webbrowser like Chrome and Firefox browse to http://localhost:2000
## 3) WLAN
If you connect to WLAN, you can get your IP address with command:
```
ip address
```
Edit start-wekan.sh so you can start Wekan for example:
```
ROOT_URL=http://IP-ADDRESS:2000
PORT=2000
```
Then you can use any computer or mobile phone Javascript capable webbrowser at WLAN to use Wekan at http://IP-ADDRESS:2000 like http://192.168.0.100:2000 . [More info about ROOT_URL](Settings).
## 4) Optional: Mobile Linux Desktop
Requirements:
- 1 WLAN, for example: mobile hotspot, Android device sharing WLAN, hotel WLAN, office WLAN
- ChromeCast that is connected to HDMI Input of hotel/office/home TV and WLAN
- Bluetooth keyboard
- Bluetooth mouse
- 1 Android device that has:
- Wekan installed according to steps 1-3 above
- Android VNC client to local AnLinux Ubuntu desktop
- Firefox installed with apt-get to that Ubuntu desktop, browsing Wekan at http://IP-ADDRESS:2000
- Using ChromeCast to show Android full screen at TV
This way, you have:
- Big TV display
- Full size keyboard and mouse
- Full featured Firefox at Ubuntu Desktop using Wekan
+143
View File
@@ -0,0 +1,143 @@
## 1) Enable Mod_Proxy
```
sudo a2enmod ssl proxy proxy_http proxy_wstunnel proxy_balancer
```
[Apache Mod_Proxy documentation](http://httpd.apache.org/docs/current/mod/mod_proxy.html)
## 2) Restart Apache
Systemd:
```
sudo systemctl restart apache2
```
Init.d:
```
sudo service apache2 restart
```
## 3) Enable SSL in Apache config
```
Listen 443
NameVirtualHost *:443
```
## 4) Set Apache proxy
Remember to set `- ROOT_URL=` to the full URL used for your reverse proxy or as `ServerName`.
### a) Main URL
SSL with [Certbot](https://certbot.eff.org).
Config at `/etc/apache2/sites-available/example.com.conf`:
```ApacheConf
<VirtualHost *:443>
ServerName example.com
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ServerSignature Off
<Location />
require all granted
</Location>
ProxyPassMatch "^/(sockjs\/.*\/websocket)$" "ws://127.0.0.1:3001/$1"
ProxyPass "/" "http://127.0.0.1:3001/"
ProxyPassReverse "/" "http://127.0.0.1:3001/"
<Proxy *>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Proxy>
</VirtualHost>
```
### b) Sub URL
Currently, favicon loading does not work with sub-url [wekan/issues/1692](https://github.com/wekan/wekan/issues/1692)
Config at `/etc/apache2/sites-available/example.com.conf`:
```ApacheConf
<VirtualHost *:443>
ServerName example.com/wekan
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ServerSignature Off
ProxyPassMatch "^/(sockjs\/.*\/websocket)$" "ws://127.0.0.1:3001/wekan/$1"
ProxyPass "/wekan" "http://127.0.0.1:3001/wekan"
ProxyPassReverse "/wekan" "http://127.0.0.1:3001/wekan"
<Proxy *>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Proxy>
</VirtualHost>
```
To run as default site:
```ApacheConf
<VirtualHost _default_:443>
```
## 5) Enable your site
```
sudo a2ensite example.com
```
Or, add symlink manually:
```
sudo su
cd /etc/apache2/sites-enabled
ln -s ../sites-available/example.com.conf example.com.conf
```
On some distributions, Apache config is at different path:
```
cd /etc/httpd/conf.d
```
## 6) Reload Apache
Systemd:
```
sudo systemctl restart apache2
```
Init.d:
```
sudo service apache2 restart
```
## 7) Snap settings
### a) Main URL
```
sudo snap set wekan port='3001'
sudo snap set wekan root-url='https://example.com'
```
### b) Sub URL
```
snap set wekan port='3001'
snap set wekan root-url='https://example.com/wekan'
```
[All snap settings](https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys)
+31
View File
@@ -0,0 +1,31 @@
These are on Standalone Wekan: Snap/Docker/Source/VirtualBox. Some of these are also at Sandstorm Wekan.
## Move to Archive: Restore possible
Board => ☰ => Move Board to Archive
Swimlane => ☰ => Move Swimlane to Archive
List => ☰ => Move List to Archive
Card => ☰ => Move Card to Archive
## Restore Card/List/Swimlane from Archive
Board => ☰ => Archive => Cards/Lists/Swimlanes Restore (or Delete - but that has no undo!! It's FINAL DELETE).
## Restore or Delete board
All Boards => Archive => Restore (or Delete - but that has no undo!! It's FINAL DELETE).
## Deleting - NO UNDO
Deleting Board: All Boards => Archive => Delete
Deleting Card: Card => ☰ => More => Delete (at right bottom corner)
Deleting List: List => ☰ => More => Delete (at right bottom corner)
Deleting Swimlane:
1) Swimlane => ☰ => Move Swimlane to Archive
2) Board => ☰ => Archive => Cards/Lists/Swimlanes Restore (or Delete - but that has no undo!! It's FINAL DELETE).
+5
View File
@@ -0,0 +1,5 @@
2022-03-02
[Added Perl scripts for Asana export to WeKan ®](https://github.com/wekan/wekan/tree/main/asana)
Thanks to GeekRuthie !
+3
View File
@@ -0,0 +1,3 @@
- https://www.sitepoint.com/javascript-async-await/
- https://www.freecodecamp.org/news/javascript-async-await-tutorial-learn-callbacks-promises-async-await-by-making-icecream/
- https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous
+180
View File
@@ -0,0 +1,180 @@
### Install for example from:
- [Snap](Snap)
- [Docker](Docker)
*Make sure you are running at least **v2.21***
### Redirect URL
[About AZURE-NEW-APP-CLIENT-ID and AZURE-NEW-APP-SECRET](https://community.microfocus.com/t5/Identity-Manager-Tips/Creating-the-application-Client-ID-and-Client-Secret-from/ta-p/1776619). The redirect URL is your Wekan root-url+_oauth/oidc like this: https://boards.example.com/_oauth/oidc
<img src="https://wekan.github.io/azure-redirect.png" width="100%" alt="Wekan logo" />
AZURE_DIRECTORY_ID = TENANT-NAME-FOR-YOUR-ORGANIZATION
### If Azure Active Directory login does not work
Check that your CLIENT_SECRET = AZURE-NEW-APP-SECRET has not expired. If it has, delete old secret, and add new secret.
Add it like this, and also check that your Azure Directory ID is in server URL:
```
sudo snap set wekan oauth2-secret='AZURE-CLIENT-SECRET'
sudo snap set wekan oauth2-server-url='https://login.microsoftonline.com/AZURE_DIRECTORY_ID'
```
<img src="https://wekan.github.io/azure-app-client-secret.png" width="100%" alt="Azure App Client Secret" />
###
## Note: Mailjet is not available at Azure anymore
Instead, use O365 at upcoming Wekan v5.38 or newer.
### Mailjet: getaddrinfo ENOTFOUND
With Wekan Snap and Mailjet, if you get getaddrinfo ENOTFOUND error when you try to send a test email from within Wekan, it can be something with networking for the snap. Fix can be found in [Ubuntu DNS resolution issue affecting other snap packages](https://github.com/nextcloud/nextcloud-snap/issues/881). Thanks to [peterk for info](https://github.com/wekan/wekan/issues/3184#issuecomment-699669350).
### Mailjet: mail-from
When using sending email with Mailjet, set `mail-from` to some real email address so you get info if email bounces back.
### Snap settings
```
sudo snap set wekan debug='true'
sudo snap set wekan caddy-enabled='true'
sudo snap set wekan mail-from='Example Boards <BOARD-ADMIN@example.com>'
sudo snap set wekan mail-url='smtps://username:password@in-v3.mailjet.com:465/'
sudo snap set wekan oauth2-enabled='true'
sudo snap set wekan oauth2-request-permissions='openid'
sudo snap set wekan oauth2-client-id='AZURE-NEW-APP-CLIENT-ID'
sudo snap set wekan oauth2-secret='AZURE-NEW-APP-SECRET'
sudo snap set wekan oauth2-auth-endpoint='/oauth2/v2.0/authorize'
sudo snap set wekan oauth2-server-url='https://login.microsoftonline.com/AZURE_DIRECTORY_ID'
sudo snap set wekan oauth2-token-endpoint='/oauth2/v2.0/token'
sudo snap set wekan oauth2-userinfo-endpoint='https://graph.microsoft.com/oidc/userinfo'
sudo snap set wekan oauth2-email-map='email'
sudo snap set wekan oauth2-username-map='email'
sudo snap set wekan oauth2-fullname-map='name'
sudo snap set wekan oauth2-id-map='email'
sudo snap set wekan port='3001'
sudo snap set wekan richer-card-comment-editor='false'
sudo snap set wekan root-url='https://boards.example.com'
sudo snap set wekan with-api='true'
```
At Admin Panel / Settings / Email:
- SMTP Host: `in-v3.mailjet.com`
- SMTP Port: `465`
- Username: `MAILJET-USERNAME`
- Password: `MAILJET-PASSWORD`
- TLS Support: `[_]` (not checked)
If you use Caddy Let's Encrypt SSL for public server, that requires SSL cert validation from multiple not-listed IP addresses of Let's Encrypt, file `/var/snap/wekan/common/Caddyfile`
```
boards.example.com {
tls {
alpn http/1.1
}
proxy / localhost:3001 {
websocket
transparent
}
}
# If you have static main website in this directory, also add it:
example.com {
root /var/snap/wekan/common/example.com
tls {
alpn http/1.1
}
}
```
If you have private server that should be only accessible from private IP (limited by Azure firewall settings), and need SSL, you can not use Let's Encrypt free SSL that validates public availability from multiple non-disclosed IP addresses. For this purpose, you can get SSL certificate. Here is example of SSL cert from with SSL.com .
Join certificates together to .pem file, in order of:
1) privatekey of example.com
2) wildcard (or one subdomain cert) of example.com
3) sub ca
4) root ca
5) trusted network ca
```
cat example_com.key >> example.com.pem
cat STAR_example_com.crt >> example.com.pem
cat SSL_COM_RSA_SSL_SUBCA.crt >> example.com.pem
cat SSL_COM_ROOT_CERTIFICATION_AUTHORITY_RSA.crt >> example.com.pem
cat CERTUM_TRUSTED_NETWORK_CA.crt >> example.com.pem
```
Then transfer SSL cert to server:
```
scp example.com.pem ubuntu@example.com:/home/ubuntu
ssh ubuntu@example.com
sudo mkdir /var/snap/wekan/common/certs
sudo mv example.com.pem /var/snap/wekan/common/certs/
sudo chown root:root /var/snap/wekan/common/certs/example.com.pem
sudo chmod og-rwx /var/snap/wekan/common/certs/example.com.pem
sudo nano /var/snap/wekan/common/Caddyfile
```
At Caddyfile, add these settings for SSL cert:
```
# Static main website, if you have that, redirect to SSL
http://example.com {
redir https://example.com
}
# Wekan redirect to SSL
http://boards.example.com {
redir https://boards.example.com
}
# Static main website, if you have that in this directory
https://example.com {
root /var/snap/wekan/common/example.com
tls {
load /var/snap/wekan/common/certs
alpn http/1.1
}
}
# Wekan
https://boards.example.com {
tls {
load /var/snap/wekan/common/certs
alpn http/1.1
}
proxy / localhost:3001 {
websocket
transparent
}
}
```
Optionally you can would like to [disable all Snap automatic updates](https://github.com/wekan/wekan-snap/wiki/Automatic-update-schedule#if-required-you-can-disable-all-snap-updates) (not recommended, only required by some clients).
### There are two major steps for configuring Wekan to authenticate to Azure AD via OpenID Connect (OIDC)
Note: These old docs below don't have all settings listed that above new Snap settings have. Text case and _- is different, for example at Docker there is `OAUTH2_ENABLED=true` when at Snap same setting is `sudo snap set wekan oauth-enabled='true'`
1. Register the application with Azure. Make sure you capture the application ID as well as generate a secret key.
2. Configure the environment variables. This differs slightly by installation type, but make sure you have the following:
* OAUTH2_ENABLED = true
* OAUTH2_CLIENT_ID = xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx (application GUID captured during app registration)
* OAUTH2_SECRET = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (secret key generated during app registration)
* OAUTH2_SERVER_URL = https://login.microsoftonline.com/<tenant GUID specific to your organization>
* OAUTH2_AUTH_ENDPOINT = /oauth2/v2.0/authorize
* OAUTH2_USERINFO_ENDPOINT = https://graph.microsoft.com/oidc/userinfo
* OAUTH2_TOKEN_ENDPOINT = /oauth2/v2.0/token
* OAUTH2_ID_MAP = email (the claim name you want to map to the unique ID field)
* OAUTH2_USERNAME_MAP = email (the claim name you want to map to the username field)
* OAUTH2_FULLNAME_MAP = name (the claim name you want to map to the full name field)
* OAUTH2_EMAIL_MAP = email (the claim name you want to map to the email field)
I also recommend setting DEBUG = true until you have a working configuration. It helps.
You may also find it useful to look at the following configuration information:
https://login.microsoftonline.com/**the-tenant-name-for-your-organization**/v2.0/.well-known/openid-configuration
Some Azure links also at wiki page about moving from Sandstorm to Docker/Snap , and using Docker Swarm:
- https://github.com/wekan/wekan/wiki/Export-from-Wekan-Sandstorm-grain-.zip-file#azure-links
+47
View File
@@ -0,0 +1,47 @@
## Azure AD B2C using OAuth2
- Original issue: https://github.com/wekan/wekan/issues/5242
- B2C feature added: https://github.com/wekan/wekan/commit/93be112a9454c894c1ce3146ed377e6a6aeca64a
- Similar like [ADFS](ADFS), but `email` is first of array `userinfo[emails]`
## Snap
```
sudo snap set wekan oauth2-enabled='true'
sudo snap set wekan oauth2-b2c-enabled='true'
sudo snap set wekan oauth2-username-map='sub'
sudo snap set wekan oauth2-request-permissions='openid email profile'
sudo snap set wekan oauth2-client-id='xxxxxxxx'
sudo snap set wekan oauth2-secret='xxxxxxx'
sudo snap set wekan oauth2-server-url='https://B2C_TENANT_NAME.b2clogin.com/B2C_TENANT_NAME.onmicrosoft.com/B2C_POLICY_NAME'
sudo snap set wekan oauth2-auth-endpoint='/oauth2/v2.0/authorize'
sudo snap set wekan oauth2-token-endpoint='/oauth2/v2.0/token'
sudo snap set wekan oauth2-username-map='sub'
sudo snap set wekan oauth2-email-map='email'
sudo snap set wekan oauth2-fullname-map='name'
sudo snap set wekan oauth2-id-map='sub'
```
## Docker
https://github.com/wekan/wekan/blob/main/docker-compose.yml
```
- OAUTH2_ENABLED=true
- OAUTH2_B2C_ENABLED=true
- OAUTH2_USERNAME_MAP=sub
- OAUTH2_REQUEST_PERMISSIONS=openid email profile
- OAUTH2_CLIENT_ID=xxxxxxxx
- OAUTH2_SECRET=xxxxxxx
- OAUTH2_SERVER_URL=https://B2C_TENANT_NAME.b2clogin.com/B2C_TENANT_NAME.onmicrosoft.com/B2C_POLICY_NAME
- OAUTH2_AUTH_ENDPOINT=/oauth2/v2.0/authorize
- OAUTH2_TOKEN_ENDPOINT=/oauth2/v2.0/token
- OAUTH2_USERNAME_MAP=sub
- OAUTH2_EMAIL_MAP=email
- OAUTH2_FULLNAME_MAP=name
- OAUTH2_ID_MAP=sub
```
## Others
Similar like above Docker.
+784
View File
@@ -0,0 +1,784 @@
[Sandstorm](Sandstorm) - [Sandstorm Backup](Export-from-Wekan-Sandstorm-grain-.zip-file)
# Upcoming
[Transferring to Minio and SQLite](https://github.com/wekan/minio-metadata)
# Backup Docker
[Also see: Upgrading Synology with Wekan quay images](https://github.com/wekan/wekan/issues/3874#issuecomment-867526249)
Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/.
[docker-compose.yml](https://raw.githubusercontent.com/wekan/wekan/master/docker-compose.yml)
This presumes your Wekan Docker is currently running with:
```bash
docker-compose up -d
```
Backup to directory dump:
```bash
docker stop wekan-app
docker exec wekan-db rm -rf /data/dump
docker exec wekan-db mongodump -o /data/dump
docker cp wekan-db:/data/dump .
docker start wekan-app
```
Copy dump directory to other server or to your backup.
# Restore Docker
```bash
docker stop wekan-app
docker exec wekan-db rm -rf /data/dump
docker cp dump wekan-db:/data/
docker exec wekan-db mongorestore --drop --dir=/data/dump
docker start wekan-app
```
# Upgrade Docker Wekan version
## Newest info
https://github.com/wekan/wekan/discussions/5367
## Old info
Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/.
```bash
docker-compose stop
docker rm wekan-app
```
a) For example, if you in docker-compose.yml use `image: wekanteam/wekan` or `image: quay.io/wekan/wekan` for latest development version
b) Or in docker-compose.yml change version tag, or use version tag like `image: wekanteam/wekan:v5.50` or `image: quay.io/wekan/wekan:v5.50`
```bash
docker-compose up -d
```
# Backup Wekan Snap to directory dump
```bash
sudo snap stop wekan.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH="/snap/wekan/current/bin:$PATH"
mongodump --port 27019
sudo snap get wekan > snap-settings.sh
```
NOTE for Arch Linux: Use this path instead. [Source](https://github.com/wekan/wekan/issues/3941).
```bash
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH-}:/var/lib/snapd/snap/wekan/current/lib/x86_64-linux-gnu
```
username is your /home/username
```bash
sudo chown username:username snap-settings.sh
sudo snap start wekan.wekan
```
Modify snap-settings.sh so that it has commands like:
```bash
sudo snap set wekan root-url='http://localhost'
```
Set snap-settings.sh executeable:
```bash
chmod +x snap-settings.sh
```
# Restore Wekan Snap
```bash
sudo snap stop wekan.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan/current/bin"
mongorestore --drop --port 27019
sudo snap start wekan.wekan
./snap-settings.sh
```
# Upgrade Snap manually immediately (usually it updates automatically)
```bash
sudo snap refresh
```
# Backup Wekan Gantt GPLv2 Snap to directory dump
```bash
sudo snap stop wekan-gantt-gpl.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan-gantt-gpl/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan-gantt-gpl/current/bin"
mongodump --port 27019
sudo snap get wekan-gantt-gpl > snap-settings.sh
```
username is your /home/username
```bash
sudo chown username:username snap-settings.sh
sudo snap start wekan-gantt-gpl.wekan
```
Modify snap-settings.sh so that it has command like:
```bash
sudo snap set wekan-gantt-gpl root-url='http://localhost'
```
Set snap-settings.sh executeable:
```bash
chmod +x snap-settings.sh
```
# Restore Wekan Gantt GPLv2 Snap
```bash
sudo snap stop wekan-gantt-gpl.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan-gantt-gpl/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan-gantt-gpl/current/bin"
mongorestore --drop --port 27019
sudo snap start wekan-gantt-gpl.wekan
./snap-settings.sh
```
# DBGate, Open Source MongoDB GUI
https://dbgate.org - https://github.com/dbgate/dbgate
# Using nosqlbooster closed source MongoDB GUI with Wekan Snap to edit MongoDB database
https://nosqlbooster.com/downloads
### At server where Wekan Snap is installed, MongoDB is running at localhost port 27019
<img src="https://wekan.github.io/nosqlbooster-basic-connection.png" width="60%" alt="Wekan logo" />
### You can tunnel via SSH to server, using password auth or private key auth dropdown selection
<img src="https://wekan.github.io/nosqlbooster-ssh-tunnel.png" width="60%" alt="Wekan logo" />
# Scheduled backups to local or remote server
For below scheduled backup scripts, no info from above of this wiki page is required. Backup scripts below have the required settings.
This does backup of [Wekan+RocketChat snap databases](OAuth2) and php website etc.
If you need to backup some remote server or cloud, you can use scp, or read [rclone docs](https://rclone.org/docs/) about how to configure saving to some other remote server or cloud.
The following .sh bash scripts are added as root user to your `/root/` directory.
Backups are created to subdirectories of `/root/backups/`.
Cron is used to schedule backups, for example once a day.
1. To add bash scripts, you change to root user with this command, and your sudo or root password.
```bash
sudo su
```
2. Use nano editor for editing cron. If you don't have it installed, type:
```bash
apt install nano
```
3. Then we set text editor to be nano. Otherwise it probably uses vi, that is harder to use.
```bash
export EDITOR=nano
```
4. Now we start editing cron scheduler.
```bash
crontab -e
```
For more info how to make cron time, see https://crontab.guru
In this example, we set backups every day at 04:00, then it runs backup.sh script, and saves output of the backup commands to the bottom of textfile backup.log.txt
```bash
# m h dom mon dow command
0 4 * * * /root/backup.sh >> /root/backup.log.txt 2>&1
```
- For changing to `/root` directory, type: `cd /root`
- for editing backup.sh file, type: `nano backup.sh`
- For saving in nano, press Ctrl-o Enter
- For exiting nano, press Ctrl-x Enter
- Set every .sh file as executeable, for example: `chmod +x backup.sh`
This is content of `backup.sh` script. It runs all the other backup scripts.
If you do not need to backup rocketchat or website, or do not need to use rclone,
you don't need to add those command lines at all.
```bash
cd /root
./backup-wekan.sh
./backup-rocketchat.sh
./backup-website.sh
rclone move backups cloudname:backup.example.com
```
More about rclone:
/root/rclone-ls-all.sh , shows directory contests at cloud:
```bash
rclone lsd cloudname:
```
In this example, cron does run backup scripts as root.
This is if you edit cron with command `crontab -e` as root user,
so it edits the cron of root user.
If mongodump command works as normal user for you, you could instead
run backups as normal user, by exiting root user with `exit` and
then as normal user editing cron with `crontab -e`.
You can also list current cron with command `crontab -l`.
If you like to backup Wekan snap settings with this command, then it
only works with sudo at front, or as a root user without sudo at front.
```bash
sudo snap get wekan > snap-settings.txt
```
This below is backup script for backing up Wekan.
/root/backup-wekan.sh
```bash
#!/bin/bash
makeDump()
{
# Backups will be created below this directory.
backupdir="/root/backups/wekan"
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Gets current time to variable "now"
now=$(date +'%Y-%m-%d_%H.%M.%S')
# Creates new backup directory like BACKUPDIR/BACKUPVERSIO-TIMENOW
mkdir -p $backupdir/$version-$now
# Targets the dump file.
#dump=$"/snap/wekan/$version/bin/mongodump"
# Changes to backup directory
cd $backupdir/$version-$now
# Backup Caddy settings
snap get wekan > snap-settings.txt
# Show text that database backup is in progress
printf "\nThe database backup is in progress.\n\n"
# Backup to current directory, creates subdirectory called "dump"
# with database dump files
mongodump --port 27019
# Change diretory (=cd) to parent directory
cd ..
# Show text "Makes the tar.gz archive file"
printf "\nMakes the tar.gz archive file.\n"
# Creates tar.gz archive file. This works similarly like creating .zip file.
tar -zcvf $version-$now.tar.gz $version-$now
# Delete temporary files that have already been
# compressed to above tar.gz file
rm -rf $version-$now
# Shows text "Backup done."
printf "\nBackup done.\n"
# Show where backup archive file is.
echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz"
}
# Checks is the user is sudo/root
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Starts
makeDump
```bash
/root/backup-rocketchat.sh
```bash
#!/bin/bash
makeDump()
{
backupdir="/root/backups/rocketchat"
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Prepares.
now=$(date +'%Y-%m-%d_%H.%M.%S')
mkdir -p $backupdir/$version-$now
# Targets the dump file.
dump=$"/snap/wekan/$version/bin/mongodump"
# Makes the backup.
cd $backupdir/$version-$now
printf "\nThe database backup is in progress.\n\n"
$dump --port 27017
# Makes the tar.gz file.
cd ..
printf "\nMakes the tar.gz file.\n"
tar -zcvf $version-$now.tar.gz $version-$now
# Cleanups
rm -rf $version-$now
# End.
printf "\nBackup done.\n"
echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz"
}
# Checks is the user is sudo/root
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Starts
makeDump
```
/root/backup-website.sh
```bash
#!/bin/bash
makeDump()
{
backupdir="/root/backups/example.com"
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Prepares.
now=$(date +'%Y-%m-%d_%H.%M.%S')
mkdir -p $backupdir/$version-$now
# Makes the backup.
cd $backupdir/$version-$now
printf "\nThe file backup is in progress.\n\n"
# Makes the tar.gz file.
cd ..
printf "\nMakes the tar.gz file.\n"
cp -pR /var/snap/wekan/common/example.com $version-$now
tar -zcvf $version-$now.tar.gz $version-$now
# Cleanups
rm -rf $version-$now
# End.
printf "\nBackup done.\n"
echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz"
}
# Checks is the user is sudo/root
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Starts
makeDump
```
/var/snap/wekan/common/Caddyfile
```bash
chat.example.com {
proxy / localhost:3000 {
websocket
transparent
}
}
https://boards.example.com {
proxy / localhost:3001 {
websocket
transparent
}
}
example.com {
root /var/snap/wekan/common/example.com
fastcgi / /var/run/php/php7.0-fpm.sock php
}
matomo.example.com {
root /var/snap/wekan/common/matomo.example.com
fastcgi / /var/run/php/php7.0-fpm.sock php
}
# Example CloudFlare free wildcard SSL Origin Certificate, there is example.com.pem at certificates directory with private key at to and cert at bottom.
http://example.com https://example.com {
tls {
load /var/snap/wekan/common/certificates
alpn http/1.1
}
root /var/snap/wekan/common/example.com
browse
}
static.example.com {
root /var/snap/wekan/common/static.example.com
}
```
## Related talk about MongoDB backup
Related talk, search for "mongodb" this page:
https://fosdem.org/2020/schedule/events/
There is this:
Percona Backup for MongoDB: Status and Plans
Open Source solution for consistent backups of multi-shard MongoDB
- [Slides](https://fosdem.org/2020/schedule/event/perconamongodb/attachments/slides/3768/export/events/attachments/perconamongodb/slides/3768/Percona_Backup_for_MongoDB.pdf)
- [Video webm](https://video.fosdem.org/2020/UD2.119/perconamongodb.webm)
- [Same Video mp4](https://video.fosdem.org/2020/UD2.119/perconamongodb.mp4)
## Related Sandstorm issue
[Creating a backup while the grain is running could cause corruption](https://github.com/sandstorm-io/sandstorm/issues/3186).
## Combining old and new Wekan version data
Note: Do mongodump/mongorestore only when Wekan is stopped: wekan.wekan (Snap) or wekan-app (Docker).
1. From new Wekan export all boards to Wekan JSON.
2. Backup new Wekan with mongodump.
3. Backup old Wekan with mongodump.
4. Restore old Wekan data to new Wekan with mongorestore.
5. Restore new Wekan JSON exported boards by importing them.
## Rescuing board that does not load
Wekan web UI Import/Export JSON does not have all content currently. To upgrade from old Wekan version, use mongodump/mongorestore to newest Wekan, like described below.
To import big JSON file, on Linux you can use xclip to copy textfile to clipboard:
```bash
sudo apt-get install xclip
cat board.json | xclip -se c
```
Then paste to webbrowser Wekan Add Board / Import / From previous export.
You can [save all MongoDB database content as JSON files](Export-from-Wekan-Sandstorm-grain-.zip-file). Files are base64 encoded in JSON files.
Export board to Wekan JSON, and import as Wekan JSON can make some part of board to load, but you should check is some data missing.
With Wekan Snap, you can use [nosqlbooster GUI](https://nosqlbooster.com/downloads) to login through SSH to Wekan server localhost port 27019 and browse data.
You could use [daff](https://github.com/paulfitz/daff) to compare tables.
## Using Snap Mongo commands on your bash CLI
Add to your `~/.bashrc`
```bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan/current/bin"
```
Then you can backup:
```bash
mongodump --port 27019
```
And restore:
```bash
mongorestore --drop --port 27019
```
## MongoDB shell on Wekan Snap
mongoshell.sh
```bash
#/bin/bash
export LC_ALL=C
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
mongo=$"/snap/wekan/$version/bin/mongo"
$mongo --port 27019
```
***
# Snap backup-restore v2
Originally from https://github.com/wekan/wekan-snap/issues/62#issuecomment-470622601
## Backup
wekan-backup.sh
```bash
#!/bin/bash
export LC_ALL=C
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
now=$(date +"%Y%m%d-%H%M%S")
parent_dir="/data/backups/wekan"
backup_dir="${parent_dir}/${now}"
log_file="${parent_dir}/backup-progress.log.${now}"
error () {
printf "%s: %s\n" "$(basename "${BASH_SOURCE}")" "${1}" >&2
exit 1
}
trap 'error "An unexpected error occurred."' ERR
take_backup () {
mkdir -p "${backup_dir}"
cd "${backup_dir}"
/snap/wekan/$version/bin/mongodump --quiet --port 27019
cd ..
tar -zcf "${now}.tar.gz" "${now}"
rm -rf "${now}"
}
printf "\n======================================================================="
printf "\nWekan Backup"
printf "\n======================================================================="
printf "\nBackup in progress..."
take_backup 2> "${log_file}"
if [[ -s "${log_file}" ]]
then
printf "\nBackup failure! Check ${log_file} for more information."
printf "\n=======================================================================\n\n"
else
rm "${log_file}"
printf "...SUCCESS!\n"
printf "Backup created at ${backup_dir}.tar.gz"
printf "\n=======================================================================\n\n"
fi
```
wekan-restore.sh
```bash
#!/bin/bash
export LC_ALL=C
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
makesRestore()
{
file=$1
ext=$"$(basename $file)"
parentDir=$"${file:0:${#file}-${#ext}}"
cd "${parentDir}"
printf "\nMakes the untar of the archive.\n"
tar -zxvf "${file}"
file="${file:0:${#file}-7}"
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
restore=$"/snap/wekan/${version}/bin/mongorestore"
printf "\nThe database restore is in progress.\n\n"
## Only if you get errors about existing indexes, use this below instead:
## $restore --quiet --drop --noIndexRestore -d wekan --port 27019 "${file}/dump/wekan"
$restore --quiet --drop -d wekan --port 27019 "${file}/dump/wekan"
rm -rf "${file}"
printf "\nRestore done.\n"
}
makesRestore $1
```
***
# Snap backup-restore v1
## Backup script for MongoDB Data, if running Snap MongoDB at port 27019
```bash
#!/bin/bash
makeDump()
{
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Prepares.
now=$(date +'%Y-%m-%d_%H.%M.%S')
mkdir -p /var/backups/wekan/$version-$now
# Targets the dump file.
dump=$"/snap/wekan/$version/bin/mongodump"
# Makes the backup.
cd /var/backups/wekan/$version-$now
printf "\nThe database backup is in progress.\n\n"
$dump --port 27019
# Makes the tar.gz file.
cd ..
printf "\nMakes the tar.gz file.\n"
tar -zcvf $version-$now.tar.gz $version-$now
# Cleanups
rm -rf $version-$now
# End.
printf "\nBackup done.\n"
echo "Backup is archived to .tar.gz file at /var/backups/wekan/${version}-${now}.tar.gz"
}
# Checks is the user is sudo/root
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Starts
makeDump
```
## Restore script for MongoDB Data, if running Snap MongoDB at port 27019 with a tar.gz archive.
```bash
#!/bin/bash
makesRestore()
{
# Prepares the folder used for the backup.
file=$1
if [[ "$file" != *tar.gz* ]]
then
echo "The backup archive must be a tar.gz."
exit -1
fi
# Goes into the parent directory.
ext=$"$(basename $file)"
parentDir=$"${file:0:${#file}-${#ext}}"
cd $parentDir
# Untar the archive.
printf "\nMakes the untar of the archive.\n"
tar -zxvf $file
file="${file:0:${#file}-7}"
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Targets the dump file.
restore=$"/snap/wekan/$version/bin/mongorestore"
# Restores.
printf "\nThe database restore is in progress.\n\n"
## Only if you get errors about existing indexes, use this below instead:
## $restore --drop --noIndexRestore wekan --port 27019 $file/dump/wekan
$restore --drop wekan --port 27019 $file/dump/wekan
printf "\nRestore done.\n"
# Cleanups
rm -rf $file
}
# Checks is the user is sudo/root.
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Start.
makesRestore $1
```
## Docker Backup and Restore
[Docker Backup and Restore](Export-Docker-Mongo-Data)
[Wekan Docker Upgrade](https://github.com/wekan/wekan-mongodb#backup-before-upgrading)
## Snap Backup
[Snap Backup and Restore](https://github.com/wekan/wekan-snap/wiki/Backup-and-restore)
[Wekan Snap upgrade](https://github.com/wekan/wekan-snap/wiki/Install#5-install-all-snap-updates-automatically-between-0200am-and-0400am)
## Sandstorm Backup
Download Wekan grain with arrow down download button to .zip file. You can restore it later.
[Export data from Wekan Sandstorm grain .zip file](Export-from-Wekan-Sandstorm-grain-.zip-file)
## <a name="cloudron">Cloudron
If those [Backup](Backup) ways are not easily found at [Cloudron](Cloudron), one way is to install [Redash](https://redash.io/) and then backup this way:
Redash works with this kind of queries:
```json
{
"collection": "accountSettings",
"query": {
"type": 1
},
"fields": {
"_id": 1,
"booleanValue": 1,
"createdAt": 1,
"modifiedAt": 1,
}
}
```
So:
1) Create this kind of query:
```json
{
"collection": "boards"
}
```
Later when you modify query, you can remove text like boards with double-click-with-mouse and delete-key-at-keyboard (or select characters with mouse and delete-key-at-keyboard), and then click collection/table >> button to insert name of next collection/table.
2) Click Save
3) Click Execute. This will cache query for use with REST API.
4) Click at right top `[...]` => `Show API key`
It looks like this:
https://redash.example.com/api/queries/1/results.json?api_key=...
5) Only when saving first collection/table, Save API key to text file script like this `dl.sh`
```bash
#!/bin/bash
# Example: ./dl.sh boards
export APIKEY=https://redash.example.com/api/queries/1/results.json?api_key=...
curl -o $1.json $APIKEY
```
6) Run save script like:
```bash
./dl.sh boards
```
Note: 1) Save 2) Execute => webbrowser can give this kind of timeout,
but downloading with API script still works:
> wekan
> Error running query: failed communicating with server. Please check your Internet connection and try again.
7) Repeat steps 1-4 and 6 for every collection/table like boards,cards, etc
8) Remove from downloaded .json files extra query related data, so that it is similar like [any other Wekan database backup JSON files](Export-from-Wekan-Sandstorm-grain-.zip-file)
9) Insert data to some other Wekan install with nosqlbooster like mentioned at page [Backup](Backup)
@@ -0,0 +1,71 @@
If you know updates to this, please add new issue about it. Make changes to this page by cloning wiki:
```
git clone https://github.com/wekan/wekan.wiki
```
There edit Browser-compatibility-matrix.md and attach it with .txt extension or in .zip file to https://github.com/wekan/wekan/wiki/issues
## Webkit based
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Safari | iOS Yes | iOS Newest | Newest | iOS, macOS
## Firefox based
Any telemetry at any Firefox based browser can be additionally most locked down with arkenfox user JS.
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
[Mypal](https://releases.wekan.team/mypal/) | No | No | Newest | For 32bit ReactOS/WinXP/Win7/etc [issue](https://github.com/wekan/wekan/issues/3132), Other 32bit browsers probably not
Firefox | Android Yes | Android Newest | Newest | Win/Mac/Linux/RasPi
Morph Browser | No | Yes | Yes | [Ubuntu Touch](https://ubports.com) (based on Ubuntu 16.04) on PinePhone, OnePlus 3, [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/) (not RasPi4 yet). Works best with bluetooth or USB mouse and keyboard.
[OpenStore App](https://open-store.io/app/wekan.wekanteam) | Yes | Yes | Yes | Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), [Ubuntu Touch](https://ubports.com) app at [OpenStore](https://open-store.io/app/wekan.wekanteam) using Morph browser with Wekan demo & development server https://boards.wekan.team . Tested on [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/). PWA URL is configured here https://github.com/wekan/wekan-openstore/blob/master/wekan.desktop#L3
[Waterfox](https://www.waterfox.net) | No | No | Yes | Win/Mac/Linux, more private than Firefox, no tracking
[Floorp](https://floorp.app) | No | No | Yes | [Win/Mac/Linux](https://github.com/Floorp-Projects/Floorp/releases), more private than Firefox, [Repo](https://github.com/Floorp-Projects/Floorp)
[Mercury](https://thorium.rocks/mercury) | No | No | Yes | [Win/Linux](https://github.com/Alex313031/Mercury/releases), more private than Firefox, [Repo](https://github.com/Alex313031/Mercury)
[SeaLion](https://github.com/wicknix/SeaLion) | No | No | Yes | [MacOS 10.7-14.1 x32,x64,ppc,ppc64/Linux x64](https://github.com/wicknix/SeaLion/releases), [Repo](https://github.com/wicknix/SeaLion)
## Chromium based
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Chrome | Android Yes | Android Newest | Newest | Win/Mac/Linux
Chromium | Android Yes | Android Newest | Newest | Win/Mac/Linux/RasPi
Vivaldi | Android Yes | Android Newest | Newest | Win/Mac/Linux
Opera | Android Yes | Android Newest | Newest | Win/Mac/Linux
Credge, Chromium Edge | Android Yes | Android | Newest | Win/Mac/Linux/Mobile
[Microsoft Store App](https://www.microsoft.com/fi-fi/p/wekan/9p2mrxvd087r#activetab=pivot:overviewtab) | Yes | Yes | Yes | At Microsoft Store of Windows 10/11 desktop, made with [PWABuilder](https://www.pwabuilder.com/). Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), changed app from EdgeHTML to Credge based with Wekan demo & development server https://boards.wekan.team
[Android Play Store App](https://play.google.com/store/apps/details?id=team.wekan.boards.twa) | Yes | Yes | Yes | Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), made with [PWABuilder](https://www.pwabuilder.com/), uses Android Chrome browser with Wekan demo & development server https://boards.wekan.team
[Thorium](https://thorium.rocks) | No | Yes | Yes | [Win/Win7/Mac/Linux/Android/RasPi](https://thorium.rocks), speed optimized
[Supermium](https://github.com/win32ss/supermium) | No | No | Yes | 32bit: Windows XP, Windows 2003
## EdgeHTML based
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Legacy Edge | No | No | Not | Not compatible with newest WeKan. Worked with Wekan v4.19 and before.
## MSHTML based
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Internet Explorer | No | No | No | No | No
## Other ways to create Mobile App with Meteor
https://guide.meteor.com/cordova
Benefits:
- Can be faster, more stored at mobile
- Native features integration possibilities
## Desktop app with Meteor
https://forums.meteor.com/t/desktop-electron-meteor-app-with-todesktop/60904
## Optional Payments
- If there is sometime a need to develop payment feature, that does not exist yet
- https://forums.meteor.com/t/need-help-adding-in-app-purchases-to-a-meteor-app-specifically-adding-subscription-support-for-android-play-store/40510
- https://www.npmjs.com/package/cordova-plugin-purchase
@@ -0,0 +1,7 @@
[Discussion](https://github.com/wekan/wekan/discussions/4282)
WeKan Python Burndown Chart:
- [Original](https://github.com/Gelmes/Wekan-Python-Burndown)
- [WeKan fork](https://github.com/wekan/Wekan-Python-Burndown)
[WeKan Burndown Chart Chrome extension](https://chrome.google.com/webstore/detail/burndown-for-wekan/agdbocbobcbelnekjibocbilodjgopgh?)
Loaded 100 of 582 files, more files were not shown because too many files have changed in this diff. Show more