forked from kruchkov-alexandr/yaml-encrypter-decrypter
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* [ADD] - added structure info via README, also, realized Makefile for easy to build/test and etc.; * [UPD] - security patches for harden-runner;
- Loading branch information
Showing
5 changed files
with
186 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,4 +4,7 @@ | |
#.vscode | ||
|
||
.idea | ||
yed | ||
yed | ||
|
||
# Commented binary directory | ||
bin |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
# Project-specific variables | ||
BINARY_NAME := yed | ||
OUTPUT_DIR := bin | ||
CMD_DIR := cmd/yaml-encrypter-decrypter | ||
TAG_NAME ?= $(shell head -n 1 .release-version 2>/dev/null || echo "v0.0.0") | ||
VERSION_RAW ?= $(shell tail -n 1 .release-version 2>/dev/null | sed 's/ /_/g' || echo "dev") | ||
VERSION ?= $(VERSION_RAW) | ||
|
||
# Ensure the output directory exists | ||
$(OUTPUT_DIR): | ||
@mkdir -p $(OUTPUT_DIR) | ||
|
||
# Default target | ||
.PHONY: default | ||
default: fmt vet lint build quicktest | ||
|
||
# Build and run the application locally | ||
.PHONY: run | ||
run: | ||
@echo "Running $(BINARY_NAME)..." | ||
go run main.go | ||
|
||
# Install project dependencies | ||
.PHONY: install-deps | ||
install-deps: | ||
@echo "Installing dependencies..." | ||
go mod tidy | ||
go mod vendor | ||
|
||
# Clean up dependencies | ||
.PHONY: clean-deps | ||
clean-deps: | ||
@echo "Cleaning up vendor dependencies..." | ||
rm -rf vendor | ||
|
||
# Build the project for the current OS/architecture | ||
.PHONY: build | ||
build: $(OUTPUT_DIR) | ||
@echo "Building $(BINARY_NAME) with version $(VERSION)..." | ||
GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags="-X main.Version=$(VERSION)" -o $(OUTPUT_DIR)/$(BINARY_NAME) $(CMD_DIR)/main.go | ||
|
||
# Build binaries for multiple platforms | ||
.PHONY: build-cross | ||
build-cross: $(OUTPUT_DIR) | ||
@echo "Building cross-platform binaries..." | ||
GOOS=linux GOARCH=amd64 go build -ldflags="-X main.Version=$(VERSION)" -o $(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64 $(CMD_DIR)/main.go | ||
GOOS=darwin GOARCH=arm64 go build -ldflags="-X main.Version=$(VERSION)" -o $(OUTPUT_DIR)/$(BINARY_NAME)-darwin-arm64 $(CMD_DIR)/main.go | ||
GOOS=windows GOARCH=amd64 go build -ldflags="-X main.Version=$(VERSION)" -o $(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe $(CMD_DIR)/main.go | ||
@echo "Cross-platform binaries are available in $(OUTPUT_DIR):" | ||
@ls -1 $(OUTPUT_DIR) | ||
|
||
# Clean build artifacts | ||
.PHONY: clean | ||
clean: | ||
@echo "Cleaning build artifacts..." | ||
rm -rf $(OUTPUT_DIR) | ||
|
||
# Run tests with race detection and coverage | ||
.PHONY: test | ||
test: | ||
@echo "Running tests with race detection..." | ||
go test -v -race -cover ./... | ||
|
||
# Run quick tests without additional checks | ||
.PHONY: quicktest | ||
quicktest: | ||
@echo "Running quick tests..." | ||
go test ./... | ||
|
||
# Check formatting of Go code | ||
.PHONY: fmt | ||
fmt: | ||
@echo "Checking code formatting..." | ||
@OUTPUT=`gofmt -l . 2>&1`; \ | ||
if [ "$$OUTPUT" ]; then \ | ||
echo "gofmt must be run on the following files:"; \ | ||
echo "$$OUTPUT"; \ | ||
exit 1; \ | ||
fi | ||
|
||
# Run go vet to analyze code | ||
.PHONY: vet | ||
vet: | ||
@echo "Running go vet..." | ||
go vet ./... | ||
|
||
# Display help information | ||
.PHONY: help | ||
help: | ||
@echo "Available targets:" | ||
@echo " default - Run formatting, vetting, linting, build, and quick tests" | ||
@echo " run - Run the application locally" | ||
@echo " install-deps - Install project dependencies" | ||
@echo " clean-deps - Clean up vendor dependencies" | ||
@echo " build - Build the application for the current OS/architecture" | ||
@echo " build-cross - Build binaries for multiple platforms" | ||
@echo " clean - Clean build artifacts" | ||
@echo " test - Run tests with race detection and coverage" | ||
@echo " quicktest - Run quick tests without additional checks" | ||
@echo " fmt - Check code formatting" | ||
@echo " vet - Analyze code with go vet" | ||
@echo " help - Display this help message" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
# About YED | ||
|
||
Этот код представляет собой приложение на Go, предназначенное для шифрования и дешифрования данных в YAML-файлах с использованием алгоритма AES. Он может работать с отдельными значениями или блоками данных из YAML, предоставляя возможности командной строки для управления. | ||
|
||
## Основные возможности: | ||
|
||
1. Шифрование и дешифрование данных: | ||
• Позволяет шифровать или расшифровывать отдельные значения, используя предоставленный `AES-ключ`. | ||
• Работает с указанными блоками данных (`YAML-блоки`, определённые в конфигурации или переданные в параметрах). | ||
|
||
2. Работа с YAML-файлами: | ||
• Программа читает `YAML-файлы`, определяет, какие блоки данных необходимо шифровать или дешифровать, и применяет операцию. | ||
|
||
3. Гибкость конфигурации: | ||
• Поддерживает конфигурационные файлы для разных сред (например, dev, test). | ||
• Если ключ не указан в параметрах запуска, программа пытается взять его из конфигурационного файла. | ||
|
||
4. Командный интерфейс (CLI): | ||
- Предоставляет различные флаги для настройки: | ||
```shell | ||
--version – показать версию приложения. | ||
--key – задать AES-ключ для операций шифрования/дешифрования. | ||
--env – указать среду для выбора соответствующего конфигурационного файла. | ||
--filename – указать YAML-файл для обработки. | ||
--value – указать отдельное значение для шифрования или дешифрования. | ||
--operation – указать операцию (encrypt или decrypt). | ||
--dry-run – показать результат операций без изменения файлов. | ||
``` | ||
5. Чтение версии: | ||
- Версия программы считывается из файла .release-version. | ||
|
||
### Основные компоненты: | ||
1. Загрузка конфигурации: | ||
Метод loadConfig загружает базовую и средовую конфигурацию YAML. Это позволяет программе использовать разные настройки для разных окружений. | ||
|
||
2. Шифрование/дешифрование значений: | ||
- Использует функции `encryption.Encrypt` и `encryption.Decrypt` для работы с данными. | ||
- Обрабатывает строки с префиксом `AES256:` как зашифрованные данные. | ||
|
||
3. Работа с YAML-файлами: | ||
- Метод processYamlFile проходит по строкам файла, определяет блоки, которые необходимо обработать, и применяет операции шифрования или дешифрования. | ||
|
||
4. CLI-интерфейс: | ||
- Использует стандартный пакет flag для парсинга аргументов командной строки. | ||
- Предоставляет кастомизированную функцию flag.Usage для отображения информации о программе. | ||
|
||
### Пример использования: | ||
|
||
1. Шифрование значения: | ||
```shell | ||
go run main.go --key "my-secret-key" --value "my-sensitive-data" --operation encrypt | ||
``` | ||
Результат: строка будет зашифрована и возвращена с префиксом `AES256:`. | ||
|
||
2. Расшифровка значения: | ||
```shell | ||
go run main.go --key "my-secret-key" --value "AES256:encrypted-data" --operation decrypt | ||
``` | ||
|
||
3. Обработка YAML-файла: | ||
```shell | ||
go run main.go --key "my-secret-key" --filename "configs/values.yaml" --operation encrypt --env-blocks "dev" | ||
``` | ||
|
||
## Для чего нужен код: | ||
|
||
Код полезен в следующих сценариях: | ||
- Защита конфиденциальных данных в конфигурационных файлах YAML (например, паролей, ключей API). | ||
- Обеспечение безопасности конфигураций для разных окружений (dev, test, prod). | ||
- Быстрая обработка данных через интерфейс командной строки для DevOps или разработчиков. | ||
|
||
Этот инструмент может быть полезен для управления секретами в средах, где YAML используется для хранения конфигураций, например, в Kubernetes или других системах управления инфраструктурой. |