From f4511893e1a39f74c54269648e95471fdbde1a79 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 29 Dec 2023 09:13:14 -0800 Subject: [PATCH] Support all URI schemes --- src/documents/serialisers.py | 3 +- src/documents/utils.py | 378 +++++++++++++++++++++++++++++++++++ 2 files changed, 380 insertions(+), 1 deletion(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index b6be62d9b..0c36a32b5 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -41,6 +41,7 @@ from documents.models import UiSettings from documents.parsers import is_mime_type_supported from documents.permissions import get_groups_with_only_permission from documents.permissions import set_permissions_for_object +from documents.utils import ALL_URL_SCHEMES # https://www.django-rest-framework.org/api-guide/serializers/#example @@ -499,7 +500,7 @@ class CustomFieldInstanceSerializer(serializers.ModelSerializer): and data["value"] is not None and len(data["value"]) > 0 ): - URLValidator()(data["value"]) + URLValidator(schemes=ALL_URL_SCHEMES)(data["value"]) return data def reflect_doclinks( diff --git a/src/documents/utils.py b/src/documents/utils.py index b84c9b53c..2206ea4b5 100644 --- a/src/documents/utils.py +++ b/src/documents/utils.py @@ -40,3 +40,381 @@ def copy_file_with_basic_stats( shutil.copy(source, dest) copy_basic_file_stats(source, dest) + + +ALL_URL_SCHEMES = [ + "aaa", + "aaas", + "about", + "acap", + "acct", + "acd", + "acr", + "adiumxtra", + "adt", + "afp", + "afs", + "aim", + "amss", + "android", + "appdata", + "apt", + "ar", + "ark", + "at", + "attachment", + "aw", + "barion", + "bb", + "beshare", + "bitcoin", + "bitcoincash", + "blob", + "bolo", + "brid", + "browserext", + "cabal", + "calculator", + "callto", + "cap", + "cast", + "casts", + "chrome", + "chrome-extension", + "cid", + "coap", + "coap+tcp", + "coap+ws", + "coaps", + "coaps+tcp", + "coaps+ws", + "com-eventbrite-attendee", + "content", + "content-type", + "crid", + "cstr", + "cvs", + "dab", + "dat", + "data", + "dav", + "dhttp", + "diaspora", + "dict", + "did", + "dis", + "dlna-playcontainer", + "dlna-playsingle", + "dns", + "dntp", + "doi", + "dpp", + "drm", + "drop", + "dtmi", + "dtn", + "dvb", + "dvx", + "dweb", + "ed2k", + "eid", + "elsi", + "embedded", + "ens", + "ethereum", + "example", + "facetime", + "fax", + "feed", + "feedready", + "fido", + "file", + "filesystem", + "finger", + "first-run-pen-experience", + "fish", + "fm", + "ftp", + "fuchsia-pkg", + "geo", + "gg", + "git", + "gitoid", + "gizmoproject", + "go", + "gopher", + "graph", + "grd", + "gtalk", + "h323", + "ham", + "hcap", + "hcp", + "http", + "https", + "hxxp", + "hxxps", + "hydrazone", + "hyper", + "iax", + "icap", + "icon", + "im", + "imap", + "info", + "iotdisco", + "ipfs", + "ipn", + "ipns", + "ipp", + "ipps", + "irc", + "irc6", + "ircs", + "iris", + "iris.beep", + "iris.lwz", + "iris.xpc", + "iris.xpcs", + "isostore", + "itms", + "jabber", + "jar", + "jms", + "keyparc", + "lastfm", + "lbry", + "ldap", + "ldaps", + "leaptofrogans", + "lid", + "lorawan", + "lpa", + "lvlt", + "magnet", + "mailserver", + "mailto", + "maps", + "market", + "matrix", + "message", + "microsoft.windows.camera", + "microsoft.windows.camera.multipicker", + "microsoft.windows.camera.picker", + "mid", + "mms", + "modem", + "mongodb", + "moz", + "ms-access", + "ms-appinstaller", + "ms-browser-extension", + "ms-calculator", + "ms-drive-to", + "ms-enrollment", + "ms-excel", + "ms-eyecontrolspeech", + "ms-gamebarservices", + "ms-gamingoverlay", + "ms-getoffice", + "ms-help", + "ms-infopath", + "ms-inputapp", + "ms-launchremotedesktop", + "ms-lockscreencomponent-config", + "ms-media-stream-id", + "ms-meetnow", + "ms-mixedrealitycapture", + "ms-mobileplans", + "ms-newsandinterests", + "ms-officeapp", + "ms-people", + "ms-project", + "ms-powerpoint", + "ms-publisher", + "ms-remotedesktop", + "ms-remotedesktop-launch", + "ms-restoretabcompanion", + "ms-screenclip", + "ms-screensketch", + "ms-search", + "ms-search-repair", + "ms-secondary-screen-controller", + "ms-secondary-screen-setup", + "ms-settings", + "ms-settings-airplanemode", + "ms-settings-bluetooth", + "ms-settings-camera", + "ms-settings-cellular", + "ms-settings-cloudstorage", + "ms-settings-connectabledevices", + "ms-settings-displays-topology", + "ms-settings-emailandaccounts", + "ms-settings-language", + "ms-settings-location", + "ms-settings-lock", + "ms-settings-nfctransactions", + "ms-settings-notifications", + "ms-settings-power", + "ms-settings-privacy", + "ms-settings-proximity", + "ms-settings-screenrotation", + "ms-settings-wifi", + "ms-settings-workplace", + "ms-spd", + "ms-stickers", + "ms-sttoverlay", + "ms-transit-to", + "ms-useractivityset", + "ms-virtualtouchpad", + "ms-visio", + "ms-walk-to", + "ms-whiteboard", + "ms-whiteboard-cmd", + "ms-word", + "msnim", + "msrp", + "msrps", + "mss", + "mt", + "mtqp", + "mumble", + "mupdate", + "mvn", + "news", + "nfs", + "ni", + "nih", + "nntp", + "notes", + "num", + "ocf", + "oid", + "onenote", + "onenote-cmd", + "opaquelocktoken", + "openid", + "openpgp4fpr", + "otpauth", + "p1", + "pack", + "palm", + "paparazzi", + "payment", + "payto", + "pkcs11", + "platform", + "pop", + "pres", + "prospero", + "proxy", + "pwid", + "psyc", + "pttp", + "qb", + "query", + "quic-transport", + "redis", + "rediss", + "reload", + "res", + "resource", + "rmi", + "rsync", + "rtmfp", + "rtmp", + "rtsp", + "rtsps", + "rtspu", + "sarif", + "secondlife", + "secret-token", + "service", + "session", + "sftp", + "sgn", + "shc", + "shttp (OBSOLETE)", + "sieve", + "simpleledger", + "simplex", + "sip", + "sips", + "skype", + "smb", + "smp", + "sms", + "smtp", + "snews", + "snmp", + "soap.beep", + "soap.beeps", + "soldat", + "spiffe", + "spotify", + "ssb", + "ssh", + "starknet", + "steam", + "stun", + "stuns", + "submit", + "svn", + "swh", + "swid", + "swidpath", + "tag", + "taler", + "teamspeak", + "tel", + "teliaeid", + "telnet", + "tftp", + "things", + "thismessage", + "tip", + "tn3270", + "tool", + "turn", + "turns", + "tv", + "udp", + "unreal", + "upt", + "urn", + "ut2004", + "uuid-in-package", + "v-event", + "vemmi", + "ventrilo", + "ves", + "videotex", + "vnc", + "view-source", + "vscode", + "vscode-insiders", + "vsls", + "w3", + "wais", + "web3", + "wcr", + "webcal", + "web+ap", + "wifi", + "wpid", + "ws", + "wss", + "wtai", + "wyciwyg", + "xcon", + "xcon-userid", + "xfire", + "xmlrpc.beep", + "xmlrpc.beeps", + "xmpp", + "xri", + "ymsgr", + "z39.50", + "z39.50r", + "z39.50s", +] # pragma: no cover