diff --git a/app/src/plugins/app/_config/main.ts b/app/src/plugins/app/_config/main.ts index f4a812b..ce04206 100644 --- a/app/src/plugins/app/_config/main.ts +++ b/app/src/plugins/app/_config/main.ts @@ -2,6 +2,7 @@ import { createApp } from 'vue' import { IonicVue } from '@ionic/vue' import { loadFonts } from './webfontloader' import vuetify from './vuetify' +import { registerQuillUrlSanitizer } from './quill.util' import loader from 'vue-loading-overlay' import App from './App.vue' @@ -29,6 +30,7 @@ import 'vue-loading-overlay/dist/vue-loading.css' import '@vuepic/vue-datepicker/dist/main.css' loadFonts() +registerQuillUrlSanitizer() const options: Options = { axios: { diff --git a/app/src/plugins/app/_config/quill.util.ts b/app/src/plugins/app/_config/quill.util.ts new file mode 100644 index 0000000..f05a829 --- /dev/null +++ b/app/src/plugins/app/_config/quill.util.ts @@ -0,0 +1,24 @@ +import { Quill } from '@vueup/vue-quill' + +export function registerQuillUrlSanitizer() { + const Link = Quill.import('formats/link') + + class CustomLinkSanitizer extends Link { + static sanitize(url) { + const sanitizedUrl = super.sanitize(url) + + if (!sanitizedUrl || sanitizedUrl === 'about:blank') return sanitizedUrl + + const protocolWhhitelist = ['http', 'https', 'mailto', 'tel', 'radar', 'rdar', 'smb', 'sms'] + const hasWhitelistedProtocol = protocolWhhitelist.some(function(protocol) { + return sanitizedUrl.startsWith(protocol) + }) + + if (hasWhitelistedProtocol) return sanitizedUrl + + return `https://${sanitizedUrl}` + } + } + + Quill.register(CustomLinkSanitizer, true) +} \ No newline at end of file