From c80ef3288fee78992e2934f84918de4de8dd22bd Mon Sep 17 00:00:00 2001 From: usmannasir Date: Mon, 7 Oct 2024 16:43:10 +0500 Subject: [PATCH] efforts to embed csf ui --- CyberCP/settings.py | 1 + configservercsf/__init__.py | 1 + configservercsf/admin.py | 6 + configservercsf/apps.py | 7 + configservercsf/config | 0 configservercsf/meta.xml | 7 + configservercsf/migrations/__init__.py | 0 configservercsf/models.py | 6 + configservercsf/signals.py | 13 ++ .../templates/configservercsf/index.html | 17 ++ .../templates/configservercsf/menu.html | 25 +++ configservercsf/tests.py | 6 + configservercsf/urls.py | 7 + configservercsf/views.py | 57 ++++++ plogical/csf.py | 165 +++++++++++------- 15 files changed, 253 insertions(+), 65 deletions(-) create mode 100644 configservercsf/__init__.py create mode 100644 configservercsf/admin.py create mode 100644 configservercsf/apps.py create mode 100644 configservercsf/config create mode 100644 configservercsf/meta.xml create mode 100644 configservercsf/migrations/__init__.py create mode 100644 configservercsf/models.py create mode 100644 configservercsf/signals.py create mode 100644 configservercsf/templates/configservercsf/index.html create mode 100644 configservercsf/templates/configservercsf/menu.html create mode 100644 configservercsf/tests.py create mode 100644 configservercsf/urls.py create mode 100644 configservercsf/views.py diff --git a/CyberCP/settings.py b/CyberCP/settings.py index 79665436c..6f399e89d 100755 --- a/CyberCP/settings.py +++ b/CyberCP/settings.py @@ -65,6 +65,7 @@ INSTALLED_APPS = [ 'containerization', 'CLManager', 'IncBackups', + 'configservercsf' # 'WebTerminal' ] diff --git a/configservercsf/__init__.py b/configservercsf/__init__.py new file mode 100644 index 000000000..58ef6a5ea --- /dev/null +++ b/configservercsf/__init__.py @@ -0,0 +1 @@ +#default_app_config = 'configservercsf.apps.configservercsfConfig' diff --git a/configservercsf/admin.py b/configservercsf/admin.py new file mode 100644 index 000000000..13be29d96 --- /dev/null +++ b/configservercsf/admin.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.contrib import admin + +# Register your models here. diff --git a/configservercsf/apps.py b/configservercsf/apps.py new file mode 100644 index 000000000..fae710cba --- /dev/null +++ b/configservercsf/apps.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + +class configservercsfConfig(AppConfig): + name = 'configservercsf' diff --git a/configservercsf/config b/configservercsf/config new file mode 100644 index 000000000..e69de29bb diff --git a/configservercsf/meta.xml b/configservercsf/meta.xml new file mode 100644 index 000000000..4515593e9 --- /dev/null +++ b/configservercsf/meta.xml @@ -0,0 +1,7 @@ + + + ConfigServer Security and Firewall + plugin + ConfigServer Security and Firewall + 1.0 + diff --git a/configservercsf/migrations/__init__.py b/configservercsf/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/configservercsf/models.py b/configservercsf/models.py new file mode 100644 index 000000000..1dfab7604 --- /dev/null +++ b/configservercsf/models.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models + +# Create your models here. diff --git a/configservercsf/signals.py b/configservercsf/signals.py new file mode 100644 index 000000000..3db8f8c4a --- /dev/null +++ b/configservercsf/signals.py @@ -0,0 +1,13 @@ +from django.dispatch import receiver +from django.shortcuts import redirect +from firewall.signals import preFirewallHome, preCSF + +@receiver(preFirewallHome) +def csfFirewallHome(sender, **kwargs): + request = kwargs['request'] + return redirect('/configservercsf/') + +@receiver(preCSF) +def csfCSF(sender, **kwargs): + request = kwargs['request'] + return redirect('/configservercsf/') diff --git a/configservercsf/templates/configservercsf/index.html b/configservercsf/templates/configservercsf/index.html new file mode 100644 index 000000000..fcae8b1a0 --- /dev/null +++ b/configservercsf/templates/configservercsf/index.html @@ -0,0 +1,17 @@ +{% extends "baseTemplate/index.html" %} +{% load i18n %} +{% block title %}ConfigServer Security and Firewall{% endblock %} +{% block content %} + +{% load static %} + + + + +{% endblock %} diff --git a/configservercsf/templates/configservercsf/menu.html b/configservercsf/templates/configservercsf/menu.html new file mode 100644 index 000000000..d2888156f --- /dev/null +++ b/configservercsf/templates/configservercsf/menu.html @@ -0,0 +1,25 @@ + + + ConfigServer Services + + + + +
  • diff --git a/configservercsf/tests.py b/configservercsf/tests.py new file mode 100644 index 000000000..5982e6bcd --- /dev/null +++ b/configservercsf/tests.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.test import TestCase + +# Create your tests here. diff --git a/configservercsf/urls.py b/configservercsf/urls.py new file mode 100644 index 000000000..1f47c8774 --- /dev/null +++ b/configservercsf/urls.py @@ -0,0 +1,7 @@ +from django.urls import path, re_path +from . import views + +urlpatterns = [ + path('', views.configservercsf, name='configservercsf'), + path('iframe/', views.configservercsfiframe, name='configservercsfiframe'), +] \ No newline at end of file diff --git a/configservercsf/views.py b/configservercsf/views.py new file mode 100644 index 000000000..4c1b84b99 --- /dev/null +++ b/configservercsf/views.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import os +import os.path +import sys +import django + +sys.path.append('/usr/local/CyberCP') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") +django.setup() +from plogical.acl import ACLManager + +from plogical.processUtilities import ProcessUtilities +from django.views.decorators.csrf import csrf_exempt +import tempfile +from django.http import HttpResponse +from django.views.decorators.clickjacking import xframe_options_exempt +from plogical.httpProc import httpProc + +def configservercsf(request): + proc = httpProc(request, 'configservercsf/index.html', + None, 'admin') + return proc.render() + +@csrf_exempt +@xframe_options_exempt +def configservercsfiframe(request): + userID = request.session['userID'] + currentACL = ACLManager.loadedACL(userID) + + if currentACL['admin'] == 1: + pass + else: + return ACLManager.loadError() + + if request.method == 'GET': + qs = request.GET.urlencode() + elif request.method == 'POST': + qs = request.POST.urlencode() + + try: + tmp = tempfile.NamedTemporaryFile(mode = "w", delete=False) + tmp.write(qs) + tmp.close() + command = "/usr/local/csf/bin/cyberpanel.pl '" + tmp.name + "'" + + try: + output = ProcessUtilities.outputExecutioner(command) + except: + output = "Output Error from csf UI script" + + os.unlink(tmp.name) + except: + output = "Unable to create csf UI temp file" + + return HttpResponse(output) diff --git a/plogical/csf.py b/plogical/csf.py index 3337b569d..87568c3e5 100755 --- a/plogical/csf.py +++ b/plogical/csf.py @@ -54,71 +54,106 @@ class CSF(multi.Thread): ### manually update csf views.py because it does not load CyberPanel properly in default configurations -# content = ''' -# # -*- coding: utf-8 -*- -# from __future__ import unicode_literals -# -# import os -# import os.path -# import sys -# import django -# sys.path.append('/usr/local/CyberCP') -# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") -# django.setup() -# import json -# from plogical.acl import ACLManager -# from plogical.httpProc import httpProc -# import plogical.CyberCPLogFileWriter as logging -# import subprocess -# from django.shortcuts import HttpResponse, render -# from plogical.processUtilities import ProcessUtilities -# from django.views.decorators.csrf import csrf_exempt -# import tempfile -# from django.http import HttpResponse -# from django.views.decorators.clickjacking import xframe_options_exempt -# -# def configservercsf(request): -# proc = httpProc(request, 'configservercsf/index.html', -# None, 'admin') -# return proc.render() -# -# @csrf_exempt -# @xframe_options_exempt -# def configservercsfiframe(request): -# userID = request.session['userID'] -# currentACL = ACLManager.loadedACL(userID) -# -# if currentACL['admin'] == 1: -# pass -# else: -# return ACLManager.loadError() -# -# if request.method == 'GET': -# qs = request.GET.urlencode() -# elif request.method == 'POST': -# qs = request.POST.urlencode() -# -# try: -# tmp = tempfile.NamedTemporaryFile(mode = "w", delete=False) -# tmp.write(qs) -# tmp.close() -# command = "/usr/local/csf/bin/cyberpanel.pl '" + tmp.name + "'" -# -# try: -# output = ProcessUtilities.outputExecutioner(command) -# except: -# output = "Output Error from csf UI script" -# -# os.unlink(tmp.name) -# except: -# output = "Unable to create csf UI temp file" -# -# return HttpResponse(output) -# ''' -# -# WriteToFile = open('cyberpanel/configservercsf/views.py', 'w') -# WriteToFile.write(content) -# WriteToFile.close() + content = ''' +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import os +import os.path +import sys +import django + +sys.path.append('/usr/local/CyberCP') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings") +django.setup() +from plogical.acl import ACLManager + +from plogical.processUtilities import ProcessUtilities +from django.views.decorators.csrf import csrf_exempt +import tempfile +from django.http import HttpResponse +from django.views.decorators.clickjacking import xframe_options_exempt +from plogical.httpProc import httpProc + +def configservercsf(request): + proc = httpProc(request, 'configservercsf/index.html', + None, 'admin') + return proc.render() + +@csrf_exempt +@xframe_options_exempt +def configservercsfiframe(request): + userID = request.session['userID'] + currentACL = ACLManager.loadedACL(userID) + + if currentACL['admin'] == 1: + pass + else: + return ACLManager.loadError() + + if request.method == 'GET': + qs = request.GET.urlencode() + elif request.method == 'POST': + qs = request.POST.urlencode() + + try: + tmp = tempfile.NamedTemporaryFile(mode = "w", delete=False) + tmp.write(qs) + tmp.close() + command = "/usr/local/csf/bin/cyberpanel.pl '" + tmp.name + "'" + + try: + output = ProcessUtilities.outputExecutioner(command) + except: + output = "Output Error from csf UI script" + + os.unlink(tmp.name) + except: + output = "Unable to create csf UI temp file" + + return HttpResponse(output) +''' + + WriteToFile = open('cyberpanel/configservercsf/views.py', 'w') + WriteToFile.write(content) + WriteToFile.close() + + ### now update content of signals.py + WriteToFile = open('cyberpanel/configservercsf/signals.py', 'w') + WriteToFile.close() + + ### now update content of apps.py + + content = ''' +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.apps import AppConfig + +class configservercsfConfig(AppConfig): + name = 'configservercsf' +''' + + WriteToFile = open('cyberpanel/configservercsf/apps.py', 'w') + WriteToFile.write(content) + WriteToFile.close() + + + ### now update content of urls.py + + content = ''' +from django.urls import path, re_path +from . import views + +urlpatterns = [ + path('', views.configservercsf, name='configservercsf'), + path('iframe/', views.configservercsfiframe, name='configservercsfiframe'), +] +''' + + WriteToFile = open('cyberpanel/configservercsf/urls.py', 'w') + WriteToFile.write(content) + WriteToFile.close() command = "chmod +x install.sh" ProcessUtilities.normalExecutioner(command)