touchportal-appimage
maintainer Webdo
· 2 votes
· scanned 2026-08-18 00:03:42.021799
LOW
View on AUR ↗
Why flagged
The package downloads a prebuilt AppImage from the official project domain touch-portal.com, which is not on the whitelist but is plausibly legitimate; the AppImage is checksummed and used to extract assets for proper system integration, with no obfuscated code or remote execution beyond standard AppImage use.
Triggered rules
LOW
AI review downgraded a static finding
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package downloads a prebuilt AppImage from the official project domain touch-portal.com, which is not on the whitelist but is plausibly legitimate; the AppImage is checksummed and used to extract assets for proper system integration, with no obfuscated code or remote execution beyond standard AppImage use.
1 higher static finding superseded - not the current verdict (shown for transparency)
MEDIUM
source=() URL on a non-standard host
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:17
source_x86_64=("${_appimage}::https://www.touch-portal.com/downloads/releases/linux/TouchPortal.AppImage")
PKGBUILD
1 offending line(s) highlighted
1
# Based on the template from https://daveparrish.net/posts/2019-11-16-Better-AppImage-PKGBUILD-template.html
2
# Maintainer: Gelmo <gelmo[at]outlook.com>
3
4
_pkgname=touchportal
5
appname=TouchPortal
6
7
pkgname="${_pkgname}"-appimage
8
pkgver=4.6.0.2
9
pkgrel=1
10
pkgdesc="Remote macro control deck for PC and Mac OS for streamers, content creators and other professionals"
11
arch=('x86_64')
12
url="https://www.touch-portal.com"
13
license=('custom')
14
depends=('zlib' 'hicolor-icon-theme' 'fuse2')
15
options=(!strip)
16
_appimage="${appname}-${pkgver}.AppImage"
17
source_x86_64=("${_appimage}::https://www.touch-portal.com/downloads/releases/linux/TouchPortal.AppImage")
18
noextract=("${_appimage}")
19
sha256sums_x86_64=('af0069ef283fd04196b3a4efb0ed4b3c5b3cdcdad21a6cdb5376bed194613343')
20
21
prepare() {
22
chmod +x "${_appimage}"
23
./"${_appimage}" --appimage-extract
24
}
25
26
build() {
27
# Adjust .desktop so it will work outside of AppImage container
28
sed -i -E "s|Exec=${appname}|Exec=env DESKTOPINTEGRATION=false APPIMAGELAUNCHER_DISABLE=true /usr/bin/${_pkgname}|"\
29
"squashfs-root/${appname}.desktop"
30
# Fix permissions; .AppImage permissions are 700 for all directories
31
chmod -R a-x+rX squashfs-root/usr
32
}
33
34
package() {
35
# AppImage
36
install -Dm755 "${srcdir}/${_appimage}" "${pkgdir}/opt/${pkgname}/${pkgname}.AppImage"
37
38
# Desktop file
39
install -Dm644 "${srcdir}/squashfs-root/${appname}.desktop"\
40
"${pkgdir}/usr/share/applications/${appname}.desktop"
41
42
# Icon images
43
install -dm755 "${pkgdir}/usr/share/"
44
cp -a "${srcdir}/squashfs-root/usr/share/icons" "${pkgdir}/usr/share/"
45
46
# Symlink executable
47
install -dm755 "${pkgdir}/usr/bin"
48
ln -s "/opt/${pkgname}/${pkgname}.AppImage" "${pkgdir}/usr/bin/${_pkgname}"
49
}
50
Changes since previous scan
--- PKGBUILD @ 2026-06-20 16:03+++ PKGBUILD @ 2026-08-18 00:03@@ -5,7 +5,7 @@ appname=TouchPortal pkgname="${_pkgname}"-appimage-pkgver=4.5.0+pkgver=4.6.0.2 pkgrel=1 pkgdesc="Remote macro control deck for PC and Mac OS for streamers, content creators and other professionals" arch=('x86_64')@@ -16,7 +16,7 @@ _appimage="${appname}-${pkgver}.AppImage" source_x86_64=("${_appimage}::https://www.touch-portal.com/downloads/releases/linux/TouchPortal.AppImage") noextract=("${_appimage}")-sha256sums_x86_64=('1f2cc0f9854aa1d95b474262a701eb2bb86cb41981dbc4ee65b6aaa8b751d1a7')+sha256sums_x86_64=('af0069ef283fd04196b3a4efb0ed4b3c5b3cdcdad21a6cdb5376bed194613343') prepare() { chmod +x "${_appimage}"Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-18 00:03:42 | LOW | 2 |
| 2026-08-17 00:18:29 | LOW | 2 |
| 2026-08-16 00:03:42 | LOW | 2 |
| 2026-08-15 00:26:13 | LOW | 2 |
| 2026-08-14 00:03:41 | LOW | 2 |
| 2026-08-13 00:17:07 | LOW | 2 |
| 2026-08-12 00:27:08 | LOW | 2 |
| 2026-08-11 17:21:34 | MEDIUM | 1 |
| 2026-06-20 16:03:41 | CLEAN | 2 |
| 2026-06-20 00:50:07 | MEDIUM | 2 |
| 2026-06-20 00:18:46 | MEDIUM | 2 |
| 2026-06-19 23:51:18 | MEDIUM | 2 |
| 2026-06-19 19:07:35 | LOW | 2 |
| 2026-06-19 18:54:17 | LOW | 2 |
| 2026-06-18 16:11:54 | MEDIUM | 1 |