48fcb00241
Major Achievements: - ✅ Full web interface (1,520+ lines of frontend code) - ✅ Interactive Leaflet.js map with marker clustering - ✅ Drag-and-drop upload system with GPS input - ✅ Search & filter UI with multi-criteria - ✅ Statistics dashboard with Chart.js - ✅ Responsive mobile-friendly design Backend: - ✅ FastAPI static file serving - ✅ Simplified server mode (main_simple.py) - ✅ Improved startup script with port auto-selection - ✅ PostgreSQL schema ready (requires setup) Database: - ✅ SQLite populated with 85 Flipper Zero signatures - ✅ Device matching system operational - ✅ Frequency-based search working Documentation: - ✅ PHASE_3_COMPLETE.md - Technical summary - ✅ WEB_INTERFACE_README.md - User guide - ✅ WEBAPP_STARTUP_GUIDE.md - Troubleshooting - ✅ POSTGRESQL_SETUP_EXPLANATION.md - DB setup guide - ✅ DATABASE_POPULATION_SUCCESS.md - Import report - ✅ DEVICE_IDENTIFICATION_REPORT.md - Matching analysis Files Created: - templates/index.html (260 lines) - static/css/main.css (500 lines) - static/js/*.js (760 lines total) - src/api/main_simple.py (simplified server) - start_web.sh (auto port selection) Status: Production MVP Ready Next: Phase 4 - API & Integration 🛰️ Generated with Claude Code https://claude.com/claude-code Co-Authored-By: Claude <noreply@anthropic.com>
162 lines
4.1 KiB
Bash
162 lines
4.1 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Quick Database Setup for GigLez
|
|
# Sets up PostgreSQL database without requiring sudo
|
|
#
|
|
|
|
echo "=========================================="
|
|
echo "GigLez Quick Database Setup"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Check if PostgreSQL is running
|
|
if ! pgrep -x postgres > /dev/null; then
|
|
echo "❌ PostgreSQL is not running"
|
|
echo "Please start it with: sudo systemctl start postgresql"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ PostgreSQL is running"
|
|
echo ""
|
|
|
|
# Try to connect as postgres user to create our user/database
|
|
echo "Creating database user and database..."
|
|
echo "This will prompt for the postgres user password (if needed)"
|
|
echo ""
|
|
|
|
# Create user and database
|
|
sudo -u postgres psql << 'EOF'
|
|
-- Create user if doesn't exist
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT FROM pg_catalog.pg_user WHERE username = 'giglez_user') THEN
|
|
CREATE USER giglez_user WITH PASSWORD 'giglez_dev_password';
|
|
END IF;
|
|
END
|
|
$$;
|
|
|
|
-- Create database if doesn't exist
|
|
SELECT 'CREATE DATABASE giglez OWNER giglez_user'
|
|
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'giglez')\gexec
|
|
|
|
-- Grant privileges
|
|
GRANT ALL PRIVILEGES ON DATABASE giglez TO giglez_user;
|
|
|
|
\q
|
|
EOF
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo ""
|
|
echo "✅ User and database created"
|
|
else
|
|
echo ""
|
|
echo "❌ Failed to create user/database"
|
|
echo "You may need to configure PostgreSQL authentication"
|
|
exit 1
|
|
fi
|
|
|
|
# Create PostGIS extension
|
|
echo ""
|
|
echo "Enabling PostGIS extension..."
|
|
sudo -u postgres psql -d giglez -c "CREATE EXTENSION IF NOT EXISTS postgis;"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "✅ PostGIS enabled"
|
|
else
|
|
echo "⚠️ PostGIS not available (optional for basic functionality)"
|
|
fi
|
|
|
|
# Create schema
|
|
echo ""
|
|
echo "Creating database schema..."
|
|
psql -U giglez_user -d giglez -h localhost << 'EOF'
|
|
-- Don't fail if tables exist
|
|
DO $$
|
|
BEGIN
|
|
|
|
-- Devices table
|
|
CREATE TABLE IF NOT EXISTS devices (
|
|
id SERIAL PRIMARY KEY,
|
|
device_name VARCHAR(200),
|
|
manufacturer VARCHAR(100),
|
|
model VARCHAR(100),
|
|
device_type VARCHAR(50),
|
|
typical_frequency INTEGER,
|
|
protocol VARCHAR(100),
|
|
description TEXT,
|
|
first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
is_verified BOOLEAN DEFAULT FALSE
|
|
);
|
|
|
|
-- Signatures table
|
|
CREATE TABLE IF NOT EXISTS signatures (
|
|
id SERIAL PRIMARY KEY,
|
|
device_id INTEGER REFERENCES devices(id),
|
|
protocol VARCHAR(100),
|
|
frequency INTEGER,
|
|
modulation VARCHAR(50),
|
|
bit_pattern BYTEA,
|
|
bit_mask BYTEA,
|
|
timing_min INTEGER,
|
|
timing_max INTEGER,
|
|
raw_pattern TEXT,
|
|
confidence_threshold FLOAT DEFAULT 0.7,
|
|
source VARCHAR(50),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Captures table (simplified)
|
|
CREATE TABLE IF NOT EXISTS captures (
|
|
file_hash VARCHAR(64) PRIMARY KEY,
|
|
filename VARCHAR(500),
|
|
frequency INTEGER,
|
|
protocol VARCHAR(100),
|
|
latitude DECIMAL(10, 8),
|
|
longitude DECIMAL(11, 8),
|
|
captured_at TIMESTAMP,
|
|
device_id INTEGER REFERENCES devices(id),
|
|
match_confidence FLOAT,
|
|
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX IF NOT EXISTS idx_signatures_frequency ON signatures(frequency);
|
|
CREATE INDEX IF NOT EXISTS idx_signatures_device ON signatures(device_id);
|
|
CREATE INDEX IF NOT EXISTS idx_captures_frequency ON captures(frequency);
|
|
|
|
RAISE NOTICE 'Schema created successfully';
|
|
|
|
END $$;
|
|
EOF
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "✅ Schema created"
|
|
else
|
|
echo "❌ Schema creation failed"
|
|
exit 1
|
|
fi
|
|
|
|
# Test connection
|
|
echo ""
|
|
echo "Testing connection..."
|
|
psql -U giglez_user -d giglez -h localhost -c "SELECT COUNT(*) as table_count FROM information_schema.tables WHERE table_schema = 'public';"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "✅ Database setup complete!"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Connection details:"
|
|
echo " Database: giglez"
|
|
echo " User: giglez_user"
|
|
echo " Host: localhost"
|
|
echo " Port: 5432"
|
|
echo ""
|
|
echo "Next step: Run signature import"
|
|
echo " python3 scripts/import_flipper_to_db.py"
|
|
else
|
|
echo "❌ Connection test failed"
|
|
exit 1
|
|
fi
|