Add rudimentary logging functions
This commit is contained in:
parent
0c8b87bb00
commit
4391326072
7 changed files with 219 additions and 32 deletions
|
@ -1,12 +1,17 @@
|
|||
from django.dispatch import receiver
|
||||
from .signals import siglog
|
||||
|
||||
from .models import Device, Organization, Network, Model, Wifi, DeviceLog
|
||||
from .models import Device, Wifi, DeviceLog, UserLog, WifiLog
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
@receiver(siglog)
|
||||
def logger(sender, **kwargs):
|
||||
if sender == Device:
|
||||
logger = DeviceLog
|
||||
elif sender == User:
|
||||
logger = UserLog
|
||||
elif sender == Wifi:
|
||||
logger = WifiLog
|
||||
else:
|
||||
return
|
||||
|
||||
|
@ -18,19 +23,3 @@ def logger(sender, **kwargs):
|
|||
newvalue=kwargs["newvalue"]
|
||||
)
|
||||
|
||||
# device = models.CharField("Device ID", max_length=64)
|
||||
# user = models.CharField("User Name", max_length=128, null=True)
|
||||
# date = models.DateTimeField("Action Date", auto_now_add=True)
|
||||
# action = models.IntegerField("Action", choices=ACTION_CHOICES)
|
||||
# oldvalue = models.CharField("Old Value", max_length=256, blank=True, null=True)
|
||||
# newvalue = models.CharField("New Value", max_length=256, blank=True, null=True)
|
||||
|
||||
# ADD = 0
|
||||
# REMOVE = 1
|
||||
# NAME = 2
|
||||
# NET = 3
|
||||
# REBOOT = 4
|
||||
# UPDATE = 5
|
||||
# STATUS = 6
|
||||
# INTERNALIP = 7
|
||||
# WIFI = 8
|
||||
|
|
35
manager/migrations/0036_auto_20190119_0829.py
Normal file
35
manager/migrations/0036_auto_20190119_0829.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 2.1.5 on 2019-01-19 08:29
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('manager', '0035_auto_20190118_1219'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='UserLog',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('objid', models.CharField(max_length=64, verbose_name='Target User Name')),
|
||||
('user', models.CharField(max_length=128, null=True, verbose_name='Source User Name')),
|
||||
('date', models.DateTimeField(auto_now_add=True, verbose_name='Action Date')),
|
||||
('action', models.IntegerField(choices=[(0, 'ADD'), (1, 'REMOVE'), (2, 'NAME'), (3, 'MAIL'), (4, 'STAFF'), (5, 'SUPERUSER'), (6, 'ORGA')], verbose_name='Action')),
|
||||
('oldvalue', models.CharField(blank=True, max_length=256, null=True, verbose_name='Old Value')),
|
||||
('newvalue', models.CharField(blank=True, max_length=256, null=True, verbose_name='New Value')),
|
||||
],
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='device',
|
||||
name='wifi',
|
||||
field=models.ManyToManyField(blank=True, to='manager.Wifi'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='devicelog',
|
||||
name='action',
|
||||
field=models.IntegerField(choices=[(0, 'ADD'), (1, 'REMOVE'), (2, 'NAME'), (3, 'NET'), (4, 'REBOOT'), (5, 'UPDATE'), (6, 'STATUS'), (7, 'INTERNALIP'), (8, 'WIFI'), (9, 'ORGA')], verbose_name='Action'),
|
||||
),
|
||||
]
|
30
manager/migrations/0037_auto_20190119_0912.py
Normal file
30
manager/migrations/0037_auto_20190119_0912.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Generated by Django 2.1.5 on 2019-01-19 09:12
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('manager', '0036_auto_20190119_0829'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='WifiLog',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('objid', models.CharField(max_length=64, verbose_name='Wifi Name')),
|
||||
('user', models.CharField(max_length=128, null=True, verbose_name='User Name')),
|
||||
('date', models.DateTimeField(auto_now_add=True, verbose_name='Action Date')),
|
||||
('action', models.IntegerField(choices=[(0, 'ADD'), (1, 'REMOVE'), (2, 'NAME'), (3, 'SSID'), (4, 'KEY'), (5, 'ORGA')], verbose_name='Action')),
|
||||
('oldvalue', models.CharField(blank=True, max_length=256, null=True, verbose_name='Old Value')),
|
||||
('newvalue', models.CharField(blank=True, max_length=256, null=True, verbose_name='New Value')),
|
||||
],
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='device',
|
||||
name='wifi',
|
||||
field=models.ManyToManyField(blank=True, to='manager.Wifi'),
|
||||
),
|
||||
]
|
|
@ -75,6 +75,7 @@ class DeviceLog(models.Model):
|
|||
STATUS = 6
|
||||
INTERNALIP = 7
|
||||
WIFI = 8
|
||||
ORGA = 9
|
||||
|
||||
ACTION_CHOICES = (
|
||||
(ADD, "ADD"),
|
||||
|
@ -85,7 +86,8 @@ class DeviceLog(models.Model):
|
|||
(UPDATE, "UPDATE"),
|
||||
(STATUS, "STATUS"),
|
||||
(INTERNALIP, "INTERNALIP"),
|
||||
(WIFI, "WIFI")
|
||||
(WIFI, "WIFI"),
|
||||
(ORGA, "ORGA")
|
||||
)
|
||||
|
||||
objid = models.CharField("Device ID", max_length=64)
|
||||
|
@ -94,3 +96,54 @@ class DeviceLog(models.Model):
|
|||
action = models.IntegerField("Action", choices=ACTION_CHOICES)
|
||||
oldvalue = models.CharField("Old Value", max_length=256, blank=True, null=True)
|
||||
newvalue = models.CharField("New Value", max_length=256, blank=True, null=True)
|
||||
|
||||
class UserLog(models.Model):
|
||||
ADD = 0
|
||||
REMOVE = 1
|
||||
NAME = 2
|
||||
MAIL = 3
|
||||
STAFF = 4
|
||||
SUPERUSER = 5
|
||||
ORGA = 6
|
||||
|
||||
ACTION_CHOICES = (
|
||||
(ADD, "ADD"),
|
||||
(REMOVE, "REMOVE"),
|
||||
(NAME, "NAME"),
|
||||
(MAIL, "MAIL"),
|
||||
(STAFF, "STAFF"),
|
||||
(SUPERUSER, "SUPERUSER"),
|
||||
(ORGA, "ORGA")
|
||||
)
|
||||
|
||||
objid = models.CharField("Target User Name", max_length=64)
|
||||
user = models.CharField("Source User Name", max_length=128, null=True)
|
||||
date = models.DateTimeField("Action Date", auto_now_add=True)
|
||||
action = models.IntegerField("Action", choices=ACTION_CHOICES)
|
||||
oldvalue = models.CharField("Old Value", max_length=256, blank=True, null=True)
|
||||
newvalue = models.CharField("New Value", max_length=256, blank=True, null=True)
|
||||
|
||||
class WifiLog(models.Model):
|
||||
ADD = 0
|
||||
REMOVE = 1
|
||||
NAME = 2
|
||||
SSID = 3
|
||||
KEY = 4
|
||||
ORGA = 5
|
||||
|
||||
ACTION_CHOICES = (
|
||||
(ADD, "ADD"),
|
||||
(REMOVE, "REMOVE"),
|
||||
(NAME, "NAME"),
|
||||
(SSID, "SSID"),
|
||||
(KEY, "KEY"),
|
||||
(ORGA, "ORGA")
|
||||
)
|
||||
|
||||
objid = models.CharField("Wifi Name", max_length=64)
|
||||
user = models.CharField("User Name", max_length=128, null=True)
|
||||
date = models.DateTimeField("Action Date", auto_now_add=True)
|
||||
action = models.IntegerField("Action", choices=ACTION_CHOICES)
|
||||
oldvalue = models.CharField("Old Value", max_length=256, blank=True, null=True)
|
||||
newvalue = models.CharField("New Value", max_length=256, blank=True, null=True)
|
||||
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
from django.dispatch import Signal
|
||||
from .models import Device, Organization, Network, Model, Wifi, DeviceLog
|
||||
from .models import Device, Wifi, DeviceLog, UserLog, WifiLog
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
siglog = Signal(providing_args=["id", "user", "action", "oldvalue", "newvalue"])
|
||||
|
||||
# Device Signals
|
||||
|
||||
def sigDevice(device_id, user, action, oldvalue=None, newvalue=None):
|
||||
siglog.send(sender=Device, id=device_id, user=user, action=action, oldvalue=oldvalue, newvalue=newvalue)
|
||||
|
||||
def sigDeleteDevice(device_id, user):
|
||||
sigDevice(device_id, user, DeviceLog.DELETE)
|
||||
sigDevice(device_id, user, DeviceLog.REMOVE)
|
||||
|
||||
def sigAddDevice(device_id, user):
|
||||
sigDevice(device_id, user, DeviceLog.ADD)
|
||||
|
@ -31,3 +34,55 @@ def sigRebootDevice(device_id, user, newstate):
|
|||
|
||||
def sigUpdateDevice(device_id, user, newstate):
|
||||
sigDevice(device_id, user, DeviceLog.UPDATE, str(not newstate), str(newstate))
|
||||
|
||||
def sigOrgaDevice(device_id, user, oldorga, neworga):
|
||||
sigDevice(device_id, user, DeviceLog.ORGA, oldorga, neworga)
|
||||
|
||||
# User Signals
|
||||
|
||||
def sigUser(target, source, action, oldvalue=None, newvalue=None):
|
||||
siglog.send(sender=User, id=target, user=source, action=action, oldvalue=oldvalue, newvalue=newvalue)
|
||||
|
||||
def sigAddUser(newuser, source):
|
||||
sigUser(newuser, source, UserLog.ADD)
|
||||
|
||||
def sigDeleteUser(target, source):
|
||||
sigUser(target, source, UserLog.REMOVE)
|
||||
|
||||
def sigRenameUser(target, source, oldname, newname):
|
||||
sigUser(target, source, UserLog.NAME, oldname, newname)
|
||||
|
||||
def sigMailUser(target, source, oldmail, newmail):
|
||||
sigUser(target, source, UserLog.MAIL, oldmail, newmail)
|
||||
|
||||
def sigStaffUser(target, source, newstatus):
|
||||
sigUser(target, source, UserLog.STAFF, str(not newstatus), str(newstatus))
|
||||
|
||||
def sigSuperUser(target, source, newstatus):
|
||||
sigUser(target, source, UserLog.SUPERUSER, str(not newstatus), str(newstatus))
|
||||
|
||||
def sigOrgaUser(target, source, oldorga, neworga):
|
||||
sigUser(target, source, UserLog.ORGA, oldorga, neworga)
|
||||
|
||||
# WiFi Signals
|
||||
|
||||
def sigWifi(wifi, user, action, oldvalue=None, newvalue=None):
|
||||
siglog.send(sender=Wifi, id=wifi, user=user, action=action, oldvalue=oldvalue, newvalue=newvalue)
|
||||
|
||||
def sigAddWifi(wifi, user):
|
||||
sigWifi(wifi, user, WifiLog.ADD)
|
||||
|
||||
def sigDeleteWifi(wifi, user):
|
||||
sigWifi(wifi, user, WifiLog.REMOVE)
|
||||
|
||||
def sigRenameWifi(wifi, user, oldname, newname):
|
||||
sigWifi(wifi, user, WifiLog.NAME, oldname, newname)
|
||||
|
||||
def sigSSIDWifi(wifi, user, oldssid, newssid):
|
||||
sigWifi(wifi, user, WifiLog.SSID, oldssid, newssid)
|
||||
|
||||
def sigKeyWifi(wifi, user, oldkey, newkey):
|
||||
sigWifi(wifi, user, WifiLog.KEY, oldkey, newkey)
|
||||
|
||||
def sigOrgaWifi(wifi, user, oldorga, neworga):
|
||||
sigWifi(wifi, user, WifiLog.ORGA, oldorga, neworga)
|
||||
|
|
|
@ -298,7 +298,6 @@ def editdevice(request, device_id):
|
|||
for wifi in Wifi.objects.filter(organization=device[0].organization):
|
||||
wifis.add(wifi)
|
||||
|
||||
|
||||
if request.POST.get("subnet", ""):
|
||||
subnet = Network.objects.filter(intip=request.POST.get("subnet", device[0].network.intip if device[0].network else "No VPN"))
|
||||
|
||||
|
@ -356,16 +355,30 @@ def edituser(request, user_id):
|
|||
return redirect("/")
|
||||
|
||||
if request.POST.get("form", ""):
|
||||
user[0].first_name = request.POST.get("firstname", "")
|
||||
user[0].last_name = request.POST.get("lastname", "")
|
||||
newfirst = request.POST.get("firstname", "")
|
||||
newlast = request.POST.get("lastname", "")
|
||||
if newlast != user[0].last_name or newfirst != user[0].first_name:
|
||||
sigRenameUser(user[0].username, request.user.username, "%s %s" % (user[0].first_name, user[0].last_name), "%s %s" % (newfirst, newlast))
|
||||
user[0].first_name = request.POST.get("firstname", "")
|
||||
user[0].last_name = request.POST.get("lastname", "")
|
||||
|
||||
if request.user.is_staff or request.user.is_superuser:
|
||||
user[0].is_staff = True if request.POST.get("staff", "0") == "True" else False
|
||||
newstaff = request.POST.get("staff", "0") == "True"
|
||||
if newstaff != user[0].is_staff:
|
||||
sigStaffUser(user[0].username, request.user.username, newstaff)
|
||||
user[0].is_staff = newstaff
|
||||
|
||||
if request.user.is_superuser:
|
||||
user[0].is_superuser = True if request.POST.get("superuser", "0") == "True" else False
|
||||
newsuper = request.POST.get("superuser", "0") == "True"
|
||||
if newsuper != user[0].is_superuser:
|
||||
sigSuperUser(user[0].username, request.user.username, newsuper)
|
||||
user[0].is_superuser = newsuper
|
||||
|
||||
newmail = request.POST.get("email", "")
|
||||
if newmail != user[0].email:
|
||||
sigMailUser(user[0].username, request.user.username, user[0].email, newmail)
|
||||
user[0].email = newmail
|
||||
|
||||
user[0].email = request.POST.get("email", "")
|
||||
user[0].save()
|
||||
|
||||
return redirect("/")
|
||||
|
@ -391,9 +404,21 @@ def editwifi(request, wifi_id):
|
|||
return redirect("/")
|
||||
|
||||
if request.POST.get("serial", ""):
|
||||
wifi[0].serial = request.POST.get("serial", "")
|
||||
wifi[0].ssid = request.POST.get("ssid", "")
|
||||
wifi[0].key = request.POST.get("key", "")
|
||||
newserial = request.POST.get("serial", "")
|
||||
if newserial != wifi[0].serial:
|
||||
sigRenameWifi(wifi[0].serial, request.user.username, wifi[0].serial, newserial)
|
||||
wifi[0].serial = newserial
|
||||
|
||||
newssid = request.POST.get("ssid", "")
|
||||
if newssid != wifi[0].ssid:
|
||||
sigSSIDWifi(wifi[0].serial, request.user.username, wifi[0].ssid, newssid)
|
||||
wifi[0].ssid = newssid
|
||||
|
||||
newkey = request.POST.get("key", "")
|
||||
if newkey != wifi[0].key:
|
||||
sigKeyWifi(wifi[0].serial, request.user.username, wifi[0].key, newkey)
|
||||
wifi[0].key = newkey
|
||||
|
||||
wifi[0].save()
|
||||
|
||||
return redirect("/")
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
{% csrf_token %}
|
||||
<div class="form-group">
|
||||
<label for="serial">Common Name (Serial)</label>
|
||||
<input type="text" class="form-control" id="serial" value="{{ wifi.serial }}"></input>
|
||||
<input type="text" class="form-control" name="serial" id="serial" value="{{ wifi.serial }}"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="ssid">WiFi SSID</label>
|
||||
<input type="text" class="form-control" id="ssid" value="{{ wifi.ssid }}"></input>
|
||||
<input type="text" class="form-control" name="ssid" id="ssid" value="{{ wifi.ssid }}"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="secret">WiFi WPA2 Key</label>
|
||||
<input type="text" class="form-control" id="key" value="{{ wifi.key }}"></input>
|
||||
<input type="text" class="form-control" id="key" name="key" value="{{ wifi.key }}"></input>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-success">Apply Changes</button>
|
||||
<a class="btn btn-danger" href="/" role="button">Cancel</a>
|
||||
|
|
Loading…
Reference in a new issue