Commit Graph
52 Commits
Author SHA1 Message Date
Lauri Ojansivu c0a1a27847 Import: always create virtual users, map later from the sidebar; bound imports
Board import no longer asks for member mapping up front. Every imported member is
brought in as a virtual (placeholder) user carrying its avatar, username and full
name (the existing createPlaceholderUsers path), added to the board inactive with
no permissions. The client import flow is now a single step that imports
immediately with an empty mapping -- no map-members screen, nothing to get stuck
on.

Mapping a virtual member to an existing user is a deliberate, later action done by
a board admin from the board sidebar member-avatar popup ("Map to existing user"),
and CANNOT be used to gain privileges: the new board-scoped method
mapImportedBoardMember only maps a virtual member onto an existing ACTIVE, REAL
member of the SAME board and never changes that member's role (so no new
membership is created and nothing is escalated); authorization and this guarantee
live in the pure planBoardMemberMapping helper. The mapping reassigns the virtual
member's cards/comments/activities ON THAT BOARD to the target and removes the
placeholder from the board.

Automatic hang mitigation so an import can never spin forever: a client watchdog
surfaces an import-timeout and clears the spinner if importBoard does not answer in
WEKAN_IMPORT_TIMEOUT_MS (default 2 min), and the server bounds creator.create with
the same deadline via a new generic withDeadline() wrapper.

Covered by tests/boardMemberMapPlan.test.cjs (no-escalation + auth matrix),
tests/withDeadline.test.cjs (deadline wrapper) and tests/importVirtualMembers.test.cjs
(wiring).

Thanks to xet7 !
2026-07-21 19:43:48 +03:00
Lauri Ojansivu 5b697f983b Fix test failures from this session's changes
- models/fileValidation.js: a stray BOM (U+FEFF) inside the looksLikeDangerousMarkup
  regex character class broke the server test build with a Babel 'Unexpected token'
  syntax error, so Mocha ran 0 tests. JS \s already matches U+FEFF, so the explicit
  BOM was redundant; use plain \s*.
