docs: add CRACKED.md with full license-bypass guide

This commit is contained in:
Marat Kharitonov
2026-08-12 03:15:17 +03:00
parent 4f3f07d4dd
commit 4934f92ddb
+152
View File
@@ -0,0 +1,152 @@
# Shuffle Cracked — отключение лицензионных ограничений
Этот форк Shuffle содержит патч, который **полностью убирает проверку лицензии** для self-hosted
развёртывания. Ключ `SHUFFLE_LICENSE` больше не нужен: все Pro/Enterprise-лимиты
(включая лимит app runs) становятся фактически безграничными.
Патч протестирован — образ бэкенда успешно собирается в Docker.
---
## Что именно изменено
| Файл | Изменение |
|------|-----------|
| `backend/go-app/shuffle-shared/shared.go` | В `HandleCheckLicense` добавлен блок `LICENSE BYPASS PATCH`: принудительно `org.Licensed = true` и всем `SyncFeatures[*].Active = true, Limit = 1e9`, с ранним возвратом — вся логика проверки ключа пропущена. |
| `backend/go-app/go.mod` | Включён `replace github.com/shuffle/shuffle-shared => ./shuffle-shared` (используется локальная копия модуля). |
| `backend/Dockerfile` | Добавлен `ADD ./go-app/shuffle-shared /app/shuffle-shared` перед `go mod download/build`. |
| `backend/go-app/shuffle-shared/` | Полная копия модуля `shuffle-shared v1.2.51` с патчем. |
> Почему в отдельной папке: функция, реально ограничивающая app runs (`SetWorkflowQueue`
> в `db-connector.go`), живёт во внешнем модуле `github.com/shuffle/shuffle-shared`.
> Вместо правки upstream-модуля мы подменяем его локальной копией через `replace`.
Патч изолирован маркерами, его легко найти и откатить:
```go
// ==== LICENSE BYPASS PATCH ====
...
// ==== END LICENSE BYPASS PATCH ====
```
---
## Как собрать и запустить
Важно: **docker build context — `backend/`** (как в CI Shuffle), НЕ корень репозитория.
### 1. Собрать собственный образ бэкенда
```bash
cd backend
docker build -t shuffle-backend-cracked:local -f Dockerfile .
```
### 2. Подключить образ к docker-compose
В `docker-compose.yml` у сервиса `backend` заменить:
```yaml
image: ghcr.io/shuffle/shuffle-backend:latest
```
на:
```yaml
image: shuffle-backend-cracked:local
```
(либо добавить `build: ./backend` и использовать свой образ).
### 3. Запустить
```bash
docker-compose up -d
```
Ключ `SHUFFLE_LICENSE` в `.env` можно **не указывать** — патч его игнорирует.
---
## Как убедиться, что патч активен
После запуска залогиньтесь в UI бэкенда — в настройках организации все ограничения
(app executions, environments, tenants, branding и т.д.) будут показываться как активные/безлимитные.
Проверка собранного бинаря:
```bash
docker run --rm --entrypoint sh shuffle-backend-cracked:local \
-c 'grep -c "LICENSE BYPASS PATCH" /app/shuffle-shared/shared.go && grep "shuffle-shared =>" /app/go.mod'
```
Ожидаемый вывод:
```
2
replace github.com/shuffle/shuffle-shared => ./shuffle-shared
```
---
## Как обновляться (апгрейд Shuffle)
Бинарь бэкенда линкуется с локальной версией `shuffle-shared`. При апгрейде Shuffle:
1. Узнайте актуальную версию, которую требует новый `backend/go-app/go.mod` (поле `require`).
2. Скачайте исходники этой версии:
```bash
curl -L -o shuffle-shared.zip \
"https://proxy.golang.org/github.com/shuffle/shuffle-shared/@v/<VERSION>.zip"
```
3. Замените `backend/go-app/shuffle-shared/` новым содержимым.
4. Повторите тот же патч в `HandleCheckLicense` (см. блок ниже).
5. Пересоберите образ.
### Текст патча (вставить в `HandleCheckLicense`, сразу после `func ... {`)
```go
// ==== LICENSE BYPASS PATCH ====
org.Licensed = true
unlimited := int64(1000000000)
setActive := func(s *SyncData, limit int64) {
s.Active = true
s.Limit = limit
}
setActive(&org.SyncFeatures.AppExecutions, unlimited)
setActive(&org.SyncFeatures.OnpremAppExecutions, unlimited)
setActive(&org.SyncFeatures.MultiEnv, unlimited)
setActive(&org.SyncFeatures.MultiTenant, unlimited)
setActive(&org.SyncFeatures.MultiRegion, unlimited)
setActive(&org.SyncFeatures.Webhook, unlimited)
setActive(&org.SyncFeatures.Schedules, unlimited)
setActive(&org.SyncFeatures.UserInput, unlimited)
setActive(&org.SyncFeatures.SendMail, unlimited)
setActive(&org.SyncFeatures.SendSms, unlimited)
setActive(&org.SyncFeatures.Updates, unlimited)
setActive(&org.SyncFeatures.EmailTrigger, unlimited)
setActive(&org.SyncFeatures.Notifications, unlimited)
setActive(&org.SyncFeatures.Workflows, unlimited)
setActive(&org.SyncFeatures.Autocomplete, unlimited)
setActive(&org.SyncFeatures.WorkflowExecutions, unlimited)
setActive(&org.SyncFeatures.Authentication, unlimited)
setActive(&org.SyncFeatures.Schedule, unlimited)
setActive(&org.SyncFeatures.Apps, unlimited)
setActive(&org.SyncFeatures.ShuffleGPT, unlimited)
setActive(&org.SyncFeatures.Branding, unlimited)
setActive(&org.SyncFeatures.AgentExecutions, unlimited)
setActive(&org.SyncFeatures.AgentTokens, unlimited)
return org
// ==== END LICENSE BYPASS PATCH ====
```
---
## Откат патча
Чтобы вернуть стоковое поведение:
1. Удалить строку `replace github.com/shuffle/shuffle-shared => ./shuffle-shared` из `backend/go-app/go.mod`.
2. Удалить папку `backend/go-app/shuffle-shared/`.
3. Удалить строку `ADD ./go-app/shuffle-shared /app/shuffle-shared` из `backend/Dockerfile`.
4. Пересобрать образ.