Skip to content

Commit

Permalink
Add message when opening some links in desktop client
Browse files Browse the repository at this point in the history
Co-authored-by: nig <nig@tutao.de>
  • Loading branch information
charlag and ganthern committed Sep 26, 2023
1 parent 6412878 commit 88ecad1
Show file tree
Hide file tree
Showing 16 changed files with 222 additions and 116 deletions.
42 changes: 30 additions & 12 deletions src/desktop/ApplicationWindow.ts
Expand Up @@ -417,26 +417,44 @@ export class ApplicationWindow {
} else if (parsedUrl.protocol === "file:") {
// this also works for raw file paths without protocol
log.warn(TAG, "prevented file url from being opened by shell")
} else {
// we never open any new windows directly from the renderer
// except for links in mails etc. so open them in the browser
this.electron.shell.openExternal(parsedUrl.toString()).catch((e) => {
log.warn("failed to open external url", details.url, e)
this.electron.dialog.showMessageBox({
title: lang.get("showURL_alt"),
buttons: [lang.get("ok_action")],
defaultId: 0,
message: lang.get("couldNotOpenLink_msg", { "{link}": details.url }),
type: "error",
} else if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
this.electron.dialog
.showMessageBox({
type: "warning",
buttons: [lang.get("yes_label"), lang.get("no_label")],
title: lang.get("suspiciousLink_title"),
message: lang.get("suspiciousLink_msg", { "{url}": parsedUrl.toString() }),
defaultId: 1, // default button is "no"
})
})
.then(({ response }) => {
if (response === 0) {
this.doOpenLink(parsedUrl, details)
}
})
} else {
this.doOpenLink(parsedUrl, details)
}

return {
action: "deny",
}
}

private doOpenLink(parsedUrl: URL, details: Electron.HandlerDetails) {
// we never open any new windows directly from the renderer
// except for links in mails etc. so open them in the browser
this.electron.shell.openExternal(parsedUrl.toString()).catch((e) => {
log.warn("failed to open external url", details.url, e)
this.electron.dialog.showMessageBox({
title: lang.get("showURL_alt"),
buttons: [lang.get("ok_action")],
defaultId: 0,
message: lang.get("couldNotOpenLink_msg", { "{link}": details.url }),
type: "error",
})
})
}

