This commit is contained in:
dv 2026-03-23 15:36:40 +03:00
parent 7d2c977a9f
commit a11134f303
14 changed files with 644 additions and 1 deletions

27
$remote Normal file
View 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
View 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
View 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
View 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;
}

View file

@ -3,12 +3,16 @@
"name": "CAPS Enhancer", "name": "CAPS Enhancer",
"version": "2.7", "version": "2.7",
"description": "Добавляет всякие фичи для УТП в CAPS", "description": "Добавляет всякие фичи для УТП в CAPS",
"update_url": "https://git.ihateamerica.ru/caps_enhancer/update.xml",
"icons": { "icons": {
"16": "icons/icon16.png", "16": "icons/icon16.png",
"48": "icons/icon48.png", "48": "icons/icon48.png",
"128": "icons/icon128.png" "128": "icons/icon128.png"
}, },
"permissions": ["activeTab", "storage", "tabs"], "background": {
"service_worker": "js/background.js"
},
"permissions": ["activeTab", "storage", "tabs", "alarms"],
"host_permissions": ["<all_urls>"], "host_permissions": ["<all_urls>"],
"action": { "action": {
"default_popup": "popup.html", "default_popup": "popup.html",

46
pack-crx.bat Normal file
View 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

Binary file not shown.

38
server/deploy.sh Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View file

@ -0,0 +1 @@
{"version": "2.7"}