mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-10 15:26:13 +01:00
Add createDockersite API endpoint: Implement functionality to create a dockersite with input validation and error handling. Update urls.py to include the new endpoint.
https://github.com/usmannasir/cyberpanel/pull/1224
This commit is contained in:
@@ -5,6 +5,7 @@ urlpatterns = [
|
|||||||
re_path(r'^createWebsite$', views.createWebsite, name='createWebsiteAPI'),
|
re_path(r'^createWebsite$', views.createWebsite, name='createWebsiteAPI'),
|
||||||
re_path(r'^deleteWebsite$', views.deleteWebsite, name='deleteWebsiteAPI'),
|
re_path(r'^deleteWebsite$', views.deleteWebsite, name='deleteWebsiteAPI'),
|
||||||
re_path(r'^submitWebsiteStatus$', views.submitWebsiteStatus, name='submitWebsiteStatusAPI'),
|
re_path(r'^submitWebsiteStatus$', views.submitWebsiteStatus, name='submitWebsiteStatusAPI'),
|
||||||
|
re_path(r'^createDockersite$', views.createDockersite, name='createDockersiteAPI'),
|
||||||
re_path(r'^deleteFirewallRule$', views.deleteFirewallRule, name='deleteFirewallRule'),
|
re_path(r'^deleteFirewallRule$', views.deleteFirewallRule, name='deleteFirewallRule'),
|
||||||
re_path(r'^addFirewallRule$', views.addFirewallRule, name='addFirewallRule'),
|
re_path(r'^addFirewallRule$', views.addFirewallRule, name='addFirewallRule'),
|
||||||
|
|
||||||
|
|||||||
55
api/views.py
55
api/views.py
@@ -157,6 +157,61 @@ def createWebsite(request):
|
|||||||
return HttpResponse(json_data, status=500)
|
return HttpResponse(json_data, status=500)
|
||||||
|
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
|
def createDockersite(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']
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
# Validate site name if provided
|
||||||
|
if 'sitename' in data:
|
||||||
|
is_valid, error_msg = validate_api_input(data['sitename'], "sitename")
|
||||||
|
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 field."}
|
||||||
|
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 os.path.exists(ProcessUtilities.debugPath):
|
||||||
|
logging.writeToFile(f'Create dockersite payload in API {str(data)}')
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
wm = WebsiteManager()
|
||||||
|
return wm.submitDockerSiteCreation(admin.pk, data)
|
||||||
|
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
|
@csrf_exempt
|
||||||
def getPackagesListAPI(request):
|
def getPackagesListAPI(request):
|
||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
|
|||||||
Reference in New Issue
Block a user