mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-08 06:16:08 +01:00
Add RESTful API support for listing child domains: Implement listChildDomainsJson endpoint in the API, allowing users to retrieve child domain details with authentication. Update README to document the new API functionality and usage examples. Remove obsolete utility scripts for Windows and Linux to streamline the project.
https://github.com/usmannasir/cyberpanel/issues/1120
This commit is contained in:
78
api/views.py
78
api/views.py
@@ -831,6 +831,84 @@ def submitUserCreation(request):
|
||||
return HttpResponse(json_data)
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
def listChildDomainsJson(request):
|
||||
try:
|
||||
if request.method != 'POST':
|
||||
data_ret = {"status": 0, 'error_message': "Only POST method allowed."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data, status=405)
|
||||
|
||||
try:
|
||||
data = json.loads(request.body)
|
||||
adminUser = data['adminUser']
|
||||
adminPass = data['adminPass']
|
||||
|
||||
# Additional security: validate critical fields for dangerous characters
|
||||
is_valid, error_msg = validate_api_input(adminUser, "adminUser")
|
||||
if not is_valid:
|
||||
data_ret = {"status": 0, 'error_message': error_msg}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data, status=400)
|
||||
|
||||
except (json.JSONDecodeError, KeyError):
|
||||
data_ret = {"status": 0, 'error_message': "Invalid JSON or missing adminUser/adminPass fields."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data, status=400)
|
||||
|
||||
try:
|
||||
admin = Administrator.objects.get(userName=adminUser)
|
||||
except Administrator.DoesNotExist:
|
||||
data_ret = {"status": 0, 'error_message': "Administrator not found."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data, status=404)
|
||||
|
||||
if admin.api == 0:
|
||||
data_ret = {"status": 0, 'error_message': "API Access Disabled."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data, status=403)
|
||||
|
||||
if not hashPassword.check_password(admin.password, adminPass):
|
||||
data_ret = {"status": 0, 'error_message': "Invalid password."}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data, status=401)
|
||||
|
||||
# Get child domains
|
||||
from websiteFunctions.models import ChildDomains
|
||||
|
||||
child_domains = ChildDomains.objects.all()
|
||||
|
||||
# Get machine IP
|
||||
try:
|
||||
ipFile = "/etc/cyberpanel/machineIP"
|
||||
with open(ipFile, 'r') as f:
|
||||
ipData = f.read()
|
||||
ipAddress = ipData.split('\n', 1)[0]
|
||||
except BaseException as msg:
|
||||
logging.writeToFile(f"Failed to read machine IP, error: {str(msg)}")
|
||||
ipAddress = "192.168.100.1"
|
||||
|
||||
json_data = []
|
||||
for items in child_domains:
|
||||
dic = {
|
||||
'parent_site': items.master.domain,
|
||||
'domain': items.domain,
|
||||
'path': items.path,
|
||||
'ssl': items.ssl,
|
||||
'php_version': items.phpSelection,
|
||||
'ip_address': ipAddress
|
||||
}
|
||||
json_data.append(dic)
|
||||
|
||||
final_json = json.dumps(json_data, indent=2)
|
||||
return HttpResponse(final_json, content_type='application/json')
|
||||
|
||||
except Exception as msg:
|
||||
data_ret = {'status': 0, 'error_message': f"Internal server error: {str(msg)}"}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data, status=500)
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
def addFirewallRule(request):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user