- models/import.js: importBoard awaited assertImportEnabled() BEFORE the switch that
  check()s the "board" argument. Meteor's audit-argument-checks tracks checks on the
  async context, so awaiting first made the later check(board) not count, throwing
  'Did not check() all arguments during call to importBoard' -- which broke the WeKan
  JSON import (#21) and Excel import (#25) Playwright tests. Check "board" up front
  (Match.OneOf(Object, Array)) before the await; the per-source switch still does its
  specific check.
- server/publications/activities.js: move the disableActivities gate to AFTER the
  check() calls so the argument-checks audit is satisfied when the toggle is on
  (latent: it would have thrown 'did not check all arguments' with activities off).
2026-07-14 19:00:35 +03:00
Lauri Ojansivu 06fdede782 Admin Panel / Features / Security: import/export privacy controls
Six new optional toggles (all default off) governing how boards and user data
cross the WeKan boundary, enforced server-side so they cannot be bypassed from
the client:

- Disable all import / Disable all export: master switches that turn off every
  import/export feature. importBoard and cloneBoard call assertImportEnabled;
  every Exporter build()/buildStream() call assertExportEnabled. The import and
  export menu options are hidden in the UI via global importDisabled/exportDisabled
  Blaze helpers.
- Disable import avatars / Disable export avatars: never carry avatars into/out of
  WeKan. Import is gated at the single localizeAvatarFromBuffer choke point (covers
  WeKan JSON import, LDAP, OIDC/OAuth2 login sync and board-open localization) plus
  Trello inlineMemberAvatars; export skips the base64 avatar embed + avatarUrl in
  both Exporter paths.
- Anonymize import users / Anonymize export users: replace username/fullname/initials
  with counter placeholders (user1, user2, ...), drop avatars, and rewrite @username
  mentions + requestedBy/assignedBy in card/comment text. The placeholder word "user"
  is translated to the current user language. Export covers both build() and the
  streaming buildStream() (which does an id-only pre-scan so mentions streamed before
  the users array resolve to matching labels); import scrubs the incoming board in
  WekanCreator before any placeholder user or card is created.

New shared server helper models/lib/importExportSecurity.js holds the settings
read, guards, anonymization map builder and text rewriter. Adds settings
disableAllImport, disableAllExport, disableImportAvatars, disableExportAvatars,
anonymizeImportUsers, anonymizeExportUsers, published in the public setting.
2026-07-14 13:53:11 +03:00
Lauri Ojansivu f0bce67a3b More Import Export and Rules features.
Thanks to xet7 and Claude !
2026-06-15 04:07:33 +03:00
Lauri Ojansivu 357de728c0 Fix [CloneBleed](https://wekan.fi/hall-of-fame/clonebleed/) and other security issues. Added more security tests to test suite.
Thanks to dizconnectz for the coordinated disclosure, and Claude.
2026-06-05 21:40:24 +03:00
Harry Adel 63ce45c538 Split shared models from Meteor 3 server runtime 2026-03-24 01:50:39 +02:00
Harry Adel 620e5ce9dc Meteor 3.4 migration: Convert remaining sync methods to async
Convert all remaining Meteor.methods with sync collection calls:
- users.js: deleteWorkspace → async with findOneAsync/updateAsync
- userPositionHistory.js: 3 methods → async with insertAsync/fetchAsync
- attachmentStorageSettings.js: 4 methods → findOneAsync/insertAsync/upsertAsync
- org.js, team.js, translation.js: insert → insertAsync
- boards.js: acceptInvite + collection hooks → updateAsync
- settings.js: sendInvitation → updateAsync/insertAsync
- import.js: importBoard/cloneBoard → async with await creator.create()
- attachments.js: onAfterUpload → async with findOneAsync/updateAsync
2026-03-22 17:50:31 +02:00
Daniel Eder a3cd1b89ff Fix missing member assignments when cloning board 2020-12-09 15:02:50 +02:00
Lauri Ojansivu f4fdb94a3f Fix Clone Board.
Thanks to e-gaulue and xet7 !

Fixes #3326
2020-11-02 16:25:01 +02:00
Bryan Mutai a570c4a861 add: export board/cards/lists to CSV/TSV 2020-05-10 23:58:15 +03:00
Bryan Mutai 1742bcd9b1 add: import board/cards/lists using CSV/TSV 2020-05-07 01:31:59 +03:00
Justin Reynolds 3eb4d2c341 Prettier & eslint project style update 2019-06-28 12:56:51 -05:00
Lauri Ojansivu 0f15b6d198 - Add Duplicate Board tooltip, and remove adding text "Copy" to duplicated board.
Thanks to xet7 !
2019-04-06 13:47:15 +03:00
Lauri Ojansivu ebfc8e5a1b Fix lint errors.
Thanks to xet7 !
2019-04-06 09:00:13 +03:00
Lauri Ojansivu 56cccc6781 Merge remote-tracking branch 'Angtrim/feature-duplicate' into edge 2019-04-06 08:46:40 +03:00
Angelo Gallarello 48216e1653 Minor fixes 2019-04-05 10:38:39 +02:00
Benjamin Tissoires 35ffd02814 Fix import error 500
while running an import from a previously exported board, we encounter
the following error:

Exception while invoking method 'importBoard' Error: Did not check() all arguments during call to 'importBoard'
    at ArgumentChecker.throwUnlessAllArgumentsHaveBeenChecked (packages/check.js:483:13)
    at Object._failIfArgumentsAreNotAllChecked (packages/check.js:131:16)
    at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1765:18)
    at DDP._CurrentMethodInvocation.withValue (packages/ddp-server/livedata_server.js:719:19)
    at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1186:15)
    at DDPServer._CurrentWriteFence.withValue (packages/ddp-server/livedata_server.js:717:46)
    at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1186:15)
    at Promise (packages/ddp-server/livedata_server.js:715:46)
    at new Promise (<anonymous>)
    at Session.method (packages/ddp-server/livedata_server.js:689:23)
    at packages/mdg_meteor-apm-agent.js:2617:38
    at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1186:15)
    at Session.sessionProto.protocol_handlers.method (packages/mdg_meteor-apm-agent.js:2616:44)
    at packages/ddp-server/livedata_server.js:559:43

Commit 4cf9813449 removed the checks as the original board might
not have all the required fields, but we actually still need to run
a general check on all parameters
2019-03-11 11:42:05 +01:00
Angelo Gallarello 477d71e0b9 Fixes 2019-02-12 23:40:12 +01:00
Lauri Ojansivu 4cf9813449 - Some fixes to Wekan import:
- isCommentOnly and isNoComments are now optional
  - Turn off import error checking, so something is imported anyway, and import does not stop at error.
  - Now most of Sandstorm export do import to Standalone Wekan, but some of imported cards, dates etc are missing.
  - Sandstorm Import Wekan board warning messages are now translateable.

