diff --git a/README.md b/README.md
index 713f4eb..50abf0b 100644
--- a/README.md
+++ b/README.md
@@ -333,7 +333,7 @@ This endpoint takes 4 parameters via a GET request:
query - The query to search ES with
size - The number of elements to return (aka page size)
page - The page to return, combining this with size you can get the results in chunks
- unique - Only accepted if ES scripting is enabled (read above)
+ unique - Attempts to return the latest entry per domainName
**Note on the unique parameter**: If you're using the unique parameter, note
that paging of results is disabled, but the size parameter will still be used
diff --git a/pydat/pydat/ajax.py b/pydat/pydat/ajax.py
index e33deff..ff518e5 100644
--- a/pydat/pydat/ajax.py
+++ b/pydat/pydat/ajax.py
@@ -7,84 +7,45 @@
from django.shortcuts import render_to_response, HttpResponse
import urllib
-from pydat.handlers import handler
+from pydat.handlers import es as handler
+
def __renderErrorJSON__(message):
context = {'success': False,
- 'error': message
- }
- return HttpResponse(json.dumps(context), content_type='application/json')
+ 'error': message}
+ return HttpResponse(json.dumps(context), content_type='application/json')
-def metadata(request, version = None):
+def metadata(request, version=None):
results = handler.metadata(version)
- if results['success'] == False:
+ if not results['success']:
return __renderErrorJSON__(results['message'])
return HttpResponse(json.dumps(results), content_type='application/json')
-def dataTable(request, key, value, low = None, high = None):
+def advDataTable(request):
if not request.is_ajax():
return __renderErrorJSON__('Expected AJAX')
- if key is None or value is None:
- return __renderErrorJSON__('Missing Key and/or Value')
-
- if key not in [keys[0] for keys in settings.SEARCH_KEYS]:
- return __renderErrorJSON__('Invalid Key')
-
-
- key = urllib.unquote(key)
- value = urllib.unquote(value)
-
- #TODO Support Post -- need to add cooresponding form
+ # TODO Support Post -- need to add cooresponding form
if request.method == "GET":
+ query = request.GET.get('query', '')
page = int(request.GET.get('iDisplayStart', 0))
pagesize = int(request.GET.get('iDisplayLength', 50))
sortcols = int(request.GET.get('iSortingCols', 0))
sEcho = request.GET.get('sEcho')
sSearch = request.GET.get('sSearch', '')
+ unique = request.GET.get('unique', 'false')
sort = []
for x in range(sortcols):
- sortTuple = handler.formatSort(int(request.GET.get("iSortCol_%d" % x)),
- request.GET.get("sSortDir_%d" % x))
+ sortTuple = handler.formatSort(
+ int(request.GET.get("iSortCol_%d" % x)),
+ request.GET.get("sSortDir_%d" % x))
if sortTuple is not None:
sort.append(sortTuple)
-
- else:
- return __renderErrorJSON__('Unsupported Method')
-
- if (len(sSearch) == 0):
- sSearch = None
-
- try:
- results = handler.dataTableSearch(key, value, page, pagesize, sort, sSearch, low, high)
- except Exception as e:
- return __renderErrorJSON__(str(e))
-
- #Echo back the echo
- results['sEcho'] = sEcho
-
- return HttpResponse(json.dumps(results), content_type='application/json')
-
-
-def advDataTable(request):
- if not request.is_ajax():
- return __renderErrorJSON__('Expected AJAX')
-
- #TODO Support Post -- need to add cooresponding form
- if request.method == "GET":
- query = request.GET.get('query', '')
- page = int(request.GET.get('iDisplayStart', 0))
- pagesize = int(request.GET.get('iDisplayLength', 50))
- sortcols = int(request.GET.get('iSortingCols', 0))
- sEcho = request.GET.get('sEcho')
- sSearch = request.GET.get('sSearch', '')
- unique = request.GET.get('unique', 'false')
- sort = []
else:
return __renderErrorJSON__('Unsupported Method')
@@ -97,20 +58,22 @@ def advDataTable(request):
unique = False
try:
- results = handler.advDataTableSearch(query, page, pagesize, unique)
+ results = handler.advDataTableSearch(
+ query, page, pagesize, unique, sort)
except Exception as e:
return __renderErrorJSON__(str(e))
- #Echo back the echo
+ # Echo back the echo
results['sEcho'] = sEcho
-
+
return HttpResponse(json.dumps(results), content_type='application/json')
+
def advanced_search(request):
if request.method == "GET":
search_string = urllib.unquote(request.GET.get('query', None))
size = int(request.GET.get('size', 20))
- page = int(request.GET.get('page', 1))
+ page = int(request.GET.get('page', 1))
unique = request.GET.get('unique', 'false')
else:
return __renderErrorJSON__('Unsupported Method')
@@ -122,34 +85,34 @@ def advanced_search(request):
if search_string is None:
return __renderErrorJSON__("Query required")
-
+
skip = (page - 1) * size
try:
results = handler.advanced_search(search_string, skip, size, unique)
except Exception as e:
return __renderErrorJSON__(str(e))
- if results['success'] == False:
+ if not results['success']:
return __renderErrorJSON__(results['message'])
return HttpResponse(json.dumps(results), content_type='application/json')
def domains_latest(request, key, value):
- return domains(request, key, value, low = handler.lastVersion())
+ return domains(request, key, value, low=handler.lastVersion())
+
-def domains(request, key, value, low = None, high = None):
+def domains(request, key, value, low=None, high=None):
if key is None or value is None:
return __renderErrorJSON__('Missing Key and/or Value')
if key not in [keys[0] for keys in settings.SEARCH_KEYS]:
return __renderErrorJSON__('Invalid Key')
-
key = urllib.unquote(key)
value = urllib.unquote(value)
-
- #TODO Support Post -- need to add cooresponding form
+
+ # TODO Support Post -- need to add cooresponding form
if request.method == "GET":
limit = int(request.GET.get('limit', settings.LIMIT))
else:
@@ -160,54 +123,63 @@ def domains(request, key, value, low = None, high = None):
versionSort = True
try:
- results = handler.search(key, value, filt = None, low = low, high = high, versionSort = versionSort)
+ results = handler.search(key, value, filt=None,
+ low=low, high=high, versionSort=versionSort)
except Exception as e:
return __renderErrorJSON__(str(e))
- if results['success'] == False:
+ if not results['success']:
return __renderErrorJSON__(results['message'])
return HttpResponse(json.dumps(results), content_type='application/json')
+
def domain_latest(request, domainName):
- return domain(request, domainName, low = handler.lastVersion());
+ return domain(request, domainName, low=handler.lastVersion())
+
-def domain(request, domainName = None, low = None, high = None):
+def domain(request, domainName=None, low=None, high=None):
if request.method == "GET":
if not domainName:
return __renderErrorJSON__('Requires Domain Name Argument')
domainName = urllib.unquote(domainName)
try:
- results = handler.search('domainName', domainName, filt=None, low = low, high = high, versionSort = True)
+ results = handler.search(
+ 'domainName', domainName, filt=None,
+ low=low, high=high, versionSort=True)
except Exception as e:
return __renderErrorJSON__(str(e))
- return HttpResponse(json.dumps(results), content_type='application/json')
+ return HttpResponse(json.dumps(results),
+ content_type='application/json')
else:
return __renderErrorJSON__('Bad Method.')
-def domain_diff(request, domainName = None, v1 = None, v2 = None):
+
+def domain_diff(request, domainName=None, v1=None, v2=None):
if request.method == "GET":
if not domainName or not v1 or not v2:
return __renderErrorJSON__('Required Parameters Missing')
domainName = urllib.unquote(domainName)
try:
- v1_res = handler.search('domainName', domainName, filt=None, low = v1)
+ v1_res = handler.search(
+ 'domainName', domainName, filt=None, low=v1)
except Exception as e:
return __renderErrorJSON__(str(e))
try:
- v2_res = handler.search('domainName', domainName, filt=None, low = v2)
+ v2_res = handler.search(
+ 'domainName', domainName, filt=None, low=v2)
except Exception as e:
return __renderErrorJSON__(str(e))
try:
v1_res = v1_res['data'][0]
v2_res = v2_res['data'][0]
- except:
+ except Exception as e:
return __renderErrorJSON__("Did not find results")
keylist = set(v1_res.keys()).union(set(v2_res.keys()))
@@ -219,7 +191,7 @@ def domain_diff(request, domainName = None, v1 = None, v2 = None):
output = {}
data = {}
- for key in keylist:
+ for key in keylist:
if key in v1_res and key in v2_res:
if v1_res[key] == v2_res[key]:
data[key] = v1_res[key]
@@ -228,17 +200,18 @@ def domain_diff(request, domainName = None, v1 = None, v2 = None):
else:
try:
data[key] = [v1_res[key], '']
- except:
+ except Exception as e:
data[key] = ['', v2_res[key]]
-
- output['success'] = True
+
+ output['success'] = True
output['data'] = data
- return HttpResponse(json.dumps(output), content_type='application/json')
+ return HttpResponse(json.dumps(output),
+ content_type='application/json')
else:
return __renderErrorJSON__('Bad Method.')
-def resolve(request, domainName = None):
+def resolve(request, domainName=None):
if domainName is None:
return __renderErrorJSON__('Domain Name Required')
@@ -252,12 +225,10 @@ def resolve(request, domainName = None):
result = {'success': True,
'aliases': aliaslist,
'hostname': hostname,
- 'ips': []
- }
+ 'ips': []}
for ip in iplist:
- ipo = { 'ip' : ip,
- 'url' : reverse('pdns_r_rest', args=(ip,))
- }
+ ipo = {'ip': ip,
+ 'url': reverse('pdns_r_rest', args=(ip,))}
result['ips'].append(ipo)
return HttpResponse(json.dumps(result), content_type='application/json')
diff --git a/pydat/pydat/forms.py b/pydat/pydat/forms.py
index 13737fa..59ed3e7 100644
--- a/pydat/pydat/forms.py
+++ b/pydat/pydat/forms.py
@@ -2,8 +2,10 @@
import socket
from django import forms
from django.conf import settings
-from pydat.handlers import handler
-from pydat.handlers.passive import PDNS_UI_FIELDS_BASE, PDNS_UI_FIELDS_FORWARD, PDNS_UI_FIELDS_REVERSE
+from pydat.handlers import es as handler
+from pydat.handlers.passive import (PDNS_UI_FIELDS_BASE,
+ PDNS_UI_FIELDS_FORWARD,
+ PDNS_UI_FIELDS_REVERSE)
import urllib
class domain_form(forms.Form):
@@ -33,7 +35,7 @@ def __init__(self, *args, **kwargs):
self.fields['filt'].choices = settings.SEARCH_KEYS
for field in self.fields.values():
- field.error_messages = {'required':'%s is required' % field.label,
+ field.error_messages = {'required':'%s is required' % field.label,
'invalid_choice': '%s is invalid' % field.label}
def clean_latest(self):
@@ -87,7 +89,7 @@ def __init__(self, *args, **kwargs):
for field in self.fields.values():
field.error_messages = {
- 'required':'%s is required' % field.label,
+ 'required':'%s is required' % field.label,
'invalid_choice': '%s is invalid' % field.label}
def clean_unique(self):
@@ -105,7 +107,7 @@ def clean_query(self):
raise forms.ValidationError("Unable to unquote query")
result = handler.test_query(query)
if result is not None:
- raise forms.ValidationError("Unable to parse query: %s" % result)
+ raise forms.ValidationError("Unable to parse query: %s" % result)
return query
class ChoiceNumberField(forms.ChoiceField):
diff --git a/pydat/pydat/handlers/__init__.py b/pydat/pydat/handlers/__init__.py
index 61382be..da9baa3 100644
--- a/pydat/pydat/handlers/__init__.py
+++ b/pydat/pydat/handlers/__init__.py
@@ -4,13 +4,6 @@
from django.conf import settings
import passive
-try:
- (file, pathname, description) = imp.find_module(settings.HANDLER, [os.path.dirname(__file__)])
- handler = imp.load_module(settings.HANDLER, file, pathname, description)
-except Exception, e:
- tb = traceback.format_exc()
- raise Exception(tb)
-
try:
passive.initialize()
diff --git a/pydat/pydat/handlers/es.py b/pydat/pydat/handlers/es.py
index 0102644..fbaaaee 100644
--- a/pydat/pydat/handlers/es.py
+++ b/pydat/pydat/handlers/es.py
@@ -238,6 +238,8 @@ def formatSort(colID, direction):
sort_key = "details.registrant_telephone"
elif(colID == 6):
sort_key = "dataVersion"
+ elif(colID == 7):
+ sort_key = "_score"
if direction == "desc":
sort_dir = "desc"
@@ -385,16 +387,43 @@ def dataTableSearch(key, value, skip, pagesize, sortset, sfilter, low, high):
return results
-def __createAdvancedQuery__(query, skip, size, unique):
+def __createAdvancedQuery__(query, skip, size, unique, sort=None):
q = yacc.parse(query)
if not unique:
- q['sort'] = [{'_score': {'order': 'desc'}},
- {'domainName': {'order': 'asc'}},
- {'dataVersion': {'order': 'desc'}},
+ if sort is not None and len(sort) > 0:
+ sortParams = list()
+ fields = set()
+ for (field, direction) in sort:
+ fields.add(field)
+ sortParams.append({field: {'order': direction}})
+ if field == 'dataVersion':
+ sortParams.append({'updateVersion':
+ {'order': 'desc',
+ 'missing': 0,
+ 'unmapped_type': 'long'}})
+
+ if '_score' not in fields:
+ sortParams.append({"_score": {'order': 'desc'}})
+
+ if 'domainName' not in fields:
+ sortParams.append({"domainName": {'order': 'asc'}})
+
+ if 'dataVersion' not in fields:
+ sortParams.extend(
+ [{'dataVersion': {'order': 'desc'}},
{'updateVersion': {'order': 'desc',
'missing': 0,
- 'unmapped_type': 'long'}}]
+ 'unmapped_type': 'long'}}])
+ else:
+ sortParams = [
+ {'_score': {'order': 'desc'}},
+ {'domainName': {'order': 'asc'}},
+ {'dataVersion': {'order': 'desc'}},
+ {'updateVersion': {'order': 'desc',
+ 'missing': 0,
+ 'unmapped_type': 'long'}}]
+ q['sort'] = sortParams
q['size'] = size
q['from'] = skip
else:
@@ -418,7 +447,7 @@ def __createAdvancedQuery__(query, skip, size, unique):
return q
-def advDataTableSearch(query, skip, pagesize, unique=False):
+def advDataTableSearch(query, skip, pagesize, unique=False, sort=None):
results = {'success': False}
results['aaData'] = []
@@ -429,7 +458,7 @@ def advDataTableSearch(query, skip, pagesize, unique=False):
return results
try:
- q = __createAdvancedQuery__(query, skip, pagesize, unique)
+ q = __createAdvancedQuery__(query, skip, pagesize, unique, sort)
except Exception as e:
results['message'] = str(e)
return results
diff --git a/pydat/pydat/settings.py b/pydat/pydat/settings.py
index c429a13..69213a8 100644
--- a/pydat/pydat/settings.py
+++ b/pydat/pydat/settings.py
@@ -12,7 +12,6 @@
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
-HANDLER = 'es'
ES_URI = 'localhost:9200'
ES_INDEX_PREFIX = 'pydat'
ES_USER = None
diff --git a/pydat/pydat/static/js/domain.js b/pydat/pydat/static/js/domain.js
deleted file mode 100644
index 7228221..0000000
--- a/pydat/pydat/static/js/domain.js
+++ /dev/null
@@ -1,563 +0,0 @@
-$(document).ready(function() {
-
- //hide the search menu by default
- //search_toggle(0);
-
- $("#dialog").dialog({
- "width" : ($(window).width() * .8),
- "height": 640,
- "autoOpen": false,
- "modal": true,
- "open": function(event, ui) {
- $(this).parent().css('position', 'fixed');
- },
- });
-
- $("#statusDialog").dialog({
- "modal" : true,
- "height": 100,
- "width": 400,
- "autoOpen": false,
- "open": function(event, ui) {
- $(this).parent().css('position', 'fixed');
- },
- });
-
- var ajax_url = dataTable_url + key + "/" + value + "/" + low_version + "/" + high_version + "/?csrfmiddlewaretoken=" + csrf_token;
- var dTable = $('.dnsres').dataTable(
- {
- "bJQueryUI": true,
- "bProcessing": true,
- "bServerSide": true,
- "sAjaxSource": ajax_url,
- "bAutoWidth": false,
- "oLanguage": {'sSearch': 'Filter:',
- 'sProcessing' : 'Fetching Data',
- 'sZeroRecords': 'No Results Found',
- },
- "sDom" : '<"H"lfirp>t<"F"lfip>',
- "aoColumnDefs":[
- {"sClass": "dtExpand", 'bSortable': false, 'aTargets': [0]},
- //{'bSortable': false, 'aTargets': [6]},
- {"sClass": "dnCell", 'aTargets': [1]},
- ],
-/*
- "aoColumns" : [
- {"sClass": "dtExpand", 'bSortable': false},
- {"sClass": "dnCell"},
- null,
- null,
- null,
- null
- ],
-*/
- "sPaginationType": "full_numbers",
- "iDisplayLength" : 50,
- //Called after ever row is written but not drawn
- "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull) {
-
- var oldVersion = '';
- if (+aData[6] < +latest_version){
- oldVersion = 'oldVersion';
- }
-
- //Add expand icon
- $("td:eq(0)", nRow).html('');
-
- var domainName = aData[1];
- $('td:eq(1)', nRow).html( ''
- + domainName + "").attr('title', 'Click to Search Passive DNS').addClass(oldVersion);
- var registrant = aData[2];
- $('td:eq(2)', nRow).html( ''
- + registrant + '').attr('title', 'Click to search by Registrant').addClass(oldVersion);
-
- var reg_email = aData[3];
- $('td:eq(3)', nRow).html( '' + reg_email + '').attr('title', 'Click to search by Email').addClass(oldVersion);
-
- $('td:eq(4)', nRow).addClass(oldVersion);
-
- var telephone = aData[5];
- $('td:eq(5)', nRow).html( ''
- + telephone + '').attr('title', 'Click to search by Telephone').addClass(oldVersion);
-
- $('td:eq(6)', nRow).addClass(oldVersion);
-
- },
- //Called after table is drawn
- "fnDrawCallback": function(oSettings) {
- //Add an onclick toggle for the expand cells
- $('td.dtExpand span').on('click', function () {
- var nTr = $(this).parents('tr')[0];
- if (dTable.fnIsOpen(nTr)){ //Close the row
- $(this).removeClass('ui-icon-circle-minus').addClass('ui-icon-circle-plus');
- dTable.fnClose(nTr);
- }else { //Open the row
- $(this).removeClass('ui-icon-circle-plus').addClass('ui-icon-circle-minus');
- dTable.fnOpen(nTr, fnFormatDetails(dTable, nTr), 'details');
-
- //Get a reference to the new table
- var dTab = $(this).parents("tr").next().find(".detailTable");
- $(dTab).tabs();
-
- var entry_version = dTable.fnGetData(nTr)[6];
- //Fill in the table with some details
- get_domain(dTable.fnGetData(nTr)[1], entry_version, dTab.find(".domain_quick"));
- get_historical(dTable.fnGetData(nTr)[1], entry_version, dTab.find(".historyTable"));
-
- //dTab.find(".fullDetail").on("click", function(){
- // full($(this).attr('domainName'), entry_version);
- //});
-
- dTab.find(".resolve").on("click", function() {
- //Disable Tooltip, onclick, and link class
- $(this).removeClass('link');
- $(this).tooltip( "option", "disabled", true );
- $(this).off("click");
- resolve($(this).attr('domainName'), $(this));
- }).tooltip();
- }
- });
-
- $('.dnsres').tooltip({ items: 'td[title]' });
- }
- });
-
- dTable.dataTable().fnSetFilteringDelay(1000);
-
-});
-
-
-
-function fnFormatDetails ( oTable, nTr )
-{
- var aData = oTable.fnGetData( nTr );
-
- curr_id = Math.random().toString(36).substring(8);
- hist_id = Math.random().toString(36).substring(8);
-
- var dTable ='
';
-
- dTable += '
'
-
-
-
- dTable += '
';
-
- dTable += '
';
-
- dTable += '
';
- dTable += ' ';
- dTable += '
';
-
- dTable += '
';
- dTable += 'Fetching Data';
- dTable += '
';
-
-
- dTable += '
';
- dTable += 'Click To Get Full Details';
- dTable += '
';
-
- dTable += '
'; //domain_details
-
- dTable += '
';
-
- dTable += '
';
- dTable += 'Active Resolution: ';
- dTable += '
';
-
- dTable += '
';
- dTable += 'Click Here to Actively Resolve';
- dTable += '
';
-
- dTable += '
'; //active_resolution
-
- dTable += '
'; //current_details
-
- dTable += '
';
-
- dTable += '
';
- dTable += 'Fetching History';
- dTable += '
';
-
- dTable += '
'; //history_details
-
- dTable += '
'; //detailTable
-
-
- return dTable;
-}
-
-function full(domain, entry_version) {
- var ep_url = domain_url + encodeURIComponent(domain) + "/" + entry_version + "/";
- $.ajax({
- type: 'GET',
- url: ep_url,
- datatype: 'json',
- beforeSend: showStatusDialog,
- complete: hideStatusDialog,
- success: function(response) {
- $("#dialog").dialog( "option", "title", domain);
- if (response.success) {
- $("#dtext").empty();
-
- var result = response.data[0];
- var text = document.createElement('div');
- var dtab = document.createElement('table');
-
- $(dtab).addClass('fullDetailTable');
- $(text).append(dtab);
- $(dtab).html("Name | Value | ");
- var dtabb = $(dtab).find("tbody");
-
- //Sort the results in alphabetical order
- sort_arr = [];
- for (var key in result){
- sort_arr.push([key, result[key]]);
- }
- sort_arr.sort(function(a, b) {
- return a[0].localeCompare(b[0]);
- });
-
- for (var i = 0; i < sort_arr.length; i++) {
- var drow = document.createElement('tr');
- var kcell = document.createElement('td');
- $(kcell).addClass('fdKey');
- var vcell = document.createElement('td');
- $(vcell).addClass('fdValue');
-
- $(kcell).html(sort_arr[i][0]);
- $(vcell).html(sort_arr[i][1]);
-
- $(drow).append(kcell).append(vcell);
- dtabb.append(drow);
- }
-
- $("#dtext").append(text);
- } else {
- $("#dtext").append(response.error);
- }
- $("#dialog").dialog("open");
- }
- });
-}
-
-function diff(domain, v1, v2) {
- var ep_url = domain_url + encodeURIComponent(domain) + "/diff/" + v1 + "/" + v2 + "/";
- $.ajax({
- type: 'GET',
- url: ep_url,
- datatype: 'json',
- beforeSend: showStatusDialog,
- complete: hideStatusDialog,
- success: function(response) {
- $("#dialog").dialog( "option", "title", domain + " " + v1 + " -> " + v2);
- if (response.success) {
- $("#dtext").empty();
-
- var result = response.data;
- var text = document.createElement('div');
- var dtab = document.createElement('table');
-
- $(dtab).addClass('diffTable');
- $(text).append(dtab);
- $(dtab).html("Entry | Version: " + v1 + " | Version: " + v2 + " | ");
- var dtabb = $(dtab).find("tbody");
-
- //Sort the results in alphabetical order
- sort_arr = [];
- for (var key in result){
- sort_arr.push([key, result[key]]);
- }
- sort_arr.sort(function(a, b) {
- return a[0].localeCompare(b[0]);
- });
-
- for (var i = 0; i < sort_arr.length; i++) {
- var drow = document.createElement('tr');
- var kcell = document.createElement('td');
- $(kcell).addClass('fdKey');
- var vcell = document.createElement('td');
- $(vcell).addClass('fdValue');
- var vcell2 = document.createElement('td');
- $(vcell2).addClass('fdValue');
-
- $(kcell).html(sort_arr[i][0]);
-
- if (sort_arr[i][1] instanceof Array){
- $(vcell).html(sort_arr[i][1][0]);
- $(vcell2).html(sort_arr[i][1][1]);
- $(vcell).addClass('changed')
- $(vcell2).addClass('changed')
- }else{
- $(vcell).html(sort_arr[i][1]);
- $(vcell2).html(sort_arr[i][1]);
- }
-
- $(drow).append(kcell).append(vcell).append(vcell2);
- dtabb.append(drow);
- }
-
- $("#dtext").append(text);
- } else {
- $("#dtext").append(response.error);
- }
- $("#dialog").dialog("open");
- }
- });
-}
-
-
-function get_historical(domain, entry_version, target){
- var ep_url = domain_url + encodeURIComponent(domain) + "/";
- $.ajax({
- type: 'GET',
- url: ep_url,
- datatype: 'json',
- beforeSend: showStatusDialog,
- complete: hideStatusDialog,
- success: function(response) {
- if (response.success) {
- var result = response.data;
-
- $(target).empty();
-
-
- var htable = document.createElement('table');
- $(htable).html("Historical Records |
---|
Version | Registrant | Email | Created | Telephone | Details | Diff |
")
- var hbody = document.createElement('tbody');
- $(htable).append(hbody);
-
- if (result.length == 1) { //Can't be zero
- //No Historical Records
- var hrow = document.createElement('tr');
- var hcell = document.createElement('td');
- $(hcell).attr('colspan', '7');
- $(hcell).addClass('zerohistory');
- $(hcell).html("No Historical Records Found");
- $(hrow).append(hcell);
- $(htable).append(hrow);
- }else{
- for(var i = 0; i < result.length; i++){
- var hrow = document.createElement('tr');
- var tdclass = "";
-
- if(+(result[i].Version) == +entry_version){
- tdclass = "bold";
- }
- var hcell = document.createElement('td');
- $(hcell).addClass(tdclass);
- $(hcell).html(result[i].Version);
- $(hrow).append(hcell);
-
- var hcell = document.createElement('td');
- $(hcell).addClass(tdclass);
- $(hcell).html(result[i].registrant_name);
- $(hrow).append(hcell);
-
- var hcell = document.createElement('td');
- $(hcell).addClass(tdclass);
- $(hcell).html(result[i].contactEmail);
- $(hrow).append(hcell);
-
- var hcell = document.createElement('td');
- $(hcell).addClass(tdclass);
- $(hcell).html(result[i].standardRegCreatedDate);
- $(hrow).append(hcell);
-
- var hcell = document.createElement('td');
- $(hcell).addClass(tdclass);
- $(hcell).html(result[i].registrant_telephone);
- $(hrow).append(hcell);
-
- var hcell = document.createElement('td');
- $(hcell).addClass(tdclass);
- if(+entry_version == result[i].Version){
- $(hcell).html(' ');
- }else{
- $(hcell).html('Click');
- }
- $(hrow).append(hcell);
-
- var inner = " "
- if (i != 0){
- inner = '' + result[i - 1].Version + " > " + result[i].Version + '';
- }
-
- var hcell = document.createElement('td');
- $(hcell).addClass(tdclass);
- $(hcell).html(inner);
- $(hrow).append(hcell);
-
-
- $(htable).append(hrow);
- }
- }
- $(target).append(htable);
-
- var dTab = $(target).parents("tr").find(".detailTable");
- dTab.find(".fullDetail").on("click", function(){
- full($(this).attr('domainName'), entry_version);
- });
- dTab.find(".diff").on("click", function(){
- diff($(this).attr('domainName'), $(this).attr('version1'), $(this).attr('version2'));
- });
- } else {
- $(target).html(response.error);
- }
- }
- });
-}
-
-
-function get_domain(domain, entry_version, target) {
- var ep_url = domain_url + encodeURIComponent(domain) + "/" + entry_version + "/";
- $.ajax({
- type: 'GET',
- url: ep_url,
- datatype: 'json',
- beforeSend: showStatusDialog,
- complete: hideStatusDialog,
- success: function(response) {
- if (response.success) {
- var result = response.data[0];
-
- $(target).empty();
-
- var reg_div = document.createElement('div');
- $(reg_div).addClass('qdtable');
- $(reg_div).append(create_registrant_table(result));
-
- var adm_div = document.createElement('div');
- $(adm_div).addClass('qdtable');
- $(adm_div).append(create_adminContact_table(result));
-
- var date_div = document.createElement('div');
- $(date_div).addClass('qdtable');
- $(date_div).append(create_dates_table(result));
-
- $(target).append(reg_div);
- $(target).append(adm_div);
- $(target).append(date_div);
- } else {
- $(target).html(response.error);
- }
- }
- });
-}
-
-function create_registrant_table(raw_data){
- var registrant_p1 = ['name', 'organization', 'street1','street2','street3','street4']
- var registrant_p2 = ['city', 'state', 'postalCode', 'country']
-
- var regtab = document.createElement('table');
- $(regtab).html("Registrant Contact |
");
- var regbod = document.createElement('tbody');
- $(regtab).append(regbod);
-
- registrant_p1.forEach(function(piece){
- var index = "registrant_" + piece
- if (index in raw_data && (raw_data[index] != "")){
- var ptr= document.createElement('tr');
- var ptd= document.createElement('td');
- $(ptr).append(ptd);
- $(ptd).html(raw_data[index]);
- $(regbod).append(ptr);
- }
- });
-
- var ptr= document.createElement('tr');
- var ptd= document.createElement('td');
- $(ptr).append(ptd);
-
- registrant_p2.forEach(function(piece){
- var index = "registrant_" + piece
- if (index in raw_data && (raw_data[index] != "")){
- $(ptd).html($(ptd).html() + " " + raw_data[index]);
- $(regbod).append(ptr);
- }
- });
-
- return $(regtab);
-}
-
-function create_adminContact_table(raw_data){
- var adminContact_p1 = ['name', 'organization', 'street1','street2','street3','street4']
- var adminContact_p2 = ['city', 'state', 'postalCode', 'country']
-
- var admtab = document.createElement('table');
- $(admtab).html("Administrative Contact |
");
- var admbod = document.createElement('tbody');
- $(admtab).append(admbod);
-
- adminContact_p1.forEach(function(piece){
- var index = "administrativeContact_" + piece;
- if (index in raw_data && (raw_data[index] != "")){
- var ptr= document.createElement('tr');
- var ptd= document.createElement('td');
- $(ptr).append(ptd);
- $(ptd).html(raw_data[index]);
- $(admbod).append(ptr);
- }
- });
-
- var ptr= document.createElement('tr');
- var ptd= document.createElement('td');
- $(ptr).append(ptd);
-
- adminContact_p2.forEach(function(piece){
- var index = "administrativeContact_" + piece
- if (index in raw_data && (raw_data[index] != "")){
- $(ptd).html($(ptd).html() + " " + raw_data[index]);
- $(admbod).append(ptr);
- }
- });
-
- return $(admtab);
-}
-
-function create_dates_table(raw_data){
- var dates = ['CreatedDate', 'UpdatedDate', 'ExpiresDate'];
-
- var dtab = document.createElement('table');
- $(dtab).html("Significant Dates |
");
- var dbod = document.createElement('tbody');
- $(dtab).append(dbod);
-
- dates.forEach(function(piece){
- var index = "standardReg" + piece;
- if (index in raw_data && (raw_data[index] != "")){
- var dtr = document.createElement('tr');
- var dti = document.createElement('td');
- var dtd = document.createElement('td');
- $(dtr).append(dti);
- $(dti).html(piece);
- $(dtr).append(dtd);
- $(dtd).html(raw_data[index]);
- $(dbod).append(dtr);
- }
- });
-
- return $(dtab);
-}
-
-var statusDialogStack = 0;
-
-function showStatusDialog(){
- $("#statusDialog").dialog("open");
- statusDialogStack += 1;
-}
-
-function hideStatusDialog(){
- statusDialogStack -= 1;
- if(statusDialogStack == 0){
- $("#statusDialog").dialog("close");
- }
-
-}
diff --git a/pydat/pydat/static/js/domain_advanced.js b/pydat/pydat/static/js/domain_advanced.js
index f8c7595..cd4f0ce 100644
--- a/pydat/pydat/static/js/domain_advanced.js
+++ b/pydat/pydat/static/js/domain_advanced.js
@@ -35,7 +35,7 @@ $(document).ready(function() {
aoData.push( { "name": "unique", "value": query_unique} );
},
"oLanguage": {
- 'sProcessing' : 'Fetching Data',
+ 'sProcessing' : 'Fetching Data',
'sZeroRecords': 'No Results Found',
},
"sDom" : '<"H"lirp>t<"F"lip>',
@@ -43,7 +43,7 @@ $(document).ready(function() {
{"sClass": "dtExpand", 'bSortable': false, 'aTargets': [0]},
//{'bSortable': false, 'aTargets': [6]},
{"sClass": "dnCell", 'aTargets': [1]},
- {'bSortable': false, 'aTargets': [0,1,2,3,4,5,6,7]},
+ {'bSortable': false, 'aTargets': [0]},
],
/*
"aoColumns" : [
@@ -70,13 +70,13 @@ $(document).ready(function() {
$("td:eq(0)", nRow).html('');
var domainName = aData[1];
- $('td:eq(1)', nRow).html( ''
+ $('td:eq(1)', nRow).html( ''
+ domainName + "").attr('title', 'Click to Search Passive DNS').addClass(oldVersion);
var registrant = aData[2];
if (registrant != null)
var safe_registrant = encodeURIComponent(registrant.toLowerCase())
- $('td:eq(2)', nRow).html( ''
+ $('td:eq(2)', nRow).html( ''
+ registrant + '').attr('title', 'Click to search by Registrant').addClass(oldVersion);
var reg_email = aData[3];
@@ -88,7 +88,7 @@ $(document).ready(function() {
$('td:eq(4)', nRow).addClass(oldVersion);
var telephone = aData[5];
- $('td:eq(5)', nRow).html( ''
+ telephone + '').attr('title', 'Click to search by Telephone').addClass(oldVersion);
@@ -97,12 +97,12 @@ $(document).ready(function() {
},
//Called after table is drawn
- "fnDrawCallback": function(oSettings) {
+ "fnDrawCallback": function(oSettings) {
//Add an onclick toggle for the expand cells
$('td.dtExpand span').on('click', function () {
var nTr = $(this).parents('tr')[0];
if (dTable.fnIsOpen(nTr)){ //Close the row
- $(this).removeClass('ui-icon-circle-minus').addClass('ui-icon-circle-plus');
+ $(this).removeClass('ui-icon-circle-minus').addClass('ui-icon-circle-plus');
dTable.fnClose(nTr);
}else { //Open the row
$(this).removeClass('ui-icon-circle-plus').addClass('ui-icon-circle-minus');
@@ -134,7 +134,7 @@ $(document).ready(function() {
$('.dnsres').tooltip({ items: 'td[title]' });
}
});
-
+
dTable.dataTable().fnSetFilteringDelay(1000);
@@ -256,7 +256,7 @@ function full(domain, entry_version) {
//Sort the results in alphabetical order
sort_arr = [];
for (var key in result){
- sort_arr.push([key, result[key]]);
+ sort_arr.push([key, result[key]]);
}
sort_arr.sort(function(a, b) {
return a[0].localeCompare(b[0]);
@@ -275,7 +275,7 @@ function full(domain, entry_version) {
$(drow).append(kcell).append(vcell);
dtabb.append(drow);
}
-
+
$("#dtext").append(text);
} else {
$("#dtext").append(response.error);
@@ -310,7 +310,7 @@ function diff(domain, v1, v2) {
//Sort the results in alphabetical order
sort_arr = [];
for (var key in result){
- sort_arr.push([key, result[key]]);
+ sort_arr.push([key, result[key]]);
}
sort_arr.sort(function(a, b) {
return a[0].localeCompare(b[0]);
@@ -340,7 +340,7 @@ function diff(domain, v1, v2) {
$(drow).append(kcell).append(vcell).append(vcell2);
dtabb.append(drow);
}
-
+
$("#dtext").append(text);
} else {
$("#dtext").append(response.error);
@@ -367,7 +367,7 @@ function get_historical(domain, entry_version, target){
var htable = document.createElement('table');
- $(htable).html("Historical Records |
---|
Version | Registrant | Email | Created | Telephone | Details | Diff |
")
+ $(htable).html("Historical Records |
---|
Version | Registrant | Email | Created | Telephone | Details | Diff |
")
var hbody = document.createElement('tbody');
$(htable).append(hbody);
@@ -480,10 +480,10 @@ function get_domain(domain, entry_version, target) {
success: function(response) {
if (response.success) {
var result = response.data[0];
-
+
$(target).empty();
- var reg_div = document.createElement('div');
+ var reg_div = document.createElement('div');
$(reg_div).addClass('qdtable');
$(reg_div).append(create_registrant_table(result));
@@ -595,7 +595,7 @@ function create_dates_table(raw_data){
$(dtd).html(raw_data[index]);
$(dbod).append(dtr);
}
- });
+ });
return $(dtab);
}
@@ -604,7 +604,7 @@ var statusDialogStack = 0;
function showStatusDialog(){
$("#statusDialog").dialog("open");
- statusDialogStack += 1;
+ statusDialogStack += 1;
}
function hideStatusDialog(){
diff --git a/pydat/pydat/templates/base.html b/pydat/pydat/templates/base.html
index 3b687b4..d0e7f01 100644
--- a/pydat/pydat/templates/base.html
+++ b/pydat/pydat/templates/base.html
@@ -39,9 +39,7 @@
{% block searchBar %}
{% endblock %}
- {% if handler == 'es' %}
- {% include 'status_part.html' %}
- {% endif %}
+ {% include 'status_part.html' %}
diff --git a/pydat/pydat/templates/domain.html b/pydat/pydat/templates/domain.html
index d68acc4..ced2784 100644
--- a/pydat/pydat/templates/domain.html
+++ b/pydat/pydat/templates/domain.html
@@ -6,42 +6,26 @@
-
+
{% endblock %}
{% block js %}
{%endblock %}
{% block searchBar %}
- {% if legacy_search %}
- {% include 'domain_search_form.html' %}
- {% else %}
- {% include 'domain_advsearch_form.html' %}
- {% endif %}
+ {% include 'domain_advsearch_form.html' %}
{% endblock %}
{% block errors %}
- {% if legacy_search %}
- {% for field in domain_form %}
- {% if field.errors %}
- {% for error in field.errors %}
-
- {{ error }}
-
- {% endfor %}
- {% endif %}
- {% endfor %}
- {% else %}
- {% for field in advdomain_form %}
- {% if field.errors %}
- {% for error in field.errors %}
-
- {{ error }}
-
- {% endfor %}
- {% endif %}
- {% endfor %}
- {% endif %}
+ {% for field in advdomain_form %}
+ {% if field.errors %}
+ {% for error in field.errors %}
+
+ {{ error }}
+
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
{% if error %}
{{ error }}
diff --git a/pydat/pydat/templates/domain_advsearch_form.html b/pydat/pydat/templates/domain_advsearch_form.html
index 46297a9..9f94253 100644
--- a/pydat/pydat/templates/domain_advsearch_form.html
+++ b/pydat/pydat/templates/domain_advsearch_form.html
@@ -1,65 +1,63 @@
- {% if handler == 'es' %}
-
- {% if advdomain_form %}
-
- {% endif %}
-
- {% endif %}
+
+{% if advdomain_form %}
+
+{% endif %}
+
diff --git a/pydat/pydat/templates/domain_results.html b/pydat/pydat/templates/domain_results.html
index 3b8f742..5060e82 100644
--- a/pydat/pydat/templates/domain_results.html
+++ b/pydat/pydat/templates/domain_results.html
@@ -8,35 +8,19 @@
var active = 'domain';
var domain_url = "{% url 'ajax_domain' %}";
var pdns_rest = "{% url 'pdns_results' %}";
- {% if legacy_search %}
- var dataTable_url = "{% url 'ajax_dataTable' %}";
- var key = "{{ key }}";
- var value = "{{ value }}";
- var low_version = {{ low_version }};
- var high_version = {{ high_version }};
- {% else %}
var advdomains = "{% url 'advdomains' %}";
var advDataTable_url = "{% url 'ajax_advDataTable' %}";
- var query_string = "{{ search_string }}";
+ var query_string = "{{ search_string }}";
var query_unique = {{ query_unique }};
- {% endif %}
{% endblock %}
{% block js %}
- {% if legacy_search %}
-
- {% else %}
-
- {% endif %}
+
{%endblock %}
{% block searchBar %}
- {% if legacy_search %}
- {% include 'domain_search_form.html' %}
- {% else %}
- {% include 'domain_advsearch_form.html' %}
- {% endif %}
+ {% include 'domain_advsearch_form.html' %}
{% endblock %}
{% block error %}
diff --git a/pydat/pydat/templates/domain_table.html b/pydat/pydat/templates/domain_table.html
index 0786261..dd060a3 100644
--- a/pydat/pydat/templates/domain_table.html
+++ b/pydat/pydat/templates/domain_table.html
@@ -8,9 +8,7 @@
Created |
Telephone |
Version |
- {% if not legacy_search %}
- Score |
- {% endif %}
+ Score |
diff --git a/pydat/pydat/templates/navigation_bar.html b/pydat/pydat/templates/navigation_bar.html
index 796062e..de0abda 100644
--- a/pydat/pydat/templates/navigation_bar.html
+++ b/pydat/pydat/templates/navigation_bar.html
@@ -10,14 +10,12 @@
Reverse pDNS
- {% if handler == 'es' %}
Stats
Help
- {% endif %}
diff --git a/pydat/pydat/urls.py b/pydat/pydat/urls.py
index 15c8702..d89d8d9 100644
--- a/pydat/pydat/urls.py
+++ b/pydat/pydat/urls.py
@@ -5,37 +5,36 @@
urlpatterns = [
url(r'^$', views.index, name='index'),
- url(r'^domains/(?P.*)/(?P.*)/$', views.domains),
- url(r'^domains/$', views.domains, name='domains'),
-
url(r'^pdns_results/(?P.*)/$', views.pdns, name='pdns_rest'),
url(r'^pdns_results/$', views.pdns, name='pdns_results'),
url(r'^pdns_search/$', views.pdns_index, name='pdns'),
- url(r'^pdnsr_results/(?P.*)/$', views.pdns_r, name='pdns_r_rest'),
+ url(r'^pdnsr_results/(?P.*)/$',
+ views.pdns_r, name='pdns_r_rest'),
url(r'^pdnsr_results/$', views.pdns_r, name='pdns_r_results'),
url(r'^pdnsr_search/$', views.rpdns_index, name='pdns_r'),
url(r'^ajax/metadata/$', ajax.metadata),
url(r'^ajax/metadata/(?P.*)/$', ajax.metadata),
- url(r'^ajax/domain/(?P.*)/diff/(?P.*)/(?P.*)/$', ajax.domain_diff),
- url(r'^ajax/domain/(?P.*)/(?P.*)/(?P.*)/$', ajax.domain),
+ url(r'^ajax/domain/(?P.*)/diff/(?P.*)/(?P.*)/$',
+ ajax.domain_diff),
+ url(r'^ajax/domain/(?P.*)/(?P.*)/(?P.*)/$',
+ ajax.domain),
url(r'^ajax/domain/(?P.*)/latest/$', ajax.domain_latest),
url(r'^ajax/domain/(?P.*)/(?P.*)/$', ajax.domain),
url(r'^ajax/domain/(?P.*)/$', ajax.domain),
url(r'^ajax/domain/$', ajax.domain, name='ajax_domain'),
- url(r'^ajax/domains/(?P.*)/(?P.*)/(?P.*)/(?P.*)/$', ajax.domains ),
- url(r'^ajax/domains/(?P.*)/(?P.*)/latest/$', ajax.domains_latest ),
- url(r'^ajax/domains/(?P.*)/(?P.*)/(?P.*)/$', ajax.domains ),
- url(r'^ajax/domains/(?P.*)/(?P.*)/$', ajax.domains ),
+ url(r'^ajax/domains/(?P.*)/(?P.*)/(?P.*)/(?P.*)/$',
+ ajax.domains),
+ url(r'^ajax/domains/(?P.*)/(?P.*)/latest/$',
+ ajax.domains_latest),
+ url(r'^ajax/domains/(?P.*)/(?P.*)/(?P.*)/$',
+ ajax.domains),
+ url(r'^ajax/domains/(?P.*)/(?P.*)/$', ajax.domains),
url(r'^ajax/domains/$', ajax.domains, name='ajax_domains'),
- url(r'^ajax/dataTable/(?P.*)/(?P.*)/(?P.*)/(?P.*)/$', ajax.dataTable ),
- url(r'^ajax/dataTable/$', ajax.dataTable, name='ajax_dataTable'),
-
-
url(r'^ajax/resolve/(?P.*)/$', ajax.resolve),
url(r'^ajax/resolve/$', ajax.resolve, name='ajax_resolve'),
diff --git a/pydat/pydat/views.py b/pydat/pydat/views.py
index d34e917..a2f94b8 100644
--- a/pydat/pydat/views.py
+++ b/pydat/pydat/views.py
@@ -11,9 +11,10 @@
from pydat.forms import (domain_form, advdomain_form, pdns_form_dynamic,
rpdns_form_dynamic)
-from pydat.handlers import handler
+from pydat.handlers import es as handler
from pydat.handlers import passive
+
def __renderErrorResponse__(request, view, message, data=None):
d = {'error': message}
if data is not None:
@@ -31,26 +32,26 @@ def __renderErrorPage__(request, message, data=None):
context = __createRequestContext__(d)
return render(request, 'error.html', context=context)
+
def __createRequestContext__(data=None):
- #Default to adding search forms to every context
+ # Default to adding search forms to every context
search_f = domain_form()
pdns_f_dyn = pdns_form_dynamic()
rpdns_f_dyn = rpdns_form_dynamic()
advdomain_f = advdomain_form()
- ctx_var = { 'domain_form': search_f,
- 'advdomain_form': advdomain_f,
- 'pdns_form_dynamic': pdns_f_dyn,
- 'rpdns_form_dynamic': rpdns_f_dyn,
- 'latest_version': handler.lastVersion(),
- 'handler': settings.HANDLER,
- 'pdns_sources':[mod_data.config for mod_data in passive.PDNS_HANDLER_MODS.values()]
- }
+ ctx_var = {'domain_form': search_f,
+ 'advdomain_form': advdomain_f,
+ 'pdns_form_dynamic': pdns_f_dyn,
+ 'rpdns_form_dynamic': rpdns_f_dyn,
+ 'latest_version': handler.lastVersion(),
+ 'pdns_sources': [
+ mod_data.config
+ for mod_data in passive.PDNS_HANDLER_MODS.values()]}
- if settings.HANDLER == 'es':
- ctx_var['health'] = handler.cluster_health().capitalize()
- ctx_var['record_count'] = handler.record_count()
- ctx_var['last_import'] = handler.lastUpdate()
+ ctx_var['health'] = handler.cluster_health().capitalize()
+ ctx_var['record_count'] = handler.record_count()
+ ctx_var['last_import'] = handler.lastUpdate()
if data is not None:
ctx_var.update(data)
@@ -64,22 +65,22 @@ def __createRequestContext__(data=None):
return ctx_var
+
def index(request):
- if settings.HANDLER == 'es':
- legacy = False
- else:
- legacy = True
- context = __createRequestContext__(data={'legacy_search': legacy})
- return render(request,'domain.html', context=context)
+ context = __createRequestContext__()
+ return render(request, 'domain.html', context=context)
+
def pdns_index(request):
context = __createRequestContext__()
- return render(request,'pdns.html', context=context)
+ return render(request, 'pdns.html', context=context)
+
def rpdns_index(request):
context = __createRequestContext__()
return render(request, 'rpdns.html', context=context)
+
def stats(request):
stats = handler.cluster_stats()
allversions = handler.metadata()
@@ -87,7 +88,7 @@ def stats(request):
lastimport = allversions['data'][-1]
lastten = allversions['data'][-10:]
else:
- #XXX TODO returne error
+ # XXX TODO return error
pass
if lastten[0]['metadata'] == 0:
@@ -105,17 +106,19 @@ def stats(request):
return render(request, 'stats.html', context=context)
+
def help(request):
try:
f = open(settings.SITE_ROOT + "/../README.md")
helptxt = f.read()
f.close()
- except:
+ except Exception as e:
helptxt = "Unable to render help text."
- context = __createRequestContext__(data = {'help': helptxt})
+ context = __createRequestContext__(data={'help': helptxt})
return render(request, 'help.html', context=context)
+
def about(request):
context = __createRequestContext__()
return render(request, 'about.html', context=context)
@@ -127,9 +130,10 @@ def advdomains(request):
elif request.method == "GET":
search_f = advdomain_form(QueryDict(''))
search_f.data['query'] = request.GET.get('query', None)
- search_f.data['fmt'] = request.GET.get('fmt','none')
+ search_f.data['fmt'] = request.GET.get('fmt', 'none')
search_f.data['limit'] = request.GET.get('limit', settings.LIMIT)
- search_f.data['filt'] = request.GET.get('filt', settings.SEARCH_KEYS[0][0])
+ search_f.data['filt'] = request.GET.get(
+ 'filt', settings.SEARCH_KEYS[0][0])
search_f.data['unique'] = request.GET.get('unique', False)
else:
return __renderErrorResponse__(
@@ -139,32 +143,32 @@ def advdomains(request):
if not search_f.is_valid():
return __renderErrorResponse__(
- request,
- 'domain.html',
- '',
- {'advdomain_form': search_f, 'legacy_search': False})
+ request,
+ 'domain.html',
+ '',
+ {'advdomain_form': search_f})
fmt = search_f.cleaned_data['fmt'] or 'none'
search_string = search_f.cleaned_data['query']
query_unique = str(search_f.cleaned_data['unique']).lower()
if fmt == 'none':
- context = __createRequestContext__(data = {'search_string': urllib.quote(search_string) or '',
- 'query_unique': query_unique,
- 'advdomain_form': search_f,
- 'legacy_search': False,
- 'fmt': fmt})
+ context = __createRequestContext__(
+ data={'search_string': urllib.quote(search_string) or '',
+ 'query_unique': query_unique,
+ 'advdomain_form': search_f,
+ 'fmt': fmt})
return render(request, 'domain_results.html', context=context)
else:
filt_key = search_f.cleaned_data['filt']
try:
limit = int(search_f.cleaned_data.get('limit', settings.LIMIT))
- except:
+ except Exception as e:
limit = settings.LIMIT
filt = None
- if fmt == 'list': #Only filter if a list was requested
+ if fmt == 'list': # Only filter if a list was requested
filt = filt_key
if query_unique == 'true':
@@ -183,9 +187,10 @@ def advdomains(request):
results['message'])
if len(results['data']) == 0:
- return __renderErrorResponse__(request, 'domain.html', 'No results')
+ return __renderErrorResponse__(
+ request, 'domain.html', 'No results')
- if fmt =='json':
+ if fmt == 'json':
data = [json.dumps(d) for d in results['data']]
elif fmt == 'list':
data = [d[filt_key] for d in results['data']]
@@ -206,96 +211,28 @@ def advdomains(request):
'domain.html',
'Invalid Format')
- context = __createRequestContext__(data={'search_string': urllib.quote(search_string) or '',
- 'query_unique': str(query_unique).lower(),
- 'advdomain_form': search_f,
- 'legacy_search': False,
- 'fmt': fmt,
- 'data': data})
+ context = __createRequestContext__(
+ data={'search_string': urllib.quote(search_string) or '',
+ 'query_unique': str(query_unique).lower(),
+ 'advdomain_form': search_f,
+ 'fmt': fmt,
+ 'data': data})
return render(request, 'domain_results.html', context=context)
-def domains(request, key=None, value=None):
- if request.method == "POST":
- search_f = domain_form(request.POST)
-
- elif request.method == "GET":
- search_f = domain_form(QueryDict(''))
- search_f.data['key'] = key
- search_f.data['value'] = value
- search_f.data['fmt'] = request.GET.get('fmt','normal')
- search_f.data['limit'] = request.GET.get('limit', settings.LIMIT)
- search_f.data['filt'] = request.GET.get('filt', settings.SEARCH_KEYS[0][0])
- search_f.data['latest'] = request.GET.get('latest', False)
-
- else:
- return __renderErrorPage__(request, 'Bad Method.')
-
- if not search_f.is_valid():
- return __renderErrorResponse__(request, 'domain.html', '', {'domain_form': search_f})
-
- key = urllib.unquote(search_f.cleaned_data['key'])
- value = urllib.unquote(search_f.cleaned_data['value'])
-
- filt_key = search_f.cleaned_data['filt']
- fmt = search_f.cleaned_data['fmt']
- limit = int(search_f.cleaned_data.get('limit', settings.LIMIT))
- latest = search_f.cleaned_data['latest']
-
- if latest:
- low_version = handler.lastVersion()
- high_version = low_version
- else:
- low_version = None
- high_version = None
-
- filt = None
- if fmt == 'list': #Only filter if a list was requested
- filt = filt_key
-
- #All web searches are AJAXy
- if fmt == "normal":
- low_version_js = low_version
- high_version_js = high_version
- if low_version == None:
- low_version_js = 'null'
- if high_version == None:
- high_version_js = 'null'
- context = __createRequestContext__(data = {
- 'key': urllib.quote(key),
- 'value': urllib.quote(value),
- 'low_version': low_version_js,
- 'high_version': high_version_js,
- 'domain_form': search_f,
- 'legacy_search': True,}
- )
- return render(request,'domain_results.html', context=context)
-
-
- else:
- results = handler.search(key, value, filt=filt, limit=limit, low = low_version)
- if results['success'] == False:
- return __renderErrorPage__(request, results['message'])
- if fmt == 'json':
- return HttpResponse(json.dumps(results), content_type='application/json')
- elif fmt == 'list':
- data = '\n'.join([d[filt_key] for d in results['data']])
- return HttpResponse(data, content_type='text/plain')
- else:
- return __renderErrorPage__(request, 'Invalid Format.')
-
-
def pdns(request, search_value=None):
if request.method == 'POST':
pdns_f_dyn = pdns_form_dynamic(request.POST)
elif request.method == 'GET':
pdns_f_dyn = pdns_form_dynamic(QueryDict(''))
pdns_f_dyn.data['search_value'] = search_value
- pdns_f_dyn.data['result_format'] = request.GET.get('result_format', 'none')
+ pdns_f_dyn.data['result_format'] = \
+ request.GET.get('result_format', 'none')
# Filling form with all empty fields for a forward passive-DNS request
- for passive_field in passive.PDNS_UI_FIELDS_BASE + passive.PDNS_UI_FIELDS_FORWARD:
+ for passive_field in (passive.PDNS_UI_FIELDS_BASE +
+ passive.PDNS_UI_FIELDS_FORWARD):
pdns_f_dyn.data[passive_field.django_field_name] = request.GET.get(
passive_field.django_field_name,
passive_field.field_value_default)
@@ -306,28 +243,31 @@ def pdns(request, search_value=None):
'Bad Method')
if not pdns_f_dyn.is_valid():
- return __renderErrorResponse__(request,
- 'pdns.html',
- 'Unable to verify form data',
- data = {"passive_form": pdns_f_dyn})
+ return __renderErrorResponse__(
+ request,
+ 'pdns.html',
+ 'Unable to verify form data',
+ data={"passive_form": pdns_f_dyn})
# Get clean values for all common passive form fields
search_value = pdns_f_dyn.cleaned_data['search_value']
result_format = pdns_f_dyn.cleaned_data['result_format']
-
dynamic_fields = {}
# Obtain cleaned data for every passive-DNS field
- for passive_field in passive.PDNS_UI_FIELDS_BASE + passive.PDNS_UI_FIELDS_FORWARD:
+ for passive_field in (passive.PDNS_UI_FIELDS_BASE +
+ passive.PDNS_UI_FIELDS_FORWARD):
if passive_field.source_name not in dynamic_fields:
dynamic_fields[passive_field.source_name] = {}
- cleaned_value = pdns_f_dyn.cleaned_data[passive_field.django_field_name]
+ cleaned_value = pdns_f_dyn.cleaned_data[
+ passive_field.django_field_name]
# If user did not enter a required field, grab a defined default value
if not cleaned_value:
cleaned_value = passive_field.field_value_default
- dynamic_fields[passive_field.source_name][passive_field.field_key] = cleaned_value
+ dynamic_fields[
+ passive_field.source_name][passive_field.field_key] = cleaned_value
results = passive.request_pdns(search_value, result_format, dynamic_fields)
@@ -335,7 +275,7 @@ def pdns(request, search_value=None):
return __renderErrorResponse__(request,
'pdns.html',
results['error'],
- data = {'passive_form': pdns_f_dyn ,})
+ data={'passive_form': pdns_f_dyn})
context = __createRequestContext__(data={'results': results['responses'],
'inverse': False,
@@ -345,29 +285,31 @@ def pdns(request, search_value=None):
return render(request, 'pdns_results.html', context=context)
-def pdns_r(request, search_value = None):
+def pdns_r(request, search_value=None):
if request.method == 'POST':
rpdns_f_dyn = rpdns_form_dynamic(request.POST)
- elif request.method == 'GET': # Craft a form to make it easier to validate
+ elif request.method == 'GET': # Craft a form to make it easier to validate
rpdns_f_dyn = rpdns_form_dynamic(QueryDict(''))
- rpdns_f_dyn.data['search_value']= search_value
- rpdns_f_dyn.data['result_format'] = request.GET.get('result_format','none')
+ rpdns_f_dyn.data['search_value'] = search_value
+ rpdns_f_dyn.data['result_format'] = \
+ request.GET.get('result_format', 'none')
# Filling form with all empty fields for a reverse passive-DNS request
- for passive_field in passive.PDNS_UI_FIELDS_BASE + passive.PDNS_UI_FIELDS_REVERSE:
- rpdns_f_dyn.data[passive_field.django_field_name] = request.GET.get(
- passive_field.django_field_name,
- passive_field.field_value_default)
+ for passive_field in (passive.PDNS_UI_FIELDS_BASE +
+ passive.PDNS_UI_FIELDS_REVERSE):
+ rpdns_f_dyn.data[passive_field.django_field_name] = \
+ request.GET.get(passive_field.django_field_name,
+ passive_field.field_value_default)
else:
return __renderErrorResponse__(request,
- 'rpdns.html',
- 'Unsupported Method')
+ 'rpdns.html',
+ 'Unsupported Method')
if not rpdns_f_dyn.is_valid():
return __renderErrorResponse__(request,
'rpdns.html',
'Unable to verify form data',
- data={'passive_form': rpdns_f_dyn})
+ data={'passive_form': rpdns_f_dyn})
# Get clean values for all common reverse passive form fields
search_value = rpdns_f_dyn.cleaned_data['search_value']
@@ -375,28 +317,35 @@ def pdns_r(request, search_value = None):
dynamic_fields = {}
# Obtain cleaned data for every reverse passive-DNS field
- for passive_field in passive.PDNS_UI_FIELDS_BASE + passive.PDNS_UI_FIELDS_REVERSE:
+ for passive_field in (passive.PDNS_UI_FIELDS_BASE +
+ passive.PDNS_UI_FIELDS_REVERSE):
if passive_field.source_name not in dynamic_fields:
dynamic_fields[passive_field.source_name] = {}
- cleaned_value = rpdns_f_dyn.cleaned_data[passive_field.django_field_name]
- # If user did not enter a required field, grab field defined default value
+ cleaned_value = \
+ rpdns_f_dyn.cleaned_data[passive_field.django_field_name]
+ # If user did not enter a required field, grab field
+ # defined default value
if not cleaned_value:
- cleaned_value = passive_field.field_value_default
+ cleaned_value = passive_field.field_value_default
- dynamic_fields[passive_field.source_name][passive_field.field_key] = cleaned_value
+ dynamic_fields[
+ passive_field.source_name][passive_field.field_key] = cleaned_value
- results = passive.request_pdns_reverse(search_value, result_format, dynamic_fields)
+ results = passive.request_pdns_reverse(search_value,
+ result_format,
+ dynamic_fields)
if not results['success']:
- return __renderErrorResponse__(request,
- 'rpdns.html',
- results['error'],
- data = {'rpdns_form_dynamic': rpdns_f_dyn})
+ return __renderErrorResponse__(
+ request,
+ 'rpdns.html',
+ results['error'],
+ data={'rpdns_form_dynamic': rpdns_f_dyn})
context = __createRequestContext__(data={'results': results['responses'],
'inverse': True,
'rpdns_form_dynamic': rpdns_f_dyn,
'fmt': result_format})
- return render(request,'rpdns_results.html', context=context)
+ return render(request, 'rpdns_results.html', context=context)