private reRegisterShortcuts() {
this.localShortcut.unregisterAll(this._browserWindow)

Expand Down
2 changes: 2 additions & 0 deletions src/misc/TranslationKey.ts
Expand Up @@ -1563,3 +1563,5 @@ export type TranslationKeyType =
| "yourMessage_label"
| "you_label"
| "emptyString_msg"
| "suspiciousLink_title"
| "suspiciousLink_msg"
13 changes: 12 additions & 1 deletion src/translations/be.ts
Expand Up @@ -13,7 +13,7 @@ export default {
"other"
],
"created_at": "2022-02-03T06:52:08Z",
"updated_at": "2023-09-20T12:53:04Z",
"updated_at": "2023-09-21T21:51:38Z",
"source_locale": null,
"fallback_locale": null,
"keys": {
Expand Down Expand Up @@ -94,6 +94,7 @@ export default {
"all_contacts_label": "Усе кантакты",
"all_label": "Усе",
"alreadyReplied_msg": "Ты адказаў на гэтае запрашэнне",
"alreadySharedGroupMember_msg": "Ты ўжо чалец гэтай групы. Калі ласка, выдалісь з групы, перад тым як прыняць запрашэньне.",
"alwaysAsk_action": "Заўсёды запытвацца",
"alwaysReport_action": "Заўсёды паведамляць",
"amountUsedAndActivatedOf_label": "{used} выкарыстана, {active} актывавана з {totalAmount}",
Expand Down Expand Up @@ -172,6 +173,7 @@ export default {
"cancelUserAccounts_label": "Скасаваць {1} карыстальнік(аў)",
"cancel_action": "Скасаваць",
"cannotEditFullEvent_msg": "Ты можаш рэдагаваць толькі часткі гэтай падзеі, таму што яна была створана не ў тваім календары.",
"cannotEditSingleInstance_msg": "Ты можаш рэдагаваць толькі часткі гэтай падзеі, бо яна ёсьць часткаю сэрыі падзей.",
"canNotOpenFileOnDevice_msg": "Дадзены файл ня можа быць адчынены на гэтай прыладзе.",
"captchaDisplay_label": "Капча",
"captchaEnter_msg": "Калі ласка, увядзі час у гадзінах і хвілінах.",
Expand Down Expand Up @@ -233,6 +235,7 @@ export default {
"confirmDeleteSecondFactor_msg": "Ці ты сапраўды жадаеш выдаліць гэты другі крок?",
"confirmDeleteTemplateGroup_msg": "Ці ўпэўнены ты, што хочаш выдаліць спіс шаблонаў? Усе шаблоны ў ім будуць згубленыя і ня змогуць быць адноўленымі.",
"confirmFreeAccount_label": "Пацверджанне бясплатнага акаўнту",
"confirmLeaveSharedGroup_msg": "Ці ўпэўнены ты ў жаданні больш не карыстацца \"{groupName}\"? Пры неабходнасьці, уладальніку сьпісу кантактаў спатрэбіцца нанова запрасіць цябе.",
"confirmNoOtherFreeAccount_msg": "Мне не належаць аніякія іншыя бясплатныя акаўнты.",
"confirmPrivateUse_msg": "Я ня буду карыстацца гэтым акаўнтам для бізнэсу.",
"confirmSpamCustomFolder_msg": "Ці ты сапраўды жадаеш перасунуць тэчку '{1}' і ўвесь змест унутры яе (імэйлы, падтэчкі) у Спам?\n\nУсе імэйлы ўнутры будуць пазначаныя як спам.\n\nПустыя тэчкі выдаляцьмуцца назаўжды.",
Expand Down Expand Up @@ -766,6 +769,8 @@ export default {
"localAdmin_label": "Лакальны адмін",
"localDataSection_label": "Лакальныя даныя",
"location_label": "Месцазнаходжанне",
"lockdownModeNotSupported1_msg": "На тваёй прыладзе актываваны рэжым блякаваньня. Ён забароніць запуск будучых вэрсій Тутаноты.",
"lockdownModeNotSupported2_msg": "Калі ласка, дадай Тутаноту як выключэнне, або выключы рэжым блякавання.",
"loggingOut_msg": "Выхад з сістэмы ...",
"loginAbuseDetected_msg": "Ты больш ня можаш карыстацца сваім акаўнтам, бо правілы ды ўмовы карыстання Тутаноты былі парушаныя, напрыклад, распаўсюдам спаму.",
"loginCredentials_label": "Даныя для ўваходу",
Expand Down Expand Up @@ -995,6 +1000,7 @@ export default {
"paymentMethod_label": "Спосаб аплаты",
"paymentProcessingTime_msg": "Можа прайсці аж тыдзень, перад тым як ты пабачыш банкаўскія плацяжы ў сваім акаўнце.",
"paymentProviderNotAvailableError_msg": "На жаль, плацежны правайдар тымчасова недаступны. Калі ласка, паспрабуй ізноў пазней.",
"paymentReminderInternationalBankTransfer_msg": "Інтэрнацыянальныя банкаўскія плацяжы могуць несьці з сабою дадатковыя выдаткі, якія сьпісвацьмуцца з твайго дэпазыту.",
"payPalRedirect_msg": "Ты будзеш перанакіраваны на старонку PayPal",
"payPaypalChangeSourceError_msg": "Нажаль, плацежная трансакцыя не ўдалася. Калі ласка, абяры іншы плацежны метад у PayPal.",
"payPaypalConfirmAgainError_msg": "Нажаль, плацежная трансакцыя не ўдалася. Калі ласка, абнаві ды пацвердзі свае плацежныя даныя.",
Expand Down Expand Up @@ -1318,12 +1324,16 @@ export default {
"shareCalendarInvitationEmailBody_msg": "Вітаю, <br/>{inviter} запрасіў цябе далучыцца да календара \"{calendarName}\". Ты можаш праглядзець дэталі гэтага запрашэння ў аглядзе календара, каб прыняць ці адхіліць яго там.<br/><br/>Гэта аўтаматычнае паведамленне.",
"shareCalendarInvitationEmailSubject_msg": "Запрашэнне на ўдзел у календары",
"shareCalendarWarning_msg": "Усе ўдзельнікі календара будуць мець магчымасць пабачыць тваё імя і галоўны электроны адрас тваёй паштовай скрынцы.",
"shareContactListEmailBody_msg": "Здароў, <br/>{inviter} запрасіў цябе карыстацца сьпісам кантактаў \"{groupName}\". Ты можаш праглядзець падрабязнасьці запрашэння ў кантактах ды вырашыць, ці прыняць ці адхіліць яго.",
"shareContactListEmailSubject_msg": "Запрашэнне на карыстанне сьпісам кантактаў",
"sharedCalendarAlreadyMember_msg": "Ты ўжо з'яўляешся удзельнікам гэтага календара. Калі ты жадаеш прыняць новае запрашанне, ты мусіш спачатку скасаваць свой удзел.",
"sharedContactListDefaultName_label": "Сьпіс кантактаў ад {ownerName}",
"sharedContactLists_label": "Супольныя сьпісы кантактаў",
"sharedGroupAcceptEmailBody_msg": "Вітаю, {recipientName}, <br/>{invitee} прыняў тваё запрашэньне на карыстаньне \"{groupName}\".",
"sharedGroupDeclineEmailBody_msg": "Здароў, {recipientName}, <br/>{invitee} ня прыняў тваё запрашэнне на карыстанне \"{groupName}\".",
"sharedGroupParticipants_label": "Карыстальнікі з доступам да \"{groupName}\"",
"sharedMailboxCanNotSendConfidentialExternal_msg": "Прабач, на дадзены момант не магчыма дасылаць зашыфраваныя \"з-краю-ў-край\" паведамленьні з супольнай паштовай скрынкі.",
"sharedMailboxesMultiUser_msg": "Каб актываваць падтрымку шматкарыстальніцтва для карыстання супольнымі паштовымі скрынкамі на прыватных тарыфных плянах (Legend ды Revolutionary), калі ласка, скантактуй нашу службу падтрымкі.",
"sharedMailboxes_label": "Абагуленыя паштовыя скрынкі",
"sharedMailbox_label": "Абагуленая паштовая скрынка",
"sharedTemplateGroupDefaultName_label": "Шаблоны карыстальніка {ownerName}",
Expand Down Expand Up @@ -1531,6 +1541,7 @@ export default {
"waitingForApproval_msg": "На жаль, у дадзены момант ты ня можаш ані дасылаць, ані атрымліваць імэйлы, бо твой акаўнт мусіць быць разблакаваны. Гэты працэс неабходы, каб зрабіць рэгістрацыю бяспечнай і прадухіліць масіўную адначасовую рэгістрацыю. Звычайна, твой акаўнт мусіць быць ухвалены праз 48 гадзін. Дзякуй за тваю цярплівасць!",
"waitingForU2f_msg": "Чаканне ключа бяспекі...",
"wantToSendReport_msg": "Штосьці непрадказальна пайшло не туды. Ці хочаш ты даслаць справаздачу пра памылку? Ты можаш дадаць туды паведамленне, каб дапамагчы нам выправіць памылку.",
"webAssemblyNotSupported1_msg": "Твой аглядальнік не падтрымлівае WebAssembly і ня будзе падтрымлівацца ў будучых выданьнях Тутаноты.",
"webAssemblyNotSupported2_msg": "Калі ласка, абнаві аглядальнік, альбо спампуй нашу праграму.",
"weekNumber_label": "Тыдзень {week}",
"weekStart_label": "Пачатак тыдня",
Expand Down
4 changes: 3 additions & 1 deletion src/translations/de.ts
Expand Up @@ -1581,6 +1581,8 @@ export default {
"yourCalendars_label": "Deine Kalender",
"yourFolders_action": "DEINE ORDNER",
"yourMessage_label": "Deine Nachricht",
"you_label": "Du"
"you_label": "Du",
"suspiciousLink_title": "Verdächtiger Link",
"suspiciousLink_msg": "Bist du sicher, dass du \"{url}\" öffnen möchtest? Der Link könnte Programme auf deinem Gerät ausführen. Öffne nur Links, denen du vertraust."
}
}
4 changes: 3 additions & 1 deletion src/translations/de_sie.ts
Expand Up @@ -1581,6 +1581,8 @@ export default {
"yourCalendars_label": "Deine Kalender",
"yourFolders_action": "Ihre ORDNER",
"yourMessage_label": "Ihre Nachricht",
"you_label": "Sie"
"you_label": "Sie",
"suspiciousLink_title": "Verdächtiger Link",
"suspiciousLink_msg": "Sind Sie sicher, dass Sie \"{url}\" öffnen möchten? Der Link könnte Programme auf Ihrem Gerät ausführen. Öffnen Sie nur Links, denen Sie vertrauen."
}
}
10 changes: 5 additions & 5 deletions src/translations/el.ts
Expand Up @@ -11,7 +11,7 @@ export default {
"other"
],
"created_at": "2015-02-04T09:55:56Z",
"updated_at": "2023-09-20T12:53:04Z",
"updated_at": "2023-09-22T02:40:37Z",
"source_locale": {
"id": "fcd7471b347c8e517663e194dcddf237",
"name": "en",
Expand Down Expand Up @@ -1103,8 +1103,8 @@ export default {
"pricing.excludesTaxes_msg": "Προ φόρων.",
"pricing.extEmailProtection_label": "Email με προστασία κωδικού",
"pricing.extEmailProtection_tooltip": "Όλα τα email μεταξύ χρηστών Tutanota είναι αυτομάτως κρυπτογραφημένα. Μπορείτε να ανταλλάξετε κρυπτογραφημένα email με οποιονδήποτε στον κόσμο με έναν κοινό κωδικό.",
"pricing.familyLegend_tooltip": "Αφού επιλέξετε το Legend, επικοινωνήστε με την υποστήριξη, πατώντας το ερωτηματικό στα αριστερά του γραμματοκιβωτίου σας, ώστε να ενεργοποιήσουμε την υποστήριξη πολλαπλών χρηστών για την οικογένειά σας. Κάθε μέλος, θα λάβει ένα γραμματοκιβώτιο με 500 GB & 30 ψευδώνυμα διευθύνσεων email (€8 ανά χρήστη/μήνα). 500GB λαμβάνουν επίσης τα διαμοιραζόμενα γραμματοκιβώτια (8€/μήνα).",
"pricing.familyRevolutionary_tooltip": "Αφού επιλέξετε το Revolutionary, επικοινωνήστε με την υποστήριξη, πατώντας το ερωτηματικό στα αριστερά του γραμματοκιβωτίου σας, ώστε να ενεργοποιήσουμε την υποστήριξη πολλαπλών χρηστών για την οικογένειά σας. Κάθε μέλος, θα λάβει ένα γραμματοκιβώτιο με 20GB και 15 ψευδώνυμα διευθύνσεων email (χρέωση 3€ ανά χρήστη/μήνα). 20GB λαμβάνουν επίσης τα διαμοιραζόμενα γραμματοκιβώτια (3€/μήνα).",
"pricing.familyLegend_tooltip": "Αφού επιλέξετε το Legend, επικοινωνήστε με την υποστήριξη, πατώντας το ερωτηματικό στα αριστερά του γραμματοκιβωτίου σας, ώστε να ενεργοποιήσουμε την υποστήριξη πολλαπλών χρηστών για την οικογένειά σας. Κάθε μέλος, θα λάβει ένα γραμματοκιβώτιο με 500 GB & 30 ψευδώνυμα διευθύνσεων email (€8 ανά χρήστη/μήνα). 500 GB λαμβάνουν επίσης τα διαμοιραζόμενα γραμματοκιβώτια (8€/μήνα).",
"pricing.familyRevolutionary_tooltip": "Αφού επιλέξετε το Revolutionary, επικοινωνήστε με την υποστήριξη, πατώντας το ερωτηματικό στα αριστερά του γραμματοκιβωτίου σας, ώστε να ενεργοποιήσουμε την υποστήριξη πολλαπλών χρηστών για την οικογένειά σας. Κάθε μέλος, θα λάβει ένα γραμματοκιβώτιο με 20 GB και 15 ψευδώνυμα διευθύνσεων email (3€ ανά χρήστη/μήνα). 20GB λαμβάνουν επίσης τα διαμοιραζόμενα γραμματοκιβώτια (3€/μήνα).",
"pricing.family_label": "Οικογενειακή επιλογή",
"pricing.folders_label": "Απεριόριστοι φάκελοι",
"pricing.gdprDataProcessing_label": "Συμφωνία επεξεργασίας δεδομένων ΓΚΠΔ",
Expand Down Expand Up @@ -1197,7 +1197,7 @@ export default {
"referralSettings_label": "Συστήστε έναν φίλο",
"referralSignupCampaignError_msg": "Δεν είναι δυνατή η εγγραφή με προωθητικό κωδικό και με κωδικό παραπομπής ταυτόχρονα.",
"referralSignupInvalid_msg": "Προσπαθήσατε να εγγραφείτε με έναν άκυρο σύνδεσμο παραπομπής. Μπορείτε να συνεχίσετε την εγγραφή σας, αλλά η προωθητική ενέργεια παραπομπής δεν θα ισχύσει.",
"referralSignup_msg": "Είστε προσκεκλημένοι στην Tutanota! Επιλέξτε μια ετήσια συνδρομή Premium ή Teams & θα λάβετε έναν επιπλέον δωρεάν μήνα.",
"referralSignup_msg": "Είστε προσκεκλημένοι στην Tutanota! Επιλέξτε οποιοδήποτε ετήσιο συνδρομητικό πρόγραμμά μας & θα λάβετε έναν επιπλέον μήνα δωρεάν.",
"refresh_action": "Ανανέωση ",
"refund_label": "Επιστροφή χρημάτων",
"regeneratePassword_action": "Επανάκτηση",
Expand Down Expand Up @@ -1336,7 +1336,7 @@ export default {
"sharedGroupDeclineEmailBody_msg": "Γεια σου {recipientName}, {invitee} δεν αποδέχτηκε την πρόσκλησή σου για χρήση στο \"{groupName}\"",
"sharedGroupParticipants_label": "Χρήστες με πρόσβαση στο {groupName}",
"sharedMailboxCanNotSendConfidentialExternal_msg": "Λυπούμαστε, δεν είναι ακόμη δυνατή η αποστολή κρυπτογραφημένων ηλεκτρονικών μηνυμάτων σε εξωτερικούς παραλήπτες από κοινόχρηστο γραμματοκιβώτιο.",
"sharedMailboxesMultiUser_msg": "Για ιδιωτικά προγράμματα (Legend και Revolutionary) παρακαλούμε να έρθετε σε επικοινωνία με την υποστήριξή μας και να ζητηθεί η ενεργοποίηση υποστήριξης πολλαπλών χρηστών για τον λογαριασμό σας, ώστε να μπορείτε να χρησιμοποιείτε κοινόχρηστα γραμματοκιβώτια.",
"sharedMailboxesMultiUser_msg": "Για ιδιωτικά προγράμματα (Legend και Revolutionary) παρακαλούμε επικοινωνήστε με την υποστήριξή μας και ζητήστε ενεργοποίηση υποστήριξης πολλαπλών χρηστών για το λογαριασμό σας, ώστε να μπορείτε να χρησιμοποιείτε κοινόχρηστα γραμματοκιβώτια.",
"sharedMailboxes_label": "Κοινόχρηστα γραμματοκιβώτια",
"sharedMailbox_label": "Κοινόχρηστο γραμματοκιβώτιο",
"sharedTemplateGroupDefaultName_label": "Πρότυπα του {ownerName}",
Expand Down

0 comments on commit 88ecad1

Please sign in to comment.