An open API service indexing awesome lists of open source software.

https://github.com/ccesarfp/dsa-tools


https://github.com/ccesarfp/dsa-tools

Last synced: 9 months ago
JSON representation

Awesome Lists containing this project

README

          

# dsa-tools CLI

## Visão Geral

dsa-tools é uma ferramenta de linha de comando (CLI) projetada para auxiliar em diversas tarefas de automação de desenvolvimento e segurança. Suas duas principais funcionalidades são:

- **Migrations:** Gerencie, versiona e aplique mudanças no esquema do banco de dados de forma fácil.
- **Obfuscate:** Ofusque arquivos e diretórios JavaScript para proteção de código.

## Funcionalidades

- **Migrations:**
- Inicialize o sistema de migrações
- Aplique, simule (fake) e verifique o status das migrações
- Controle e versionamento das alterações no esquema do banco de dados
- **Obfuscate:**
- Ofusque arquivos JavaScript (`.js`) ou diretórios inteiros
- Controle detalhado sobre as opções de ofuscação (arrays de strings, embaralhamento de identificadores, controle de fluxo, etc.)
- Processamento recursivo de diretórios, preservando a estrutura no resultado
- Integração com Node.js e npm para gerenciamento de dependências

## Instalação

Certifique-se de ter os seguintes pré-requisitos:
- [Go](https://golang.org/dl/) (para compilar/executar a CLI)
- [Node.js](https://nodejs.org/) e [npm](https://www.npmjs.com/) (para ofuscação de JavaScript)

Clone o repositório e construa a CLI:

```sh
git clone
cd dsa-tools
go build -o dsa-tools ./cmd/dsa-tools
```

## Uso

### Comando Obfuscate

O comando `obfuscate` permite ofuscar arquivos ou diretórios JavaScript. Ele utiliza o pacote `javascript-obfuscator` internamente.

#### Uso Básico

```sh
./dsa-tools obfuscate:run --path --dest [opções]
```

- `--path`, `-p`: Caminho para o diretório ou arquivo a ser ofuscado (obrigatório)
- `--dest`, `-d`: Diretório de destino para os arquivos ofuscados (obrigatório)

#### Exemplo

```sh
./dsa-tools obfuscate:run --path ./src --dest ./dist
```

Isso irá encontrar recursivamente todos os arquivos `.js` em `./src`, ofuscá-los e gravar os resultados nos caminhos correspondentes em `./dist`.

#### Opções

Você pode customizar o processo de ofuscação usando as seguintes flags:

**Transformações de Array de Strings:**
- `--string-array` (padrão: true): Habilita transformação de array de strings
- `--string-array-rotate` (padrão: true): Habilita rotação do array de strings
- `--string-array-shuffle` (padrão: true): Habilita embaralhamento do array de strings
- `--string-array-threshold` (padrão: 0.75): Limite para array de strings (0-1)
- `--string-array-index-shift` (padrão: true): Habilita deslocamento de índice do array de strings
- `--string-array-indexes-type` (padrão: hexadecimal-number): Tipo de índice do array de strings (`hexadecimal-number`|`hexadecimal-numeric-string`)
- `--string-array-wrappers-count` (padrão: 1): Quantidade de wrappers do array de strings
- `--string-array-wrappers-type` (padrão: variable): Tipo de wrapper do array de strings (`variable`|`function`)
- `--string-array-wrappers-chained-calls` (padrão: true): Habilita chamadas encadeadas de wrappers do array de strings
- `--string-array-encoding` (padrão: none): Codificação do array de strings (`none`|`base64`|`rc4`)

**Transformações de Identificadores:**
- `--identifier-names-generator` (padrão: hexadecimal): Gerador de nomes de identificadores (`hexadecimal`|`mangled`|`dictionary`)
- `--identifiers-prefix`: Prefixo para identificadores
- `--rename-globals` (padrão: false): Renomeia identificadores globais
- `--rename-properties` (padrão: false): Renomeia propriedades

**Outras Transformações:**
- `--compact` (padrão: true): Habilita saída compacta
- `--simplify` (padrão: true): Habilita simplificação de código
- `--transform-object-keys` (padrão: false): Transforma chaves de objetos
- `--numbers-to-expressions` (padrão: false): Converte números em expressões
- `--control-flow-flattening` (padrão: false): Habilita achatamento do fluxo de controle
- `--control-flow-flattening-threshold` (padrão: 0.75): Limite para achatamento do fluxo de controle (0-1)
- `--dead-code-injection` (padrão: false): Habilita injeção de código morto
- `--dead-code-injection-threshold` (padrão: 0.4): Limite para injeção de código morto (0-1)

#### Ajuda

Para ver todas as opções disponíveis e suas descrições, execute:

```sh
./dsa-tools obfuscate:run --help
```

---

### Comando Migrations

dsa-tools também oferece um conjunto de comandos para gerenciar migrações de banco de dados, facilitando o versionamento, aplicação e acompanhamento das mudanças no seu esquema de banco de dados.

#### Comandos Disponíveis de Migração

- `migrate:init` – Inicializa o sistema de migrações no seu projeto, criando a estrutura de diretórios e arquivos de configuração necessários.
- `migrate:run` – Aplica todas as migrações pendentes ao banco de dados.
- `migrate:status` – Mostra o status atual das migrações (quais foram aplicadas, quais estão pendentes).
- `migrate:fake-run` – Marca migrações como aplicadas sem realmente executá-las (útil para sincronizar o estado).

#### Uso Básico

```sh
./dsa-tools migrate:init
./dsa-tools migrate:run
./dsa-tools migrate:status
./dsa-tools migrate:fake-run
```

#### Exemplo de Fluxo

1. **Inicialize as migrações:**
```sh
./dsa-tools migrate:init
```
2. **Aplique as migrações:**
```sh
./dsa-tools migrate:run
```
3. **Verifique o status das migrações:**
```sh
./dsa-tools migrate:status
```
4. **Simule a aplicação das migrações (marcar como aplicadas):**
```sh
./dsa-tools migrate:fake-run
```

#### Observações
- Os arquivos de migração devem ser colocados no diretório de migrações criado pelo `migrate:init`.
- Cada migração deve seguir as convenções de nome e estrutura descritas na documentação ou configuração gerada.
- Sempre faça backup do seu banco de dados antes de rodar migrações em ambientes de produção.

## Como Funciona

1. A CLI verifica a presença do pacote `javascript-obfuscator` via npm e o instala globalmente se necessário.
2. Ela escaneia recursivamente o caminho de entrada em busca de arquivos `.js`.
3. Para cada arquivo, invoca o `javascript-obfuscator` via Node.js, passando as opções selecionadas.
4. O resultado ofuscado é gravado no diretório de destino, preservando a estrutura de diretórios original.
5. Para migrações, a CLI gerencia os arquivos de migração, aplica no banco de dados e acompanha seu status.

## Solução de Problemas

- Certifique-se de que Node.js e npm estão instalados e disponíveis no seu PATH.
- Se encontrar problemas com o ofuscador, tente rodar `npm install -g javascript-obfuscator` manualmente.
- Para problemas com migrações, verifique a conexão com o banco de dados e a estrutura dos arquivos de migração.
- Para erros de permissão, verifique as permissões dos seus arquivos e diretórios.