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

6.2 KiB
Raw Blame History

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.

Патч изолирован маркерами, его легко найти и откатить:

// ==== LICENSE BYPASS PATCH ====
...
// ==== END LICENSE BYPASS PATCH ====

Как собрать и запустить

Важно: docker build context — backend/ (как в CI Shuffle), НЕ корень репозитория.

1. Собрать собственный образ бэкенда

cd backend
docker build -t shuffle-backend-cracked:local -f Dockerfile .

2. Подключить образ к docker-compose

В docker-compose.yml у сервиса backend заменить:

image: ghcr.io/shuffle/shuffle-backend:latest

на:

image: shuffle-backend-cracked:local

(либо добавить build: ./backend и использовать свой образ).

3. Запустить

docker-compose up -d

Ключ SHUFFLE_LICENSE в .env можно не указывать — патч его игнорирует.


Как убедиться, что патч активен

После запуска залогиньтесь в UI бэкенда — в настройках организации все ограничения (app executions, environments, tenants, branding и т.д.) будут показываться как активные/безлимитные.

Проверка собранного бинаря:

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. Скачайте исходники этой версии:
    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 ... {)

	// ==== 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. Пересобрать образ.