From 00573d6b17f19eb95c136cf30241af5b8c480271 Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Tue, 28 Jul 2026 04:50:40 +0800 Subject: [PATCH] Add Wizarr app --- apps/wizarr/2026.7.1/.env.sample | 4 ++ apps/wizarr/2026.7.1/data.yml | 51 +++++++++++++++++ apps/wizarr/2026.7.1/docker-compose.yml | 38 +++++++++++++ apps/wizarr/2026.7.1/scripts/init.sh | 58 +++++++++++++++++++ apps/wizarr/2026.7.1/scripts/uninstall.sh | 2 + apps/wizarr/2026.7.1/scripts/upgrade.sh | 4 ++ apps/wizarr/README.md | 65 ++++++++++++++++++++++ apps/wizarr/data.yml | 30 ++++++++++ apps/wizarr/logo.png | Bin 0 -> 28306 bytes 9 files changed, 252 insertions(+) create mode 100644 apps/wizarr/2026.7.1/.env.sample create mode 100644 apps/wizarr/2026.7.1/data.yml create mode 100644 apps/wizarr/2026.7.1/docker-compose.yml create mode 100755 apps/wizarr/2026.7.1/scripts/init.sh create mode 100755 apps/wizarr/2026.7.1/scripts/uninstall.sh create mode 100755 apps/wizarr/2026.7.1/scripts/upgrade.sh create mode 100644 apps/wizarr/README.md create mode 100644 apps/wizarr/data.yml create mode 100644 apps/wizarr/logo.png diff --git a/apps/wizarr/2026.7.1/.env.sample b/apps/wizarr/2026.7.1/.env.sample new file mode 100644 index 000000000..4d1b8c68b --- /dev/null +++ b/apps/wizarr/2026.7.1/.env.sample @@ -0,0 +1,4 @@ +PANEL_APP_PORT_HTTP=5690 +TIME_ZONE=Etc/UTC +APP_DATA_DIR=./data +CONTAINER_NAME= diff --git a/apps/wizarr/2026.7.1/data.yml b/apps/wizarr/2026.7.1/data.yml new file mode 100644 index 000000000..6d0db3a18 --- /dev/null +++ b/apps/wizarr/2026.7.1/data.yml @@ -0,0 +1,51 @@ +additionalProperties: + formFields: + - default: 5690 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + label: + en: Port + zh: 端口 + zh-Hant: 埠 + ja: ポート + ko: 포트 + ru: Порт + ms: Port + pt-br: Porta + required: true + rule: paramPort + type: number + - default: Etc/UTC + edit: true + envKey: TIME_ZONE + labelEn: Time Zone + labelZh: 时区 + label: + en: Time Zone + zh: 时区 + zh-Hant: 時區 + ja: タイムゾーン + ko: 시간대 + ru: Часовой пояс + ms: Zon Masa + pt-br: Fuso Horario + required: true + type: text + - default: ./data + edit: true + envKey: APP_DATA_DIR + labelEn: Data Directory + labelZh: 数据目录 + label: + en: Data Directory + zh: 数据目录 + zh-Hant: 資料目錄 + ja: データディレクトリ + ko: 데이터 디렉터리 + ru: Каталог данных + ms: Direktori Data + pt-br: Diretorio de Dados + required: true + type: text diff --git a/apps/wizarr/2026.7.1/docker-compose.yml b/apps/wizarr/2026.7.1/docker-compose.yml new file mode 100644 index 000000000..6e67588e3 --- /dev/null +++ b/apps/wizarr/2026.7.1/docker-compose.yml @@ -0,0 +1,38 @@ +services: + wizarr: + image: "ghcr.io/wizarrrr/wizarr:v2026.7.1@sha256:606f9b88b0303daae11f595e424756b588d9365021c53dcb4d1369f2efc0543c" + container_name: ${CONTAINER_NAME} + restart: unless-stopped + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:5690" + environment: + - PUID=1000 + - PGID=1000 + - DISABLE_BUILTIN_AUTH=false + - PORT=5690 + - TZ=${TIME_ZONE} + security_opt: + - no-new-privileges:true + cap_drop: + - ALL + cap_add: + - CHOWN + - SETUID + - SETGID + - DAC_OVERRIDE + healthcheck: + test: ["CMD", "sh", "-c", "curl -fs http://localhost:5690/health || exit 1"] + interval: 30s + timeout: 5s + start_period: 60s + retries: 3 + volumes: + - "${APP_DATA_DIR}:/data/database" + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/wizarr/2026.7.1/scripts/init.sh b/apps/wizarr/2026.7.1/scripts/init.sh new file mode 100755 index 000000000..291e7954a --- /dev/null +++ b/apps/wizarr/2026.7.1/scripts/init.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)" +ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}" + +read_env_value() { + local key="$1" + [[ -f "$ENV_FILE" ]] || return 0 + local value + value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)" + case "$value" in + \"*\") value="${value#\"}"; value="${value%\"}" ;; + \'*\') value="${value#\'}"; value="${value%\'}" ;; + esac + printf '%s\n' "$value" +} + +prepare_data_directory() { + local raw path + raw="${APP_DATA_DIR:-}" + if [[ -z "$raw" ]]; then + raw="$(read_env_value APP_DATA_DIR)" + fi + raw="${raw:-./data}" + + [[ -n "$raw" ]] || { + printf '%s\n' 'APP_DATA_DIR must not be empty' >&2 + exit 1 + } + if [[ "$raw" = /* ]]; then + printf '%s\n' 'APP_DATA_DIR must be relative to the application version directory' >&2 + exit 1 + fi + + path="$(realpath -m -- "$ROOT_DIR/${raw#./}")" + case "$path" in + "$ROOT_DIR"/*) ;; + *) + printf '%s\n' 'APP_DATA_DIR must remain inside the application version directory' >&2 + exit 1 + ;; + esac + + install -d -m 0750 "$path" + path="$(realpath -e -- "$path")" + case "$path" in + "$ROOT_DIR"/*) ;; + *) + printf '%s\n' 'APP_DATA_DIR resolves outside the application version directory' >&2 + exit 1 + ;; + esac + + chmod 0750 "$path" +} + +prepare_data_directory diff --git a/apps/wizarr/2026.7.1/scripts/uninstall.sh b/apps/wizarr/2026.7.1/scripts/uninstall.sh new file mode 100755 index 000000000..6e877466e --- /dev/null +++ b/apps/wizarr/2026.7.1/scripts/uninstall.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +set -euo pipefail diff --git a/apps/wizarr/2026.7.1/scripts/upgrade.sh b/apps/wizarr/2026.7.1/scripts/upgrade.sh new file mode 100755 index 000000000..692e341e2 --- /dev/null +++ b/apps/wizarr/2026.7.1/scripts/upgrade.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail + +"$(dirname "$0")/init.sh" diff --git a/apps/wizarr/README.md b/apps/wizarr/README.md new file mode 100644 index 000000000..5eda9c07d --- /dev/null +++ b/apps/wizarr/README.md @@ -0,0 +1,65 @@ +# Wizarr + +## 产品介绍 + +Wizarr 是 Plex、Jellyfin、Emby、Audiobookshelf、Romm、Komga 和 Kavita 的邀请与用户管理系统。管理员可以生成邀请链接,并为新用户提供分步骤的媒体应用配置引导。 + +## 主要功能 + +- 管理多个媒体服务器及其用户和媒体库权限 +- 创建限时、限次或分级邀请 +- 配置邀请前后引导步骤和应用下载说明 +- 集成 Overseerr、Ombi、Discord、LDAP、OIDC 和 WebAuthn +- 提供活动记录、通知和 REST API + +## 访问说明 + +安装后通过 `http://<服务器 IP>:<端口>` 访问,实际端口以 `PANEL_APP_PORT_HTTP` 为准。 + +首次访问会进入 `/setup/` 创建管理员。内置认证被强制保留,管理员密码至少 8 位并须包含大写字母、小写字母和数字。首次管理员创建前,任何能够访问该端口的人都可能抢先注册管理员;安装后应立即完成设置,并在此之前只允许可信管理网络访问。生产环境应使用带 HTTPS 和访问限制的反向代理。 + +## 数据持久化 + +`APP_DATA_DIR` 挂载到容器的 `/data/database`,保存 SQLite 数据库、会话和应用密钥。该路径必须位于应用版本目录内,默认 `./data`;安装脚本会拒绝绝对路径和目录逃逸。升级、迁移或卸载前请备份此目录,卸载不会删除绑定目录中的数据。 + +## 安全与漏洞警告 + +- 2026-07-28 对固定镜像的 Trivy 扫描结果为 `0 Critical / 10 High`,对应 8 个不同漏洞:pyasn1 `CVE-2026-59885`、`CVE-2026-59886`;Mako `CVE-2026-41205`、`CVE-2026-44307`;c-ares `CVE-2026-33630`;curl/libcurl `CVE-2026-5773`、`CVE-2026-6276`(各由两个包重复报告);PostCSS `GHSA-r28c-9q8g-f849`。 +- 默认网络服务不使用 Mako 生成模板,PostCSS 只用于上游镜像构建,curl/c-ares 只由固定的 `localhost` 健康检查使用;这些路径不接收用户文件、URL、Host、Cookie 或源映射。pyasn1 风险位于可选 LDAP 集成的 ASN.1 解析路径,默认未配置 LDAP,但恶意或失陷的 LDAP 端点可能触发拒绝服务。 +- 所有漏洞均已有上游修复版本。应只连接可信媒体、LDAP 和通知服务,限制管理端访问,并在 Wizarr 发布经过验证的更新镜像后尽快升级。 +- 容器入口仅为创建指定 UID/GID 和修正数据库目录属主而短暂使用 root;实际应用进程以 UID/GID `1000:1000` 运行。容器丢弃全部 capabilities,仅恢复入口所需的 `CHOWN`、`SETUID`、`SETGID` 和 `DAC_OVERRIDE`;最后一项用于重启时穿越已由 UID 1000 持有的 `0750` 数据目录。容器启用 `no-new-privileges`。 + +## Introduction + +Wizarr is an invitation and user management system for Plex, Jellyfin, Emby, Audiobookshelf, Romm, Komga, and Kavita. Administrators can create invitation links and guide new users through media application setup. + +## Features + +- Manage users and library permissions across multiple media servers +- Create expiring, limited-use, and tiered invitations +- Configure pre-invite and post-invite onboarding steps +- Integrate with Overseerr, Ombi, Discord, LDAP, OIDC, and WebAuthn +- Activity records, notifications, and a REST API + +## Usage Notes + +- Access the service at `http://:`. Built-in authentication is forced on. +- The first visit opens `/setup/` to create an administrator. Until that account exists, anyone who can reach the port could claim the first administrator. Complete setup immediately on a trusted management network, then use an access-controlled HTTPS reverse proxy for production. +- The administrator password must contain uppercase, lowercase, and numeric characters and be at least eight characters long. Login attempts are limited by the application. +- `APP_DATA_DIR` persists the SQLite database, sessions, and application keys at `/data/database`. It must remain inside the application version directory. Back it up before upgrades or migrations; uninstall does not delete it. + +## Security And Vulnerability Warning + +- A 2026-07-28 Trivy scan of the pinned image reports `0 Critical / 10 High`, covering eight distinct findings: pyasn1 `CVE-2026-59885` and `CVE-2026-59886`; Mako `CVE-2026-41205` and `CVE-2026-44307`; c-ares `CVE-2026-33630`; curl/libcurl `CVE-2026-5773` and `CVE-2026-6276`, each reported for both packages; and PostCSS `GHSA-r28c-9q8g-f849`. +- The default network service does not render Mako templates, PostCSS is build-time only, and curl/c-ares are used only by the fixed localhost health check. Those paths receive no user file, URL, Host, Cookie, or source-map input. The pyasn1 findings apply to the optional LDAP integration; LDAP is disabled by default, but a malicious or compromised LDAP endpoint could cause denial of service. +- Fixed upstream versions exist for every finding. Connect only trusted media, LDAP, and notification services, restrict management access, and upgrade promptly when Wizarr publishes a verified refreshed image. +- The entrypoint uses root briefly to create the configured UID/GID and fix database ownership. The application processes then run as UID/GID `1000:1000`. All capabilities are dropped except `CHOWN`, `SETUID`, `SETGID`, and `DAC_OVERRIDE`; the last capability lets the entrypoint traverse the UID-1000-owned `0750` data directory on restart. `no-new-privileges` is enabled. + +## References + +- Project: +- Installation: +- Reverse proxy: +- Release: +- License: (MIT) +- Logo: (official project asset from the MIT-licensed source tree) diff --git a/apps/wizarr/data.yml b/apps/wizarr/data.yml new file mode 100644 index 000000000..e328eec25 --- /dev/null +++ b/apps/wizarr/data.yml @@ -0,0 +1,30 @@ +name: Wizarr +tags: + - Media +title: 媒体服务器邀请与用户管理工具 +description: 媒体服务器邀请与用户管理工具 +additionalProperties: + key: wizarr + name: Wizarr + tags: + - Media + shortDescZh: 媒体服务器邀请与用户管理工具 + shortDescEn: Media server invitation and user management + description: + en: Media server invitation and user management + zh: 媒体服务器邀请与用户管理工具 + zh-Hant: 媒體伺服器邀請與使用者管理工具 + ja: メディアサーバーの招待およびユーザー管理ツール + ko: 미디어 서버 초대 및 사용자 관리 도구 + ru: Управление приглашениями и пользователями медиасервера + ms: Pengurusan jemputan dan pengguna pelayan media + pt-br: Gerenciamento de convites e usuarios de servidor de midia + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.wizarr.dev/ + github: https://github.com/wizarrrr/wizarr + document: https://docs.wizarr.dev/getting-started/installation + architectures: + - amd64 + - arm64 diff --git a/apps/wizarr/logo.png b/apps/wizarr/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..730414ada93a1ccde4b7b3067a1371013c397f52 GIT binary patch literal 28306 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 L8faAhXB+W