# Комендант MDM — USB Enrollment Tool

Регистрирует Android-устройство в Комендант MDM **через USB-кабель**,
без QR-кода и без зависимости от Google Play Protect.

Альтернативный путь — кнопка **«Подключить телефон по USB»** прямо в
ЛК (Устройства → Добавить). Кнопка делает то же самое, что этот скрипт,
но из браузера через WebUSB. Этот ZIP-пакет нужен, если:

- ЛК открыт в Firefox/Safari (WebUSB не поддерживается);
- админ работает в headless Linux без браузера;
- системный adb на компе занимает USB-интерфейс и не отдаёт его браузеру;
- нужен массовый пайплайн `for device in ...; do enroll-linux.sh ...; done`.

## Быстрый старт

1. Распакуйте архив на рабочем компьютере.
2. В ЛК (Устройства → Добавить → Device Owner) создайте регистрацию,
   скопируйте deeplink (`komendant://enroll?...`).
3. Подготовьте устройство: factory reset, на welcome-экране НЕ добавляйте
   Google-аккаунт, включите отладку по USB
   (Настройки → О телефоне → 7 раз тап по «Номер сборки» → Для
   разработчиков → Отладка по USB).
4. Подключите устройство кабелем. Запустите:
   - **Windows**: двойной клик по `enroll.cmd` (или PowerShell:
     `.\enroll.ps1 -Link "komendant://enroll?..."`).
   - **macOS**: `./enroll-mac.sh "komendant://enroll?..."`.
   - **Linux**: `./enroll-linux.sh "komendant://enroll?..."`.
5. Скрипт всё сделает за ~2 минуты.

## Что происходит под капотом

1. `adb install -r -g komendant-dpc.apk` — ставит APK через USB
   (минуя Play Protect prompt — ADB-installed packages имеют special
   install source `com.android.shell` и не проходят VerifyApps).
2. `adb shell dpm set-device-owner ru.komendant.dpc/...` — назначает
   наш DPC как Device Owner (полный MDM).
3. Если Device Owner не удался (устройство не fresh) — fallback на
   `set-profile-owner` (ограниченный work profile mode).
4. `adb shell am start ... komendant://enroll?token=X` — открывает
   приложение с enrollment-токеном, DPC делает `/redeem` на backend.

## Требования

- **Для Device Owner mode**: устройство должно быть в factory state
  (без Google-аккаунта, без PIN/пароля, без других DPC). Новое или
  свежий factory reset.
- **Для Profile Owner mode** (fallback): любое состояние, но управление
  ограничено work profile.
- **macOS / Linux**: системный `adb` не нужен — скрипты используют
  бинарь из архива (Windows) либо системный platform-tools, если он
  установлен. Если `adb` не найден на маке/линуксе:
  - macOS: `brew install --cask android-platform-tools`
  - Debian/Ubuntu: `sudo apt install adb`
  - Fedora/RHEL: `sudo dnf install android-tools`

## FAQ

**Q: Safe mode нужен?**
A: Нет. ADB-установка работает в обычном режиме.

**Q: Что если Device Owner уже назначен другим приложением?**
A: `dpm set-device-owner` откажет. Сначала сделайте
`adb shell dpm remove-active-admin <old-component>` и factory reset.

**Q: Это безопасно для клиента?**
A: Да. ADB-команды выполняются локально с компа. Ни один шаг не
ходит во внешние сервисы кроме komendant-mdm.ru (enrollment API).

## Состав архива

- `enroll.cmd` — лаунчер для Windows (запускает `enroll.ps1`)
- `enroll.ps1` / `enroll-windows.ps1` — основной скрипт под Windows
- `enroll-mac.sh` — скрипт для macOS
- `enroll-linux.sh` — скрипт для Linux
- `adb.exe`, `AdbWinApi.dll`, `AdbWinUsbApi.dll` — Android platform-tools
  (Windows, Google SDK)
- `komendant-dpc.apk`, `dpc-app-release.apk` — DPC приложение
  (последняя release-версия)
- `README.md` — этот файл
