mirror of
https://github.com/house-of-vanity/OutFleet.git
synced 2025-08-21 14:37:16 +00:00
Added link generator. Added link to /stat/ json object
Some checks failed
Docker hub build / docker (push) Has been cancelled
Some checks failed
Docker hub build / docker (push) Has been cancelled
This commit is contained in:
20
static/admin/js/generate_link.js
Normal file
20
static/admin/js/generate_link.js
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
// static/admin/js/generate_uuid.js
|
||||||
|
|
||||||
|
function generateLink(button) {
|
||||||
|
let row = button.closest('tr');
|
||||||
|
let inputField = row.querySelector('input[name$="link"]');
|
||||||
|
|
||||||
|
if (inputField) {
|
||||||
|
inputField.value = generateRandomString(16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateRandomString(length) {
|
||||||
|
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
|
let result = '';
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
@@ -1,21 +0,0 @@
|
|||||||
// static/admin/js/generate_uuid.js
|
|
||||||
|
|
||||||
function generateUUID() {
|
|
||||||
let uuid = '';
|
|
||||||
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
||||||
const length = 10;
|
|
||||||
|
|
||||||
for (let i = 0; i < length; i++) {
|
|
||||||
const randomIndex = Math.floor(Math.random() * characters.length);
|
|
||||||
uuid += characters[randomIndex];
|
|
||||||
}
|
|
||||||
|
|
||||||
const hashField = document.getElementById('id_hash');
|
|
||||||
if (hashField) {
|
|
||||||
hashField.value = uuid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
|
||||||
generateUUID();
|
|
||||||
});
|
|
22
vpn/admin.py
22
vpn/admin.py
@@ -4,6 +4,7 @@ from polymorphic.admin import (
|
|||||||
)
|
)
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
from django.utils.html import format_html
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
|
|
||||||
from django.contrib.auth.admin import UserAdmin
|
from django.contrib.auth.admin import UserAdmin
|
||||||
@@ -93,10 +94,14 @@ class ServerAdmin(PolymorphicParentModelAdmin):
|
|||||||
@admin.register(User)
|
@admin.register(User)
|
||||||
class UserAdmin(admin.ModelAdmin):
|
class UserAdmin(admin.ModelAdmin):
|
||||||
form = UserForm
|
form = UserForm
|
||||||
list_display = ('username', 'comment', 'registration_date', 'hash', 'server_count')
|
list_display = ('username', 'comment', 'registration_date', 'hash_link', 'server_count')
|
||||||
search_fields = ('username', 'hash')
|
search_fields = ('username', 'hash')
|
||||||
readonly_fields = ('hash',)
|
readonly_fields = ('hash_link',)
|
||||||
|
|
||||||
|
@admin.display(description='API access', ordering='hash')
|
||||||
|
def hash_link(self, obj):
|
||||||
|
url = f"{EXTERNAL_ADDRESS}/stat/{obj.hash}"
|
||||||
|
return format_html('<a href="{}">JSON server list</a>', url, obj.hash)
|
||||||
|
|
||||||
@admin.display(description='Allowed servers', ordering='server_count')
|
@admin.display(description='Allowed servers', ordering='server_count')
|
||||||
def server_count(self, obj):
|
def server_count(self, obj):
|
||||||
@@ -139,13 +144,22 @@ class ACLLinkInline(admin.TabularInline):
|
|||||||
help_text = 'Add or change ACL links'
|
help_text = 'Add or change ACL links'
|
||||||
verbose_name = 'Dynamic link'
|
verbose_name = 'Dynamic link'
|
||||||
verbose_name_plural = 'Dynamic links'
|
verbose_name_plural = 'Dynamic links'
|
||||||
fields = ('link', 'comment')
|
fields = ('link', 'generate_link_button', 'comment')
|
||||||
|
readonly_fields = ('generate_link_button',)
|
||||||
|
|
||||||
|
@admin.display(description="Generate")
|
||||||
|
def generate_link_button(self, obj=None):
|
||||||
|
return format_html(
|
||||||
|
'<button type="button" class="generate-link" onclick="generateLink(this)">🔄</button>'
|
||||||
|
)
|
||||||
|
|
||||||
|
class Media:
|
||||||
|
js = ('admin/js/generate_link.js',)
|
||||||
|
|
||||||
@admin.register(ACL)
|
@admin.register(ACL)
|
||||||
class ACLAdmin(admin.ModelAdmin):
|
class ACLAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
list_display = ('user', 'server', 'server_type', 'display_links', 'created_at')
|
list_display = ('user', 'server', 'server_type', 'display_links', 'created_at')
|
||||||
#list_editable = ('server', )
|
|
||||||
list_filter = (UserNameFilter, 'server__server_type', ServerNameFilter)
|
list_filter = (UserNameFilter, 'server__server_type', ServerNameFilter)
|
||||||
search_fields = ('user__name', 'server__name', 'server__comment', 'user__comment', 'links__link')
|
search_fields = ('user__name', 'server__name', 'server__comment', 'user__comment', 'links__link')
|
||||||
readonly_fields = ('user_info',)
|
readonly_fields = ('user_info',)
|
||||||
|
Reference in New Issue
Block a user