diff --git a/.gitignore b/.gitignore index 118b1d3..3ca6cec 100755 --- a/.gitignore +++ b/.gitignore @@ -107,3 +107,5 @@ docker-compose.yml mainframe.ini *.plist +*.rdb +.idea/ diff --git a/api/views/user.py b/api/views/user.py index 1f11260..0b1da7e 100755 --- a/api/views/user.py +++ b/api/views/user.py @@ -42,7 +42,7 @@ def list(request, validated=[], *args, **kwargs): default=F('punishment__is_gagged'), output_field=BooleanField()), name=F('namespace'), is_internal=F('is_active'))\ - .filter(username__contains=validated['match']) + .filter(username__contains=validated['match']).distinct() if validated['internal']: selected = selected.filter(is_internal=validated['internal']) @@ -192,7 +192,7 @@ def detailed(request, u=None, s=None, validated={}, *args, **kwargs): 'permissions': [a.content_type.app_label + '.' + a.codename for a in user.user_permissions.all()], 'groups': [str(a) for a in user.groups.all()], 'roles': [], - 'has_panel_access': user.is_active, + 'is_internal': user.is_active, 'country': None if user.country is None else user.country.code } @@ -357,7 +357,7 @@ def detailed(request, u=None, s=None, validated={}, *args, **kwargs): m = Membership.objects.get(user=user, role=validated['role']) m.delete() - for role in validated['role']: + for role in validated['roles']: m = Membership.objects.get(user=user, role=role) m.delete() diff --git a/core/migrations/0067_server_slug.py b/core/migrations/0067_server_slug.py new file mode 100644 index 0000000..64a573b --- /dev/null +++ b/core/migrations/0067_server_slug.py @@ -0,0 +1,27 @@ +# Generated by Django 2.0.6 on 2018-07-13 00:03 + +from django.db import migrations, models +from django.template.defaultfilters import slugify + + +def forwards(apps, schema_editor): + Server = apps.get_model('core', 'Server') + for row in Server.objects.all(): + row.slug = slugify(row.name)[:50] + row.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0066_auto_20180704_0149'), + ] + + operations = [ + migrations.AddField( + model_name='server', + name='slug', + field=models.SlugField(null=True), + ), + migrations.RunPython(forwards, reverse_code=migrations.RunPython.noop), + ] diff --git a/core/migrations/0068_auto_20180713_0006.py b/core/migrations/0068_auto_20180713_0006.py new file mode 100644 index 0000000..173b528 --- /dev/null +++ b/core/migrations/0068_auto_20180713_0006.py @@ -0,0 +1,27 @@ +# Generated by Django 2.0.6 on 2018-07-13 00:06 + +from django.db import migrations, models +from django.template.defaultfilters import slugify + + +def forwards(apps, schema_editor): + Server = apps.get_model('core', 'Server') + for row in Server.objects.all(): + row.slug = slugify(row.name)[:50] + row.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0067_server_slug'), + ] + + operations = [ + migrations.RunPython(forwards, reverse_code=migrations.RunPython.noop), + migrations.AlterField( + model_name='server', + name='slug', + field=models.SlugField(), + ), + ] diff --git a/core/models.py b/core/models.py index 9637c60..0387173 100755 --- a/core/models.py +++ b/core/models.py @@ -222,6 +222,8 @@ def __str__(self): class Server(BaseModel): name = models.CharField(max_length=255) + slug = models.SlugField() + ip = models.GenericIPAddressField() port = models.IntegerField() password = models.CharField(max_length=255) diff --git a/core/signals.py b/core/signals.py index 061fed6..6602f5f 100644 --- a/core/signals.py +++ b/core/signals.py @@ -3,7 +3,8 @@ from django.utils import timezone from core.lib.steam import populate import logging -from core.models import User +from core.models import User, Server +from django.template.defaultfilters import slugify logger = logging.getLogger(__name__) @@ -81,3 +82,16 @@ def user_log_handler(sender, instance, raw, using, update_fields, **kwargs): if iplog: ip.save() + + +@receiver(pre_save, sender=Server, weak=False) +def server_slug_handler(sender, instance, raw, using, update_fields, **kwargs): + try: + state = Server.objects.get(id=instance.id) + except Server.DoesNotExist: + state = None + + if state and state.name == instance.name: + return + + instance.slug = slugify(instance.name)[:50] diff --git a/dump.rdb b/dump.rdb index e0336d3..5678e0b 100644 Binary files a/dump.rdb and b/dump.rdb differ diff --git a/interface/static/COMPILED/js/api.js b/interface/static/COMPILED/js/api.js index bbf8a89..69539aa 100755 --- a/interface/static/COMPILED/js/api.js +++ b/interface/static/COMPILED/js/api.js @@ -16,7 +16,6 @@ user = $('input.uuid', node)[0].value; role = $('input.role', node)[0].value; payload = { - reset: true, role: role }; endpoint = window.endpoint.api.users[user]; @@ -29,12 +28,12 @@ user = $('input.user', node)[0].value; server = $('input.server', node)[0].value; punishment = $('input.punishment', node)[0].value; - endpoint = window.endpoint.api.users[user].punishment[punishment]; + endpoint = window.endpoint.api.users[user].punishments[punishment]; break; case 'mutegag': user = $('input.user', node)[0].value; punishment = $('input.punishment', node)[0].value; - endpoint = window.endpoint.api.users[user].punishment[punishment]; + endpoint = window.endpoint.api.users[user].punishments[punishment]; break; case 'server': node = that.parentElement.parentElement.parentElement.parentElement; @@ -168,23 +167,23 @@ return payload.type += e.getAttribute('data-type'); }); payload.muted = false; - payloud.gagged = false; + payload.gagged = false; if (payload.type.match(/mute/) && payload.type.match(/gag/)) { payload.muted = true; - payloud.gagged = true; + payload.gagged = true; } if (payload.type === '') { payload.muted = true; - payloud.gagged = true; + payload.gagged = true; } if (type.match(/mute/)) { payload.muted = true; } if (type.match(/gag/)) { - payloud.gagged = true; + payload.gagged = true; } } - window.endpoint.api.users[user].punishment[punishment].post(o, {}, payload, function(err, data) {}); + window.endpoint.api.users[user].punishments[punishment].post(o, {}, payload, function(err, data) {}); break; case 'server': node = node.parentElement; @@ -481,7 +480,7 @@ if (server !== 'all') { data.server = server; } - return window.endpoint.api.users[user].punishment.put(o, {}, data, function(err, data) { + return window.endpoint.api.users[user].punishments.put(o, {}, data, function(err, data) { return window.ajax.ban.user(1); }); case 'mutegag': @@ -526,7 +525,7 @@ if (server !== 'all') { data.server = server; } - return window.endpoint.api.users[user].punishment.put(o, {}, data, function(err, data) { + return window.endpoint.api.users[user].punishments.put(o, {}, data, function(err, data) { window.ajax.mutegag.user(1); return data; }); @@ -536,7 +535,7 @@ server: $('input.server', node)[0].value, kicked: true }; - return window.endpoint.api.users[user].punishment.put(o, {}, data, function(err, data) { + return window.endpoint.api.users[user].punishments.put(o, {}, data, function(err, data) { window.ajax.player.user(1); return data; }); diff --git a/interface/static/js/api.create.coffee b/interface/static/js/api.create.coffee index dbef081..c034fc7 100755 --- a/interface/static/js/api.create.coffee +++ b/interface/static/js/api.create.coffee @@ -64,7 +64,7 @@ submit = (mode = '', that) -> if server != 'all' data.server = server - window.endpoint.api.users[user].punishment.put(o, {}, data, (err, data) -> + window.endpoint.api.users[user].punishments.put(o, {}, data, (err, data) -> window.ajax.ban.user(1) ) @@ -114,7 +114,7 @@ submit = (mode = '', that) -> if server != 'all' data.server = server - window.endpoint.api.users[user].punishment.put(o, {}, data, (err, data) -> + window.endpoint.api.users[user].punishments.put(o, {}, data, (err, data) -> window.ajax.mutegag.user(1) return data ) @@ -125,7 +125,7 @@ submit = (mode = '', that) -> server: $('input.server', node)[0].value kicked: true - window.endpoint.api.users[user].punishment.put(o, {}, data, (err, data) -> + window.endpoint.api.users[user].punishments.put(o, {}, data, (err, data) -> window.ajax.player.user(1) return data ) diff --git a/interface/static/js/api.delete.coffee b/interface/static/js/api.delete.coffee index f23f604..bbcbbf0 100755 --- a/interface/static/js/api.delete.coffee +++ b/interface/static/js/api.delete.coffee @@ -14,7 +14,6 @@ remove = (mode = '', that) -> role = $('input.role', node)[0].value payload = - reset: true role: role endpoint = window.endpoint.api.users[user] @@ -27,12 +26,12 @@ remove = (mode = '', that) -> server = $('input.server', node)[0].value punishment = $('input.punishment', node)[0].value - endpoint = window.endpoint.api.users[user].punishment[punishment] + endpoint = window.endpoint.api.users[user].punishments[punishment] when 'mutegag' user = $('input.user', node)[0].value punishment = $('input.punishment', node)[0].value - endpoint = window.endpoint.api.users[user].punishment[punishment] + endpoint = window.endpoint.api.users[user].punishments[punishment] when 'server' node = that.parentElement.parentElement.parentElement.parentElement server = $('input.uuid', node)[0].value diff --git a/interface/static/js/api.edit.coffee b/interface/static/js/api.edit.coffee index 225fe21..72caaf1 100755 --- a/interface/static/js/api.edit.coffee +++ b/interface/static/js/api.edit.coffee @@ -110,7 +110,7 @@ save = (mode = '', that) -> if type.match /gag/ payload.gagged = true - window.endpoint.api.users[user].punishment[punishment].post(o, {}, payload, (err, data) ->) + window.endpoint.api.users[user].punishments[punishment].post(o, {}, payload, (err, data) ->) when 'server' node = node.parentElement diff --git a/lib/base.py b/lib/base.py index 2e71def..ecd6d2f 100755 --- a/lib/base.py +++ b/lib/base.py @@ -55,6 +55,8 @@ def run(self, command): pass except RCONTimeoutError: pass + except Exception: + pass finally: self.close() diff --git a/sourcemod/addons/sourcemod/configs/hawthorne/punishment.txt b/sourcemod/addons/sourcemod/configs/hawthorne/punishments.txt old mode 100755 new mode 100644 similarity index 100% rename from sourcemod/addons/sourcemod/configs/hawthorne/punishment.txt rename to sourcemod/addons/sourcemod/configs/hawthorne/punishments.txt diff --git a/sourcemod/addons/sourcemod/scripting/hawthorne.smx b/sourcemod/addons/sourcemod/scripting/hawthorne.smx new file mode 100644 index 0000000..76e69dd Binary files /dev/null and b/sourcemod/addons/sourcemod/scripting/hawthorne.smx differ diff --git a/sourcemod/addons/sourcemod/scripting/hawthorne/player.sp b/sourcemod/addons/sourcemod/scripting/hawthorne/player.sp index e605f83..8c98902 100755 --- a/sourcemod/addons/sourcemod/scripting/hawthorne/player.sp +++ b/sourcemod/addons/sourcemod/scripting/hawthorne/player.sp @@ -1,7 +1,7 @@ public void OnClientAuthorized(int client) { CLIENTS[client] = ""; - if (StrEqual(SERVER, "") || IsFakeClient(client)) return; + if (StrEqual(SERVER, "") || IsFakeClient(client) || client < 1) return; char steamid[20]; GetClientAuthId(client, AuthId_SteamID64, steamid, sizeof(steamid)); diff --git a/sourcemod/addons/sourcemod/scripting/hawthorne/server.sp b/sourcemod/addons/sourcemod/scripting/hawthorne/server.sp index d23d476..72a9f29 100755 --- a/sourcemod/addons/sourcemod/scripting/hawthorne/server.sp +++ b/sourcemod/addons/sourcemod/scripting/hawthorne/server.sp @@ -33,7 +33,7 @@ void GetServerUUID() { httpClient.Get(url, APIGetServerUUID); } -public void APIGetServerUUID(HTTPResponse response, any value) { +void APIGetServerUUID(HTTPResponse response, any value) { if (!APIValidator(response)) return; JSONObject output = view_as(response.Data);