keysloth 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 49887eb92bcda0765f1598cff713b8820be1bf341259d22797c0b7cbce8a0ed6
4
+ data.tar.gz: eaa959d6e6bd4495635dd09c53f5c6e66911f517b10639651e691d7d67cfefd4
5
+ SHA512:
6
+ metadata.gz: 4be3619d2eb8e824132985421b8ea5b7853921dae1e42962543ee313bb6e59bdb8e9091b454781e441a112fe7e35f4aba769e0293ae55bb084de0c4c1cb5f107
7
+ data.tar.gz: 933bf6a35dce1daebd282f90627fad87f13660089b6972044ba68b939d05572b50bf0fa39b357a8bd01417f31e64dae58c339c801dc987b7dd0312fec622ccea
@@ -0,0 +1,14 @@
1
+ # Пример конфигурационного файла KeySloth
2
+ # Скопируйте этот файл в .keyslothrc и настройте под ваш проект
3
+
4
+ # URL Git репозитория для хранения зашифрованных секретов (SSH)
5
+ repo_url: "git@github.com:company/secrets.git"
6
+
7
+ # Ветка по умолчанию для работы с секретами
8
+ branch: "main"
9
+
10
+ # Локальный путь для расшифрованных секретов
11
+ local_path: "./secrets"
12
+
13
+ # Количество резервных копий для хранения
14
+ backup_count: 3
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --require spec_helper
2
+ --format documentation
3
+ --color
4
+ --order random
data/.rubocop.yml ADDED
@@ -0,0 +1,98 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rspec
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.7
7
+ NewCops: enable
8
+ Exclude:
9
+ - 'vendor/**/*'
10
+ - 'tmp/**/*'
11
+ - 'spec/fixtures/**/*'
12
+
13
+ # Настройки стиля
14
+
15
+ Layout/LineLength:
16
+ Max: 100
17
+ Exclude:
18
+ - 'keysloth.gemspec'
19
+
20
+ Layout/MultilineMethodCallIndentation:
21
+ EnforcedStyle: indented
22
+
23
+ Metrics/ClassLength:
24
+ Max: 150
25
+
26
+ Metrics/MethodLength:
27
+ Max: 25
28
+ Exclude:
29
+ - 'spec/**/*'
30
+
31
+ Metrics/ModuleLength:
32
+ Max: 150
33
+
34
+ Metrics/BlockLength:
35
+ Exclude:
36
+ - 'spec/**/*'
37
+ - 'Rakefile'
38
+ - 'keysloth.gemspec'
39
+
40
+ Metrics/AbcSize:
41
+ Max: 20
42
+ Exclude:
43
+ - 'spec/**/*'
44
+
45
+ # Настройки документации
46
+
47
+ Style/Documentation:
48
+ Enabled: true
49
+ Exclude:
50
+ - 'spec/**/*'
51
+
52
+ Style/DocumentationMethod:
53
+ Enabled: true
54
+ RequireForNonPublicMethods: false
55
+
56
+ # Настройки безопасности
57
+
58
+ Security/Eval:
59
+ Enabled: true
60
+
61
+ Security/YAMLLoad:
62
+ Enabled: true
63
+
64
+ # Настройки производительности
65
+
66
+ Performance/StringReplacement:
67
+ Enabled: true
68
+
69
+ Performance/RedundantBlockCall:
70
+ Enabled: true
71
+
72
+ # Настройки для RSpec
73
+
74
+ RSpec/ExampleLength:
75
+ Max: 15
76
+
77
+ RSpec/MultipleExpectations:
78
+ Max: 5
79
+
80
+ RSpec/NestedGroups:
81
+ Max: 4
82
+
83
+ RSpec/DescribeClass:
84
+ Enabled: true
85
+
86
+ # Отключаем некоторые правила для большей гибкости
87
+
88
+ Style/FrozenStringLiteralComment:
89
+ Enabled: true
90
+
91
+ Style/StringLiterals:
92
+ EnforcedStyle: single_quotes
93
+
94
+ Style/ClassAndModuleChildren:
95
+ Enabled: false
96
+
97
+ Style/GuardClause:
98
+ Enabled: false
data/.yardopts ADDED
@@ -0,0 +1,8 @@
1
+ --markup markdown
2
+ --title "KeySloth API Documentation"
3
+ --readme README.md
4
+ --output-dir doc
5
+ --protected
6
+ lib/**/*.rb
7
+ -
8
+ CHANGELOG.md
data/CHANGELOG.md ADDED
@@ -0,0 +1,45 @@
1
+ # Changelog
2
+
3
+ Все значимые изменения в проекте KeySloth будут документированы в этом файле.
4
+
5
+ Формат основан на [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ и этот проект придерживается [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.1] - 2025-09-02
11
+
12
+ ### Changed
13
+ - Переведена работа с Git на системный git (через Open3), удалена зависимость от Rugged/libgit2
14
+ - Обновлены тесты `spec/keysloth/git_manager_spec.rb` под системный git
15
+ - Улучшена SSH-аутентификация: поддержка `KEYSLOTH_SSH_KEY_PATH`, `SSH_PRIVATE_KEY`/`SSH_PUBLIC_KEY` через `GIT_SSH_COMMAND`
16
+ - Поведение pull: `git fetch` + `git pull --ff-only`, с fallback на `--unshallow`
17
+ - Очистка `.enc` и запись файлов выполняются через файловую систему
18
+ - Добавлена проверка настроек автора коммита (`user.name`/`user.email`)
19
+
20
+ ### Docs
21
+ - Удалены инструкции про Rugged из `task/test_plan.md`; уточнены требования к Git/SSH
22
+
23
+ ## [0.1.0] - 2023-12-15
24
+
25
+ ### Added
26
+ - Первоначальный релиз KeySloth
27
+ - Базовая функциональность шифрования/дешифрования с использованием AES-256-GCM
28
+ - Поддержка работы с Git репозиториями через SSH
29
+ - CLI интерфейс с командами pull, push, status, restore
30
+ - Поддержка файлов секретов: .cer, .p12, .mobileprovisioning, .json
31
+ - Автоматическое создание резервных копий
32
+ - Многоуровневое логирование (DEBUG, INFO, ERROR)
33
+ - Поддержка конфигурационных файлов .keyslothrc
34
+ - Интеграция с CI/CD системами через переменные окружения
35
+ - Валидация входных данных и обработка ошибок
36
+ - Полная документация API и пользовательская документация
37
+ - Тесты RSpec с покрытием кода
38
+ - Линтинг кода с RuboCop
39
+ - Поддержка Ruby 2.7+
40
+
41
+ ### Security
42
+ - Реализована защита целостности данных с помощью GCM режима
43
+ - Безопасная деривация ключей из паролей с использованием PBKDF2
44
+ - Поддержка только SSH аутентификации для Git операций
45
+ - Валидация путей файлов для предотвращения атак directory traversal
data/Makefile ADDED
@@ -0,0 +1,193 @@
1
+ # Makefile для KeySloth - управление зашифрованными секретами
2
+ #
3
+ # Этот файл содержит примеры команд для работы с KeySloth в проекте.
4
+ # Настройте переменные ниже под ваш проект.
5
+
6
+ # =============================================================================
7
+ # КОНФИГУРАЦИЯ
8
+ # =============================================================================
9
+
10
+ # URL вашего репозитория с секретами (измените на свой)
11
+ SECRETS_REPO := git@github.com:company/secrets.git
12
+
13
+ # Ветка с секретами
14
+ SECRETS_BRANCH := main
15
+
16
+ # Локальная директория для секретов (добавьте в .gitignore!)
17
+ SECRETS_DIR := ./secrets
18
+
19
+ # Пароль для шифрования (установите в переменной окружения)
20
+ # Проверка будет выполняться только для команд, которые требуют пароль
21
+
22
+ # =============================================================================
23
+ # ОСНОВНЫЕ КОМАНДЫ
24
+ # =============================================================================
25
+
26
+ .PHONY: help
27
+ help: ## Показать справку по доступным командам
28
+ @echo "KeySloth Makefile - Управление зашифрованными секретами"
29
+ @echo ""
30
+ @echo "НАСТРОЙКА:"
31
+ @echo " 1. Установите SECRET_PASSWORD: export SECRET_PASSWORD=your_password"
32
+ @echo " 2. Измените SECRETS_REPO на URL вашего репозитория"
33
+ @echo " 3. Убедитесь что $(SECRETS_DIR) добавлен в .gitignore"
34
+ @echo ""
35
+ @echo "КОМАНДЫ:"
36
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
37
+
38
+ .PHONY: install
39
+ install: ## Установить KeySloth gem
40
+ gem install keysloth
41
+
42
+ .PHONY: init
43
+ init: ## Инициализировать KeySloth в проекте
44
+ keysloth init -r $(SECRETS_REPO) -b $(SECRETS_BRANCH) -d $(SECRETS_DIR)
45
+
46
+ .PHONY: pull
47
+ pull: check-password ## Получить и расшифровать секреты из репозитория
48
+ @echo "🔽 Получаем секреты из $(SECRETS_REPO)..."
49
+ keysloth pull -r $(SECRETS_REPO) -b $(SECRETS_BRANCH) -p "$(SECRET_PASSWORD)" -d $(SECRETS_DIR)
50
+ @echo "✅ Секреты успешно получены в $(SECRETS_DIR)"
51
+
52
+ .PHONY: push
53
+ push: check-password ## Зашифровать и отправить секреты в репозиторий
54
+ @echo "🔼 Отправляем секреты в $(SECRETS_REPO)..."
55
+ @read -p "Введите сообщение коммита: " msg; \
56
+ keysloth push -r $(SECRETS_REPO) -b $(SECRETS_BRANCH) -p "$(SECRET_PASSWORD)" -d $(SECRETS_DIR) -m "$$msg"
57
+ @echo "✅ Секреты успешно отправлены"
58
+
59
+ .PHONY: status
60
+ status: ## Проверить состояние локальных секретов
61
+ @echo "📊 Проверяем состояние секретов..."
62
+ keysloth status -d $(SECRETS_DIR)
63
+
64
+ .PHONY: validate
65
+ validate: ## Проверить целостность файлов секретов
66
+ @echo "🔍 Проверяем целостность секретов..."
67
+ keysloth validate -d $(SECRETS_DIR)
68
+
69
+ .PHONY: backup-list
70
+ backup-list: ## Показать доступные резервные копии
71
+ @echo "📁 Доступные резервные копии:"
72
+ @ls -la $(SECRETS_DIR)_backup_* 2>/dev/null || echo "Резервные копии не найдены"
73
+
74
+ .PHONY: restore
75
+ restore: ## Восстановить секреты из backup'а (использование: make restore BACKUP=backup_name)
76
+ @if [ -z "$(BACKUP)" ]; then \
77
+ echo "❌ Укажите backup для восстановления: make restore BACKUP=secrets_backup_20231215_143022"; \
78
+ exit 1; \
79
+ fi
80
+ @echo "🔄 Восстанавливаем из $(BACKUP)..."
81
+ keysloth restore $(BACKUP) -d $(SECRETS_DIR)
82
+ @echo "✅ Восстановление завершено"
83
+
84
+ # =============================================================================
85
+ # РАЗРАБОТКА И ОТЛАДКА
86
+ # =============================================================================
87
+
88
+ .PHONY: check-password
89
+ check-password: ## Проверить что установлен SECRET_PASSWORD
90
+ @if [ -z "$(SECRET_PASSWORD)" ]; then \
91
+ echo "❌ SECRET_PASSWORD не установлен. Выполните: export SECRET_PASSWORD=your_password"; \
92
+ exit 1; \
93
+ fi
94
+
95
+ .PHONY: pull-verbose
96
+ pull-verbose: check-password ## Получить секреты с подробным логированием
97
+ keysloth pull -r $(SECRETS_REPO) -b $(SECRETS_BRANCH) -p "$(SECRET_PASSWORD)" -d $(SECRETS_DIR) --verbose
98
+
99
+ .PHONY: push-verbose
100
+ push-verbose: check-password ## Отправить секреты с подробным логированием
101
+ @read -p "Введите сообщение коммита: " msg; \
102
+ keysloth push -r $(SECRETS_REPO) -b $(SECRETS_BRANCH) -p "$(SECRET_PASSWORD)" -d $(SECRETS_DIR) -m "$$msg" --verbose
103
+
104
+ .PHONY: version
105
+ version: ## Показать версию KeySloth
106
+ keysloth version
107
+
108
+ # =============================================================================
109
+ # CI/CD КОМАНДЫ
110
+ # =============================================================================
111
+
112
+ .PHONY: ci-setup-ssh
113
+ ci-setup-ssh: ## Настроить SSH ключи в CI/CD (требует SSH_PRIVATE_KEY)
114
+ @if [ -z "$(SSH_PRIVATE_KEY)" ]; then \
115
+ echo "❌ SSH_PRIVATE_KEY не установлен"; \
116
+ exit 1; \
117
+ fi
118
+ @echo "🔑 Настраиваем SSH ключи для CI/CD..."
119
+ @mkdir -p ~/.ssh
120
+ @echo "$(SSH_PRIVATE_KEY)" > ~/.ssh/id_rsa
121
+ @chmod 600 ~/.ssh/id_rsa
122
+ @ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null || true
123
+ @ssh-keyscan gitlab.com >> ~/.ssh/known_hosts 2>/dev/null || true
124
+ @echo "✅ SSH ключи настроены"
125
+
126
+ .PHONY: ci-pull
127
+ ci-pull: ci-setup-ssh check-password ## Получить секреты в CI/CD среде
128
+ @echo "🤖 CI/CD: Получаем секреты..."
129
+ keysloth pull -r $(SECRETS_REPO) -b $(SECRETS_BRANCH) -p "$(SECRET_PASSWORD)" -d $(SECRETS_DIR) --quiet
130
+
131
+ .PHONY: ci-validate
132
+ ci-validate: ## Проверить секреты в CI/CD среде
133
+ @echo "🤖 CI/CD: Проверяем секреты..."
134
+ keysloth validate -d $(SECRETS_DIR) --quiet
135
+
136
+ # =============================================================================
137
+ # ОЧИСТКА
138
+ # =============================================================================
139
+
140
+ .PHONY: clean
141
+ clean: ## Удалить локальные секреты и backup'ы
142
+ @echo "🧹 Очищаем локальные секреты..."
143
+ @rm -rf $(SECRETS_DIR)
144
+ @rm -rf $(SECRETS_DIR)_backup_*
145
+ @echo "✅ Локальные секреты удалены"
146
+
147
+ .PHONY: clean-docs
148
+ clean-docs: ## Удалить сгенерированную документацию
149
+ @echo "🧹 Очищаем документацию..."
150
+ @rm -rf doc/
151
+ @echo "✅ Документация удалена"
152
+
153
+ # =============================================================================
154
+ # ПРИМЕРЫ КОМАНД
155
+ # =============================================================================
156
+
157
+ .PHONY: example-setup
158
+ example-setup: ## Пример полной настройки проекта
159
+ @echo "📖 Пример настройки KeySloth в проекте:"
160
+ @echo ""
161
+ @echo "1. Установите переменные окружения:"
162
+ @echo " export SECRET_PASSWORD=your_strong_password"
163
+ @echo ""
164
+ @echo "2. Инициализируйте проект:"
165
+ @echo " make init"
166
+ @echo ""
167
+ @echo "3. Добавьте файлы секретов в $(SECRETS_DIR)/"
168
+ @echo ""
169
+ @echo "4. Отправьте секреты в репозиторий:"
170
+ @echo " make push"
171
+ @echo ""
172
+ @echo "5. Другие участники команды могут получить секреты:"
173
+ @echo " make pull"
174
+
175
+ .PHONY: example-ci
176
+ example-ci: ## Пример использования в CI/CD
177
+ @echo "📖 Пример настройки в CI/CD:"
178
+ @echo ""
179
+ @echo "GitHub Actions (.github/workflows/deploy.yml):"
180
+ @echo " env:"
181
+ @echo " SECRET_PASSWORD: \$${{ secrets.SECRET_PASSWORD }}"
182
+ @echo " SSH_PRIVATE_KEY: \$${{ secrets.SSH_PRIVATE_KEY }}"
183
+ @echo " run: |"
184
+ @echo " make ci-pull"
185
+ @echo " make ci-validate"
186
+ @echo ""
187
+ @echo "GitLab CI (.gitlab-ci.yml):"
188
+ @echo " variables:"
189
+ @echo " SECRET_PASSWORD: \$$SECRET_PASSWORD"
190
+ @echo " SSH_PRIVATE_KEY: \$$SSH_PRIVATE_KEY"
191
+ @echo " script:"
192
+ @echo " - make ci-pull"
193
+ @echo " - make ci-validate"