mirror of
https://github.com/librekeys/in.suyogtandel.picoforge.git
synced 2026-07-28 08:01:19 -07:00
94 lines
2.5 KiB
Python
94 lines
2.5 KiB
Python
# ONLY handle appids that need to use `org.flathub.VerifiedApps.txt`
|
|
|
|
import sys
|
|
import re
|
|
from publicsuffixlist import PublicSuffixList
|
|
|
|
LOGINS = (
|
|
"com.github.",
|
|
"com.gitlab.",
|
|
"io.github.",
|
|
"io.gitlab.",
|
|
"org.gnome.gitlab.",
|
|
"org.gnome.World.",
|
|
"org.gnome.design",
|
|
"org.kde.",
|
|
"org.gnome.",
|
|
)
|
|
|
|
|
|
def demangle(name: str) -> str:
|
|
if name.startswith("_"):
|
|
name = name[1:]
|
|
return name.replace("_", "-")
|
|
|
|
|
|
def get_domain(appid: str) -> str:
|
|
ret_none = "None"
|
|
|
|
if appid.startswith(LOGINS) or appid.count(".") < 2:
|
|
return ret_none
|
|
|
|
if appid.endswith(".BaseApp"):
|
|
return ret_none
|
|
|
|
# correctly checking for extension requires checking out
|
|
# untrusted code from PRs so rely on some heuristics
|
|
|
|
if appid.split(".")[-2].lower() in (
|
|
"addon",
|
|
"addons",
|
|
"extension",
|
|
"extensions",
|
|
"plugin",
|
|
"plugins",
|
|
):
|
|
return ret_none
|
|
|
|
if appid.startswith(
|
|
(
|
|
"org.freedesktop.Platform.",
|
|
"org.freedesktop.Sdk.",
|
|
"org.gnome.Platform.",
|
|
"org.gnome.Sdk.",
|
|
"org.gtk.Gtk3theme.",
|
|
"org.kde.KStyle.",
|
|
"org.kde.Platform.",
|
|
"org.kde.PlatformInputContexts.",
|
|
"org.kde.PlatformTheme.",
|
|
"org.kde.Sdk.",
|
|
"org.kde.WaylandDecoration.",
|
|
"org.freedesktop.LinuxAudio.",
|
|
)
|
|
):
|
|
return ret_none
|
|
|
|
elif appid.startswith(
|
|
("io.frama.", "page.codeberg.", "io.sourceforge.", "net.sourceforge.")
|
|
):
|
|
tld, domain, name = appid.split(".")[0:3]
|
|
name = demangle(name)
|
|
if domain == "sourceforge":
|
|
return f"{name}.{domain}.io".lower()
|
|
else:
|
|
return f"{name}.{domain}.{tld}".lower()
|
|
elif appid.startswith(("io.sourceforge.", "net.sourceforge.")):
|
|
[tld, domain, projectname] = appid.split(".")[0:3]
|
|
projectname = demangle(projectname)
|
|
return f"{projectname}.{domain}.io".lower()
|
|
else:
|
|
fqdn = ".".join(reversed(appid.split("."))).lower()
|
|
psl = PublicSuffixList()
|
|
if psl.is_private(fqdn):
|
|
return demangle(psl.privatesuffix(fqdn))
|
|
else:
|
|
return ".".join(
|
|
reversed([demangle(i) for i in appid.split(".")[:-1]])
|
|
).lower()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# PR title as input "(Aa)dd com.foo.bar"
|
|
appid = re.sub(r"^\s*add\s+", "", sys.argv[1], flags=re.IGNORECASE)
|
|
print(get_domain(appid).strip())
|