diff --git a/desktop/src-tauri/capabilities/default.json b/desktop/src-tauri/capabilities/default.json index d61e6fd..2f5f10f 100644 --- a/desktop/src-tauri/capabilities/default.json +++ b/desktop/src-tauri/capabilities/default.json @@ -36,9 +36,9 @@ "identifier": "http:default", "allow": [ { "url": "https://stock.exdev.co.kr/**" }, + { "url": "https://exdev.co.kr/**" }, { "url": "http://localhost:8080/**" }, { "url": "http://127.0.0.1:8080/**" }, - { "url": "https://stock.exdev.co.kr/**" }, { "url": "https://api.upbit.com/**" } ] } diff --git a/desktop/src/bridge/updater.ts b/desktop/src/bridge/updater.ts index 4f1a698..d42702b 100644 --- a/desktop/src/bridge/updater.ts +++ b/desktop/src/bridge/updater.ts @@ -162,8 +162,10 @@ async function formatUpdateError(e: unknown): Promise { ? '서버 업데이트 정보(latest.json) 형식 오류입니다. PC 프로그램 탭에서 dmg를 받아 주세요.' : '서버 업데이트 정보(latest.json) 형식 오류입니다. PC 프로그램 탭에서 exe를 받아 주세요.'; } - if (/insecuretransport|insecure transport|http url|https/.test(lower)) { - return '업데이트 URL 보안(HTTPS) 설정 오류입니다. 잠시 후 다시 시도해 주세요.'; + if (/insecuretransport|insecure transport|http url(?!s)/.test(lower)) { + return onWin + ? '업데이트 URL 보안(HTTPS) 설정 오류입니다. PC 프로그램 탭에서 exe를 받아 다시 설치해 주세요.' + : '업데이트 URL 보안(HTTPS) 설정 오류입니다. PC 프로그램 탭에서 dmg를 받아 다시 설치해 주세요.'; } if (/signature|pubkey|verify|minisign|invalid key/.test(lower)) { return onMac diff --git a/scripts/bump-desktop-version-from-release.sh b/scripts/bump-desktop-version-from-release.sh index 61a613f..deba69c 100755 --- a/scripts/bump-desktop-version-from-release.sh +++ b/scripts/bump-desktop-version-from-release.sh @@ -11,6 +11,8 @@ BUILD_INFO="${WORK_TREE}/dist-desktop/build-info.json" RELEASE_DIR="${GC_DESKTOP_APP_RELEASE_DIR:-$WORK_TREE/data/desktop-releases}" PUBLISHED_LATEST_URL="${DESKTOP_PUBLISHED_LATEST_URL:-${DESKTOP_UPDATE_BASE_URL:-https://stock.exdev.co.kr/desktop/updates}/latest.json}" +PUBLISHED_LATEST_URL="${PUBLISHED_LATEST_URL/http:\/\/exdev.co.kr/https://stock.exdev.co.kr}" +PUBLISHED_LATEST_URL="${PUBLISHED_LATEST_URL/https:\/\/exdev.co.kr/https://stock.exdev.co.kr}" REMOTE_PUB_VER="" if REMOTE_JSON="$(curl -sf --connect-timeout 5 --max-time 12 "$PUBLISHED_LATEST_URL" 2>/dev/null)"; then REMOTE_PUB_VER="$(printf '%s' "$REMOTE_JSON" | node -e " diff --git a/scripts/generate-desktop-latest-json.mjs b/scripts/generate-desktop-latest-json.mjs index 6d5cfca..bbda107 100644 --- a/scripts/generate-desktop-latest-json.mjs +++ b/scripts/generate-desktop-latest-json.mjs @@ -86,7 +86,10 @@ function addPlatform(platformKey, bundleName) { } } platforms[platformKey] = { - url: `${baseUrl}/${encodeURIComponent(bundleName)}`, + url: `${baseUrl}/${encodeURIComponent(bundleName)}`.replace( + /^https:\/\/exdev\.co\.kr/i, + 'https://stock.exdev.co.kr', + ), signature, bundleVersion: effectiveVersion, }; diff --git a/scripts/prepare-tauri-build.sh b/scripts/prepare-tauri-build.sh index 85b7027..6cee1d2 100755 --- a/scripts/prepare-tauri-build.sh +++ b/scripts/prepare-tauri-build.sh @@ -27,7 +27,9 @@ conf.bundle.createUpdaterArtifacts = enable; conf.plugins = conf.plugins || {}; conf.plugins.updater = conf.plugins.updater || {}; conf.plugins.updater.endpoints = (conf.plugins.updater.endpoints || []) - .map((u) => String(u).replace(/^http:\\/\\/exdev\\.co\\.kr\\//, 'https://stock.exdev.co.kr/')); + .map((u) => String(u) + .replace(/^http:\\/\\/exdev\\.co\\.kr\\//, 'https://stock.exdev.co.kr/') + .replace(/^https:\\/\\/exdev\\.co\\.kr\\//, 'https://stock.exdev.co.kr/')); if (!conf.plugins.updater.endpoints.length) { conf.plugins.updater.endpoints = ['https://stock.exdev.co.kr/desktop/updates/latest.json']; } diff --git a/scripts/publish-desktop-update.sh b/scripts/publish-desktop-update.sh index 98f82ee..d1d8fe1 100755 --- a/scripts/publish-desktop-update.sh +++ b/scripts/publish-desktop-update.sh @@ -10,6 +10,7 @@ UPDATES_DIR="${UPDATES_DIR:-$WORK_TREE/frontend/public/desktop/updates}" WEB_STATIC_DIR="${WEB_STATIC_DIR:-$UPDATES_DIR}" BASE_URL="${DESKTOP_UPDATE_BASE_URL:-https://stock.exdev.co.kr/desktop/updates}" BASE_URL="${BASE_URL/http:\/\//https:\/\/}" +BASE_URL="${BASE_URL/https:\/\/exdev.co.kr/https:\/\/stock.exdev.co.kr}" DESKTOP_RELEASE_DIR="${GC_DESKTOP_APP_RELEASE_DIR:-$WORK_TREE/data/desktop-releases}" KEY_PATH="${TAURI_SIGNER_KEY:-$HOME/.tauri/goldenchart.key}" DESKTOP_DIR="$WORK_TREE/desktop" @@ -186,7 +187,20 @@ node "$WORK_TREE/scripts/ensure-desktop-latest-json.mjs" \ exit 1 } -LATEST_SIZE="$(wc -c < "$PUBLISH_UPDATES/latest.json" | tr -d ' ')" +LATEST_PATH="$PUBLISH_UPDATES/latest.json" +node -e " +const fs=require('fs'); const p=process.argv[1]; +const j=JSON.parse(fs.readFileSync(p,'utf8')); +for (const k of Object.keys(j.platforms||{})) { + const u=j.platforms[k]?.url; + if (typeof u==='string' && /exdev\\.co\\.kr/i.test(u)) { + j.platforms[k].url=u.replace(/^https:\\/\\/exdev\\.co\\.kr/i,'https://stock.exdev.co.kr'); + } +} +fs.writeFileSync(p, JSON.stringify(j,null,2)+'\\n'); +" "$LATEST_PATH" + +LATEST_SIZE="$(wc -c < "$LATEST_PATH" | tr -d ' ')" if [[ "${LATEST_SIZE:-0}" -lt 8 ]]; then log "ERROR: latest.json is empty (${LATEST_SIZE} bytes)" >&2 exit 1