feat: Add comprehensive GitHub security integration

Security Infrastructure:
- Add .gitattributes for merge conflict protection and sensitive file handling
- Add SECURITY.md with detailed security policies and procedures
- Add pre-commit hook template for local secret detection
- Add GitHub Actions workflow for automated security scanning
- Add comprehensive documentation for git hooks

Code Security Improvements:
- Fix AuthContext.tsx: Remove hardcoded credentials, use environment variables
- Migrate WalletContext.tsx: Replace Ethereum/MetaMask with Polkadot.js
- Refactor lib/wallet.ts: Complete Substrate configuration with asset management
- Update TokenSwap.tsx: Add real API integration for balance queries
- Update StakingDashboard.tsx: Add blockchain integration placeholders

Environment Management:
- Update .env with proper security warnings
- Update .env.example with comprehensive template
- All sensitive data now uses environment variables
- Demo mode controllable via VITE_ENABLE_DEMO_MODE flag

Security Measures Implemented:
 4-layer protection (gitignore + gitattributes + pre-commit + CI/CD)
 Automated secret scanning (TruffleHog + Gitleaks)
 Pre-commit hooks prevent accidental commits
 CI/CD pipeline validates all PRs
 Environment variable validation
 Dependency security auditing

Breaking Changes:
- WalletContext now uses Polkadot.js instead of MetaMask
- lib/wallet.ts completely rewritten for Substrate
- ASSET_IDs and CHAIN_CONFIG exported from lib/wallet.ts
- Demo mode must be explicitly enabled

Migration Notes:
- Install pre-commit hook: cp .git-hooks/pre-commit.example .git/hooks/pre-commit
- Copy environment: cp .env.example .env
- Update .env with your credentials
- Enable GitHub Actions in repository settings

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-28 21:48:48 +03:00
parent e5a15e29b9
commit 159700eade
13 changed files with 1652 additions and 299 deletions
-123
View File
@@ -1,123 +0,0 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@100..900&family=JetBrains+Mono:wght@100..800&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
/* Kurdish color scheme - kesk u sor u zer */
--background: 0 0% 100%;
--foreground: 0 0% 3.9%;
--card: 0 0% 100%;
--card-foreground: 0 0% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 0 0% 3.9%;
--primary: 148 100% 32%; /* Kurdish green */
--primary-foreground: 0 0% 98%;
--secondary: 358 84% 52%; /* Kurdish red */
--secondary-foreground: 0 0% 98%;
--muted: 52 100% 50%; /* Kurdish yellow muted */
--muted-foreground: 0 0% 20%;
--accent: 52 100% 50%; /* Kurdish yellow */
--accent-foreground: 0 0% 9%;
--destructive: 358 84% 52%;
--destructive-foreground: 0 0% 98%;
--border: 0 0% 89.8%;
--input: 0 0% 89.8%;
--ring: 148 100% 32%;
--radius: 0.5rem;
--chart-1: 148 100% 32%;
--chart-2: 358 84% 52%;
--chart-3: 52 100% 50%;
--chart-4: 148 100% 25%;
--chart-5: 358 84% 40%;
--sidebar-background: 0 0% 98%;
--sidebar-foreground: 0 0% 3.9%;
--sidebar-primary: 148 100% 32%;
--sidebar-primary-foreground: 0 0% 98%;
--sidebar-accent: 52 100% 50%;
--sidebar-accent-foreground: 0 0% 9%;
--sidebar-border: 0 0% 89.8%;
--sidebar-ring: 148 100% 32%;
}
.dark {
--background: 0 0% 3.9%;
--foreground: 0 0% 98%;
--card: 0 0% 3.9%;
--card-foreground: 0 0% 98%;
--popover: 0 0% 3.9%;
--popover-foreground: 0 0% 98%;
--primary: 148 100% 40%; /* Kurdish green dark */
--primary-foreground: 0 0% 9%;
--secondary: 358 84% 60%; /* Kurdish red dark */
--secondary-foreground: 0 0% 9%;
--muted: 52 100% 30%; /* Kurdish yellow dark muted */
--muted-foreground: 0 0% 98%;
--accent: 52 100% 45%; /* Kurdish yellow dark */
--accent-foreground: 0 0% 9%;
--destructive: 358 84% 52%;
--destructive-foreground: 0 0% 98%;
--border: 0 0% 14.9%;
--input: 0 0% 14.9%;
--ring: 148 100% 40%;
--chart-1: 148 100% 40%;
--chart-2: 358 84% 60%;
--chart-3: 52 100% 45%;
--chart-4: 148 100% 30%;
--chart-5: 358 84% 50%;
--sidebar-background: 0 0% 7%;
--sidebar-foreground: 0 0% 98%;
--sidebar-primary: 148 100% 40%;
--sidebar-primary-foreground: 0 0% 9%;
--sidebar-accent: 52 100% 45%;
--sidebar-accent-foreground: 0 0% 9%;
--sidebar-border: 0 0% 14.9%;
--sidebar-ring: 148 100% 40%;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground font-sans dark:bg-background dark:text-foreground;
}
pre, code {
@apply font-mono;
}
}
.markdown-editor {
@apply font-mono text-base leading-relaxed;
}
.markdown-preview {
@apply prose max-w-none prose-blue dark:prose-invert;
}
.markdown-preview pre {
@apply bg-secondary p-4 rounded-md overflow-x-auto;
}
.markdown-preview code {
@apply text-sm font-mono text-primary;
}
.markdown-preview h1,
.markdown-preview h2,
.markdown-preview h3,
.markdown-preview h4,
.markdown-preview h5,
.markdown-preview h6 {
@apply font-sans font-semibold text-foreground;
}
.markdown-preview ul,
.markdown-preview ol {
@apply my-4 ml-6;
}