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",
|
"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
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