diff --git a/backend/src/app/rpc/mutations/verify_token.clj b/backend/src/app/rpc/mutations/verify_token.clj index f6bd0b290..dbae70834 100644 --- a/backend/src/app/rpc/mutations/verify_token.clj +++ b/backend/src/app/rpc/mutations/verify_token.clj @@ -12,7 +12,7 @@ [app.loggers.audit :as audit] [app.rpc.mutations.teams :as teams] [app.rpc.queries.profile :as profile] - [app.util.services :as sv] + [app.util.services :as sv] [clojure.spec.alpha :as s] [cuerdas.core :as str])) @@ -114,15 +114,25 @@ {:is-active true} {:id member-id})) (assoc member :is-active true) - + ;; Delete the invitation (db/delete! conn :team-invitation {:team-id team-id :email-to (str/lower member-email)}))) - + (defmethod process-token :team-invitation [cfg {:keys [profile-id token]} {:keys [member-id] :as claims}] (us/assert ::team-invitation-claims claims) + #_(let [conn (:conn cfg) + team-id (:team-id claims) + member-email (:member-email claims) + invitation (db/get-by-params conn :team-invitation + {:team-id team-id :email-to (str/lower member-email)} + {:check-not-found false})] + (when (nil? invitation) + (ex/raise :type :validation + :code :invalid-token))) + (cond ;; This happens when token is filled with member-id and current ;; user is already logged in with exactly invited account. diff --git a/frontend/src/app/main/ui/auth/verify_token.cljs b/frontend/src/app/main/ui/auth/verify_token.cljs index 1f6a7c9aa..20cf4efcc 100644 --- a/frontend/src/app/main/ui/auth/verify_token.cljs +++ b/frontend/src/app/main/ui/auth/verify_token.cljs @@ -11,6 +11,7 @@ [app.main.repo :as rp] [app.main.store :as st] [app.main.ui.icons :as i] + [app.main.ui.static :as static] [app.util.dom :as dom] [app.util.i18n :as i18n :refer [tr]] [app.util.router :as rt] @@ -59,7 +60,8 @@ (mf/defc verify-token [{:keys [route] :as props}] - (let [token (get-in route [:query-params :token])] + (let [token (get-in route [:query-params :token]) + bad-token (mf/use-state false)] (mf/use-effect (fn [] (dom/set-html-title (tr "title.default")) @@ -69,13 +71,10 @@ (handle-token tdata)) (fn [{:keys [type code] :as error}] (cond - (and (= :validation type) + (or (= :validation type) (= :invalid-token code) (= :token-expired (:reason error))) - (let [msg (tr "errors.token-expired")] - (ts/schedule 100 #(st/emit! (dm/error msg))) - (st/emit! (rt/nav :auth-login))) - + (reset! bad-token true) (= :email-already-exists code) (let [msg (tr "errors.email-already-exists")] (ts/schedule 100 #(st/emit! (dm/error msg))) @@ -91,5 +90,10 @@ (ts/schedule 100 #(st/emit! (dm/error msg))) (st/emit! (rt/nav :auth-login))))))))) - [:div.verify-token - i/loader-pencil])) + (if @bad-token + [:> static/static-header {} + [:div.image i/unchain] + [:div.main-message (tr "errors.invite-invalid")] + [:div.desc-message (tr "errors.invite-invalid.info")]] + [:div.verify-token + i/loader-pencil]))) diff --git a/frontend/translations/ar.po b/frontend/translations/ar.po index c1af242ae..970b2686a 100644 --- a/frontend/translations/ar.po +++ b/frontend/translations/ar.po @@ -539,9 +539,6 @@ msgstr "التسجيل معطل حاليا." msgid "errors.terms-privacy-agreement-invalid" msgstr "يجب أن تقبل شروط الخدمة وسياسة الخصوصية الخاصة بنا." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "انتهت صلاحية الرمز" #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" diff --git a/frontend/translations/ca.po b/frontend/translations/ca.po index e35e4e4fd..22c98e847 100644 --- a/frontend/translations/ca.po +++ b/frontend/translations/ca.po @@ -701,10 +701,6 @@ msgstr "" "Heu d'acceptar les nostres condicions del servei i la política de " "privacitat." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "El codi ha caducat" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "S'ha produït un error inesperat." diff --git a/frontend/translations/de.po b/frontend/translations/de.po index 4d9310d0f..56ad00622 100644 --- a/frontend/translations/de.po +++ b/frontend/translations/de.po @@ -700,10 +700,6 @@ msgstr "" "Sie müssen unsere Nutzungsbedingungen und Datenschutzrichtlinien " "akzeptieren." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "Token abgelaufen" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "Ein unerwarteter Fehler ist aufgetreten." diff --git a/frontend/translations/en.po b/frontend/translations/en.po index 46081d3e3..9b8d65519 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -729,8 +729,12 @@ msgid "errors.terms-privacy-agreement-invalid" msgstr "You must accept our terms of service and privacy policy." #: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "Token expired" +msgid "errors.invite-invalid" +msgstr "Invite invalid" + +msgid "errors.invite-invalid.info" +msgstr "This invite might be canceled or may be expired." + #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 0aa4de77c..20ff6a5bc 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -730,8 +730,12 @@ msgid "errors.terms-privacy-agreement-invalid" msgstr "Debes aceptar nuestros términos de servicio y política de privacidad." #: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "Token expirado" +msgid "errors.invite-invalid" +msgstr "Invitación inválida" + +msgid "errors.invite-invalid.info" +msgstr "Esta invitación puede haber sido cancelada o ha expirado." + #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" diff --git a/frontend/translations/fr.po b/frontend/translations/fr.po index 88c306d11..69642842d 100644 --- a/frontend/translations/fr.po +++ b/frontend/translations/fr.po @@ -596,10 +596,6 @@ msgstr "" "Vous devez accepter nos conditions générales d'utilisation et notre " "politique de confidentialité." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "Jeton expiré" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "Une erreur inattendue s’est produite" diff --git a/frontend/translations/he.po b/frontend/translations/he.po index 81c531816..56a228872 100644 --- a/frontend/translations/he.po +++ b/frontend/translations/he.po @@ -673,10 +673,6 @@ msgstr "הבעלים לא יכולים לעזוב את הקבוצה, עליך ל msgid "errors.terms-privacy-agreement-invalid" msgstr "עליך לקבל את תנאי השירות ואת מדיניות הפרטיות." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "תוקף האסימון פג" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "אירעה שגיאה בלתי צפויה." diff --git a/frontend/translations/pt_BR.po b/frontend/translations/pt_BR.po index 1e5824f4a..b029f171d 100644 --- a/frontend/translations/pt_BR.po +++ b/frontend/translations/pt_BR.po @@ -518,10 +518,6 @@ msgstr "O registro de contas está desativado no momento." msgid "errors.terms-privacy-agreement-invalid" msgstr "Você deve aceitar nossos termos de serviço e política de privacidade." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "Token expirado" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "Um erro inesperado ocorreu." diff --git a/frontend/translations/ro.po b/frontend/translations/ro.po index 14f72441b..d517ef5f7 100644 --- a/frontend/translations/ro.po +++ b/frontend/translations/ro.po @@ -509,10 +509,6 @@ msgstr "Înregistrarea este dezactivată în prezent." msgid "errors.terms-privacy-agreement-invalid" msgstr "Trebuie să acceptați termenii serviciului și politica de confidențialitate." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "Codul este expirat" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "A apărut o eroare neașteptată." diff --git a/frontend/translations/ru.po b/frontend/translations/ru.po index 6435831d1..223b15139 100644 --- a/frontend/translations/ru.po +++ b/frontend/translations/ru.po @@ -692,10 +692,6 @@ msgstr "Нужно переназначить роль владельца пер msgid "errors.terms-privacy-agreement-invalid" msgstr "Вы должны принять наши правила использования и политику конфиденциальности." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "Токен истёк" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "Произошла ошибка." diff --git a/frontend/translations/tr.po b/frontend/translations/tr.po index 8d635e19b..5c3549f68 100644 --- a/frontend/translations/tr.po +++ b/frontend/translations/tr.po @@ -692,10 +692,6 @@ msgstr "Sahip takımdan ayrılamaz, sahip rolünü yeniden atamanız gerekir." msgid "errors.terms-privacy-agreement-invalid" msgstr "Hizmet şartlarımızı ve gizlilik politikamızı kabul etmelisin." -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "Jetonun süresi geçti" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "Beklenmedik bir hata oluştu." diff --git a/frontend/translations/zh_CN.po b/frontend/translations/zh_CN.po index e12aed3cd..fad641b40 100644 --- a/frontend/translations/zh_CN.po +++ b/frontend/translations/zh_CN.po @@ -644,10 +644,6 @@ msgstr "当前禁止注册。" msgid "errors.terms-privacy-agreement-invalid" msgstr "你必须接受我们的使用条例和隐私政策。" -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "令牌已过期" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "发生了意料之外的错误。" diff --git a/frontend/translations/zh_Hant.po b/frontend/translations/zh_Hant.po index 9627b07e1..1c09f5ae2 100644 --- a/frontend/translations/zh_Hant.po +++ b/frontend/translations/zh_Hant.po @@ -583,10 +583,6 @@ msgstr "目前並不開放註冊。" msgid "errors.terms-privacy-agreement-invalid" msgstr "您必須接受我們的服務條款和隱私權政策。" -#: src/app/main/ui/auth/verify_token.cljs -msgid "errors.token-expired" -msgstr "權杖過期" - #: src/app/main/data/media.cljs, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/handoff/exports.cljs msgid "errors.unexpected-error" msgstr "發生了預料之外的錯誤。"