From b601a5d952ced9fcb2eed71bc8eedc9c45c7019d Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Thu, 17 Sep 2026 16:09:26 +0800 Subject: [PATCH] Update chhoto-url app Rebuilt-from-PR: #6917 Source-PR: https://github.com/okxlin/appstore/pull/6917 Maintainer-workflow: appstore-pr-maintainer --- apps/chhoto-url/7.6.1/data.yml | 106 ------------- apps/chhoto-url/7.6.1/scripts/init.sh | 60 ------- apps/chhoto-url/{7.6.1 => 7.6.2}/.env.sample | 4 +- apps/chhoto-url/7.6.2/data.yml | 150 ++++++++++++++++++ .../chhoto-url/{7.6.1 => 7.6.2}/data/.gitkeep | 0 .../{7.6.1 => 7.6.2}/docker-compose.yml | 2 +- apps/chhoto-url/7.6.2/scripts/init.sh | 80 ++++++++++ .../{7.6.1 => 7.6.2}/scripts/uninstall.sh | 0 .../{7.6.1 => 7.6.2}/scripts/upgrade.sh | 0 apps/chhoto-url/README_en.md | 28 ++++ apps/chhoto-url/data.yml | 18 ++- apps/chhoto-url/latest/.env.sample | 7 - apps/chhoto-url/latest/data.yml | 106 ------------- apps/chhoto-url/latest/data/.gitkeep | 1 - apps/chhoto-url/latest/docker-compose.yml | 34 ---- apps/chhoto-url/latest/scripts/init.sh | 60 ------- apps/chhoto-url/latest/scripts/uninstall.sh | 4 - apps/chhoto-url/latest/scripts/upgrade.sh | 5 - apps/chhoto-url/logo.png | Bin 2706 -> 2681 bytes 19 files changed, 272 insertions(+), 393 deletions(-) delete mode 100644 apps/chhoto-url/7.6.1/data.yml delete mode 100755 apps/chhoto-url/7.6.1/scripts/init.sh rename apps/chhoto-url/{7.6.1 => 7.6.2}/.env.sample (58%) create mode 100644 apps/chhoto-url/7.6.2/data.yml rename apps/chhoto-url/{7.6.1 => 7.6.2}/data/.gitkeep (100%) rename apps/chhoto-url/{7.6.1 => 7.6.2}/docker-compose.yml (95%) create mode 100755 apps/chhoto-url/7.6.2/scripts/init.sh rename apps/chhoto-url/{7.6.1 => 7.6.2}/scripts/uninstall.sh (100%) rename apps/chhoto-url/{7.6.1 => 7.6.2}/scripts/upgrade.sh (100%) create mode 100644 apps/chhoto-url/README_en.md delete mode 100644 apps/chhoto-url/latest/.env.sample delete mode 100644 apps/chhoto-url/latest/data.yml delete mode 100644 apps/chhoto-url/latest/data/.gitkeep delete mode 100644 apps/chhoto-url/latest/docker-compose.yml delete mode 100755 apps/chhoto-url/latest/scripts/init.sh delete mode 100755 apps/chhoto-url/latest/scripts/uninstall.sh delete mode 100755 apps/chhoto-url/latest/scripts/upgrade.sh diff --git a/apps/chhoto-url/7.6.1/data.yml b/apps/chhoto-url/7.6.1/data.yml deleted file mode 100644 index 8b0895ea4..000000000 --- a/apps/chhoto-url/7.6.1/data.yml +++ /dev/null @@ -1,106 +0,0 @@ -additionalProperties: - formFields: - - default: 4567 - edit: true - envKey: PANEL_APP_PORT_HTTP - labelEn: HTTP Port - labelZh: HTTP 端口 - label: - en: HTTP Port - zh: HTTP 端口 - zh-Hant: HTTP 埠 - ja: HTTP ポート - ko: HTTP 포트 - ru: HTTP-порт - ms: Port HTTP - pt-br: Porta HTTP - required: true - rule: paramPort - type: number - - 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 - - edit: true - envKey: CHHOTO_PASSWORD - labelEn: Administrator Password - labelZh: 管理员密码 - label: - en: Administrator Password - zh: 管理员密码 - zh-Hant: 管理員密碼 - ja: 管理者パスワード - ko: 관리자 비밀번호 - ru: Пароль администратора - ms: Kata laluan pentadbir - pt-br: Senha do administrador - random: true - required: true - rule: paramComplexity - type: password - - edit: true - envKey: CHHOTO_API_KEY - labelEn: API Key - labelZh: API 密钥 - label: - en: API Key - zh: API 密钥 - zh-Hant: API 金鑰 - ja: API キー - ko: API 키 - ru: Ключ API - ms: Kunci API - pt-br: Chave de API - random: true - required: true - rule: paramComplexity - type: password - - default: "" - edit: true - envKey: CHHOTO_SITE_URL - labelEn: Public URL - labelZh: 公开访问地址 - label: - en: Public URL - zh: 公开访问地址 - zh-Hant: 公開存取位址 - ja: 公開 URL - ko: 공개 URL - ru: Публичный URL - ms: URL awam - pt-br: URL publico - required: false - type: text - - default: TEMPORARY - edit: true - envKey: CHHOTO_REDIRECT_METHOD - labelEn: Redirect Mode - labelZh: 跳转方式 - label: - en: Redirect Mode - zh: 跳转方式 - zh-Hant: 重新導向方式 - ja: リダイレクト方式 - ko: 리디렉션 방식 - ru: Режим перенаправления - ms: Mod ubah hala - pt-br: Modo de redirecionamento - required: true - type: select - values: - - label: TEMPORARY - value: TEMPORARY - - label: PERMANENT - value: PERMANENT diff --git a/apps/chhoto-url/7.6.1/scripts/init.sh b/apps/chhoto-url/7.6.1/scripts/init.sh deleted file mode 100755 index 7437617b3..000000000 --- a/apps/chhoto-url/7.6.1/scripts/init.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/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" - local value - [[ -f "$ENV_FILE" ]] || return 0 - value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)" - value="${value%$'\r'}" - case "$value" in - \"*\") value="${value#\"}"; value="${value%\"}" ;; - \'*\') value="${value#\'}"; value="${value%\'}" ;; - esac - printf '%s\n' "$value" -} - -DATA_DIR="${APP_DATA_DIR:-}" -if [[ -z "$DATA_DIR" ]]; then - DATA_DIR="$(read_env_value APP_DATA_DIR)" -fi -DATA_DIR="${DATA_DIR:-./data}" - -if [[ "$DATA_DIR" = /* ]]; then - RESOLVED_DATA_DIR="$(realpath -m -- "$DATA_DIR")" - if [[ -L "$DATA_DIR" ]]; then - printf 'APP_DATA_DIR must not be a symbolic link\n' >&2 - exit 1 - fi - if [[ -e "$RESOLVED_DATA_DIR" ]]; then - [[ -d "$RESOLVED_DATA_DIR" ]] || { - printf 'APP_DATA_DIR must refer to a directory\n' >&2 - exit 1 - } - [[ "$(stat -c '%u:%g' "$RESOLVED_DATA_DIR")" == '1000:1000' ]] || { - printf 'Existing absolute APP_DATA_DIR must be owned by UID/GID 1000:1000\n' >&2 - exit 1 - } - else - install -d -m 0750 -- "$RESOLVED_DATA_DIR" - if [[ "$(id -u)" -eq 0 ]]; then - chown 1000:1000 -- "$RESOLVED_DATA_DIR" - fi - fi -else - RESOLVED_DATA_DIR="$(realpath -m -- "$ROOT_DIR/${DATA_DIR#./}")" - case "$RESOLVED_DATA_DIR" in - "$ROOT_DIR"/*) ;; - *) - printf 'Relative APP_DATA_DIR must remain inside the application version directory\n' >&2 - exit 1 - ;; - esac - install -d -m 0750 -- "$RESOLVED_DATA_DIR" - if [[ "$(id -u)" -eq 0 ]]; then - chown 1000:1000 -- "$RESOLVED_DATA_DIR" - fi -fi diff --git a/apps/chhoto-url/7.6.1/.env.sample b/apps/chhoto-url/7.6.2/.env.sample similarity index 58% rename from apps/chhoto-url/7.6.1/.env.sample rename to apps/chhoto-url/7.6.2/.env.sample index 8baa6ab74..fcdb4fba1 100644 --- a/apps/chhoto-url/7.6.1/.env.sample +++ b/apps/chhoto-url/7.6.2/.env.sample @@ -1,7 +1,7 @@ CONTAINER_NAME=chhoto-url-compose-check PANEL_APP_PORT_HTTP=4567 APP_DATA_DIR=./data -CHHOTO_PASSWORD=replace-with-a-strong-password -CHHOTO_API_KEY=replace-with-a-long-random-api-key +CHHOTO_PASSWORD= +CHHOTO_API_KEY= CHHOTO_SITE_URL= CHHOTO_REDIRECT_METHOD=TEMPORARY diff --git a/apps/chhoto-url/7.6.2/data.yml b/apps/chhoto-url/7.6.2/data.yml new file mode 100644 index 000000000..761f324eb --- /dev/null +++ b/apps/chhoto-url/7.6.2/data.yml @@ -0,0 +1,150 @@ +additionalProperties: + formFields: + - default: 4567 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: HTTP Port + labelZh: HTTP 端口 + label: + en: HTTP Port + zh: HTTP 端口 + zh-hant: HTTP 埠 + ja: HTTP ポート + ko: HTTP 포트 + ru: HTTP-порт + ms: Port HTTP + pt-br: Porta HTTP + tr: HTTP Portu + es-es: Puerto HTTP + fa: پورت HTTP + lo: ພອດ HTTP + required: true + rule: paramPort + type: number + - 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 + tr: Veri dizini + es-es: Directorio de datos + fa: پوشه داده‌ها + lo: ໄດເຣັກະທໍລີຂໍ້ມູນ + required: true + type: text + - edit: true + envKey: CHHOTO_PASSWORD + labelEn: Administrator Password + labelZh: 管理员密码 + label: + en: Administrator Password + zh: 管理员密码 + zh-hant: 管理員密碼 + ja: 管理者パスワード + ko: 관리자 비밀번호 + ru: Пароль администратора + ms: Kata laluan pentadbir + pt-br: Senha do administrador + tr: Yönetici parolası + es-es: Contraseña de administrador + fa: گذرواژه مدیر + lo: ລະຫັດຜ່ານຜູ້ບໍລິຫານ + random: true + required: true + rule: paramComplexity + type: password + - edit: true + envKey: CHHOTO_API_KEY + labelEn: API Key + labelZh: API 密钥 + label: + en: API Key + zh: API 密钥 + zh-hant: API 金鑰 + ja: API キー + ko: API 키 + ru: Ключ API + ms: Kunci API + pt-br: Chave de API + tr: API anahtarı + es-es: Clave de API + fa: کلید API + lo: ຄີ API + random: true + required: true + rule: paramComplexity + type: password + - default: '' + edit: true + envKey: CHHOTO_SITE_URL + labelEn: Public URL + labelZh: 公开访问地址 + label: + en: Public URL + zh: 公开访问地址 + zh-hant: 公開存取位址 + ja: 公開 URL + ko: 공개 URL + ru: Публичный URL + ms: URL awam + pt-br: URL publico + tr: Genel URL + es-es: URL pública + fa: نشانی اینترنتی عمومی + lo: URL ສາທາລະນະ + required: false + type: text + - default: TEMPORARY + edit: true + envKey: CHHOTO_REDIRECT_METHOD + labelEn: Redirect Mode + labelZh: 跳转方式 + label: + en: Redirect Mode + zh: 跳转方式 + zh-hant: 重新導向方式 + ja: リダイレクト方式 + ko: 리디렉션 방식 + ru: Режим перенаправления + ms: Mod ubah hala + pt-br: Modo de redirecionamento + tr: Yönlendirme modu + es-es: Modo de redirección + fa: حالت تغییر مسیر + lo: ໂໝດປ່ຽນທິດທາງ + required: true + type: select + values: + - label: TEMPORARY + value: TEMPORARY + - label: PERMANENT + value: PERMANENT + - default: Asia/Shanghai + edit: true + envKey: TZ + labelEn: Timezone + labelZh: 时区 + label: + en: Timezone + zh: 时区 + zh-hant: 時區 + ja: タイムゾーン + ko: 시간대 + ru: Часовой пояс + ms: Zon waktu + pt-br: Fuso horário + tr: Saat dilimi + es-es: Zona horaria + fa: منطقه زمانی + lo: ເຂດເວລາ + required: true + type: text diff --git a/apps/chhoto-url/7.6.1/data/.gitkeep b/apps/chhoto-url/7.6.2/data/.gitkeep similarity index 100% rename from apps/chhoto-url/7.6.1/data/.gitkeep rename to apps/chhoto-url/7.6.2/data/.gitkeep diff --git a/apps/chhoto-url/7.6.1/docker-compose.yml b/apps/chhoto-url/7.6.2/docker-compose.yml similarity index 95% rename from apps/chhoto-url/7.6.1/docker-compose.yml rename to apps/chhoto-url/7.6.2/docker-compose.yml index 5c5b920ba..5465953b9 100644 --- a/apps/chhoto-url/7.6.1/docker-compose.yml +++ b/apps/chhoto-url/7.6.2/docker-compose.yml @@ -1,6 +1,6 @@ services: chhoto-url: - image: "sintan1729/chhoto-url:7.6.1" + image: "sintan1729/chhoto-url:7.6.2" container_name: ${CONTAINER_NAME} restart: always tty: true diff --git a/apps/chhoto-url/7.6.2/scripts/init.sh b/apps/chhoto-url/7.6.2/scripts/init.sh new file mode 100755 index 000000000..1568adc76 --- /dev/null +++ b/apps/chhoto-url/7.6.2/scripts/init.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +set -euo pipefail +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +export PATH + +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" +} + +configured_value() { + local key="$1" + local default_value="$2" + local value + value="${!key:-}" + if [[ -z "$value" ]]; then + value="$(read_env_value "$key")" + fi + printf '%s\n' "${value:-$default_value}" +} + +resolve_app_path() { + local key="$1" + local raw="$2" + local clean candidate resolved current part + local -a parts=() + case "$raw" in + ""|/*|.|..|../*|*/../*|*/..) echo "unsafe ${key} path" >&2; return 1 ;; + esac + if [[ "$raw" =~ [[:cntrl:]] ]]; then + echo "unsafe ${key} path" >&2 + return 1 + fi + clean="${raw#./}" + [[ -n "$clean" ]] || { echo "unsafe ${key} path" >&2; return 1; } + command -v realpath >/dev/null 2>&1 || { echo "realpath is required" >&2; return 1; } + candidate="$ROOT_DIR/$clean" + resolved="$(realpath -m -- "$candidate")" || { echo "unsafe ${key} path" >&2; return 1; } + case "$resolved" in + "$ROOT_DIR"/*) ;; + *) echo "unsafe ${key} path" >&2; return 1 ;; + esac + current="$ROOT_DIR" + IFS='/' read -r -a parts <<< "$clean" + for part in "${parts[@]}"; do + [[ -z "$part" || "$part" == "." ]] && continue + current="$current/$part" + if [[ -L "$current" ]]; then + echo "unsafe ${key} path" >&2 + return 1 + fi + done + printf '%s\n' "$resolved" +} + +ensure_dir() { + local key="$1" + local raw + local path + raw="$(configured_value "$key" "$2")" + path="$(resolve_app_path "$key" "$raw")" + mkdir -p -- "$path" + [[ "$(resolve_app_path "$key" "$raw")" == "$path" ]] || { echo "unsafe ${key} path" >&2; return 1; } +} + +ensure_dir "APP_DATA_DIR" "./data" + +APP_DATA_DIR_VALUE="$(configured_value "APP_DATA_DIR" "./data")" +DATA_DIR="$(resolve_app_path "APP_DATA_DIR" "$APP_DATA_DIR_VALUE")" +chown -R 1000:1000 -- "$DATA_DIR" diff --git a/apps/chhoto-url/7.6.1/scripts/uninstall.sh b/apps/chhoto-url/7.6.2/scripts/uninstall.sh similarity index 100% rename from apps/chhoto-url/7.6.1/scripts/uninstall.sh rename to apps/chhoto-url/7.6.2/scripts/uninstall.sh diff --git a/apps/chhoto-url/7.6.1/scripts/upgrade.sh b/apps/chhoto-url/7.6.2/scripts/upgrade.sh similarity index 100% rename from apps/chhoto-url/7.6.1/scripts/upgrade.sh rename to apps/chhoto-url/7.6.2/scripts/upgrade.sh diff --git a/apps/chhoto-url/README_en.md b/apps/chhoto-url/README_en.md new file mode 100644 index 000000000..ea853d5b9 --- /dev/null +++ b/apps/chhoto-url/README_en.md @@ -0,0 +1,28 @@ +# Chhoto URL + +## Introduction + +Chhoto URL is a lightweight, self-hosted URL shortener backed by SQLite. It +provides a small web interface and an API for creating and managing short +links. + +## Features + +- Lightweight Rust web application with a responsive frontend. +- SQLite persistence with optional WAL mode provided by the upstream image. +- Password and API-key authentication, configurable redirect behavior, and + optional public URL metadata. +- Data is stored below the configured application data directory and survives + upgrades and restarts. + +## Usage + +After installation, open the configured HTTP port in a browser. The main UI is +available at `/`; administrative link management is available at +`/admin/manage`. Use the generated administrator password for the web admin +interface and the generated API key for API clients. + +The default persistent directory is `./data`, mounted as `/data` in the +container. Back up this directory before maintenance or migration. The default +container serves plain HTTP, so put it behind an HTTPS reverse proxy before +exposing it to an untrusted network. diff --git a/apps/chhoto-url/data.yml b/apps/chhoto-url/data.yml index 69d1bf2f6..4aa505c5b 100644 --- a/apps/chhoto-url/data.yml +++ b/apps/chhoto-url/data.yml @@ -1,24 +1,28 @@ name: Chhoto URL tags: - - Tool +- Tool title: 轻量快速的自托管短链接服务 description: 轻量快速的自托管短链接服务 additionalProperties: key: chhoto-url name: Chhoto URL tags: - - Tool + - Tool shortDescZh: 轻量快速的自托管短链接服务 shortDescEn: A lightweight, fast, self-hosted URL shortener description: en: A lightweight, fast, self-hosted URL shortener zh: 轻量快速的自托管短链接服务 - zh-Hant: 輕量快速的自託管短連結服務 + zh-hant: 輕量快速的自託管短連結服務 ja: 軽量で高速なセルフホスト型短縮 URL サービス ko: 가볍고 빠른 자체 호스팅 단축 URL 서비스 ru: Легкий и быстрый самостоятельно размещаемый сервис коротких ссылок ms: Pemendek URL hos sendiri yang ringan dan pantas pt-br: Encurtador de URLs leve, rapido e auto-hospedado + tr: Hafif, hızlı ve kendi kendine barındırılan URL kısaltıcı + es-es: Acortador de URL ligero, rápido y autoalojado + fa: کوتاه‌کنندهٔ URL سبک، سریع و خودمیزبان + lo: ເຄື່ອງຫຍໍ້ URL ທີ່ເບົາ, ໄວ ແລະໂຮສຕ໌ເອງ type: tool crossVersionUpdate: true limit: 0 @@ -27,7 +31,7 @@ additionalProperties: github: https://github.com/SinTan1729/chhoto-url document: https://github.com/SinTan1729/chhoto-url/blob/main/docs/INSTALLATION.md architectures: - - amd64 - - arm64 - - armv7 - - riscv64 + - amd64 + - arm64 + - armv7 + - riscv64 diff --git a/apps/chhoto-url/latest/.env.sample b/apps/chhoto-url/latest/.env.sample deleted file mode 100644 index 8baa6ab74..000000000 --- a/apps/chhoto-url/latest/.env.sample +++ /dev/null @@ -1,7 +0,0 @@ -CONTAINER_NAME=chhoto-url-compose-check -PANEL_APP_PORT_HTTP=4567 -APP_DATA_DIR=./data -CHHOTO_PASSWORD=replace-with-a-strong-password -CHHOTO_API_KEY=replace-with-a-long-random-api-key -CHHOTO_SITE_URL= -CHHOTO_REDIRECT_METHOD=TEMPORARY diff --git a/apps/chhoto-url/latest/data.yml b/apps/chhoto-url/latest/data.yml deleted file mode 100644 index 8b0895ea4..000000000 --- a/apps/chhoto-url/latest/data.yml +++ /dev/null @@ -1,106 +0,0 @@ -additionalProperties: - formFields: - - default: 4567 - edit: true - envKey: PANEL_APP_PORT_HTTP - labelEn: HTTP Port - labelZh: HTTP 端口 - label: - en: HTTP Port - zh: HTTP 端口 - zh-Hant: HTTP 埠 - ja: HTTP ポート - ko: HTTP 포트 - ru: HTTP-порт - ms: Port HTTP - pt-br: Porta HTTP - required: true - rule: paramPort - type: number - - 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 - - edit: true - envKey: CHHOTO_PASSWORD - labelEn: Administrator Password - labelZh: 管理员密码 - label: - en: Administrator Password - zh: 管理员密码 - zh-Hant: 管理員密碼 - ja: 管理者パスワード - ko: 관리자 비밀번호 - ru: Пароль администратора - ms: Kata laluan pentadbir - pt-br: Senha do administrador - random: true - required: true - rule: paramComplexity - type: password - - edit: true - envKey: CHHOTO_API_KEY - labelEn: API Key - labelZh: API 密钥 - label: - en: API Key - zh: API 密钥 - zh-Hant: API 金鑰 - ja: API キー - ko: API 키 - ru: Ключ API - ms: Kunci API - pt-br: Chave de API - random: true - required: true - rule: paramComplexity - type: password - - default: "" - edit: true - envKey: CHHOTO_SITE_URL - labelEn: Public URL - labelZh: 公开访问地址 - label: - en: Public URL - zh: 公开访问地址 - zh-Hant: 公開存取位址 - ja: 公開 URL - ko: 공개 URL - ru: Публичный URL - ms: URL awam - pt-br: URL publico - required: false - type: text - - default: TEMPORARY - edit: true - envKey: CHHOTO_REDIRECT_METHOD - labelEn: Redirect Mode - labelZh: 跳转方式 - label: - en: Redirect Mode - zh: 跳转方式 - zh-Hant: 重新導向方式 - ja: リダイレクト方式 - ko: 리디렉션 방식 - ru: Режим перенаправления - ms: Mod ubah hala - pt-br: Modo de redirecionamento - required: true - type: select - values: - - label: TEMPORARY - value: TEMPORARY - - label: PERMANENT - value: PERMANENT diff --git a/apps/chhoto-url/latest/data/.gitkeep b/apps/chhoto-url/latest/data/.gitkeep deleted file mode 100644 index 8b1378917..000000000 --- a/apps/chhoto-url/latest/data/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/chhoto-url/latest/docker-compose.yml b/apps/chhoto-url/latest/docker-compose.yml deleted file mode 100644 index 5e16d8adc..000000000 --- a/apps/chhoto-url/latest/docker-compose.yml +++ /dev/null @@ -1,34 +0,0 @@ -services: - chhoto-url: - image: "sintan1729/chhoto-url:latest" - container_name: ${CONTAINER_NAME} - restart: always - tty: true - user: "1000:1000" - read_only: true - cap_drop: - - ALL - networks: - - 1panel-network - ports: - - "${PANEL_APP_PORT_HTTP}:4567" - environment: - - CHHOTO_DB_URL=/data/urls.sqlite - - CHHOTO_SQLITE_USE_WAL_MODE=True - - CHHOTO_PASSWORD=${CHHOTO_PASSWORD} - - CHHOTO_API_KEY=${CHHOTO_API_KEY} - - CHHOTO_SITE_URL=${CHHOTO_SITE_URL} - - CHHOTO_REDIRECT_METHOD=${CHHOTO_REDIRECT_METHOD} - - CHHOTO_PUBLIC_MODE=Disable - - CHHOTO_LISTEN_ADDRESS=0.0.0.0 - - CHHOTO_LISTEN_PORT=4567 - tmpfs: - - /tmp:size=16m,mode=1777,uid=1000,gid=1000 - volumes: - - "${APP_DATA_DIR}:/data" - labels: - createdBy: "Apps" - -networks: - 1panel-network: - external: true diff --git a/apps/chhoto-url/latest/scripts/init.sh b/apps/chhoto-url/latest/scripts/init.sh deleted file mode 100755 index 7437617b3..000000000 --- a/apps/chhoto-url/latest/scripts/init.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/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" - local value - [[ -f "$ENV_FILE" ]] || return 0 - value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)" - value="${value%$'\r'}" - case "$value" in - \"*\") value="${value#\"}"; value="${value%\"}" ;; - \'*\') value="${value#\'}"; value="${value%\'}" ;; - esac - printf '%s\n' "$value" -} - -DATA_DIR="${APP_DATA_DIR:-}" -if [[ -z "$DATA_DIR" ]]; then - DATA_DIR="$(read_env_value APP_DATA_DIR)" -fi -DATA_DIR="${DATA_DIR:-./data}" - -if [[ "$DATA_DIR" = /* ]]; then - RESOLVED_DATA_DIR="$(realpath -m -- "$DATA_DIR")" - if [[ -L "$DATA_DIR" ]]; then - printf 'APP_DATA_DIR must not be a symbolic link\n' >&2 - exit 1 - fi - if [[ -e "$RESOLVED_DATA_DIR" ]]; then - [[ -d "$RESOLVED_DATA_DIR" ]] || { - printf 'APP_DATA_DIR must refer to a directory\n' >&2 - exit 1 - } - [[ "$(stat -c '%u:%g' "$RESOLVED_DATA_DIR")" == '1000:1000' ]] || { - printf 'Existing absolute APP_DATA_DIR must be owned by UID/GID 1000:1000\n' >&2 - exit 1 - } - else - install -d -m 0750 -- "$RESOLVED_DATA_DIR" - if [[ "$(id -u)" -eq 0 ]]; then - chown 1000:1000 -- "$RESOLVED_DATA_DIR" - fi - fi -else - RESOLVED_DATA_DIR="$(realpath -m -- "$ROOT_DIR/${DATA_DIR#./}")" - case "$RESOLVED_DATA_DIR" in - "$ROOT_DIR"/*) ;; - *) - printf 'Relative APP_DATA_DIR must remain inside the application version directory\n' >&2 - exit 1 - ;; - esac - install -d -m 0750 -- "$RESOLVED_DATA_DIR" - if [[ "$(id -u)" -eq 0 ]]; then - chown 1000:1000 -- "$RESOLVED_DATA_DIR" - fi -fi diff --git a/apps/chhoto-url/latest/scripts/uninstall.sh b/apps/chhoto-url/latest/scripts/uninstall.sh deleted file mode 100755 index c6af20129..000000000 --- a/apps/chhoto-url/latest/scripts/uninstall.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -docker-compose down --volumes --remove-orphans diff --git a/apps/chhoto-url/latest/scripts/upgrade.sh b/apps/chhoto-url/latest/scripts/upgrade.sh deleted file mode 100755 index 5ec28d784..000000000 --- a/apps/chhoto-url/latest/scripts/upgrade.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" -exec "$SCRIPT_DIR/init.sh" diff --git a/apps/chhoto-url/logo.png b/apps/chhoto-url/logo.png index 6a69f614845adabb686e5765d2723f00c5df2ba2..b35410050793d805a9ba3d3ae4fe267949857298 100644 GIT binary patch delta 2418 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 delta 2443 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