From 776aafbc15ef8e49cd9063a5bc73fc99eb86e0f1 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Mon, 18 Apr 2022 23:23:30 +0530 Subject: [PATCH 01/10] fix: send invite email re #1751 Signed-off-by: Pranav C --- .../src/lib/noco/meta/api/projectUserApis.ts | 50 +++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts index ef49ce723e..b80efdad20 100644 --- a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts +++ b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts @@ -10,6 +10,9 @@ import { Tele } from 'nc-help'; import Audit from '../../../noco-models/Audit'; import NocoCache from '../../../noco-cache/NocoCache'; import { CacheGetType, CacheScope } from '../../../utils/globals'; +import * as ejs from 'ejs'; +import NcPluginMgrv2 from '../helpers/NcPluginMgrv2'; +import Noco from '../../Noco'; async function userList(req, res) { res.json({ @@ -112,15 +115,12 @@ async function userInvite(req, res, next): Promise { // in case of single user check for smtp failure // and send back token if failed if ( - emails.length === 1 - // todo: email - // && - // !(await sendInviteEmail(email, invite_token, req)) + emails.length === 1 && + !(await sendInviteEmail(email, invite_token, req)) ) { return res.json({ invite_token, email }); } else { - // todo: email - // sendInviteEmail(email, invite_token, req); + sendInviteEmail(email, invite_token, req); } } catch (e) { console.log(e); @@ -209,7 +209,6 @@ async function projectUserDelete(req, res): Promise { NcError.forbidden('Insufficient privilege to delete a owner user.'); } - // await this.users.where('id', req.params.id).del(); await ProjectUser.delete(project_id, req.params.userId); res.json({ msg: 'success' @@ -233,8 +232,7 @@ async function resendInvite(req, res, next): Promise { invite_token_expires: new Date(Date.now() + 24 * 60 * 60 * 1000) }); - // todo: - // await sendInviteEmail(user.email, invite_token, req); + await sendInviteEmail(user.email, invite_token, req); Audit.insert({ op_type: 'AUTHENTICATION', @@ -248,6 +246,40 @@ async function resendInvite(req, res, next): Promise { res.json({ msg: 'success' }); } +async function sendInviteEmail(email, token, req): Promise { + try { + const template = (await import('./userApi/ui/emailTemplates/invite')) + .default; + + const emailAdapter = await NcPluginMgrv2.emailAdapter(); + + if (emailAdapter) { + await emailAdapter.mailSend({ + to: email, + subject: 'Verify email', + html: ejs.render(template, { + signupLink: `${req.ncSiteUrl}${ + Noco.getConfig()?.dashboardPath + }#/user/authentication/signup/${token}`, + projectName: req.body?.projectName, + roles: (req.body?.roles || '') + .split(',') + .map(r => r.replace(/^./, m => m.toUpperCase())) + .join(', '), + adminEmail: req.session?.passport?.user?.email + }) + }); + return true; + } + } catch (e) { + console.log( + 'Warning : `mailSend` failed, Please configure emailClient configuration.', + e.message + ); + throw e; + } +} + const router = Router({ mergeParams: true }); router.get( '/api/v1/db/meta/projects/:projectId/users', From 9516f3b0184f98701b1aad868d652bcd8651a89f Mon Sep 17 00:00:00 2001 From: Pranav C Date: Mon, 18 Apr 2022 23:30:05 +0530 Subject: [PATCH 02/10] refactor: map resend-invite api Signed-off-by: Pranav C --- packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts index b80efdad20..878f02c4e8 100644 --- a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts +++ b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts @@ -216,8 +216,7 @@ async function projectUserDelete(req, res): Promise { } // todo: map api -// @ts-ignore -async function resendInvite(req, res, next): Promise { +async function projectUserInviteResend(req, res): Promise { const user = await User.get(req.params.userId); if (!user) { @@ -297,4 +296,8 @@ router.delete( '/api/v1/db/meta/projects/:projectId/users/:userId', ncMetaAclMw(projectUserDelete, 'projectUserDelete') ); +router.post( + '/api/v1/db/meta/projects/:projectId/users/:userId/resend-invite', + ncMetaAclMw(projectUserInviteResend, 'projectUserInviteResend') +); export default router; From 3c8ce60c7211d8ddf443dde2a17712d636120bea Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 19 Apr 2022 13:48:08 +0800 Subject: [PATCH 03/10] chore: add types to sendInviteEmail Signed-off-by: Wing-Kam Wong --- packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts index 878f02c4e8..33861b893a 100644 --- a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts +++ b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts @@ -245,7 +245,11 @@ async function projectUserInviteResend(req, res): Promise { res.json({ msg: 'success' }); } -async function sendInviteEmail(email, token, req): Promise { +async function sendInviteEmail( + email: string, + token: string, + req: any +): Promise { try { const template = (await import('./userApi/ui/emailTemplates/invite')) .default; From 78ad00e9c726cb3e9edb9f18107752c8b58c572f Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 19 Apr 2022 15:49:07 +0800 Subject: [PATCH 04/10] fix: skip if email plugin is not set Signed-off-by: Wing-Kam Wong --- packages/nocodb/src/lib/noco/meta/helpers/NcPluginMgrv2.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/nocodb/src/lib/noco/meta/helpers/NcPluginMgrv2.ts b/packages/nocodb/src/lib/noco/meta/helpers/NcPluginMgrv2.ts index dd321d8071..dd070d8d67 100644 --- a/packages/nocodb/src/lib/noco/meta/helpers/NcPluginMgrv2.ts +++ b/packages/nocodb/src/lib/noco/meta/helpers/NcPluginMgrv2.ts @@ -134,6 +134,8 @@ class NcPluginMgrv2 { active: true }); + if (!pluginData) return null; + const pluginConfig = defaultPlugins.find( c => c.title === pluginData.title && c.category === PluginCategory.EMAIL ); From fe8bb9aa57286c6a8414abb6f1093857142cc0b7 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 19 Apr 2022 15:49:28 +0800 Subject: [PATCH 05/10] chore: remove TODO tag Signed-off-by: Wing-Kam Wong --- packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts index 33861b893a..a6f299cda3 100644 --- a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts +++ b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts @@ -215,7 +215,6 @@ async function projectUserDelete(req, res): Promise { }); } -// todo: map api async function projectUserInviteResend(req, res): Promise { const user = await User.get(req.params.userId); From 49d4d3ce97d3c2a15a3dc6f5fe786ddbae2cb445 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 19 Apr 2022 15:49:50 +0800 Subject: [PATCH 06/10] fix: add missing resent invite api Signed-off-by: Wing-Kam Wong --- packages/nocodb-sdk/src/lib/Api.ts | 23 +++++++++++++++ scripts/sdk/swagger.json | 47 +++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/packages/nocodb-sdk/src/lib/Api.ts b/packages/nocodb-sdk/src/lib/Api.ts index ebd9e89a0d..a8dbeb7f4f 100644 --- a/packages/nocodb-sdk/src/lib/Api.ts +++ b/packages/nocodb-sdk/src/lib/Api.ts @@ -1063,6 +1063,29 @@ export class Api< format: 'json', ...params, }), + + /** + * @description Resend Invitation to a specific user + * + * @tags Auth + * @name ProjectUserResendInvite + * @request POST:/api/v1/db/meta/projects/{projectId}/users/{userId}/resend-invite + * @response `200` `any` OK + */ + projectUserResendInvite: ( + projectId: string, + userId: string, + data: any, + params: RequestParams = {} + ) => + this.request({ + path: `/api/v1/db/meta/projects/${projectId}/users/${userId}/resend-invite`, + method: 'POST', + body: data, + type: ContentType.Json, + format: 'json', + ...params, + }), }; project = { /** diff --git a/scripts/sdk/swagger.json b/scripts/sdk/swagger.json index 42971ea634..d63ba0e38d 100644 --- a/scripts/sdk/swagger.json +++ b/scripts/sdk/swagger.json @@ -4821,6 +4821,51 @@ } ] } + }, + "/api/v1/db/meta/projects/{projectId}/users/{userId}/resend-invite": { + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "projectId", + "in": "path", + "required": true + }, + { + "schema": { + "type": "string" + }, + "name": "userId", + "in": "path", + "required": true + } + ], + "post": { + "summary": "", + "operationId": "auth-project-user-resend-invite", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "tags": [ + "Auth" + ], + "description": "Resend Invitation to a specific user", + "requestBody": { + "content": { + "application/json": { + "schema": {} + } + } + } + } } }, "components": { @@ -7718,4 +7763,4 @@ } } } -} +} \ No newline at end of file From 0190eafdf5ae5b9cf3b55042b526ee2557a87759 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 19 Apr 2022 15:54:40 +0800 Subject: [PATCH 07/10] fix: line break issue on share invitation link page Signed-off-by: Wing-Kam Wong --- packages/nc-gui/components/auth/shareOrInviteModal.vue | 7 ++----- packages/nc-gui/components/auth/userManagement.vue | 7 ++----- packages/nc-gui/lang/da.json | 2 +- packages/nc-gui/lang/de.json | 2 +- packages/nc-gui/lang/en.json | 2 +- packages/nc-gui/lang/es.json | 2 +- packages/nc-gui/lang/fi.json | 2 +- packages/nc-gui/lang/fr.json | 2 +- packages/nc-gui/lang/id.json | 2 +- packages/nc-gui/lang/it_IT.json | 2 +- packages/nc-gui/lang/iw.json | 2 +- packages/nc-gui/lang/ko.json | 2 +- packages/nc-gui/lang/no.json | 2 +- packages/nc-gui/lang/pt.json | 2 +- packages/nc-gui/lang/pt_BR.json | 2 +- packages/nc-gui/lang/sv.json | 2 +- packages/nc-gui/lang/th.json | 2 +- packages/nc-gui/lang/uk.json | 2 +- packages/nc-gui/lang/vi.json | 2 +- 19 files changed, 21 insertions(+), 27 deletions(-) diff --git a/packages/nc-gui/components/auth/shareOrInviteModal.vue b/packages/nc-gui/components/auth/shareOrInviteModal.vue index 4a649e7f39..49a08afd66 100644 --- a/packages/nc-gui/components/auth/shareOrInviteModal.vue +++ b/packages/nc-gui/components/auth/shareOrInviteModal.vue @@ -44,11 +44,8 @@

