more json endpoints
[kismet-logviewer.git] / logviewer / dbview / views.py
1 from django.shortcuts import render
2 from django.http import HttpResponse, HttpRequest
3 import os
4 import sqlite3
5 import time
6 import json
7 import pprint
8
9 from django.views.decorators.csrf import csrf_exempt
10
11 def load_db(query):
12     dir_list = os.listdir("logs/")
13     connection = sqlite3.connect("logs/"+dir_list[0])
14     #connection.row_factory = lambda cursor, row: row[0]
15     cursor = connection.cursor()
16     rows = cursor.execute(query).fetchall()
17     return(rows)
18
19 @csrf_exempt
20 def index(request):
21     #if request.method == 'POST':
22     #    print("GOT A POST")
23     if request.path == "/devices/views/all_views.json":
24         uuid_members="["
25         dev_count=list(load_db("select count(device) from devices where type='Wi-Fi AP'"))
26         (devcount,) = dev_count[0]
27         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"IEEE802.11 Access Points\", \"kismet.devices.view.id\": \"phydot11_accesspoints\", \"kismet.devices.view.size\": "+str(devcount)+" },"
28         dev_count=list(load_db("select count(device) from devices where phyname='IEEE802.11'"))
29         (devcount,) = dev_count[0]
30         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"IEEE802.11 devices\", \"kismet.devices.view.id\": \"phy-IEEE802.11\", \"kismet.devices.view.size\": "+str(devcount)+" },"
31         dev_count=list(load_db("select count(device) from devices where type='RTL433'"))
32         (devcount,) = dev_count[0]
33         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"RTL433 devices\", \"kismet.devices.view.id\": \"phy-RTL433\", \"kismet.devices.view.size\": "+str(devcount)+" },"
34         dev_count=list(load_db("select count(device) from devices where type='Z-wave'"))
35         (devcount,) = dev_count[0]
36         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"Z-Wave devices\", \"kismet.devices.view.id\": \"phy-Z-Wave\", \"kismet.devices.view.size\": "+str(devcount)+" },"
37         dev_count=list(load_db("select count(device) from devices where type='BR/EDR'"))
38         (devcount,) = dev_count[0]
39         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"Bluetooth devices\", \"kismet.devices.view.id\": \"phy-Bluetooth\", \"kismet.devices.view.size\": "+str(devcount)+" },"
40         dev_count=list(load_db("select count(device) from devices where type='UAV'"))
41         (devcount,) = dev_count[0]
42         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"UAV devices\", \"kismet.devices.view.id\": \"phy-UAV\", \"kismet.devices.view.size\": "+str(devcount)+" },"
43         dev_count=list(load_db("select count(device) from devices where type='NrfMousejack'"))
44         (devcount,) = dev_count[0]
45         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"NrfMousejack devices\", \"kismet.devices.view.id\": \"phy-NrfMousejack\", \"kismet.devices.view.size\": "+str(devcount)+"},"
46         dev_count=list(load_db("select count(device) from devices where type='BTLE'"))
47         (devcount,) = dev_count[0]
48         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"BTLE devices\", \"kismet.devices.view.id\": \"phy-BTLE\", \"kismet.devices.view.size\": "+str(devcount)+" },"
49         dev_count=list(load_db("select count(device) from devices where phyname='AMR'"))
50         (devcount,) = dev_count[0]
51         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"RTLAMR devices\", \"kismet.devices.view.id\": \"phy-RTLAMR\", \"kismet.devices.view.size\": "+str(devcount)+" },"
52         dev_count=list(load_db("select count(device) from devices where phyname='ADSB'"))
53         (devcount,) = dev_count[0]
54         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"RTLADSB devices\", \"kismet.devices.view.id\": \"phy-RTLADSB\", \"kismet.devices.view.size\": "+str(devcount)+" },"
55         dev_count=list(load_db("select count(device) from devices where phyname='802.15.4'"))
56         (devcount,) = dev_count[0]
57         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"802.15.4 devices\", \"kismet.devices.view.id\": \"phy-802.15.4\", \"kismet.devices.view.size\": "+str(devcount)+" },"
58         dev_count=list(load_db("select count(device) from devices where phyname='RADIATION'"))
59         (devcount,) = dev_count[0]
60         uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"RADIATION devices\", \"kismet.devices.view.id\": \"phy-RADIATION\", \"kismet.devices.view.size\": "+str(devcount)+" },"
61         total_dev=list(load_db("select count(device) from devices"))
62         (devcount,) = total_dev[0]
63         uuid_members=uuid_members+"{ \"kismet.devices.view.description\": \"All devices\", \"kismet.devices.view.id\": \"all\", \"kismet.devices.view.size\": "+str(devcount)+" },"
64         uuid_list = list(load_db("select uuid from datasources"))
65         for uuid in uuid_list:
66             (single_uuid,) = uuid
67             uuid_count = list(load_db("select count(*) from data where datasource='"+str(single_uuid)+"'"))
68             (single_uuid_count,) = uuid_count[0]
69             uuid_members = uuid_members + "{\"kismet.devices.view.description\": \"Devices seen by datasource "+single_uuid+"\","
70             uuid_members = uuid_members + "\"kismet.devices.view.id\": \"seenby-"+single_uuid+"\","
71             uuid_members = uuid_members + "\"kismet.devices.view.size\": "+str(single_uuid_count)+"},"
72         uuid_members=uuid_members[:-1]
73         uuid_members=uuid_members+"]"
74         return HttpResponse(uuid_members, content_type='text/json')
75     elif request.path == "/system/user_status.json":
76         user_status = open('dbview/user_status.json')
77         return HttpResponse(user_status, content_type='text/json')
78     elif request.path == "/session/check_setup_ok":
79         return HttpResponse('Login configured in user config')
80     elif request.path == "/session/check_login":
81         return HttpResponse('Login valid')
82     elif request.path == "/dynamic.js":
83         devices = load_db("select distinct(typestring) from datasources")
84         load_file = open('static/dynamic.js')
85         return HttpResponse(load_file, content_type='application/javascript')
86     elif request.path == "/gps/location.json":
87         user_status = open('dbview/gps_status.json')
88         return HttpResponse(user_status, content_type='text/json')
89     elif request.path == "/alerts/wrapped/last-time/0/alerts.json":
90         alerts = list(load_db("select cast(json as text) from alerts"))
91         alert_string="{\"kismet.alert.list\": ["
92         for alert in alerts:
93             (single_alert,) = alert
94             alert_string = alert_string + single_alert + ","
95         alert_string = alert_string[:-1]
96         alert_string = alert_string + "] ,\"kismet.alert.timestamp\": "+str(time.time())+"}"
97         return HttpResponse(alert_string, content_type='text/json')
98     elif request.path == "/phy/phy80211/ssids/views/ssids.json":
99         user_status = open('dbview/ssids.json')
100         return HttpResponse(user_status, content_type='text/json')
101     elif request.path == "/system/status.json":
102         user_status = open('dbview/status.json')
103         return HttpResponse(user_status, content_type='text/json')
104     elif request.path == "/alerts/alerts_view.json":
105         #MAY NOT BE COMPLETE
106         alerts = list(load_db("select cast(json as text) from alerts"))
107         alert_string="["
108         for alert in alerts:
109             (single_alert,) = alert
110             alert_string = alert_string + single_alert + ","
111         alert_string = alert_string[:-1]
112         alert_string = alert_string + "]"
113         return HttpResponse(alert_string, content_type='text/json')
114     elif request.path == "/messagebus/last-time/0/messages.json":
115         messages = list(load_db("select * from messages DESC limit 30"))
116         message_string="{\"kismet.messagebus.list\": ["
117         for message in messages:
118             message_string = message_string + "{"
119             message_string = message_string + "\"kismet.messagebus.message_string\": \"" + message[4] + "\","
120             flag = "0"
121             if message[3] == "INFO":
122                 flag = "0"
123             if message[3] == "LOW":
124                 flag = "5"
125             if message[3] == "MEDIUM":
126                 flag = "10"
127             if message[3] == "HIGH":
128                 flag = "15"
129             if message[3] == "CRITICAL":
130                 flag = 20
131             if message[3] == "ERROR":
132                 flag = 20
133             message_string = message_string + "\"kismet.messagebus.message_flags\": \"" + flag + "\","
134             message_string = message_string + "\"kismet.messagebus.message_time\": \"" + str(message[0]) + "\""
135             message_string = message_string + "},"
136         message_string = message_string[:-1]
137         message_string = message_string + "], \"kismet.messagebus.timestamp\": "+str(time.time())+" }"
138         return HttpResponse(message_string, content_type='text/json')
139     elif request.path == "/channels/channels.json":
140         user_status = open('dbview/channels.json')
141         return HttpResponse(user_status, content_type='text/json')
142     elif request.path == "/devices/views/all/devices.json":
143         #for key, value in request.POST.items():
144         #    #print("-----")
145         #    print(key+" = "+value)
146         #    #print(value)
147         #    if key == "draw":
148         #        print("-----")
149         #        print("DRAW")
150         #        print(value)
151         #        print("-----")
152         #gotta figure out paging
153
154         total_dev=list(load_db("select count(device) from devices"))
155         (dev_count,) = total_dev[0]
156         dev_string = "{ \"recordsTotal\": "+str(dev_count)+", \"data\": ["
157         dev_list = list(load_db("select cast(device as text) from devices limit 54"))
158         for device in dev_list:
159             (dev,) = device
160             dev_string = dev_string + dev + ","
161         dev_string = dev_string[:-1]
162         dev_string = dev_string + "],\"draw\": 5,\"recordsFiltered\": "+str(dev_count)+"}"
163         #dev_string = open('dbview/devices.json')
164         return HttpResponse(dev_string, content_type='text/json')
165     elif request.path == "/eventbus/events.ws":
166         return HttpResponse("[]", content_type='text/json')
167     elif request.path == "/devices/multikey/as-object/devices.json":
168         print("here")
169         for key, value in request.POST.items():
170             print("-----")
171             print(key)
172             print(value)
173             print("-----")
174         return HttpResponse("[]", content_type='text/json')