Thanks to xet7 !

Closes #1945,
closes #1616,
closes #1903
2018-11-08 22:49:08 +02:00
Ghassen Rjab d2b1a837e6 Import boards in Sandstorm 2017-07-24 23:56:51 +01:00
Ghassen Rjab 3f4c285551 Add import Wekan board feature 2017-07-08 13:23:33 +01:00
Ghassen Rjab aff4655134 Update import from Trello feature
Add importing the due date of a card
2017-06-23 17:58:13 +01:00
Ghassen Rjab 8b6b065462 Fix importing Trello board
Attribute correct members to their comments
2017-06-22 22:09:40 +01:00
Lauri Ojansivu dc8c59dcbe isCommentOnly false fix for Trello import. Thanks to rhelsing ! 2017-04-25 23:12:10 +03:00
Raoul Snyman bc9e093e07 Fix up some linting issues 2017-03-05 13:08:53 -07:00
Raoul Snyman 4414582a35 Close #873 by importing checklists from Trello 2017-03-05 12:56:07 -07:00
Maxime Quandalle 90601eacae Upgrade ESLint to v2
This commit also tweak the code style following backward-incompatible v2 rules.
2016-03-17 16:26:14 +01:00
Maxime Quandalle a13fad749e Change the board import layout from a popup to a full page
This commit also removes the “import a single Trello card” as we couldn’t figure
out some reasonable use case.

We also create a new publication on the server to provide the minimal user
profile informations required to display an avatar.
2016-01-31 20:03:12 +01:00
Xavier Priour 32698bcc98 Fix code style 2015-12-02 20:37:12 +01:00
Xavier Priour f639bada5c Import trello: map card author and board admins 2015-12-02 12:37:51 +01:00
Xavier Priour 2057764801 Import trello: map comment author 2015-12-02 11:28:32 +01:00
Xavier Priour 82c59fb85f Fix #417: exception when importing older boards (missing creationDate) 2015-12-02 09:52:30 +01:00
Xavier Priour 33193b6f7b code review fixes 2015-11-17 08:52:55 +01:00
Xavier Priour ad27a59e57 Import attachments 2015-11-16 21:41:49 +01:00
Xavier Priour dd0a6e1a82 Import members: board import 2015-11-14 01:41:02 +01:00
Xavier Priour f6f41270de Import members: working on card import 2015-11-13 15:52:14 +01:00
Maxime Quandalle 7a5f030cc8 Merge branch 'xavierpriour-devel' into devel
Conflicts:
	models/import.js
2015-10-20 20:06:26 +02:00
Maxime Quandalle 118b434a5a Provide a default date for lists and cards creation date
See https://github.com/wekan/wekan/pull/362#issuecomment-149645497
for motivation.

This commit also contains cosmetic changes to the import Popup and
on the code style to be more consistent with the code base.
2015-10-20 20:02:12 +02:00
Xavier Priour 8e0ad91191 Import board: map team permission, and refactor code to share with card import 2015-10-19 20:14:29 +02:00
Xavier Priour ec304de811 Import board: check json structure before importing 2015-10-19 12:41:56 +02:00
Xavier Priour 456674f111 Import board: set proper color and modifiedAt dates 2015-10-19 11:46:04 +02:00
Xavier Priour 4540bd36c4 Import board: import comments and log activities 2015-10-19 00:59:50 +02:00
Xavier Priour 469d47cd9f Import board: create board, lists, and cards 2015-10-18 01:02:44 +02:00
Xavier Priour 595d5f97ac Import board: now proper createdAt dates 2015-10-17 19:29:25 +02:00
Xavier Priour 468694a84c Import board: added UI 2015-10-17 18:00:46 +02:00
Maxime Quandalle 6dedf673d5 Prevent duplicate board labels
43de3b8 did prevent empty labels with the same color, but we also want
to prevent label with the same non-empty name and same color because
the rationale is identical.
2015-10-16 17:49:25 +02:00
Maxime Quandalle 944a1065d3 Add some ESLint rules and fix some related issues 2015-10-14 23:50:12 +02:00
Xavier Priour b670a1ab36 Import single card: proper error handling 2015-10-14 23:23:17 +02:00
Xavier Priour 7d57ce896b Import single card: create an 'importCard' activity entry 2015-10-14 23:23:16 +02:00
Xavier Priour 4b99ce2aa2 Import single card: check user authorized 2015-10-14 23:23:16 +02:00