ok1
This commit is contained in:
parent
7d2c977a9f
commit
a11134f303
14 changed files with 644 additions and 1 deletions
27
$remote
Normal file
27
$remote
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
Split-Path : Cannot bind argument to parameter 'Path' because it is null.
|
||||
At line:1 char:177
|
||||
+ ... ; $EXT_DIR = Split-Path -Parent $MyInvocation.MyCommand.Path; $manif ...
|
||||
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
+ CategoryInfo : InvalidData: (:) [Split-Path], ParameterBindingValidationException
|
||||
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SplitPathCo
|
||||
mmand
|
||||
|
||||
Join-Path : Cannot bind argument to parameter 'Path' because it is null.
|
||||
At line:1 char:242
|
||||
+ ... n.MyCommand.Path; $manifest = Get-Content (Join-Path $EXT_DIR 'manife ...
|
||||
+ ~~~~~~~~
|
||||
+ CategoryInfo : InvalidData: (:) [Join-Path], ParameterBindingValidationException
|
||||
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCom
|
||||
mand
|
||||
|
||||
Local: Remote: 2.7
|
||||
[INFO] Updating - ...
|
||||
Expand-Archive : Cannot validate argument on parameter 'DestinationPath'. The argument is null or empty. Provide an arg
|
||||
ument that is not null or empty, and then try the command again.
|
||||
At line:1 char:756
|
||||
+ ... OutFile $tmp; Expand-Archive $tmp -DestinationPath $EXT_DIR -Force; ...
|
||||
+ ~~~~~~~~
|
||||
+ CategoryInfo : InvalidData: (:) [Expand-Archive], ParameterBindingValidationException
|
||||
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Expand-Archive
|
||||
|
||||
[OK] Done. Reload extension in chrome://extensions
|
||||
289
DEPLOY.md
Normal file
289
DEPLOY.md
Normal file
|
|
@ -0,0 +1,289 @@
|
|||
# Деплой CAPS Enhancer — Self-Hosted Auto-Update
|
||||
|
||||
## Как это работает
|
||||
|
||||
```
|
||||
[Сервер] [Браузер пользователя]
|
||||
update.xml <── Chrome опрашивает каждые ~5 часов
|
||||
caps-enhancer.crx <── Chrome скачивает при новой версии
|
||||
```
|
||||
|
||||
Chrome сравнивает `version` в `update.xml` с версией установленного расширения.
|
||||
Если версия на сервере выше — скачивает `.crx` и устанавливает обновление автоматически.
|
||||
|
||||
Пользователь устанавливает расширение **один раз** через реестр Windows — дальше всё автоматически.
|
||||
|
||||
---
|
||||
|
||||
## Часть 1: Первоначальная упаковка (делается один раз)
|
||||
|
||||
### Шаг 1. Прописать URL обновления в manifest.json
|
||||
|
||||
Открой `manifest.json` и замени `YOUR_DOMAIN` на реальный домен:
|
||||
|
||||
```json
|
||||
"update_url": "https://updates.example.com/caps-enhancer/update.xml",
|
||||
```
|
||||
|
||||
### Шаг 2. Упаковать расширение в .crx
|
||||
|
||||
**Способ A — через bat-скрипт (рекомендуется):**
|
||||
|
||||
Запусти `pack-crx.bat` из папки проекта. Скрипт сам найдёт Chrome и упакует расширение.
|
||||
|
||||
**Способ B — вручную через Chrome:**
|
||||
|
||||
1. Открой `chrome://extensions`
|
||||
2. Включи "Режим разработчика" (правый верхний угол)
|
||||
3. Нажми "Упаковать расширение"
|
||||
4. В поле "Корневой каталог расширения" укажи папку `caps-enhancer`
|
||||
5. Поле "Файл закрытого ключа" оставь пустым при первой упаковке
|
||||
6. Нажми "Упаковать расширение"
|
||||
|
||||
Chrome создаст два файла **в папке рядом с `caps-enhancer`**:
|
||||
- `caps-enhancer.crx` — файл расширения
|
||||
- `caps-enhancer.pem` — приватный ключ
|
||||
|
||||
> **КРИТИЧНО:** Сохрани `caps-enhancer.pem` в надёжное место!
|
||||
> Этот ключ определяет ID расширения. Если потеряешь — ID изменится,
|
||||
> и все установленные у пользователей копии придётся переустанавливать вручную.
|
||||
|
||||
### Шаг 3. Узнать ID расширения
|
||||
|
||||
**После первой упаковки:**
|
||||
|
||||
1. Открой `chrome://extensions`
|
||||
2. Нажми "Загрузить распакованное расширение" → выбери папку `caps-enhancer`
|
||||
3. Скопируй ID расширения (длинная строка из 32 символов, например `abcdefghijklmnopqrstuvwxyzabcdef`)
|
||||
|
||||
**Или через файл ключа (если Chrome уже закрыт):**
|
||||
|
||||
```bash
|
||||
# На Linux/Mac:
|
||||
openssl rsa -in caps-enhancer.pem -pubout | openssl dgst -sha256 -binary | base32 | head -c 32 | tr '[:upper:]' '[:lower:]'
|
||||
```
|
||||
|
||||
### Шаг 4. Обновить update.xml
|
||||
|
||||
Открой `server/update.xml` и замени:
|
||||
- `EXTENSION_ID` — ID из предыдущего шага
|
||||
- `YOUR_DOMAIN` — твой домен
|
||||
- `version` — текущая версия (из manifest.json)
|
||||
|
||||
```xml
|
||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||
<app appid='abcdefghijklmnopqrstuvwxyzabcdef'>
|
||||
<updatecheck
|
||||
status='ok'
|
||||
codebase='https://updates.example.com/caps-enhancer/caps-enhancer.crx'
|
||||
version='2.7'
|
||||
/>
|
||||
</app>
|
||||
</gupdate>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Часть 2: Настройка сервера
|
||||
|
||||
### Требования к серверу
|
||||
|
||||
- Любой веб-сервер (nginx, Apache, Caddy, даже GitHub Pages)
|
||||
- **HTTPS обязателен** — Chrome отказывается скачивать `.crx` по HTTP
|
||||
- Корректные MIME-типы (см. ниже)
|
||||
|
||||
### Вариант A: nginx
|
||||
|
||||
Скопируй `server/nginx.conf` на сервер и замени `YOUR_DOMAIN`:
|
||||
|
||||
```bash
|
||||
sudo cp server/nginx.conf /etc/nginx/sites-available/caps-enhancer
|
||||
sudo ln -s /etc/nginx/sites-available/caps-enhancer /etc/nginx/sites-enabled/
|
||||
sudo nginx -t && sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
Структура файлов на сервере:
|
||||
```
|
||||
/var/www/caps-enhancer/
|
||||
└── caps-enhancer/
|
||||
├── update.xml
|
||||
└── caps-enhancer.crx
|
||||
```
|
||||
|
||||
### Вариант B: Apache
|
||||
|
||||
Добавь в `.htaccess` или конфиг:
|
||||
|
||||
```apache
|
||||
<Directory /var/www/caps-enhancer>
|
||||
AddType application/x-chrome-extension .crx
|
||||
AddType application/xml .xml
|
||||
|
||||
<Files "update.xml">
|
||||
Header set Cache-Control "no-cache, no-store, must-revalidate"
|
||||
Header set Pragma "no-cache"
|
||||
Header set Expires 0
|
||||
</Files>
|
||||
</Directory>
|
||||
```
|
||||
|
||||
### Вариант C: Caddy (самый простой, HTTPS автоматически)
|
||||
|
||||
```
|
||||
updates.example.com {
|
||||
root * /var/www/caps-enhancer
|
||||
file_server
|
||||
|
||||
@xml path *.xml
|
||||
header @xml Cache-Control "no-cache, no-store, must-revalidate"
|
||||
}
|
||||
```
|
||||
|
||||
### Вариант D: GitHub Pages / любой статический хостинг
|
||||
|
||||
Положи `update.xml` и `caps-enhancer.crx` в репозиторий.
|
||||
GitHub Pages раздаёт файлы по HTTPS автоматически.
|
||||
|
||||
> Убедись что хостинг отдаёт `.crx` с типом `application/x-chrome-extension`
|
||||
> или `application/octet-stream`. GitHub Pages обычно справляется.
|
||||
|
||||
### Загрузка файлов на сервер
|
||||
|
||||
```bash
|
||||
# С локальной машины через scp
|
||||
scp server/caps-enhancer.crx server/update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/
|
||||
|
||||
# Или через rsync
|
||||
rsync -av server/caps-enhancer.crx server/update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/
|
||||
```
|
||||
|
||||
### Проверка сервера
|
||||
|
||||
После загрузки проверь:
|
||||
|
||||
```bash
|
||||
# update.xml должен вернуть XML с версией
|
||||
curl -I https://updates.example.com/caps-enhancer/update.xml
|
||||
|
||||
# .crx должен вернуть 200 и Content-Type: application/x-chrome-extension
|
||||
curl -I https://updates.example.com/caps-enhancer/caps-enhancer.crx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Часть 3: Установка на компьютеры пользователей
|
||||
|
||||
Chrome не позволяет устанавливать сторонние расширения вручную через stable-канал.
|
||||
Единственный способ — через **Windows Policy (реестр)**.
|
||||
|
||||
### Способ A: .reg файл (для ручной установки)
|
||||
|
||||
1. Открой `server/install-client.reg`
|
||||
2. Замени `EXTENSION_ID` и `YOUR_DOMAIN`
|
||||
3. Дай пользователю этот файл
|
||||
4. Пользователь дважды кликает на `.reg` → соглашается → перезапускает Chrome
|
||||
|
||||
```reg
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist]
|
||||
"1"="abcdefghijklmnopqrstuvwxyzabcdef;https://updates.example.com/caps-enhancer/update.xml"
|
||||
```
|
||||
|
||||
> Требует прав администратора (HKLM).
|
||||
> Для установки без прав — использовать HKCU (только для текущего пользователя).
|
||||
|
||||
### Способ B: PowerShell скрипт
|
||||
|
||||
Отредактируй `server/install-client.ps1` (замени ID и домен), запусти от имени администратора:
|
||||
|
||||
```powershell
|
||||
# Запуск от имени администратора:
|
||||
Start-Process powershell -Verb RunAs -ArgumentList "-File C:\path\to\install-client.ps1"
|
||||
```
|
||||
|
||||
### Способ C: Групповые политики (GPO) — для домена
|
||||
|
||||
1. Открой **Group Policy Management Console** (gpmc.msc)
|
||||
2. Создай или отредактируй GPO
|
||||
3. Перейди: `Computer Configuration` → `Administrative Templates` → `Google` → `Google Chrome` → `Extensions`
|
||||
4. Включи политику **"Configure the list of force-installed apps and extensions"**
|
||||
5. Добавь строку: `abcdefghijklmnopqrstuvwxyzabcdef;https://updates.example.com/caps-enhancer/update.xml`
|
||||
|
||||
> Если шаблонов Google нет — скачай ADMX: https://chromeenterprise.google/intl/ru/browser/download/
|
||||
|
||||
### Что видит пользователь после установки
|
||||
|
||||
- Chrome автоматически устанавливает расширение при следующем запуске
|
||||
- Иконка появляется в панели расширений
|
||||
- Пользователь **не может удалить** принудительно установленное расширение (managed)
|
||||
|
||||
---
|
||||
|
||||
## Часть 4: Выпуск обновления
|
||||
|
||||
При каждом обновлении расширения:
|
||||
|
||||
### 1. Обнови версию в manifest.json
|
||||
|
||||
```json
|
||||
"version": "2.8"
|
||||
```
|
||||
|
||||
### 2. Упакуй расширение с тем же ключом
|
||||
|
||||
Запусти `pack-crx.bat` — скрипт автоматически использует существующий `caps-enhancer.pem`.
|
||||
|
||||
### 3. Обнови update.xml
|
||||
|
||||
```xml
|
||||
<updatecheck
|
||||
status='ok'
|
||||
codebase='https://updates.example.com/caps-enhancer/caps-enhancer.crx'
|
||||
version='2.8'
|
||||
/>
|
||||
```
|
||||
|
||||
### 4. Загрузи на сервер
|
||||
|
||||
```bash
|
||||
scp caps-enhancer.crx update.xml user@your-server:/var/www/caps-enhancer/caps-enhancer/
|
||||
```
|
||||
|
||||
### 5. Готово
|
||||
|
||||
Chrome проверяет обновления примерно каждые **5 часов** в фоне.
|
||||
Обновление применяется при следующем перезапуске браузера (или при перезагрузке расширения).
|
||||
|
||||
Форсировать проверку обновлений вручную можно в `chrome://extensions` → "Обновить расширения".
|
||||
|
||||
---
|
||||
|
||||
## Итоговая структура файлов
|
||||
|
||||
```
|
||||
caps-enhancer/
|
||||
├── manifest.json ← update_url прописан
|
||||
├── pack-crx.bat ← запускать для упаковки
|
||||
├── caps-enhancer.pem ← ХРАНИТЬ В БЕЗОПАСНОМ МЕСТЕ (создаётся при первой упаковке)
|
||||
├── DEPLOY.md ← эта инструкция
|
||||
├── ...остальные файлы расширения...
|
||||
└── server/
|
||||
├── update.xml ← загружать на сервер при каждом обновлении
|
||||
├── caps-enhancer.crx ← загружать на сервер при каждом обновлении
|
||||
├── nginx.conf ← конфиг для nginx (один раз)
|
||||
├── deploy.sh ← скрипт деплоя на сервере
|
||||
├── install-client.reg ← раздать пользователям для установки
|
||||
└── install-client.ps1 ← альтернатива .reg файлу
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
| Проблема | Причина | Решение |
|
||||
|----------|---------|---------|
|
||||
| Chrome не устанавливает расширение | Нет ключа реестра | Проверь `HKLM\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist` |
|
||||
| "Extension not from Chrome Web Store" | Расширение установлено не через policy | Используй реестр, не ручную установку |
|
||||
| Обновление не прилетает | update.xml закэширован или неверный ID | Очисти кэш, проверь EXTENSION_ID в update.xml |
|
||||
| Chrome отказывается качать .crx | HTTP вместо HTTPS | Настрой SSL на сервере |
|
||||
| .crx не скачивается | Неверный MIME-тип | Добавь `application/x-chrome-extension` для `.crx` |
|
||||
| ID расширения изменился | Потерян .pem файл | Перераспространить .reg с новым ID |
|
||||
41
auto-update.bat
Normal file
41
auto-update.bat
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
@echo off
|
||||
setlocal
|
||||
|
||||
set VERSION_URL=https://git.ihateamerica.ru/caps_enhancer/version.json
|
||||
set ZIP_URL=https://git.ihateamerica.ru/caps_enhancer/caps-enhancer.zip
|
||||
set EXT_DIR=%~dp0
|
||||
|
||||
:: Читаем локальную версию из manifest.json
|
||||
for /f "delims=" %%v in ('powershell -NoProfile -Command "(Get-Content '%EXT_DIR%manifest.json' | ConvertFrom-Json).version"') do set LOCAL_VER=%%v
|
||||
|
||||
:: Читаем удалённую версию
|
||||
for /f "delims=" %%v in ('curl -sf "%VERSION_URL%"') do set REMOTE_JSON=%%v
|
||||
for /f "delims=" %%v in ('powershell -NoProfile -Command "'%REMOTE_JSON%' | ConvertFrom-Json | Select-Object -ExpandProperty version"') do set REMOTE_VER=%%v
|
||||
|
||||
if not defined REMOTE_VER (
|
||||
echo [ОШИБКА] Не удалось получить версию с сервера.
|
||||
goto :end
|
||||
)
|
||||
|
||||
if "%LOCAL_VER%"=="%REMOTE_VER%" (
|
||||
echo [OK] Версия актуальная: %LOCAL_VER%
|
||||
goto :end
|
||||
)
|
||||
|
||||
echo [INFO] Обновление: %LOCAL_VER% --^> %REMOTE_VER%
|
||||
|
||||
set TMP_ZIP=%TEMP%\caps-enhancer-update.zip
|
||||
curl -f "%ZIP_URL%" -o "%TMP_ZIP%"
|
||||
if errorlevel 1 (
|
||||
echo [ОШИБКА] Не удалось скачать ZIP.
|
||||
goto :end
|
||||
)
|
||||
|
||||
tar -xf "%TMP_ZIP%" -C "%EXT_DIR%" --overwrite
|
||||
del "%TMP_ZIP%"
|
||||
|
||||
echo [OK] Обновлено до версии %REMOTE_VER%. Перезагрузи расширение в Chrome.
|
||||
|
||||
:end
|
||||
endlocal
|
||||
pause
|
||||
47
js/background.js
Normal file
47
js/background.js
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
// Фоновый service worker — проверка обновлений расширения
|
||||
// Работает только в режиме "Load unpacked" (Developer Mode)
|
||||
|
||||
const VERSION_URL = 'https://git.ihateamerica.ru/caps_enhancer/version.json';
|
||||
const CHECK_INTERVAL_MINUTES = 60;
|
||||
|
||||
chrome.runtime.onInstalled.addListener(() => {
|
||||
chrome.alarms.create('updateCheck', {
|
||||
delayInMinutes: 1,
|
||||
periodInMinutes: CHECK_INTERVAL_MINUTES
|
||||
});
|
||||
});
|
||||
|
||||
chrome.alarms.onAlarm.addListener((alarm) => {
|
||||
if (alarm.name === 'updateCheck') {
|
||||
checkForUpdates();
|
||||
}
|
||||
});
|
||||
|
||||
async function checkForUpdates() {
|
||||
try {
|
||||
const res = await fetch(VERSION_URL + '?t=' + Date.now());
|
||||
if (!res.ok) return;
|
||||
|
||||
const { version: remote } = await res.json();
|
||||
const local = chrome.runtime.getManifest().version;
|
||||
|
||||
if (isNewer(remote, local)) {
|
||||
console.log(`[CAPS Enhancer] Обновление: ${local} → ${remote}. Перезагружаю...`);
|
||||
// Небольшая задержка — дать scheduled task время распаковать файлы
|
||||
await new Promise(r => setTimeout(r, 3000));
|
||||
chrome.runtime.reload();
|
||||
}
|
||||
} catch {
|
||||
// Нет соединения или сервер недоступен — молча игнорируем
|
||||
}
|
||||
}
|
||||
|
||||
function isNewer(remote, local) {
|
||||
const r = remote.split('.').map(Number);
|
||||
const l = local.split('.').map(Number);
|
||||
for (let i = 0; i < Math.max(r.length, l.length); i++) {
|
||||
if ((r[i] || 0) > (l[i] || 0)) return true;
|
||||
if ((r[i] || 0) < (l[i] || 0)) return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -3,12 +3,16 @@
|
|||
"name": "CAPS Enhancer",
|
||||
"version": "2.7",
|
||||
"description": "Добавляет всякие фичи для УТП в CAPS",
|
||||
"update_url": "https://git.ihateamerica.ru/caps_enhancer/update.xml",
|
||||
"icons": {
|
||||
"16": "icons/icon16.png",
|
||||
"48": "icons/icon48.png",
|
||||
"128": "icons/icon128.png"
|
||||
},
|
||||
"permissions": ["activeTab", "storage", "tabs"],
|
||||
"background": {
|
||||
"service_worker": "js/background.js"
|
||||
},
|
||||
"permissions": ["activeTab", "storage", "tabs", "alarms"],
|
||||
"host_permissions": ["<all_urls>"],
|
||||
"action": {
|
||||
"default_popup": "popup.html",
|
||||
|
|
|
|||
46
pack-crx.bat
Normal file
46
pack-crx.bat
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
@echo off
|
||||
:: Скрипт упаковки расширения в .crx
|
||||
:: Запускать из папки caps-enhancer
|
||||
:: Требует: Google Chrome установлен
|
||||
|
||||
setlocal
|
||||
|
||||
:: Путь к Chrome (проверяем оба варианта)
|
||||
set CHROME="C:\Program Files\Google\Chrome\Application\chrome.exe"
|
||||
if not exist %CHROME% set CHROME="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
|
||||
|
||||
:: Текущая директория (где лежит manifest.json)
|
||||
set EXT_DIR=%~dp0
|
||||
|
||||
:: Файл ключа (генерируется при первой упаковке, сохранять!)
|
||||
set KEY_FILE=%~dp0caps-enhancer.pem
|
||||
|
||||
echo === CAPS Enhancer - Упаковка расширения ===
|
||||
echo.
|
||||
|
||||
if exist %KEY_FILE% (
|
||||
echo [INFO] Используется существующий ключ: %KEY_FILE%
|
||||
%CHROME% --pack-extension="%EXT_DIR%" --pack-extension-key="%KEY_FILE%" --no-message-box
|
||||
) else (
|
||||
echo [INFO] Ключ не найден. Будет создан новый ключ.
|
||||
echo [WARN] ПЕРВЫЙ РАЗ: сохраните caps-enhancer.pem - он нужен для всех обновлений!
|
||||
%CHROME% --pack-extension="%EXT_DIR%" --no-message-box
|
||||
)
|
||||
|
||||
echo.
|
||||
if exist "%~dp0..\caps-enhancer.crx" (
|
||||
copy "%~dp0..\caps-enhancer.crx" "%~dp0server\caps-enhancer.crx" >nul
|
||||
echo [OK] caps-enhancer.crx скопирован в server\
|
||||
) else (
|
||||
echo [WARN] .crx не найден. Chrome мог создать его на уровень выше.
|
||||
echo Проверьте папку рядом с caps-enhancer\
|
||||
)
|
||||
|
||||
echo.
|
||||
echo === Готово! ===
|
||||
echo Следующие шаги:
|
||||
echo 1. Проверь ID расширения в chrome://extensions
|
||||
echo 2. Обнови server\update.xml (EXTENSION_ID и version)
|
||||
echo 3. Загрузи server\caps-enhancer.crx и server\update.xml на сервер
|
||||
echo.
|
||||
pause
|
||||
BIN
server/caps-enhancer.zip
Normal file
BIN
server/caps-enhancer.zip
Normal file
Binary file not shown.
38
server/deploy.sh
Normal file
38
server/deploy.sh
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
#!/bin/bash
|
||||
# Скрипт деплоя на сервер.
|
||||
# Запускать на сервере после загрузки новых файлов.
|
||||
# Использование: ./deploy.sh
|
||||
|
||||
set -e
|
||||
|
||||
DEPLOY_DIR="/var/www/caps-enhancer/caps-enhancer"
|
||||
CRX_FILE="caps-enhancer.crx"
|
||||
UPDATE_XML="update.xml"
|
||||
|
||||
echo "=== CAPS Enhancer Deploy ==="
|
||||
|
||||
# Создаём директорию если не существует
|
||||
mkdir -p "$DEPLOY_DIR"
|
||||
|
||||
# Копируем файлы (запускать из папки где лежат .crx и update.xml)
|
||||
if [ -f "$CRX_FILE" ]; then
|
||||
cp "$CRX_FILE" "$DEPLOY_DIR/"
|
||||
echo "[OK] $CRX_FILE скопирован"
|
||||
else
|
||||
echo "[WARN] $CRX_FILE не найден в текущей директории"
|
||||
fi
|
||||
|
||||
if [ -f "$UPDATE_XML" ]; then
|
||||
cp "$UPDATE_XML" "$DEPLOY_DIR/"
|
||||
echo "[OK] $UPDATE_XML скопирован"
|
||||
else
|
||||
echo "[WARN] $UPDATE_XML не найден в текущей директории"
|
||||
fi
|
||||
|
||||
# Права доступа
|
||||
chown -R www-data:www-data "$DEPLOY_DIR"
|
||||
chmod -R 755 "$DEPLOY_DIR"
|
||||
echo "[OK] Права выставлены"
|
||||
|
||||
echo "=== Деплой завершён ==="
|
||||
echo "Проверь: https://YOUR_DOMAIN/caps-enhancer/update.xml"
|
||||
38
server/install-client.ps1
Normal file
38
server/install-client.ps1
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Скрипт установки расширения через PowerShell (альтернатива .reg файлу)
|
||||
# Запускать с правами администратора:
|
||||
# Right Click -> "Запустить от имени администратора"
|
||||
# или: Start-Process powershell -Verb RunAs -ArgumentList "-File install-client.ps1"
|
||||
|
||||
param(
|
||||
[string]$ExtensionId = "EXTENSION_ID",
|
||||
[string]$UpdateUrl = "https://YOUR_DOMAIN/caps-enhancer/update.xml"
|
||||
)
|
||||
|
||||
$registryPath = "HKLM:\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist"
|
||||
$value = "$ExtensionId;$UpdateUrl"
|
||||
|
||||
# Создаём ключ если не существует
|
||||
if (-not (Test-Path $registryPath)) {
|
||||
New-Item -Path $registryPath -Force | Out-Null
|
||||
Write-Host "[OK] Создан ключ реестра: $registryPath"
|
||||
}
|
||||
|
||||
# Ищем свободный номер (1, 2, 3, ...)
|
||||
$index = 1
|
||||
while (Get-ItemProperty -Path $registryPath -Name "$index" -ErrorAction SilentlyContinue) {
|
||||
# Проверяем, вдруг расширение уже добавлено
|
||||
$existing = (Get-ItemProperty -Path $registryPath -Name "$index")."$index"
|
||||
if ($existing -like "$ExtensionId;*") {
|
||||
Write-Host "[INFO] Расширение уже установлено (запись $index)."
|
||||
Write-Host " Значение: $existing"
|
||||
exit 0
|
||||
}
|
||||
$index++
|
||||
}
|
||||
|
||||
Set-ItemProperty -Path $registryPath -Name "$index" -Value $value -Type String
|
||||
Write-Host "[OK] Расширение добавлено в реестр (запись $index):"
|
||||
Write-Host " $value"
|
||||
Write-Host ""
|
||||
Write-Host "Chrome автоматически установит расширение при следующем запуске."
|
||||
Write-Host "Если Chrome уже открыт — перезапустите его."
|
||||
13
server/install-client.reg
Normal file
13
server/install-client.reg
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Windows Registry Editor Version 5.00
|
||||
|
||||
; ============================================================
|
||||
; Принудительная установка CAPS Enhancer через Windows Registry
|
||||
; ============================================================
|
||||
|
||||
; Для всех пользователей компьютера (требует прав администратора)
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist]
|
||||
"1"="hpjnlbenmhmigajedbgmonmnediljbfa;https://git.ihateamerica.ru/caps_enhancer/update.xml"
|
||||
|
||||
; --- ИЛИ только для текущего пользователя (без прав админа) ---
|
||||
; [HKEY_CURRENT_USER\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist]
|
||||
; "1"="hpjnlbenmhmigajedbgmonmnediljbfa;https://git.ihateamerica.ru/caps_enhancer/update.xml"
|
||||
40
server/nginx.conf
Normal file
40
server/nginx.conf
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
server {
|
||||
listen 80;
|
||||
listen 443 ssl;
|
||||
server_name YOUR_DOMAIN;
|
||||
|
||||
# SSL (рекомендуется — Chrome требует HTTPS для update_url)
|
||||
# ssl_certificate /etc/letsencrypt/live/YOUR_DOMAIN/fullchain.pem;
|
||||
# ssl_certificate_key /etc/letsencrypt/live/YOUR_DOMAIN/privkey.pem;
|
||||
|
||||
root /var/www/caps-enhancer;
|
||||
index index.html;
|
||||
|
||||
# Директория с файлами расширения
|
||||
location /caps-enhancer/ {
|
||||
# MIME-тип для .crx — обязателен, иначе Chrome откажется качать
|
||||
types {
|
||||
application/x-chrome-extension crx;
|
||||
application/xml xml;
|
||||
text/plain txt;
|
||||
}
|
||||
|
||||
# Разрешаем скачивание
|
||||
add_header Content-Disposition 'attachment' always;
|
||||
|
||||
# CORS — если сервер и расширение на разных доменах
|
||||
add_header Access-Control-Allow-Origin '*' always;
|
||||
|
||||
# Кэш для update.xml — не кэшировать (чтобы обновления прилетали быстро)
|
||||
location ~* \.xml$ {
|
||||
add_header Cache-Control 'no-cache, no-store, must-revalidate' always;
|
||||
add_header Pragma 'no-cache' always;
|
||||
expires 0;
|
||||
}
|
||||
|
||||
# .crx можно кэшировать (файл меняется только при новой версии)
|
||||
location ~* \.crx$ {
|
||||
add_header Cache-Control 'public, max-age=86400' always;
|
||||
}
|
||||
}
|
||||
}
|
||||
40
server/pack-zip.bat
Normal file
40
server/pack-zip.bat
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
@echo off
|
||||
setlocal
|
||||
set ROOT=%~dp0..
|
||||
|
||||
:: Читаем версию из manifest.json
|
||||
for /f "delims=" %%v in ('powershell -NoProfile -Command "(Get-Content '%ROOT%\manifest.json' | ConvertFrom-Json).version"') do set VERSION=%%v
|
||||
echo Упаковка версии %VERSION%...
|
||||
|
||||
:: Временная папка
|
||||
set TMP=%TEMP%\caps-enhancer-pack
|
||||
if exist "%TMP%" rd /s /q "%TMP%"
|
||||
md "%TMP%"
|
||||
|
||||
:: Копируем файлы расширения
|
||||
copy "%ROOT%\manifest.json" "%TMP%\" >nul
|
||||
copy "%ROOT%\popup.html" "%TMP%\" >nul
|
||||
copy "%ROOT%\popup.css" "%TMP%\" >nul
|
||||
copy "%ROOT%\options.html" "%TMP%\" >nul
|
||||
copy "%ROOT%\auto-update.bat" "%TMP%\" >nul
|
||||
xcopy "%ROOT%\js" "%TMP%\js\" /e /q >nul
|
||||
xcopy "%ROOT%\css" "%TMP%\css\" /e /q >nul
|
||||
xcopy "%ROOT%\modules" "%TMP%\modules\" /e /q >nul
|
||||
xcopy "%ROOT%\icons" "%TMP%\icons\" /e /q >nul
|
||||
|
||||
:: Создаём ZIP
|
||||
set OUT=%~dp0caps-enhancer.zip
|
||||
if exist "%OUT%" del "%OUT%"
|
||||
powershell -NoProfile -Command "Compress-Archive -Path '%TMP%\*' -DestinationPath '%OUT%'"
|
||||
rd /s /q "%TMP%"
|
||||
|
||||
:: Обновляем version.json
|
||||
echo {"version": "%VERSION%"} > "%~dp0version.json"
|
||||
|
||||
echo.
|
||||
echo [OK] server\caps-enhancer.zip
|
||||
echo [OK] server\version.json (v%VERSION%)
|
||||
echo.
|
||||
echo Залей оба файла на сервер: /var/www/caps_enhancer/
|
||||
pause
|
||||
endlocal
|
||||
19
server/update.xml
Normal file
19
server/update.xml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!--
|
||||
Файл обновления расширения для Chrome.
|
||||
Chrome периодически опрашивает этот файл и сравнивает версию.
|
||||
|
||||
Замените:
|
||||
EXTENSION_ID — ID расширения (см. chrome://extensions после первой установки)
|
||||
version — текущая версия (должна совпадать с manifest.json)
|
||||
codebase — прямая ссылка на .crx файл на вашем сервере
|
||||
-->
|
||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||
<app appid='hpjnlbenmhmigajedbgmonmnediljbfa'>
|
||||
<updatecheck
|
||||
status='ok'
|
||||
codebase='https://git.ihateamerica.ru/caps_enhancer/caps-enhancer.crx'
|
||||
version='2.7'
|
||||
/>
|
||||
</app>
|
||||
</gupdate>
|
||||
1
server/version.json
Normal file
1
server/version.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version": "2.7"}
|
||||
Loading…
Add table
Reference in a new issue