@crowi/api 2.0.0-alpha.1 → 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hono/handlers/activation.d.ts +3 -3
- package/dist/hono/handlers/admin/users.d.ts +118 -0
- package/dist/hono/handlers/admin/users.js +28 -0
- package/dist/hono/handlers/admin/users.js.map +1 -1
- package/dist/hono/handlers/app.d.ts +1 -0
- package/dist/hono/handlers/app.js +11 -0
- package/dist/hono/handlers/app.js.map +1 -1
- package/dist/hono/handlers/attachment-stream.js +23 -0
- package/dist/hono/handlers/attachment-stream.js.map +1 -1
- package/dist/hono/handlers/draft.js +10 -0
- package/dist/hono/handlers/draft.js.map +1 -1
- package/dist/hono/handlers/emailChange.d.ts +4 -4
- package/dist/hono/handlers/inviteAccept.d.ts +6 -6
- package/dist/hono/handlers/page.d.ts +251 -0
- package/dist/hono/handlers/page.js +123 -6
- package/dist/hono/handlers/page.js.map +1 -1
- package/dist/hono/handlers/passwordReset.d.ts +5 -5
- package/dist/hono/handlers/tokenAuth.d.ts +7 -7
- package/dist/mcp/result.d.ts +42 -16
- package/dist/mcp/result.js +56 -10
- package/dist/mcp/result.js.map +1 -1
- package/dist/mcp/tools/page.js +21 -1
- package/dist/mcp/tools/page.js.map +1 -1
- package/dist/mcp/tools/search.d.ts +12 -0
- package/dist/mcp/tools/search.js +21 -5
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/migration/helpers.d.ts +13 -0
- package/dist/migration/helpers.js +29 -0
- package/dist/migration/helpers.js.map +1 -0
- package/dist/migration/migrations/files-url-to-attachments.d.ts +35 -0
- package/dist/migration/migrations/files-url-to-attachments.js +291 -0
- package/dist/migration/migrations/files-url-to-attachments.js.map +1 -0
- package/dist/migration/migrations/index.js +4 -0
- package/dist/migration/migrations/index.js.map +1 -1
- package/dist/migration/migrations/published-current-revision.d.ts +47 -0
- package/dist/migration/migrations/published-current-revision.js +90 -0
- package/dist/migration/migrations/published-current-revision.js.map +1 -0
- package/dist/migration/migrations/wikilink-format.d.ts +0 -11
- package/dist/migration/migrations/wikilink-format.js +5 -156
- package/dist/migration/migrations/wikilink-format.js.map +1 -1
- package/dist/migration/migrations/wikilink-html-recover.d.ts +116 -0
- package/dist/migration/migrations/wikilink-html-recover.js +314 -0
- package/dist/migration/migrations/wikilink-html-recover.js.map +1 -0
- package/dist/models/page.d.ts +3 -0
- package/dist/models/page.js +31 -0
- package/dist/models/page.js.map +1 -1
- package/dist/models/user.d.ts +1 -0
- package/dist/models/user.js +40 -21
- package/dist/models/user.js.map +1 -1
- package/dist/renderer/core/headings.d.ts +12 -1
- package/dist/renderer/core/headings.js +48 -8
- package/dist/renderer/core/headings.js.map +1 -1
- package/dist/renderer/pipeline.d.ts +6 -0
- package/dist/renderer/pipeline.js.map +1 -1
- package/dist/util/page-response.js +19 -2
- package/dist/util/page-response.js.map +1 -1
- package/package.json +12 -6
- package/views/mail/layout.mjml +7 -5
- package/dist/common/functions/path2name.d.ts +0 -1
- package/dist/common/functions/path2name.js +0 -22
- package/dist/common/functions/path2name.js.map +0 -1
- package/dist/common/functions/renderIcon.d.ts +0 -1
- package/dist/common/functions/renderIcon.js +0 -9
- package/dist/common/functions/renderIcon.js.map +0 -1
- package/dist/controllers/admin.d.ts +0 -3
- package/dist/controllers/admin.js +0 -474
- package/dist/controllers/admin.js.map +0 -1
- package/dist/controllers/attachment.d.ts +0 -4
- package/dist/controllers/attachment.js +0 -200
- package/dist/controllers/attachment.js.map +0 -1
- package/dist/controllers/backlink.d.ts +0 -3
- package/dist/controllers/backlink.js +0 -42
- package/dist/controllers/backlink.js.map +0 -1
- package/dist/controllers/bookmark.d.ts +0 -3
- package/dist/controllers/bookmark.js +0 -100
- package/dist/controllers/bookmark.js.map +0 -1
- package/dist/controllers/comment.d.ts +0 -3
- package/dist/controllers/comment.js +0 -111
- package/dist/controllers/comment.js.map +0 -1
- package/dist/controllers/index.d.ts +0 -25
- package/dist/controllers/index.js +0 -44
- package/dist/controllers/index.js.map +0 -1
- package/dist/controllers/installer.d.ts +0 -3
- package/dist/controllers/installer.js +0 -48
- package/dist/controllers/installer.js.map +0 -1
- package/dist/controllers/login.d.ts +0 -4
- package/dist/controllers/login.js +0 -438
- package/dist/controllers/login.js.map +0 -1
- package/dist/controllers/logout.d.ts +0 -5
- package/dist/controllers/logout.js +0 -11
- package/dist/controllers/logout.js.map +0 -1
- package/dist/controllers/me.d.ts +0 -4
- package/dist/controllers/me.js +0 -369
- package/dist/controllers/me.js.map +0 -1
- package/dist/controllers/notification.d.ts +0 -3
- package/dist/controllers/notification.js +0 -88
- package/dist/controllers/notification.js.map +0 -1
- package/dist/controllers/page.d.ts +0 -3
- package/dist/controllers/page.js +0 -881
- package/dist/controllers/page.js.map +0 -1
- package/dist/controllers/revision.d.ts +0 -3
- package/dist/controllers/revision.js +0 -91
- package/dist/controllers/revision.js.map +0 -1
- package/dist/controllers/search.d.ts +0 -3
- package/dist/controllers/search.js +0 -93
- package/dist/controllers/search.js.map +0 -1
- package/dist/controllers/share.d.ts +0 -3
- package/dist/controllers/share.js +0 -207
- package/dist/controllers/share.js.map +0 -1
- package/dist/controllers/shareAccess.d.ts +0 -3
- package/dist/controllers/shareAccess.js +0 -28
- package/dist/controllers/shareAccess.js.map +0 -1
- package/dist/controllers/slack.d.ts +0 -3
- package/dist/controllers/slack.js +0 -87
- package/dist/controllers/slack.js.map +0 -1
- package/dist/controllers/tokenAuth.d.ts +0 -10
- package/dist/controllers/tokenAuth.js +0 -292
- package/dist/controllers/tokenAuth.js.map +0 -1
- package/dist/controllers/user.d.ts +0 -3
- package/dist/controllers/user.js +0 -67
- package/dist/controllers/user.js.map +0 -1
- package/dist/controllers/version.d.ts +0 -4
- package/dist/controllers/version.js +0 -19
- package/dist/controllers/version.js.map +0 -1
- package/dist/crowi/express-init.d.ts +0 -4
- package/dist/crowi/express-init.js +0 -101
- package/dist/crowi/express-init.js.map +0 -1
- package/dist/form/admin/app.d.ts +0 -2
- package/dist/form/admin/app.js +0 -9
- package/dist/form/admin/app.js.map +0 -1
- package/dist/form/admin/auth.d.ts +0 -2
- package/dist/form/admin/auth.js +0 -9
- package/dist/form/admin/auth.js.map +0 -1
- package/dist/form/admin/aws.d.ts +0 -2
- package/dist/form/admin/aws.js +0 -13
- package/dist/form/admin/aws.js.map +0 -1
- package/dist/form/admin/github.d.ts +0 -2
- package/dist/form/admin/github.js +0 -15
- package/dist/form/admin/github.js.map +0 -1
- package/dist/form/admin/google.d.ts +0 -2
- package/dist/form/admin/google.js +0 -13
- package/dist/form/admin/google.js.map +0 -1
- package/dist/form/admin/mail.d.ts +0 -2
- package/dist/form/admin/mail.js +0 -13
- package/dist/form/admin/mail.js.map +0 -1
- package/dist/form/admin/sec.d.ts +0 -2
- package/dist/form/admin/sec.js +0 -10
- package/dist/form/admin/sec.js.map +0 -1
- package/dist/form/admin/slackSetting.d.ts +0 -2
- package/dist/form/admin/slackSetting.js +0 -13
- package/dist/form/admin/slackSetting.js.map +0 -1
- package/dist/form/admin/userEdit.d.ts +0 -2
- package/dist/form/admin/userEdit.js +0 -9
- package/dist/form/admin/userEdit.js.map +0 -1
- package/dist/form/admin/userInvite.d.ts +0 -2
- package/dist/form/admin/userInvite.js +0 -9
- package/dist/form/admin/userInvite.js.map +0 -1
- package/dist/form/comment.d.ts +0 -2
- package/dist/form/comment.js +0 -9
- package/dist/form/comment.js.map +0 -1
- package/dist/form/index.d.ts +0 -25
- package/dist/form/index.js +0 -48
- package/dist/form/index.js.map +0 -1
- package/dist/form/invited.d.ts +0 -2
- package/dist/form/invited.js +0 -13
- package/dist/form/invited.js.map +0 -1
- package/dist/form/login.d.ts +0 -2
- package/dist/form/login.js +0 -11
- package/dist/form/login.js.map +0 -1
- package/dist/form/me/apiToken.d.ts +0 -2
- package/dist/form/me/apiToken.js +0 -9
- package/dist/form/me/apiToken.js.map +0 -1
- package/dist/form/me/password.d.ts +0 -2
- package/dist/form/me/password.js +0 -11
- package/dist/form/me/password.js.map +0 -1
- package/dist/form/me/user.d.ts +0 -2
- package/dist/form/me/user.js +0 -9
- package/dist/form/me/user.js.map +0 -1
- package/dist/form/register.d.ts +0 -2
- package/dist/form/register.js +0 -13
- package/dist/form/register.js.map +0 -1
- package/dist/form/revision.d.ts +0 -2
- package/dist/form/revision.js +0 -13
- package/dist/form/revision.js.map +0 -1
- package/dist/hono/handlers/admin/share.d.ts +0 -106
- package/dist/hono/handlers/admin/share.js +0 -55
- package/dist/hono/handlers/admin/share.js.map +0 -1
- package/dist/middlewares/accessTokenParser.d.ts +0 -4
- package/dist/middlewares/accessTokenParser.js +0 -29
- package/dist/middlewares/accessTokenParser.js.map +0 -1
- package/dist/middlewares/adminRequired.d.ts +0 -10
- package/dist/middlewares/adminRequired.js +0 -35
- package/dist/middlewares/adminRequired.js.map +0 -1
- package/dist/middlewares/applicationInstalled.d.ts +0 -3
- package/dist/middlewares/applicationInstalled.js +0 -20
- package/dist/middlewares/applicationInstalled.js.map +0 -1
- package/dist/middlewares/applicationNotInstalled.d.ts +0 -3
- package/dist/middlewares/applicationNotInstalled.js +0 -13
- package/dist/middlewares/applicationNotInstalled.js.map +0 -1
- package/dist/middlewares/basicAuth.d.ts +0 -4
- package/dist/middlewares/basicAuth.js +0 -23
- package/dist/middlewares/basicAuth.js.map +0 -1
- package/dist/middlewares/csrfVerify.d.ts +0 -4
- package/dist/middlewares/csrfVerify.js +0 -24
- package/dist/middlewares/csrfVerify.js.map +0 -1
- package/dist/middlewares/encodeSpace.d.ts +0 -3
- package/dist/middlewares/encodeSpace.js +0 -14
- package/dist/middlewares/encodeSpace.js.map +0 -1
- package/dist/middlewares/fileAccessRightOrLoginRequired.d.ts +0 -4
- package/dist/middlewares/fileAccessRightOrLoginRequired.js +0 -29
- package/dist/middlewares/fileAccessRightOrLoginRequired.js.map +0 -1
- package/dist/middlewares/index.d.ts +0 -16
- package/dist/middlewares/index.js +0 -30
- package/dist/middlewares/index.js.map +0 -1
- package/dist/middlewares/jwtAdminRequired.d.ts +0 -8
- package/dist/middlewares/jwtAdminRequired.js +0 -35
- package/dist/middlewares/jwtAdminRequired.js.map +0 -1
- package/dist/middlewares/jwtAuth.d.ts +0 -4
- package/dist/middlewares/jwtAuth.js +0 -104
- package/dist/middlewares/jwtAuth.js.map +0 -1
- package/dist/middlewares/loginChecker.d.ts +0 -4
- package/dist/middlewares/loginChecker.js +0 -32
- package/dist/middlewares/loginChecker.js.map +0 -1
- package/dist/middlewares/loginRequired.d.ts +0 -4
- package/dist/middlewares/loginRequired.js +0 -88
- package/dist/middlewares/loginRequired.js.map +0 -1
- package/dist/routes/admin.d.ts +0 -4
- package/dist/routes/admin.js +0 -17
- package/dist/routes/admin.js.map +0 -1
- package/dist/routes/api/admin.d.ts +0 -4
- package/dist/routes/api/admin.js +0 -37
- package/dist/routes/api/admin.js.map +0 -1
- package/dist/routes/api/attachment.d.ts +0 -4
- package/dist/routes/api/attachment.js +0 -19
- package/dist/routes/api/attachment.js.map +0 -1
- package/dist/routes/api/bookmark.d.ts +0 -4
- package/dist/routes/api/bookmark.js +0 -15
- package/dist/routes/api/bookmark.js.map +0 -1
- package/dist/routes/api/comment.d.ts +0 -4
- package/dist/routes/api/comment.js +0 -14
- package/dist/routes/api/comment.js.map +0 -1
- package/dist/routes/api/index.d.ts +0 -4
- package/dist/routes/api/index.js +0 -36
- package/dist/routes/api/index.js.map +0 -1
- package/dist/routes/api/like.d.ts +0 -4
- package/dist/routes/api/like.js +0 -13
- package/dist/routes/api/like.js.map +0 -1
- package/dist/routes/api/notification.d.ts +0 -4
- package/dist/routes/api/notification.js +0 -15
- package/dist/routes/api/notification.js.map +0 -1
- package/dist/routes/api/page.d.ts +0 -4
- package/dist/routes/api/page.js +0 -24
- package/dist/routes/api/page.js.map +0 -1
- package/dist/routes/api/revision.d.ts +0 -4
- package/dist/routes/api/revision.js +0 -14
- package/dist/routes/api/revision.js.map +0 -1
- package/dist/routes/api/share.d.ts +0 -4
- package/dist/routes/api/share.js +0 -16
- package/dist/routes/api/share.js.map +0 -1
- package/dist/routes/api/version.d.ts +0 -4
- package/dist/routes/api/version.js +0 -10
- package/dist/routes/api/version.js.map +0 -1
- package/dist/routes/index.d.ts +0 -4
- package/dist/routes/index.js +0 -71
- package/dist/routes/index.js.map +0 -1
- package/dist/routes/login.d.ts +0 -4
- package/dist/routes/login.js +0 -18
- package/dist/routes/login.js.map +0 -1
- package/dist/routes/me.d.ts +0 -4
- package/dist/routes/me.js +0 -24
- package/dist/routes/me.js.map +0 -1
- package/dist/routes/ts-rest/admin/app.d.ts +0 -4
- package/dist/routes/ts-rest/admin/app.js +0 -67
- package/dist/routes/ts-rest/admin/app.js.map +0 -1
- package/dist/routes/ts-rest/admin/auth.d.ts +0 -4
- package/dist/routes/ts-rest/admin/auth.js +0 -95
- package/dist/routes/ts-rest/admin/auth.js.map +0 -1
- package/dist/routes/ts-rest/admin/index.d.ts +0 -10
- package/dist/routes/ts-rest/admin/index.js +0 -35
- package/dist/routes/ts-rest/admin/index.js.map +0 -1
- package/dist/routes/ts-rest/admin/mail.d.ts +0 -4
- package/dist/routes/ts-rest/admin/mail.js +0 -156
- package/dist/routes/ts-rest/admin/mail.js.map +0 -1
- package/dist/routes/ts-rest/admin/plugins.d.ts +0 -4
- package/dist/routes/ts-rest/admin/plugins.js +0 -317
- package/dist/routes/ts-rest/admin/plugins.js.map +0 -1
- package/dist/routes/ts-rest/admin/search.d.ts +0 -4
- package/dist/routes/ts-rest/admin/search.js +0 -67
- package/dist/routes/ts-rest/admin/search.js.map +0 -1
- package/dist/routes/ts-rest/admin/security.d.ts +0 -4
- package/dist/routes/ts-rest/admin/security.js +0 -114
- package/dist/routes/ts-rest/admin/security.js.map +0 -1
- package/dist/routes/ts-rest/admin/share.d.ts +0 -4
- package/dist/routes/ts-rest/admin/share.js +0 -69
- package/dist/routes/ts-rest/admin/share.js.map +0 -1
- package/dist/routes/ts-rest/admin/storage.d.ts +0 -4
- package/dist/routes/ts-rest/admin/storage.js +0 -59
- package/dist/routes/ts-rest/admin/storage.js.map +0 -1
- package/dist/routes/ts-rest/admin/users.d.ts +0 -4
- package/dist/routes/ts-rest/admin/users.js +0 -215
- package/dist/routes/ts-rest/admin/users.js.map +0 -1
- package/dist/routes/ts-rest/adminCrypto.d.ts +0 -4
- package/dist/routes/ts-rest/adminCrypto.js +0 -111
- package/dist/routes/ts-rest/adminCrypto.js.map +0 -1
- package/dist/routes/ts-rest/app.d.ts +0 -4
- package/dist/routes/ts-rest/app.js +0 -23
- package/dist/routes/ts-rest/app.js.map +0 -1
- package/dist/routes/ts-rest/attachment.d.ts +0 -4
- package/dist/routes/ts-rest/attachment.js +0 -830
- package/dist/routes/ts-rest/attachment.js.map +0 -1
- package/dist/routes/ts-rest/auth.d.ts +0 -4
- package/dist/routes/ts-rest/auth.js +0 -70
- package/dist/routes/ts-rest/auth.js.map +0 -1
- package/dist/routes/ts-rest/autocomplete.d.ts +0 -30
- package/dist/routes/ts-rest/autocomplete.js +0 -189
- package/dist/routes/ts-rest/autocomplete.js.map +0 -1
- package/dist/routes/ts-rest/backlink.d.ts +0 -4
- package/dist/routes/ts-rest/backlink.js +0 -106
- package/dist/routes/ts-rest/backlink.js.map +0 -1
- package/dist/routes/ts-rest/bookmark.d.ts +0 -4
- package/dist/routes/ts-rest/bookmark.js +0 -189
- package/dist/routes/ts-rest/bookmark.js.map +0 -1
- package/dist/routes/ts-rest/comment.d.ts +0 -4
- package/dist/routes/ts-rest/comment.js +0 -217
- package/dist/routes/ts-rest/comment.js.map +0 -1
- package/dist/routes/ts-rest/draft.d.ts +0 -22
- package/dist/routes/ts-rest/draft.js +0 -200
- package/dist/routes/ts-rest/draft.js.map +0 -1
- package/dist/routes/ts-rest/index.d.ts +0 -4
- package/dist/routes/ts-rest/index.js +0 -103
- package/dist/routes/ts-rest/index.js.map +0 -1
- package/dist/routes/ts-rest/installer.d.ts +0 -4
- package/dist/routes/ts-rest/installer.js +0 -77
- package/dist/routes/ts-rest/installer.js.map +0 -1
- package/dist/routes/ts-rest/me.d.ts +0 -4
- package/dist/routes/ts-rest/me.js +0 -410
- package/dist/routes/ts-rest/me.js.map +0 -1
- package/dist/routes/ts-rest/notification.d.ts +0 -4
- package/dist/routes/ts-rest/notification.js +0 -241
- package/dist/routes/ts-rest/notification.js.map +0 -1
- package/dist/routes/ts-rest/page-collab.d.ts +0 -29
- package/dist/routes/ts-rest/page-collab.js +0 -90
- package/dist/routes/ts-rest/page-collab.js.map +0 -1
- package/dist/routes/ts-rest/page-preview.d.ts +0 -26
- package/dist/routes/ts-rest/page-preview.js +0 -80
- package/dist/routes/ts-rest/page-preview.js.map +0 -1
- package/dist/routes/ts-rest/page.d.ts +0 -4
- package/dist/routes/ts-rest/page.js +0 -676
- package/dist/routes/ts-rest/page.js.map +0 -1
- package/dist/routes/ts-rest/presence.d.ts +0 -30
- package/dist/routes/ts-rest/presence.js +0 -155
- package/dist/routes/ts-rest/presence.js.map +0 -1
- package/dist/routes/ts-rest/revision.d.ts +0 -4
- package/dist/routes/ts-rest/revision.js +0 -240
- package/dist/routes/ts-rest/revision.js.map +0 -1
- package/dist/routes/ts-rest/search.d.ts +0 -4
- package/dist/routes/ts-rest/search.js +0 -121
- package/dist/routes/ts-rest/search.js.map +0 -1
- package/dist/routes/ts-rest/tokenAuth.d.ts +0 -4
- package/dist/routes/ts-rest/tokenAuth.js +0 -94
- package/dist/routes/ts-rest/tokenAuth.js.map +0 -1
- package/dist/routes/ts-rest/user.d.ts +0 -4
- package/dist/routes/ts-rest/user.js +0 -307
- package/dist/routes/ts-rest/user.js.map +0 -1
- package/dist/types/express.d.ts +0 -34
- package/dist/types/express.js +0 -50
- package/dist/types/express.js.map +0 -1
- package/dist/util/accessTokenParser.d.ts +0 -1
- package/dist/util/accessTokenParser.js +0 -34
- package/dist/util/accessTokenParser.js.map +0 -1
- package/dist/util/apiPaginate.d.ts +0 -11
- package/dist/util/apiPaginate.js +0 -33
- package/dist/util/apiPaginate.js.map +0 -1
- package/dist/util/apiResponse.d.ts +0 -9
- package/dist/util/apiResponse.js +0 -23
- package/dist/util/apiResponse.js.map +0 -1
- package/dist/util/auth.d.ts +0 -11
- package/dist/util/auth.js +0 -48
- package/dist/util/auth.js.map +0 -1
- package/dist/util/aws-config-migration.d.ts +0 -11
- package/dist/util/aws-config-migration.js +0 -68
- package/dist/util/aws-config-migration.js.map +0 -1
- package/dist/util/formUtil.d.ts +0 -2
- package/dist/util/formUtil.js +0 -15
- package/dist/util/formUtil.js.map +0 -1
- package/dist/util/githubAuth.d.ts +0 -2
- package/dist/util/githubAuth.js +0 -82
- package/dist/util/githubAuth.js.map +0 -1
- package/dist/util/googleAuth.d.ts +0 -2
- package/dist/util/googleAuth.js +0 -85
- package/dist/util/googleAuth.js.map +0 -1
- package/dist/util/mailer.d.ts +0 -7
- package/dist/util/mailer.js +0 -98
- package/dist/util/mailer.js.map +0 -1
- package/dist/util/page-status-migration.d.ts +0 -23
- package/dist/util/page-status-migration.js +0 -48
- package/dist/util/page-status-migration.js.map +0 -1
- package/dist/util/ssr.d.ts +0 -3
- package/dist/util/ssr.js +0 -9
- package/dist/util/ssr.js.map +0 -1
- package/dist/util/view.d.ts +0 -10
- package/dist/util/view.js +0 -99
- package/dist/util/view.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const express_1 = require("@ts-rest/express");
|
|
4
|
-
const api_contract_1 = require("@crowi/api-contract");
|
|
5
|
-
const express_2 = require("express");
|
|
6
|
-
exports.default = (crowi, _app) => {
|
|
7
|
-
const s = (0, express_1.initServer)();
|
|
8
|
-
const router = (0, express_2.Router)();
|
|
9
|
-
const searchRouter = s.router(api_contract_1.apiContract.admin.search, {
|
|
10
|
-
/**
|
|
11
|
-
* GET /api/v2/admin/search
|
|
12
|
-
*
|
|
13
|
-
* Returns the active search driver pointer and the full list of
|
|
14
|
-
* registered drivers. Authorization is handled by the surrounding
|
|
15
|
-
* adminRouter middleware (`jwtAdminRequired`); this handler only runs
|
|
16
|
-
* for authenticated admins.
|
|
17
|
-
*
|
|
18
|
-
* Active resolution mirrors `admin/storage.ts`: walk `search.list()`
|
|
19
|
-
* and find the entry whose driver instance is `===` the resolved
|
|
20
|
-
* active driver. Reference equality is safe because `DriverRegistry`
|
|
21
|
-
* stores each driver instance once.
|
|
22
|
-
*
|
|
23
|
-
* `supportsRebuild` is `typeof driver.rebuild === 'function'` — the
|
|
24
|
-
* registry interface declares `rebuild?` as optional, so drivers
|
|
25
|
-
* without a persistent index (e.g. Mongo regex) won't expose it. The
|
|
26
|
-
* web admin uses this flag to gate the `crowi-admin search rebuild`
|
|
27
|
-
* hint.
|
|
28
|
-
*/
|
|
29
|
-
getSearchStatus: async () => {
|
|
30
|
-
const plugins = crowi.getPlugins();
|
|
31
|
-
const activeDriver = plugins.active.search;
|
|
32
|
-
const list = plugins.search.list();
|
|
33
|
-
let activeName = null;
|
|
34
|
-
let activePlugin = null;
|
|
35
|
-
let activeSupportsRebuild = false;
|
|
36
|
-
if (activeDriver) {
|
|
37
|
-
for (const entry of list) {
|
|
38
|
-
if (plugins.search.get(entry.driverName) === activeDriver) {
|
|
39
|
-
activeName = entry.driverName;
|
|
40
|
-
activePlugin = entry.plugin;
|
|
41
|
-
activeSupportsRebuild = typeof activeDriver.rebuild === 'function';
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const drivers = list.map((entry) => {
|
|
47
|
-
const instance = plugins.search.get(entry.driverName);
|
|
48
|
-
return {
|
|
49
|
-
driverName: entry.driverName,
|
|
50
|
-
pluginName: entry.plugin,
|
|
51
|
-
isActive: entry.driverName === activeName,
|
|
52
|
-
supportsRebuild: typeof instance?.rebuild === 'function',
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
return {
|
|
56
|
-
status: 200,
|
|
57
|
-
body: {
|
|
58
|
-
active: activeName && activePlugin ? { driverName: activeName, pluginName: activePlugin, supportsRebuild: activeSupportsRebuild } : null,
|
|
59
|
-
drivers,
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
(0, express_1.createExpressEndpoints)(api_contract_1.apiContract.admin.search, searchRouter, router);
|
|
65
|
-
return router;
|
|
66
|
-
};
|
|
67
|
-
//# sourceMappingURL=search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/search.ts"],"names":[],"mappings":";;AAAA,8CAAsE;AACtE,sDAA0E;AAC1E,qCAA0C;AAG1C,kBAAe,CAAC,KAAY,EAAE,IAAa,EAAE,EAAE;IAC7C,MAAM,CAAC,GAAG,IAAA,oBAAU,GAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,0BAAW,CAAC,KAAK,CAAC,MAAM,EAAE;QACtD;;;;;;;;;;;;;;;;;;WAkBG;QACH,eAAe,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,UAAU,GAAkB,IAAI,CAAC;YACrC,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,qBAAqB,GAAG,KAAK,CAAC;YAClC,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;oBACzB,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,YAAY,EAAE,CAAC;wBAC1D,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;wBAC9B,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;wBAC5B,qBAAqB,GAAG,OAAO,YAAY,CAAC,OAAO,KAAK,UAAU,CAAC;wBACnE,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAwB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACtD,OAAO;oBACL,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,UAAU,EAAE,KAAK,CAAC,MAAM;oBACxB,QAAQ,EAAE,KAAK,CAAC,UAAU,KAAK,UAAU;oBACzC,eAAe,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAK,UAAU;iBACzD,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,GAAY;gBACpB,IAAI,EAAE;oBACJ,MAAM,EAAE,UAAU,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI;oBACxI,OAAO;iBACR;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,IAAA,gCAAsB,EAAC,0BAAW,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAEvE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const express_1 = require("@ts-rest/express");
|
|
7
|
-
const api_contract_1 = require("@crowi/api-contract");
|
|
8
|
-
const express_2 = require("express");
|
|
9
|
-
const admin_config_1 = require("../../../util/admin-config");
|
|
10
|
-
const ts_rest_helpers_1 = require("../../../util/ts-rest-helpers");
|
|
11
|
-
const debug_1 = __importDefault(require("debug"));
|
|
12
|
-
const debug = (0, debug_1.default)('crowi:routes:ts-rest:admin:security');
|
|
13
|
-
/**
|
|
14
|
-
* Default values for the security:* config keys, mirroring the legacy
|
|
15
|
-
* `getArrayForInstalling` defaults in `packages/api/src/models/config.ts`.
|
|
16
|
-
*
|
|
17
|
-
* - basicName / basicSecret are not set on a fresh install -> empty string
|
|
18
|
-
* - registrationMode defaults to 'Open'
|
|
19
|
-
* - registrationWhiteList defaults to []
|
|
20
|
-
*
|
|
21
|
-
* The handler reads from `crowi.getConfig().crowi` which is populated from
|
|
22
|
-
* Mongo on boot; if the keys are missing (e.g. older installs that pre-date
|
|
23
|
-
* basic-auth support) we fall back to these defaults rather than 500ing.
|
|
24
|
-
*/
|
|
25
|
-
const DEFAULT_BASIC_NAME = '';
|
|
26
|
-
const DEFAULT_BASIC_SECRET = '';
|
|
27
|
-
const DEFAULT_REGISTRATION_MODE = 'Open';
|
|
28
|
-
/**
|
|
29
|
-
* Coerce an unknown config value to a RegistrationMode. Anything outside the
|
|
30
|
-
* known enum is treated as the default ('Open') to avoid surfacing a 500 on
|
|
31
|
-
* the GET endpoint when the database holds a stale or hand-edited value.
|
|
32
|
-
*/
|
|
33
|
-
const toRegistrationMode = (value) => {
|
|
34
|
-
if (value === 'Open' || value === 'Resricted' || value === 'Closed') {
|
|
35
|
-
return value;
|
|
36
|
-
}
|
|
37
|
-
return DEFAULT_REGISTRATION_MODE;
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Trim each entry and drop empty strings. Mirrors the legacy
|
|
41
|
-
* `stringToArrayFilter` semantics (after CRLF normalization), but applies
|
|
42
|
-
* to an already-split array since the API contract requires string[].
|
|
43
|
-
*/
|
|
44
|
-
const sanitizeWhiteList = (list) => {
|
|
45
|
-
return list.map((entry) => entry.trim()).filter((entry) => entry.length > 0);
|
|
46
|
-
};
|
|
47
|
-
const readSecuritySettings = (crowi) => {
|
|
48
|
-
const ns = (0, admin_config_1.getCrowiConfigNamespace)(crowi);
|
|
49
|
-
return {
|
|
50
|
-
basicName: (0, admin_config_1.coerceString)(ns['security:basicName'], DEFAULT_BASIC_NAME),
|
|
51
|
-
basicSecret: (0, admin_config_1.coerceString)(ns['security:basicSecret'], DEFAULT_BASIC_SECRET),
|
|
52
|
-
registrationMode: toRegistrationMode(ns['security:registrationMode']),
|
|
53
|
-
// coerceStringArray already returns [] when the value is missing — that doubles as the default.
|
|
54
|
-
registrationWhiteList: (0, admin_config_1.coerceStringArray)(ns['security:registrationWhiteList']),
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
exports.default = (crowi, _app) => {
|
|
58
|
-
const s = (0, express_1.initServer)();
|
|
59
|
-
const router = (0, express_2.Router)();
|
|
60
|
-
const securityRouter = s.router(api_contract_1.apiContract.admin.security, {
|
|
61
|
-
/**
|
|
62
|
-
* GET /api/v2/admin/security
|
|
63
|
-
* Returns the four `security:*` config values currently in effect.
|
|
64
|
-
* Authorization (jwt + admin) is handled by the surrounding adminRouter
|
|
65
|
-
* middleware; missing/forbidden auth never reaches this handler.
|
|
66
|
-
*/
|
|
67
|
-
getSecuritySettings: async () => {
|
|
68
|
-
try {
|
|
69
|
-
const settings = readSecuritySettings(crowi);
|
|
70
|
-
return { status: 200, body: settings };
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
const error = err;
|
|
74
|
-
debug('Error reading security settings:', error.message);
|
|
75
|
-
return ts_rest_helpers_1.internalServerErrorResponse;
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
/**
|
|
79
|
-
* PUT /api/v2/admin/security
|
|
80
|
-
* Persists the four `security:*` keys via configService.saveConfig('crowi', ...).
|
|
81
|
-
*
|
|
82
|
-
* - registrationWhiteList entries are trimmed and empty entries dropped,
|
|
83
|
-
* matching the legacy `normalizeCRLFFilter` + `stringToArrayFilter`
|
|
84
|
-
* behavior at the form layer.
|
|
85
|
-
* - We only write the four security keys we own; saveConfig merges into
|
|
86
|
-
* the existing 'crowi' namespace so unrelated keys (app:*, mail:*,
|
|
87
|
-
* auth:*) are untouched.
|
|
88
|
-
* - Returns the post-save settings so the UI doesn't need a follow-up GET.
|
|
89
|
-
*/
|
|
90
|
-
updateSecuritySettings: async ({ body }) => {
|
|
91
|
-
const configService = crowi.getConfigService();
|
|
92
|
-
const sanitizedWhiteList = sanitizeWhiteList(body.registrationWhiteList);
|
|
93
|
-
try {
|
|
94
|
-
await configService.saveConfig('crowi', {
|
|
95
|
-
'security:basicName': body.basicName,
|
|
96
|
-
'security:basicSecret': body.basicSecret,
|
|
97
|
-
'security:registrationMode': body.registrationMode,
|
|
98
|
-
'security:registrationWhiteList': sanitizedWhiteList,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
const error = err;
|
|
103
|
-
debug('Error saving security settings:', error.message);
|
|
104
|
-
return ts_rest_helpers_1.internalServerErrorResponse;
|
|
105
|
-
}
|
|
106
|
-
// Re-read from the in-memory cache (saveConfig updates it) so the
|
|
107
|
-
// response reflects the new values without a Mongo round-trip.
|
|
108
|
-
return { status: 200, body: readSecuritySettings(crowi) };
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
(0, express_1.createExpressEndpoints)(api_contract_1.apiContract.admin.security, securityRouter, router);
|
|
112
|
-
return router;
|
|
113
|
-
};
|
|
114
|
-
//# sourceMappingURL=security.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const express_1 = require("@ts-rest/express");
|
|
7
|
-
const api_contract_1 = require("@crowi/api-contract");
|
|
8
|
-
const express_2 = require("express");
|
|
9
|
-
const admin_config_1 = require("../../../util/admin-config");
|
|
10
|
-
const ts_rest_helpers_1 = require("../../../util/ts-rest-helpers");
|
|
11
|
-
const debug_1 = __importDefault(require("debug"));
|
|
12
|
-
const debug = (0, debug_1.default)('crowi:routes:ts-rest:admin:share');
|
|
13
|
-
const KEY_EXTERNAL_SHARE = 'app:externalShare';
|
|
14
|
-
/**
|
|
15
|
-
* Read the current share-related settings from the in-memory config cache.
|
|
16
|
-
* Defaults to `{ externalShare: false }` when the key is missing — same as
|
|
17
|
-
* `models/config.ts` defaults for a fresh install.
|
|
18
|
-
*/
|
|
19
|
-
const readShareSettings = (crowi) => {
|
|
20
|
-
const ns = (0, admin_config_1.getCrowiConfigNamespace)(crowi);
|
|
21
|
-
return {
|
|
22
|
-
externalShare: (0, admin_config_1.coerceBoolean)(ns[KEY_EXTERNAL_SHARE]),
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
exports.default = (crowi, _app) => {
|
|
26
|
-
const s = (0, express_1.initServer)();
|
|
27
|
-
const router = (0, express_2.Router)();
|
|
28
|
-
const shareRouter = s.router(api_contract_1.apiContract.admin.share, {
|
|
29
|
-
/**
|
|
30
|
-
* GET /api/v2/admin/share
|
|
31
|
-
* Returns the current `app:externalShare` setting. Authorization is
|
|
32
|
-
* handled by the surrounding adminRouter middleware; this handler only
|
|
33
|
-
* runs for authenticated admins.
|
|
34
|
-
*/
|
|
35
|
-
getShareSettings: async () => {
|
|
36
|
-
// crowi.getConfig() is a synchronous in-memory cache read; no try/catch
|
|
37
|
-
// needed here. The PUT path keeps its catch because saveConfig is async.
|
|
38
|
-
return { status: 200, body: readShareSettings(crowi) };
|
|
39
|
-
},
|
|
40
|
-
/**
|
|
41
|
-
* PUT /api/v2/admin/share
|
|
42
|
-
* Persists the `app:externalShare` toggle via
|
|
43
|
-
* `configService.saveConfig('crowi', ...)`. saveConfig merges into the
|
|
44
|
-
* existing `crowi` namespace, so unrelated keys (`app:title`, `mail:*`,
|
|
45
|
-
* `security:*`, ...) are not touched.
|
|
46
|
-
*
|
|
47
|
-
* Returns the post-save settings so the UI doesn't need a follow-up GET.
|
|
48
|
-
*/
|
|
49
|
-
updateShareSettings: async ({ body }) => {
|
|
50
|
-
const configService = crowi.getConfigService();
|
|
51
|
-
try {
|
|
52
|
-
await configService.saveConfig('crowi', {
|
|
53
|
-
[KEY_EXTERNAL_SHARE]: body.externalShare,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
const error = err;
|
|
58
|
-
debug('Error saving share settings:', error.message);
|
|
59
|
-
return ts_rest_helpers_1.internalServerErrorResponse;
|
|
60
|
-
}
|
|
61
|
-
// Re-read from the in-memory cache (saveConfig updates it) so the
|
|
62
|
-
// response reflects the new value without an extra Mongo round-trip.
|
|
63
|
-
return { status: 200, body: readShareSettings(crowi) };
|
|
64
|
-
},
|
|
65
|
-
});
|
|
66
|
-
(0, express_1.createExpressEndpoints)(api_contract_1.apiContract.admin.share, shareRouter, router);
|
|
67
|
-
return router;
|
|
68
|
-
};
|
|
69
|
-
//# sourceMappingURL=share.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/share.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsE;AACtE,sDAAsE;AAEtE,qCAA0C;AAC1C,wDAA+E;AAC/E,8DAAuE;AACvE,kDAA0B;AAE1B,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,kCAAkC,CAAC,CAAC;AAExD,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAiB,EAAE;IACxD,MAAM,EAAE,GAAG,IAAA,sCAAuB,EAAC,KAAK,CAAC,CAAC;IAC1C,OAAO;QACL,aAAa,EAAE,IAAA,4BAAa,EAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,CAAC,KAAY,EAAE,IAAa,EAAE,EAAE;IAC7C,MAAM,CAAC,GAAG,IAAA,oBAAU,GAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,0BAAW,CAAC,KAAK,CAAC,KAAK,EAAE;QACpD;;;;;WAKG;QACH,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC3B,wEAAwE;YACxE,yEAAyE;YACzE,OAAO,EAAE,MAAM,EAAE,GAAY,EAAE,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,CAAC;QAED;;;;;;;;WAQG;QACH,mBAAmB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YACtC,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAE/C,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE;oBACtC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,aAAa;iBACzC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAAY,CAAC;gBAC3B,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrD,OAAO,6CAA2B,CAAC;YACrC,CAAC;YAED,kEAAkE;YAClE,qEAAqE;YACrE,OAAO,EAAE,MAAM,EAAE,GAAY,EAAE,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,CAAC;KACF,CAAC,CAAC;IAEH,IAAA,gCAAsB,EAAC,0BAAW,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAErE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const express_1 = require("@ts-rest/express");
|
|
4
|
-
const api_contract_1 = require("@crowi/api-contract");
|
|
5
|
-
const express_2 = require("express");
|
|
6
|
-
exports.default = (crowi, _app) => {
|
|
7
|
-
const s = (0, express_1.initServer)();
|
|
8
|
-
const router = (0, express_2.Router)();
|
|
9
|
-
const storageRouter = s.router(api_contract_1.apiContract.admin.storage, {
|
|
10
|
-
/**
|
|
11
|
-
* GET /api/v2/admin/storage
|
|
12
|
-
*
|
|
13
|
-
* Returns the active storage driver pointer and the full list of
|
|
14
|
-
* registered drivers. Authorization is handled by the surrounding
|
|
15
|
-
* adminRouter middleware (`jwtAdminRequired`); this handler only runs
|
|
16
|
-
* for authenticated admins.
|
|
17
|
-
*
|
|
18
|
-
* Active resolution: we look up the active driver instance from
|
|
19
|
-
* `getPlugins().active.storage`, then walk `storage.list()` to find
|
|
20
|
-
* the matching `(driverName, plugin)` pair. Comparing by reference is
|
|
21
|
-
* safe — `DriverRegistry` stores each driver instance once, and
|
|
22
|
-
* `resolveActiveDrivers` re-uses that exact instance.
|
|
23
|
-
*/
|
|
24
|
-
getStorageStatus: async () => {
|
|
25
|
-
const plugins = crowi.getPlugins();
|
|
26
|
-
const activeDriver = plugins.active.storage;
|
|
27
|
-
const list = plugins.storage.list();
|
|
28
|
-
// Find which `(driverName, plugin)` pair resolves to the active
|
|
29
|
-
// driver instance. Falls back to null when the active slot is
|
|
30
|
-
// empty (legacy in-core handling — see PluginManager.resolveOrWarn).
|
|
31
|
-
let activeName = null;
|
|
32
|
-
let activePlugin = null;
|
|
33
|
-
if (activeDriver) {
|
|
34
|
-
for (const entry of list) {
|
|
35
|
-
if (plugins.storage.get(entry.driverName) === activeDriver) {
|
|
36
|
-
activeName = entry.driverName;
|
|
37
|
-
activePlugin = entry.plugin;
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const drivers = list.map((entry) => ({
|
|
43
|
-
driverName: entry.driverName,
|
|
44
|
-
pluginName: entry.plugin,
|
|
45
|
-
isActive: entry.driverName === activeName,
|
|
46
|
-
}));
|
|
47
|
-
return {
|
|
48
|
-
status: 200,
|
|
49
|
-
body: {
|
|
50
|
-
active: activeName && activePlugin ? { driverName: activeName, pluginName: activePlugin } : null,
|
|
51
|
-
drivers,
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
},
|
|
55
|
-
});
|
|
56
|
-
(0, express_1.createExpressEndpoints)(api_contract_1.apiContract.admin.storage, storageRouter, router);
|
|
57
|
-
return router;
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=storage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/storage.ts"],"names":[],"mappings":";;AAAA,8CAAsE;AACtE,sDAA2E;AAC3E,qCAA0C;AAG1C,kBAAe,CAAC,KAAY,EAAE,IAAa,EAAE,EAAE;IAC7C,MAAM,CAAC,GAAG,IAAA,oBAAU,GAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,0BAAW,CAAC,KAAK,CAAC,OAAO,EAAE;QACxD;;;;;;;;;;;;;WAaG;QACH,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEpC,gEAAgE;YAChE,8DAA8D;YAC9D,qEAAqE;YACrE,IAAI,UAAU,GAAkB,IAAI,CAAC;YACrC,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;oBACzB,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,YAAY,EAAE,CAAC;wBAC3D,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;wBAC9B,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAyB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACzD,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,UAAU,EAAE,KAAK,CAAC,MAAM;gBACxB,QAAQ,EAAE,KAAK,CAAC,UAAU,KAAK,UAAU;aAC1C,CAAC,CAAC,CAAC;YAEJ,OAAO;gBACL,MAAM,EAAE,GAAY;gBACpB,IAAI,EAAE;oBACJ,MAAM,EAAE,UAAU,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI;oBAChG,OAAO;iBACR;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,IAAA,gCAAsB,EAAC,0BAAW,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAEzE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const express_1 = require("@ts-rest/express");
|
|
7
|
-
const api_contract_1 = require("@crowi/api-contract");
|
|
8
|
-
const express_2 = require("express");
|
|
9
|
-
const admin_pager_1 = require("../../../util/admin-pager");
|
|
10
|
-
const ts_rest_helpers_1 = require("../../../util/ts-rest-helpers");
|
|
11
|
-
const debug_1 = __importDefault(require("debug"));
|
|
12
|
-
const debug = (0, debug_1.default)('crowi:routes:ts-rest:admin:users');
|
|
13
|
-
const ADMIN_PAGINATE_SORT = { status: 1, username: 1, createdAt: 1 };
|
|
14
|
-
const ADMIN_PAGINATE_SELECT = '-password -apiToken -googleId -githubId';
|
|
15
|
-
const REGEX_META = /[-/\\^$*+?.()|[\]{}]/g;
|
|
16
|
-
const escapeRegex = (s) => s.replace(REGEX_META, '\\$&');
|
|
17
|
-
/**
|
|
18
|
-
* Build the Mongo `$or` filter for the free-text search. Splits on the first
|
|
19
|
-
* space so "alice bob" matches alice OR bob across username/name/email.
|
|
20
|
-
* Tokens are regex-escaped so user input like '(' or '.' doesn't crash with
|
|
21
|
-
* `SyntaxError` or match more than expected.
|
|
22
|
-
*/
|
|
23
|
-
function buildSearchFilter(q) {
|
|
24
|
-
if (!q)
|
|
25
|
-
return {};
|
|
26
|
-
const trimmed = q.trim();
|
|
27
|
-
if (trimmed.length === 0)
|
|
28
|
-
return {};
|
|
29
|
-
const firstSpace = trimmed.indexOf(' ');
|
|
30
|
-
const $regex = firstSpace === -1 ? escapeRegex(trimmed) : `${escapeRegex(trimmed.slice(0, firstSpace))}|${escapeRegex(trimmed.slice(firstSpace + 1))}`;
|
|
31
|
-
return {
|
|
32
|
-
$or: ['username', 'name', 'email'].map((field) => ({
|
|
33
|
-
[field]: { $regex, $options: 'i' },
|
|
34
|
-
})),
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
const invalidUserIdResponse = (id) => ({
|
|
38
|
-
status: 400,
|
|
39
|
-
body: { error: { code: 'VALIDATION_ERROR', message: `Invalid user id: ${id}` } },
|
|
40
|
-
});
|
|
41
|
-
const userNotFoundResponse = {
|
|
42
|
-
status: 404,
|
|
43
|
-
body: { error: { code: 'NOT_FOUND', message: 'User not found' } },
|
|
44
|
-
};
|
|
45
|
-
const emailConflictResponse = {
|
|
46
|
-
status: 409,
|
|
47
|
-
body: { error: { code: 'CONFLICT', message: 'Email is already in use by another user' } },
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* Wrap a handler so any thrown error is logged with `label` and converted to a
|
|
51
|
-
* 500 response. Saves a 4-line try/catch boilerplate per endpoint.
|
|
52
|
-
*/
|
|
53
|
-
const handle = async (label, fn) => {
|
|
54
|
-
try {
|
|
55
|
-
return await fn();
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
debug(`Error in ${label}:`, err.message);
|
|
59
|
-
return ts_rest_helpers_1.internalServerErrorResponse;
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* Bridge a callback-style instance method (e.g. `user.makeAdmin(cb)`) so we
|
|
64
|
-
* can `await` it. The model code is left in callback form to avoid touching
|
|
65
|
-
* shared statics in this migration.
|
|
66
|
-
*/
|
|
67
|
-
const promisifyMethod = (invoker) => new Promise((resolve, reject) => {
|
|
68
|
-
invoker((err, data) => {
|
|
69
|
-
if (err)
|
|
70
|
-
return reject(err);
|
|
71
|
-
resolve(data);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
const createUsersByInvitationAsync = (User, emailList, toSendEmail) => new Promise((resolve, reject) => {
|
|
75
|
-
User.createUsersByInvitation(emailList, toSendEmail, (err, list) => {
|
|
76
|
-
if (err)
|
|
77
|
-
return reject(err);
|
|
78
|
-
resolve(list);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
/**
|
|
82
|
-
* The legacy callback collapses "exists" and "save failed" into the same
|
|
83
|
-
* `{ password: null, user: null }` shape; we issue one extra `$in` lookup over
|
|
84
|
-
* just the null-row emails to disambiguate (no extra query on the all-success
|
|
85
|
-
* path).
|
|
86
|
-
*/
|
|
87
|
-
const toInvitedUserResults = async (User, rows) => {
|
|
88
|
-
const nullEmails = rows.filter((row) => !row.user).map((row) => row.email);
|
|
89
|
-
const existingEmails = nullEmails.length === 0 ? new Set() : await findExistingEmails(User, nullEmails);
|
|
90
|
-
return rows.map((row) => {
|
|
91
|
-
if (row.user)
|
|
92
|
-
return { email: row.email, status: 'created', userId: row.user._id.toString() };
|
|
93
|
-
if (existingEmails.has(row.email))
|
|
94
|
-
return { email: row.email, status: 'exists' };
|
|
95
|
-
return { email: row.email, status: 'failed' };
|
|
96
|
-
});
|
|
97
|
-
};
|
|
98
|
-
const findExistingEmails = async (User, emails) => {
|
|
99
|
-
const docs = (await User.find({ email: { $in: emails } }, 'email').lean());
|
|
100
|
-
return new Set(docs.map((doc) => doc.email));
|
|
101
|
-
};
|
|
102
|
-
const findEmailConflict = (existingByEmail, currentUser) => {
|
|
103
|
-
if (existingByEmail && !currentUser.equals(existingByEmail))
|
|
104
|
-
return emailConflictResponse;
|
|
105
|
-
return null;
|
|
106
|
-
};
|
|
107
|
-
const runSimpleUserMutation = async (User, id, errLabel, mutate) => {
|
|
108
|
-
if (!(0, ts_rest_helpers_1.isValidObjectId)(id))
|
|
109
|
-
return invalidUserIdResponse(id);
|
|
110
|
-
return handle(errLabel, async () => {
|
|
111
|
-
const user = (await User.findById(id));
|
|
112
|
-
if (!user)
|
|
113
|
-
return userNotFoundResponse;
|
|
114
|
-
const updated = await mutate(user);
|
|
115
|
-
return { status: 200, body: { user: (0, ts_rest_helpers_1.toUserPublic)(updated) } };
|
|
116
|
-
});
|
|
117
|
-
};
|
|
118
|
-
exports.default = (crowi, _app) => {
|
|
119
|
-
const s = (0, express_1.initServer)();
|
|
120
|
-
const router = (0, express_2.Router)();
|
|
121
|
-
const User = crowi.model('User');
|
|
122
|
-
const usersRouter = s.router(api_contract_1.apiContract.admin.users, {
|
|
123
|
-
listUsers: async ({ query }) => handle('listUsers', async () => {
|
|
124
|
-
const { q, page, limit } = query;
|
|
125
|
-
const filter = buildSearchFilter(q);
|
|
126
|
-
const result = await User.paginate(filter, {
|
|
127
|
-
page,
|
|
128
|
-
limit,
|
|
129
|
-
sort: ADMIN_PAGINATE_SORT,
|
|
130
|
-
select: ADMIN_PAGINATE_SELECT,
|
|
131
|
-
});
|
|
132
|
-
const pager = (0, admin_pager_1.createPager)(result.total, result.page ?? page, result.pages, admin_pager_1.MAX_PAGE_LIST);
|
|
133
|
-
return {
|
|
134
|
-
status: 200,
|
|
135
|
-
body: {
|
|
136
|
-
users: result.docs.map(ts_rest_helpers_1.toUserPublic),
|
|
137
|
-
pager,
|
|
138
|
-
},
|
|
139
|
-
};
|
|
140
|
-
}),
|
|
141
|
-
searchUsersByEmail: async ({ query }) => handle('searchUsersByEmail', async () => {
|
|
142
|
-
const users = await User.findUsersByPartOfEmail(query.email, {});
|
|
143
|
-
return {
|
|
144
|
-
status: 200,
|
|
145
|
-
body: { users: users.map(ts_rest_helpers_1.toUserPublic) },
|
|
146
|
-
};
|
|
147
|
-
}),
|
|
148
|
-
inviteUsers: async ({ body }) => {
|
|
149
|
-
const emailList = body.emailList.map((email) => email.trim()).filter((email) => email.length > 0);
|
|
150
|
-
if (emailList.length === 0) {
|
|
151
|
-
return {
|
|
152
|
-
status: 400,
|
|
153
|
-
body: { error: { code: 'VALIDATION_ERROR', message: 'emailList must contain at least one non-empty email' } },
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
return handle('inviteUsers', async () => {
|
|
157
|
-
const rows = await createUsersByInvitationAsync(User, emailList, body.sendEmail ?? false);
|
|
158
|
-
const results = await toInvitedUserResults(User, rows);
|
|
159
|
-
return { status: 200, body: { results } };
|
|
160
|
-
});
|
|
161
|
-
},
|
|
162
|
-
editUser: async ({ params, body }) => {
|
|
163
|
-
const { id } = params;
|
|
164
|
-
if (!(0, ts_rest_helpers_1.isValidObjectId)(id))
|
|
165
|
-
return invalidUserIdResponse(id);
|
|
166
|
-
return handle('editUser', async () => {
|
|
167
|
-
const [user, duplicate] = (await Promise.all([User.findById(id).exec(), User.findUserByEmail(body.email)]));
|
|
168
|
-
if (!user)
|
|
169
|
-
return userNotFoundResponse;
|
|
170
|
-
const conflict = findEmailConflict(duplicate, user);
|
|
171
|
-
if (conflict)
|
|
172
|
-
return conflict;
|
|
173
|
-
const updated = (await user.updateNameAndEmail(body.name, body.email));
|
|
174
|
-
return { status: 200, body: { user: (0, ts_rest_helpers_1.toUserPublic)(updated) } };
|
|
175
|
-
});
|
|
176
|
-
},
|
|
177
|
-
makeAdmin: ({ params }) => runSimpleUserMutation(User, params.id, 'makeAdmin', (user) => promisifyMethod((cb) => user.makeAdmin(cb))),
|
|
178
|
-
removeFromAdmin: ({ params }) => runSimpleUserMutation(User, params.id, 'removeFromAdmin', (user) => promisifyMethod((cb) => user.removeFromAdmin(cb))),
|
|
179
|
-
activateUser: ({ params }) => runSimpleUserMutation(User, params.id, 'activateUser', (user) => promisifyMethod((cb) => user.statusActivate(cb))),
|
|
180
|
-
suspendUser: ({ params }) => runSimpleUserMutation(User, params.id, 'suspendUser', (user) => promisifyMethod((cb) => user.statusSuspend(cb))),
|
|
181
|
-
resetPassword: async ({ params }) => {
|
|
182
|
-
const { id } = params;
|
|
183
|
-
if (!(0, ts_rest_helpers_1.isValidObjectId)(id))
|
|
184
|
-
return invalidUserIdResponse(id);
|
|
185
|
-
return handle('resetPassword', async () => {
|
|
186
|
-
const exists = (await User.findById(id));
|
|
187
|
-
if (!exists)
|
|
188
|
-
return userNotFoundResponse;
|
|
189
|
-
const { user, newPassword } = await User.resetPasswordByRandomString(exists._id);
|
|
190
|
-
return {
|
|
191
|
-
status: 200,
|
|
192
|
-
body: { user: (0, ts_rest_helpers_1.toUserPublic)(user), newPassword },
|
|
193
|
-
};
|
|
194
|
-
});
|
|
195
|
-
},
|
|
196
|
-
updateUserEmail: async ({ params, body }) => {
|
|
197
|
-
const { id } = params;
|
|
198
|
-
if (!(0, ts_rest_helpers_1.isValidObjectId)(id))
|
|
199
|
-
return invalidUserIdResponse(id);
|
|
200
|
-
return handle('updateUserEmail', async () => {
|
|
201
|
-
const [user, duplicate] = (await Promise.all([User.findById(id).exec(), User.findUserByEmail(body.email)]));
|
|
202
|
-
if (!user)
|
|
203
|
-
return userNotFoundResponse;
|
|
204
|
-
const conflict = findEmailConflict(duplicate, user);
|
|
205
|
-
if (conflict)
|
|
206
|
-
return conflict;
|
|
207
|
-
const updated = (await user.updateEmail(body.email));
|
|
208
|
-
return { status: 200, body: { user: (0, ts_rest_helpers_1.toUserPublic)(updated) } };
|
|
209
|
-
});
|
|
210
|
-
},
|
|
211
|
-
});
|
|
212
|
-
(0, express_1.createExpressEndpoints)(api_contract_1.apiContract.admin.users, usersRouter, router);
|
|
213
|
-
return router;
|
|
214
|
-
};
|
|
215
|
-
//# sourceMappingURL=users.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../../src/routes/ts-rest/admin/users.ts"],"names":[],"mappings":"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"}
|