- {{ $t('msg.info.userInviteNoSMTP') }} - - - - {{ invite_token && (invite_token.email || invite_token.emails && invite_token.emails.join(', ')) }}. + +

{{ $t('msg.info.userInviteNoSMTP') }} {{ invite_token && (invite_token.email || invite_token.emails && invite_token.emails.join(', ')) }}.

diff --git a/packages/nc-gui/components/auth/userManagement.vue b/packages/nc-gui/components/auth/userManagement.vue index efa8fbd42c..5ceecfb81a 100644 --- a/packages/nc-gui/components/auth/userManagement.vue +++ b/packages/nc-gui/components/auth/userManagement.vue @@ -323,11 +323,8 @@

- {{ $t('msg.info.userInviteNoSMTP') }} - - - - {{ invite_token && (invite_token.email || invite_token.emails && invite_token.emails.join(', ')) }}. + +

{{ $t('msg.info.userInviteNoSMTP') }} {{ invite_token && (invite_token.email || invite_token.emails && invite_token.emails.join(', ')) }}.

diff --git a/packages/nc-gui/lang/da.json b/packages/nc-gui/lang/da.json index b99b9f0a78..2c45731d8f 100644 --- a/packages/nc-gui/lang/da.json +++ b/packages/nc-gui/lang/da.json @@ -406,7 +406,7 @@ "deleteProject": "Ønsker du at slette projektet?", "shareBasePrivate": "Generer offentligt delbart readonly base", "shareBasePublic": "Enhver på internettet med dette link kan se", - "userInviteNoSMTP": "Ser ud som om du ikke har konfigureret mailer endnu! \\ n Kopier venligst ovenstående invitation link og send det til", + "userInviteNoSMTP": "Ser ud som om du ikke har konfigureret mailer endnu!\nKopier venligst ovenstående invitation link og send det til", "dragDropHide": "Træk og slip felter her for at skjule", "formInput": "Indtast formularindgangsmærke", "formHelpText": "Tilføj nogle hjælpetekst", diff --git a/packages/nc-gui/lang/de.json b/packages/nc-gui/lang/de.json index 3dc8b66dec..7d5749e0a2 100644 --- a/packages/nc-gui/lang/de.json +++ b/packages/nc-gui/lang/de.json @@ -406,7 +406,7 @@ "deleteProject": "Möchten Sie das Projekt löschen?", "shareBasePrivate": "Öffentlich freigegebene Nur-Lese-Datenbank generieren", "shareBasePublic": "Für Jeden im Internet mit diesem Link sichtbar", - "userInviteNoSMTP": "Es sieht so aus, als hätten Sie den Mailer noch nicht konfiguriert! \\ n Bitte kopieren Sie den obigen Einladungs-Link und senden Sie ihn an", + "userInviteNoSMTP": "Es sieht so aus, als hätten Sie den Mailer noch nicht konfiguriert!\nBitte kopieren Sie den obigen Einladungs-Link und senden Sie ihn an", "dragDropHide": "Ziehen Sie die Felder hierher, um sie zu verstecken", "formInput": "Formularbezeichnung eingeben", "formHelpText": "Einen Hilfs-Text hinzufügen", diff --git a/packages/nc-gui/lang/en.json b/packages/nc-gui/lang/en.json index 6da3e4cf80..0e00168f9f 100644 --- a/packages/nc-gui/lang/en.json +++ b/packages/nc-gui/lang/en.json @@ -406,7 +406,7 @@ "deleteProject": "Do you want to delete the project?", "shareBasePrivate": "Generate publicly shareable readonly base", "shareBasePublic": "Anyone on the internet with this link can view", - "userInviteNoSMTP": "Looks like you have not configured mailer yet! \\n Please copy above invite link and send it to", + "userInviteNoSMTP": "Looks like you have not configured mailer yet!\nPlease copy above invite link and send it to", "dragDropHide": "Drag and drop fields here to hide", "formInput": "Enter form input label", "formHelpText": "Add some help text", diff --git a/packages/nc-gui/lang/es.json b/packages/nc-gui/lang/es.json index 3a48c98610..745885dbf0 100644 --- a/packages/nc-gui/lang/es.json +++ b/packages/nc-gui/lang/es.json @@ -406,7 +406,7 @@ "deleteProject": "¿Quieres eliminar el proyecto?", "shareBasePrivate": "Generar una base de sólo lectura compartible públicamente", "shareBasePublic": "Cualquier persona en Internet con este enlace puede ver", - "userInviteNoSMTP": "¡Parece que aún no has configurado Mailer! \\ n Por favor, copia el link de invitación de arriba y envíalo a", + "userInviteNoSMTP": "¡Parece que aún no has configurado Mailer!\nPor favor, copia el link de invitación de arriba y envíalo a", "dragDropHide": "Arrastra y suelta los campos a ocultar aquí", "formInput": "Ingrese la etiqueta de entrada del formulario", "formHelpText": "Añade algo de texto de ayuda", diff --git a/packages/nc-gui/lang/fi.json b/packages/nc-gui/lang/fi.json index 7774dc268d..61a18ccf5d 100644 --- a/packages/nc-gui/lang/fi.json +++ b/packages/nc-gui/lang/fi.json @@ -406,7 +406,7 @@ "deleteProject": "Haluatko poistaa projektin?", "shareBasePrivate": "Luo julkisesti jakattava Readonly Base", "shareBasePublic": "Jokainen Internetissä tällä linkillä voi tarkastella", - "userInviteNoSMTP": "Näyttää siltä, ​​ettet ole määrittänyt sähköpostia! \\ n Kopioi yllä kutsun linkki ja lähetä se", + "userInviteNoSMTP": "Näyttää siltä, ​​ettet ole määrittänyt sähköpostia!\nKopioi yllä kutsun linkki ja lähetä se", "dragDropHide": "Vedä ja pudota kentät täällä piiloutumaan", "formInput": "Anna lomakkeen syöttömerkki", "formHelpText": "Lisää joitain ohjeita", diff --git a/packages/nc-gui/lang/fr.json b/packages/nc-gui/lang/fr.json index e2767ae966..6a69fca103 100644 --- a/packages/nc-gui/lang/fr.json +++ b/packages/nc-gui/lang/fr.json @@ -406,7 +406,7 @@ "deleteProject": "Voulez-vous supprimer le projet ?", "shareBasePrivate": "Générer une base partagée en lecture seule", "shareBasePublic": "Toute personne avec ce lien peut consulter", - "userInviteNoSMTP": "On dirait que vous n'avez pas encore configuré Mailer! \\ n Merci de copier-coller le lien d'invitation ci-dessous et l'envoyer à", + "userInviteNoSMTP": "On dirait que vous n'avez pas encore configuré Mailer!\nMerci de copier-coller le lien d'invitation ci-dessous et l'envoyer à", "dragDropHide": "Glisser et déposer des champs ici pour masquer", "formInput": "Entrer le libelé du formulaire", "formHelpText": "Ajouter du texte d'assitance", diff --git a/packages/nc-gui/lang/id.json b/packages/nc-gui/lang/id.json index daf72071bf..492ebd2ee1 100644 --- a/packages/nc-gui/lang/id.json +++ b/packages/nc-gui/lang/id.json @@ -406,7 +406,7 @@ "deleteProject": "Apakah Anda ingin menghapus proyek?", "shareBasePrivate": "Menghasilkan basis readonly yang dapat dibagikan secara publik", "shareBasePublic": "Siapa pun di Internet dengan tautan ini dapat dilihat", - "userInviteNoSMTP": "Sepertinya Anda belum mengonfigurasi mailer! \\ n Harap salin tautan undangan di atas dan kirimkan ke", + "userInviteNoSMTP": "Sepertinya Anda belum mengonfigurasi mailer!\nHarap salin tautan undangan di atas dan kirimkan ke", "dragDropHide": "Seret dan jatuhkan bidang di sini untuk bersembunyi", "formInput": "Masukkan label input formulir", "formHelpText": "Tambahkan beberapa teks bantuan", diff --git a/packages/nc-gui/lang/it_IT.json b/packages/nc-gui/lang/it_IT.json index 7b2794914a..a74dfa80b0 100644 --- a/packages/nc-gui/lang/it_IT.json +++ b/packages/nc-gui/lang/it_IT.json @@ -406,7 +406,7 @@ "deleteProject": "Vuoi cancellare il progetto?", "shareBasePrivate": "Genera base readonly condivisibile pubblicamente condivisa", "shareBasePublic": "Chiunque su Internet con questo link può visualizzare", - "userInviteNoSMTP": "Sembra che non abbia ancora configurato mailer! \\ n Si prega di copiare sopra Invita link e invialo a", + "userInviteNoSMTP": "Sembra che non abbia ancora configurato mailer!\nSi prega di copiare sopra Invita link e invialo a", "dragDropHide": "Trascina e rilascia i campi qui per nascondersi", "formInput": "Inserisci l'etichetta di input del modulo", "formHelpText": "Aggiungi un po 'di testo di aiuto", diff --git a/packages/nc-gui/lang/iw.json b/packages/nc-gui/lang/iw.json index 3eeb0ed33d..5d9bb95537 100644 --- a/packages/nc-gui/lang/iw.json +++ b/packages/nc-gui/lang/iw.json @@ -406,7 +406,7 @@ "deleteProject": "האם ברצונך למחוק את הפרויקט?", "shareBasePrivate": "ליצור בסיס שיתוף פעולה לציבור", "shareBasePublic": "כל אחד באינטרנט עם קישור זה יכול להציג", - "userInviteNoSMTP": "נראה כאילו לא הגדרת מיילר עדיין! \\ N אנא העתק מעל הזמנת קישור ולשלוח אותו", + "userInviteNoSMTP": "נראה כאילו לא הגדרת מיילר עדיין!\nאנא העתק מעל הזמנת קישור ולשלוח אותו", "dragDropHide": "גרור ושחרר שדות כאן כדי להסתיר", "formInput": "הזן תווית קלט טופס", "formHelpText": "הוסף טקסט עזרה", diff --git a/packages/nc-gui/lang/ko.json b/packages/nc-gui/lang/ko.json index 1b575fe9b0..3a2289723a 100644 --- a/packages/nc-gui/lang/ko.json +++ b/packages/nc-gui/lang/ko.json @@ -406,7 +406,7 @@ "deleteProject": "프로젝트를 삭제 하시겠습니까?", "shareBasePrivate": "공개적으로 공유 할 수있는 ReadOnly Base를 생성합니다", "shareBasePublic": "이 링크가있는 인터넷의 모든 사람은 볼 수 있습니다", - "userInviteNoSMTP": "아직 메일러를 구성하지 않은 것처럼 보입니다! \\ n 초대장 링크를 복사하여 보냅니다.", + "userInviteNoSMTP": "아직 메일러를 구성하지 않은 것처럼 보입니다!\n초대장 링크를 복사하여 보냅니다.", "dragDropHide": "여기에서 필드를 드래그 앤 드롭하십시오", "formInput": "양식 입력 레이블을 입력하십시오", "formHelpText": "도움말 텍스트를 추가하십시오", diff --git a/packages/nc-gui/lang/no.json b/packages/nc-gui/lang/no.json index 0bd7f595a2..2ec0c7e3d8 100644 --- a/packages/nc-gui/lang/no.json +++ b/packages/nc-gui/lang/no.json @@ -406,7 +406,7 @@ "deleteProject": "Ønsker du å slette prosjektet?", "shareBasePrivate": "Generer offentlig delbar readonly base", "shareBasePublic": "Alle på Internett med denne lenken kan se", - "userInviteNoSMTP": "Ser ut som om du ikke har konfigurert mailer ennå! \\ n Vennligst kopier over Inviter Link og send den til", + "userInviteNoSMTP": "Ser ut som om du ikke har konfigurert mailer ennå!\nVennligst kopier over Inviter Link og send den til", "dragDropHide": "Dra og slipp felt her for å skjule", "formInput": "Skriv inn skjema inngangsetikett", "formHelpText": "Legg til litt hjelpetekst", diff --git a/packages/nc-gui/lang/pt.json b/packages/nc-gui/lang/pt.json index a204de5d89..d4d489e815 100644 --- a/packages/nc-gui/lang/pt.json +++ b/packages/nc-gui/lang/pt.json @@ -406,7 +406,7 @@ "deleteProject": "Você quer excluir o projeto?", "shareBasePrivate": "Gerar base readonly compartilhável publicamente", "shareBasePublic": "Qualquer pessoa na internet com este link pode ver", - "userInviteNoSMTP": "Parece que você ainda não configurou o mailer! \\ n por favor copie o link acima do convite e envie-o para", + "userInviteNoSMTP": "Parece que você ainda não configurou o mailer!\npor favor copie o link acima do convite e envie-o para", "dragDropHide": "Arraste e solte os campos aqui para se esconder", "formInput": "Digite a etiqueta de entrada do formulário", "formHelpText": "Adicione um texto de ajuda", diff --git a/packages/nc-gui/lang/pt_BR.json b/packages/nc-gui/lang/pt_BR.json index 54c13efae1..3627b0df5d 100644 --- a/packages/nc-gui/lang/pt_BR.json +++ b/packages/nc-gui/lang/pt_BR.json @@ -406,7 +406,7 @@ "deleteProject": "Você quer excluir o projeto?", "shareBasePrivate": "Gerar base readonly compartilhável publicamente", "shareBasePublic": "Qualquer pessoa na internet com este link pode ver", - "userInviteNoSMTP": "Parece que você ainda não configurou o mailer! \\ n por favor copie o link acima do convite e envie-o para", + "userInviteNoSMTP": "Parece que você ainda não configurou o mailer!\npor favor copie o link acima do convite e envie-o para", "dragDropHide": "Arraste e solte os campos aqui para se esconder", "formInput": "Digite a etiqueta de entrada do formulário", "formHelpText": "Adicione um texto de ajuda", diff --git a/packages/nc-gui/lang/sv.json b/packages/nc-gui/lang/sv.json index a986fae372..abcec5f18f 100644 --- a/packages/nc-gui/lang/sv.json +++ b/packages/nc-gui/lang/sv.json @@ -406,7 +406,7 @@ "deleteProject": "Vill du radera projektet?", "shareBasePrivate": "Generera offentligt delbar readonly base", "shareBasePublic": "Någon på internet med den här länken kan visa", - "userInviteNoSMTP": "Det verkar som om du inte har konfigurerat Mailer än! \\ n Vänligen kopiera ovanför bjudningslänk och skicka den till", + "userInviteNoSMTP": "Det verkar som om du inte har konfigurerat Mailer än!\nVänligen kopiera ovanför bjudningslänk och skicka den till", "dragDropHide": "Dra och släpp fält här för att dölja", "formInput": "Ange formulärinmatningslabel", "formHelpText": "Lägg till lite hjälptext", diff --git a/packages/nc-gui/lang/th.json b/packages/nc-gui/lang/th.json index bdc1962808..72323bb29c 100644 --- a/packages/nc-gui/lang/th.json +++ b/packages/nc-gui/lang/th.json @@ -406,7 +406,7 @@ "deleteProject": "คุณต้องการลบโครงการหรือไม่", "shareBasePrivate": "สร้างฐาน Readonly ที่ใช้ร่วมกันได้อย่างเปิดเผย", "shareBasePublic": "ทุกคนบนอินเทอร์เน็ตด้วยลิงค์นี้สามารถดูได้", - "userInviteNoSMTP": "ดูเหมือนว่าคุณยังไม่ได้กำหนดค่าเมล! \\ n โปรดคัดลอกลิงก์เชิญด้านบนและส่งไปที่", + "userInviteNoSMTP": "ดูเหมือนว่าคุณยังไม่ได้กำหนดค่าเมล!\nโปรดคัดลอกลิงก์เชิญด้านบนและส่งไปที่", "dragDropHide": "ลากและวางฟิลด์ที่นี่เพื่อซ่อน", "formInput": "ป้อนป้ายชื่ออินพุตแบบฟอร์ม", "formHelpText": "เพิ่มข้อความช่วยเหลือบางอย่าง", diff --git a/packages/nc-gui/lang/uk.json b/packages/nc-gui/lang/uk.json index 2219460f0c..42a51612c5 100644 --- a/packages/nc-gui/lang/uk.json +++ b/packages/nc-gui/lang/uk.json @@ -406,7 +406,7 @@ "deleteProject": "Ви хочете видалити проект?", "shareBasePrivate": "Генерувати загальнодоступну групою", "shareBasePublic": "Будь-хто в Інтернеті за допомогою цього посилання може переглядати", - "userInviteNoSMTP": "Схоже, ви ще не налаштували Mailer! \\ n Будь ласка, скопіюйте вище посилання на запрошення і надішліть його", + "userInviteNoSMTP": "Схоже, ви ще не налаштували Mailer!\nБудь ласка, скопіюйте вище посилання на запрошення і надішліть його", "dragDropHide": "Перетягніть поля тут, щоб приховати", "formInput": "Введіть етикетку введення форми", "formHelpText": "Додайте деякий текст довідки", diff --git a/packages/nc-gui/lang/vi.json b/packages/nc-gui/lang/vi.json index 912edd1cac..f8acd20ca8 100644 --- a/packages/nc-gui/lang/vi.json +++ b/packages/nc-gui/lang/vi.json @@ -406,7 +406,7 @@ "deleteProject": "Bạn có muốn xóa dự án?", "shareBasePrivate": "Tạo cơ sở chỉ đọc chia sẻ công khai", "shareBasePublic": "Bất cứ ai trên Internet với liên kết này có thể xem", - "userInviteNoSMTP": "Có vẻ như bạn chưa định cấu hình Mailer! \\ n Vui lòng sao chép liên kết mời trên và gửi nó đến", + "userInviteNoSMTP": "Có vẻ như bạn chưa định cấu hình Mailer!\nVui lòng sao chép liên kết mời trên và gửi nó đến", "dragDropHide": "Kéo và thả các trường ở đây để ẩn", "formInput": "Nhập nhãn đầu vào Mẫu", "formHelpText": "Thêm một số văn bản trợ giúp", From c43d4b79e42d35423b97f44e35d9d16616391d0e Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 19 Apr 2022 16:55:03 +0800 Subject: [PATCH 08/10] fix: switch to new API Signed-off-by: Wing-Kam Wong --- packages/nc-gui/components/auth/userManagement.vue | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/nc-gui/components/auth/userManagement.vue b/packages/nc-gui/components/auth/userManagement.vue index 5ceecfb81a..e2f1126266 100644 --- a/packages/nc-gui/components/auth/userManagement.vue +++ b/packages/nc-gui/components/auth/userManagement.vue @@ -612,16 +612,7 @@ export default { }, async resendInvite(id) { try { - await this.$axios.post('/admin/resendInvite/' + id, { - projectName: this.$store.getters['project/GtrProjectName'] - }, { - headers: { - 'xc-auth': this.$store.state.users.token - }, - params: { - project_id: this.$route.params.project_id - } - }) + await this.$api.auth.projectUserResendInvite(this.$route.params.project_id, id) this.$toast.success('Invite email sent successfully').goAway(3000) await this.loadUsers() } catch (e) { From bec52ac6c2bed0c76761fa090a3ef7b5e776e2a9 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 19 Apr 2022 16:55:51 +0800 Subject: [PATCH 09/10] refactor: show useful message when no email plugin is configured Signed-off-by: Wing-Kam Wong --- .../src/lib/noco/meta/api/projectUserApis.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts index a6f299cda3..6e4423f08d 100644 --- a/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts +++ b/packages/nocodb/src/lib/noco/meta/api/projectUserApis.ts @@ -9,10 +9,11 @@ import User from '../../../noco-models/User'; import { Tele } from 'nc-help'; import Audit from '../../../noco-models/Audit'; import NocoCache from '../../../noco-cache/NocoCache'; -import { CacheGetType, CacheScope } from '../../../utils/globals'; +import { CacheGetType, CacheScope, MetaTable } from '../../../utils/globals'; import * as ejs from 'ejs'; import NcPluginMgrv2 from '../helpers/NcPluginMgrv2'; import Noco from '../../Noco'; +import { PluginCategory } from 'nocodb-sdk'; async function userList(req, res) { res.json({ @@ -230,6 +231,17 @@ async function projectUserInviteResend(req, res): Promise { invite_token_expires: new Date(Date.now() + 24 * 60 * 60 * 1000) }); + const pluginData = await Noco.ncMeta.metaGet2(null, null, MetaTable.PLUGIN, { + category: PluginCategory.EMAIL, + active: true + }); + + if (!pluginData) { + NcError.badRequest( + `No Email Plugin is found. Please go to App Store to configure first or copy the invitation URL to users instead.` + ); + } + await sendInviteEmail(user.email, invite_token, req); Audit.insert({ From 0d87dd159c23d516fc55df6712d0d835643d16d0 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 19 Apr 2022 17:43:19 +0800 Subject: [PATCH 10/10] docs: add projectUserResendInvite Signed-off-by: Wing-Kam Wong --- packages/noco-docs/content/en/developer-resources/rest-apis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/noco-docs/content/en/developer-resources/rest-apis.md b/packages/noco-docs/content/en/developer-resources/rest-apis.md index 7998fd33ae..a5434926f1 100644 --- a/packages/noco-docs/content/en/developer-resources/rest-apis.md +++ b/packages/noco-docs/content/en/developer-resources/rest-apis.md @@ -70,6 +70,7 @@ Here's the overview of all APIs. For the details, please check out