64 lines
2.3 KiB
Python
64 lines
2.3 KiB
Python
import json
|
|
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.views import View
|
|
from django.contrib import messages
|
|
from .models import Scan
|
|
from .osint_services import phone_lookup, email_lookup, serp_search
|
|
|
|
class DashboardView(View):
|
|
def get(self, request):
|
|
recent_scans = Scan.objects.all()[:10]
|
|
context = {
|
|
'recent_scans': recent_scans,
|
|
'title': "Sentinel OSINT Dashboard"
|
|
}
|
|
return render(request, 'core/index.html', context)
|
|
|
|
def post(self, request):
|
|
query = request.POST.get('query', '').strip()
|
|
scan_type = request.POST.get('scan_type', 'phone')
|
|
|
|
if not query:
|
|
messages.error(request, "Search query is required.")
|
|
return redirect('index')
|
|
|
|
# Perform lookups based on type
|
|
results = {}
|
|
if scan_type == 'phone':
|
|
results = phone_lookup(query)
|
|
# Add serp search for the phone number
|
|
results['serp_results'] = serp_search(query)
|
|
elif scan_type == 'email':
|
|
results = email_lookup(query)
|
|
results['serp_results'] = serp_search(query)
|
|
else:
|
|
# For general names, usernames, or IPs, we primarily use SERP and future modules
|
|
results['serp_results'] = serp_search(query)
|
|
|
|
# Basic risk score calculation logic (mock for now)
|
|
risk_score = 10 # Default low
|
|
if scan_type == 'email' and results.get('abstract', {}).get('deliverability') == 'UNDELIVERABLE':
|
|
risk_score = 80
|
|
elif scan_type == 'phone' and results.get('veriphone', {}).get('phone_valid') == False:
|
|
risk_score = 90
|
|
|
|
# Save scan
|
|
scan = Scan.objects.create(
|
|
target_type=scan_type,
|
|
target_value=query,
|
|
results_json=json.dumps(results),
|
|
risk_score=risk_score
|
|
)
|
|
|
|
return redirect('scan_detail', pk=scan.pk)
|
|
|
|
class ScanDetailView(View):
|
|
def get(self, request, pk):
|
|
scan = get_object_or_404(Scan, pk=pk)
|
|
results = scan.get_results()
|
|
context = {
|
|
'scan': scan,
|
|
'results': results,
|
|
'title': f"Report: {scan.target_value}"
|
|
}
|
|
return render(request, 'core/scan_detail.html', context) |