Files
shuffle-cracked/CRACKED.md
T
2026-08-12 03:15:17 +03:00

153 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. Пересобрать образ.