71 lines
3.0 KiB
Python
71 lines
3.0 KiB
Python
from django.core.management.base import BaseCommand
|
|
from django.contrib.auth.models import User
|
|
from core.models import Brand, Incident
|
|
import random
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Seeds the database with initial data for brands, incidents, and a default user.'
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write('Deleting existing data...')
|
|
Incident.objects.all().delete()
|
|
Brand.objects.all().delete()
|
|
User.objects.filter(is_superuser=False).delete()
|
|
|
|
self.stdout.write('Creating new data...')
|
|
|
|
# Create a superuser if it doesn't exist
|
|
if not User.objects.filter(username='admin').exists():
|
|
User.objects.create_superuser('admin', 'admin@example.com', 'admin123')
|
|
self.stdout.write(self.style.SUCCESS('Successfully created a superuser.'))
|
|
|
|
# Get the admin user
|
|
admin_user = User.objects.get(username='admin')
|
|
|
|
# Create a brand and associate it with the admin user
|
|
brand = Brand.objects.create(
|
|
name="GuardiaNet",
|
|
website="https://guardianet.example.com",
|
|
logo_url="https://placehold.co/100x100/0A192F/FFFFFF/png?text=G",
|
|
)
|
|
brand.users.add(admin_user)
|
|
|
|
# Sample data for incidents
|
|
incidents_data = [
|
|
{
|
|
"incident_type": "phishing_attack",
|
|
"source_url": "https://guardianet-login.scam.com/signin",
|
|
"content": "A fraudulent website is impersonating our login page to steal user credentials. The design is a near-perfect replica of our own.",
|
|
"status": "new",
|
|
},
|
|
{
|
|
"incident_type": "negative_review",
|
|
"source_url": "https://twitter.com/unhappy_user/status/1234567890",
|
|
"content": "A highly negative and misleading tweet about our service uptime is gaining traction. It contains false information about a recent outage.",
|
|
"status": "in_review",
|
|
},
|
|
{
|
|
"incident_type": "domain_squatting",
|
|
"source_url": "http://guardianet.org",
|
|
"content": "A third party has registered the .org domain of our brand name and has put up a page with competitor ads.",
|
|
"status": "new",
|
|
},
|
|
{
|
|
"incident_type": "social_impersonation",
|
|
"source_url": "https://instagram.com/guardianet_support_scam",
|
|
"content": "An unofficial Instagram account is pretending to be our official support channel and asking users for their private information.",
|
|
"status": "resolved",
|
|
},
|
|
]
|
|
|
|
for data in incidents_data:
|
|
Incident.objects.create(
|
|
brand=brand,
|
|
incident_type=data["incident_type"],
|
|
source_url=data["source_url"],
|
|
content=data["content"],
|
|
status=data["status"],
|
|
)
|
|
|
|
self.stdout.write(self.style.SUCCESS('Successfully seeded the database.'))
|