UNPKG

vaultace-cli

Version:

AI-powered security scanner that detects vulnerabilities in AI-generated code. Proactive scanning, autonomous fixing, and emergency response for modern development teams.

222 lines (184 loc) • 6.84 kB
/** * Integrations Command - Native CI/CD and tool integrations */ const { Command } = require('commander') const chalk = require('chalk') const ora = require('ora') const fs = require('fs-extra') const path = require('path') const { getAPIClient } = require('../services/api-client') const integrationsCommand = new Command('integrations') .alias('int') .description('šŸ”— CI/CD and security tool integrations') // GitHub Actions integration integrationsCommand .command('github-action') .description('Generate GitHub Action for security workflows') .option('--workflow <name>', 'workflow name', 'vaultace-security') .option('--on <events>', 'trigger events', 'push,pull_request') .option('--auto-fix', 'enable automatic fixing') .action(async (options) => { const spinner = ora('Generating GitHub Action...').start() try { const workflowContent = `name: ${options.workflow} on: ${options.on.split(',').map(event => event.trim()).join(':\n ')}: jobs: vaultace-security: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '18' - name: Install Vaultace CLI run: npm install -g @vaultace/cli - name: Authenticate Vaultace run: vaultace auth login --token \${{ secrets.VAULTACE_TOKEN }} - name: Security Scan run: | vaultace scan --remote --format json --output security-results.json vaultace intelligence insights --timeframe 1d ${options.autoFix ? `- name: Auto-fix Vulnerabilities run: vaultace fix auto --safe-only - name: Commit Fixes uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "šŸ”’ Auto-fix security vulnerabilities" file_pattern: "*.js *.ts *.py *.go"` : ''} - name: Upload Security Report uses: actions/upload-artifact@v4 with: name: vaultace-security-report path: security-results.json` const workflowPath = '.github/workflows' await fs.ensureDir(workflowPath) const fileName = `${options.workflow}.yml` const filePath = path.join(workflowPath, fileName) await fs.writeFile(filePath, workflowContent) spinner.succeed('GitHub Action generated') console.log(chalk.green(`\nāœ… GitHub Action created: ${filePath}`)) console.log(chalk.yellow('\nRequired secrets:')) console.log(' VAULTACE_TOKEN - Your Vaultace API token') console.log(chalk.blue('\nAdd secret: Settings → Secrets → Actions → New repository secret')) } catch (error) { spinner.fail('Failed to generate GitHub Action') console.error(chalk.red(`Error: ${error.message}`)) } }) // GitLab CI integration integrationsCommand .command('gitlab-ci') .description('Generate GitLab CI configuration') .option('--stage <name>', 'pipeline stage', 'security') .action(async (options) => { const spinner = ora('Generating GitLab CI configuration...').start() try { const gitlabConfig = `# Vaultace Security Pipeline vaultace-security: stage: ${options.stage} image: node:18-alpine before_script: - npm install -g @vaultace/cli - vaultace auth login --token $VAULTACE_TOKEN script: - vaultace scan --remote --ci - vaultace intelligence insights artifacts: reports: junit: vaultace-security-report.xml paths: - security-results.json only: - merge_requests - main` await fs.writeFile('.gitlab-ci-vaultace.yml', gitlabConfig) spinner.succeed('GitLab CI configuration generated') console.log(chalk.green('\nāœ… GitLab CI config created: .gitlab-ci-vaultace.yml')) console.log(chalk.yellow('\nAdd to your main .gitlab-ci.yml:')) console.log(' include: .gitlab-ci-vaultace.yml') } catch (error) { spinner.fail('Failed to generate GitLab CI configuration') console.error(chalk.red(`Error: ${error.message}`)) } }) // Slack integration integrationsCommand .command('slack') .description('Configure Slack notifications') .option('--webhook <url>', 'Slack webhook URL') .option('--channel <name>', 'Slack channel', '#security') .action(async (options) => { const spinner = ora('Configuring Slack integration...').start() const apiClient = getAPIClient() try { if (!apiClient.isAuthenticated()) { spinner.fail('Authentication required') console.log(chalk.yellow('Please login first: vaultace auth login')) return } const integrationData = { type: 'slack', webhook_url: options.webhook, channel: options.channel, events: ['vulnerability_found', 'fix_applied', 'scan_completed'] } // This would call your backend integration API console.log(chalk.blue('\nšŸ”— Slack Integration Configuration')) console.log(`Channel: ${options.channel}`) console.log('Events: Vulnerability alerts, Fix notifications, Scan reports') spinner.succeed('Slack integration configured') } catch (error) { spinner.fail('Slack integration failed') console.error(chalk.red(`Error: ${error.message}`)) } }) // VSCode extension setup integrationsCommand .command('vscode') .description('Generate VSCode workspace configuration') .action(async () => { const spinner = ora('Generating VSCode configuration...').start() try { const vscodeConfig = { 'settings': { 'vaultace.autoScan': true, 'vaultace.showInlineWarnings': true, 'vaultace.aiAssistance': true }, 'extensions': { 'recommendations': [ 'vaultace.vaultace-security' ] }, 'tasks': { 'version': '2.0.0', 'tasks': [ { 'label': 'Vaultace Security Scan', 'type': 'shell', 'command': 'vaultace scan --format table', 'group': 'build', 'presentation': { 'echo': true, 'reveal': 'always' } } ] } } await fs.ensureDir('.vscode') await fs.writeFile('.vscode/settings.json', JSON.stringify(vscodeConfig, null, 2)) spinner.succeed('VSCode configuration generated') console.log(chalk.green('\nāœ… VSCode workspace configured')) console.log('Features enabled:') console.log(' • Auto security scanning') console.log(' • Inline vulnerability warnings') console.log(' • AI-powered assistance') } catch (error) { spinner.fail('VSCode configuration failed') console.error(chalk.red(`Error: ${error.message}`)) } }) module.exports = integrationsCommand