1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
--
-- (C) 2020-22 - ntop.org
--
--
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
require "lua_utils"
local json = require ("dkjson")
local rest_utils = {
consts = {
success = {
ok = { http_code = 200, rc = 0, str = "OK" },
snmp_device_deleted = { http_code = 200, rc = 0, str = "SNMP_DEVICE_DELETED_SUCCESSFULLY"},
snmp_device_added = { http_code = 200, rc = 0, str = "SNMP_DEVICE_ADDED_SUCCESSFULLY"},
snmp_device_edited = { http_code = 200, rc = 0, str = "SNMP_DEVICE_EDITED_SUCCESSFULLY"},
pool_deleted = { http_code = 200, rc = 0, str = "POOL_DELETED_SUCCESSFULLY"},
pool_added = { http_code = 200, rc = 0, str = "POOL_ADDED_SUCCESSFULLY"},
pool_edited = { http_code = 200, rc = 0, str = "POOL_EDITED_SUCCESSFULLY"},
pool_member_bound = { http_code = 200, rc = 0, str = "POOL_MEMBER_BOUND_SUCCESSFULLY"},
-- infrastructure Dashboard
infrastructure_instance_added = { http_code = 200, rc = 0, str = "INFRASTRUCTURE_INSTANCE_ADDED"},
infrastructure_instance_edited = { http_code = 200, rc = 0, str = "INFRASTRUCTURE_INSTANCE_EDITED"},
infrastructure_instance_deleted = { http_code = 200, rc = 0, str = "INFRASTRUCTURE_INSTANCE_DELETED"},
},
err = {
not_found = { http_code = 404, rc = -1, str = "NOT_FOUND"},
invalid_interface = { http_code = 400, rc = -2, str = "INVALID_INTERFACE"},
not_granted = { http_code = 401, rc = -3, str = "NOT_GRANTED"},
invalid_host = { http_code = 400, rc = -4, str = "INVALID_HOST"},
invalid_args = { http_code = 400, rc = -5, str = "INVALID_ARGUMENTS"},
internal_error = { http_code = 500, rc = -6, str = "INTERNAL_ERROR"},
bad_format = { http_code = 400, rc = -7, str = "BAD_FORMAT"},
bad_content = { http_code = 400, rc = -8, str = "BAD_CONTENT"},
resolution_failed = { http_code = 400, rc = -9, str = "NAME_RESOLUTION_FAILED"},
snmp_device_already_added = { http_code = 409, rc = -10, str = "SNMP_DEVICE_ALREADY_ADDED"},
snmp_device_unreachable = { http_code = 400, rc = -11, str = "SNMP_DEVICE_UNREACHABLE"},
snmp_device_no_device_discovered = { http_code = 400, rc = -12, str = "NO_SNMP_DEVICE_DISCOVERED"},
add_pool_failed = { http_code = 409, rc = -13, str = "ADD_POOL_FAILED"},
edit_pool_failed = { http_code = 409, rc = -14, str = "EDIT_POOL_FAILED"},
delete_pool_failed = { http_code = 409, rc = -15, str = "DELETE_POOL_FAILED"},
pool_not_found = { http_code = 409, rc = -16, str = "POOL_NOT_FOUND"},
bind_pool_member_failed = { http_code = 409, rc = -17, str = "BIND_POOL_MEMBER_FAILED"},
bind_pool_member_already_bound = { http_code = 409, rc = -18, str = "BIND_POOL_MEMBER_ALREADY_BOUND"},
password_mismatch = { http_code = 400, rc = -19, str = "PASSWORD_MISMATCH"},
add_user_failed = { http_code = 409, rc = -20, str = "ADD_USER_FAILED"},
delete_user_failed = { http_code = 409, rc = -21, str = "DELETE_USER_FAILED"},
snmp_unknown_device = { http_code = 400, rc = -22, str = "SNMP_UNKNOWN_DEVICE"},
user_already_existing = { http_code = 409, rc = -23, str = "USER_ALREADY_EXISTING"},
user_does_not_exist = { http_code = 409, rc = -24, str = "USER_DOES_NOT_EXIST"},
edit_user_failed = { http_code = 400, rc = -25, str = "EDIT_USER_FAILED"},
snmp_device_interface_status_change_failed = { http_code = 400, rc = -26, str = "SNMP_DEVICE_INTERFACE_STATUS_CHANGE_FAILED"},
configuration_file_mismatch = { http_code = 400, rc = -27, str = "CONFIGURATION_FILE_MISMATCH" },
partial_import = { http_code = 409, rc = -28, str = "PARTIAL_IMPORT" },
-- Infrastructure Dashboard
add_infrastructure_instance_failed = { http_code = 409, rc = -29, str = "ADD_INFRASTRUCTURE_INSTANCE_FAILED"},
edit_infrastructure_instance_failed = { http_code = 409, rc = -30, str = "EDIT_INFRASTRUCTURE_INSTANCE_FAILED"},
delete_infrastructure_instance_failed = { http_code = 409, rc = -31, str = "DELETE_INFRASTRUCTURE_INSTANCE_FAILED"},
infrastructure_instance_not_found = { http_code = 404, rc = -32, str = "INFRASTRUCTURE_INSTANCE_NOT_FOUND"},
infrastructure_instance_empty_id = { http_code = 409, rc = -33, str = "INFRASTRUCTURE_INSTANCE_EMPTY_ID"},
infrastructure_instance_empty_alias = { http_code = 409, rc = -34, str = "INFRASTRUCTURE_INSTANCE_EMPTY_ALIAS"},
infrastructure_instance_empty_url = { http_code = 409, rc = -35, str = "INFRASTRUCTURE_INSTANCE_EMPTY_URL"},
infrastructure_instance_empty_token = { http_code = 409, rc = -36, str = "INFRASTRUCTURE_INSTANCE_EMPTY_TOKEN"},
infrastructure_instance_empty_rtt_threshold = { http_code = 409, rc = -37, str = "INFRASTRUCTURE_INSTANCE_EMPTY_RTT_THRESHOLD"},
infrastructure_instance_same_id = { http_code = 409, rc = -38, str = "INFRASTRUCTURE_INSTANCE_SAME_ID"},
infrastructure_instance_same_alias = { http_code = 409, rc = -39, str = "INFRASTRUCTURE_INSTANCE_SAME_ALIAS"},
infrastructure_instance_same_url = { http_code = 409, rc = -40, str = "INFRASTRUCTURE_INSTANCE_SAME_URL"},
infrastructure_instance_same_token = { http_code = 409, rc = -41, str = "INFRASTRUCTURE_INSTANCE_SAME_TOKEN"},
infrastructure_instance_already_existing = { http_code = 409, rc = -42, str = "INFRASTRUCTURE_INSTANCE_ALREADY_EXISTING"},
infrastructure_instance_check_failed = { http_code = 409, rc = -43, str = "INFRASTRUCTURE_INSTANCE_CHECK_FAILED"},
infrastructure_instance_check_not_found = { http_code = 409, rc = -44, str = "INFRASTRUCTURE_INSTANCE_CHECK_NOT_FOUND"},
infrastructure_instance_check_invalid_rsp = { http_code = 409, rc = -45, str = "INFRASTRUCTURE_INSTANCE_CHECK_INVALID_RESPONSE"},
infrastructure_instance_check_auth_failed = { http_code = 409, rc = -46, str = "INFRASTRUCTURE_INSTANCE_CHECK_AUTH_FAILED"},
infrastructure_instance_empty_bandwidth_threshold = { http_code = 409, rc = -47, str = "INFRASTRUCTURE_INSTANCE_EMPTY_BANDWIDTH_THRESHOLD"},
--Widgets
widgets_missing_transformation = { http_code = 409, rc = -48, str = "WIDGETS_MISSING_TRANSFORMATION"},
widgets_missing_datasources = { http_code = 409, rc = -49, str = "WIDGETS_MISSING_DATASOURCES"},
widgets_missing_datasource_type = { http_code = 409, rc = -50, str = "WIDGETS_MISSING_DATASOURCE_TYPE"},
widgets_unknown_datasource_type = { http_code = 409, rc = -51, str = "WIDGETS_UNKNOWN_DATASOURCE_TYPE"},
widgets_missing_datasource_params = { http_code = 409, rc = -52, str = "WIDGETS_MISSING_DATASOURCE_PARAMS"},
add_pool_failed_too_many_pools = { http_code = 409, rc = -53, str = "ADD_POOL_FAILED_TOO_MANY_POOLS"},
add_pool_failed_too_many_pools_enterprise = { http_code = 409, rc = -54, str = "ADD_POOL_FAILED_TOO_MANY_POOLS_ENTERPRISE"},
-- nEdge
dhcp_active_leases_not_nedge = { http_code = 409, rc = -55, str = "DHCP_ACTIVE_LEASES_NOT_NEDGE"},
dhcp_active_leases_not_routing_mode = { http_code = 409, rc = -56, str = "DHCP_ACTIVE_LEASES_NOT_ROUTING_MODE"},
},
}
}
function rest_utils.rc(ret_const, payload, additional_response_param, format)
local ret_code = ret_const.rc
local rc_str = ret_const.str -- String associated to the return code
local rc_str_hr -- String associated to the return code, human readable
-- Prepare the human readable string
rc_str_hr = i18n("rest_consts."..rc_str) or "Unknown"
local client_rsp = {
rc = ret_code,
rc_str = rc_str,
rc_str_hr = rc_str_hr,
rsp = payload or {}
}
if (additional_response_param ~= nil) then
client_rsp = table.merge(additional_response_param, client_rsp)
end
if (format) and (format == 'txt') then
return client_rsp
else
return json.encode(client_rsp)
end
end
function rest_utils.answer(ret_const, payload, extra_headers)
sendHTTPHeader('application/json', nil, extra_headers, ret_const.http_code)
print(rest_utils.rc(ret_const, payload))
end
function rest_utils.extended_answer(ret_const, payload, additional_response_param, extra_headers, format)
local rsp_format = 'application/json'
if (format) and (format == 'txt') then
rsp_format = 'text/plain'
end
sendHTTPHeader(rsp_format, nil, extra_headers, ret_const.http_code)
print(rest_utils.rc(ret_const, payload, additional_response_param, format))
end
function rest_utils.vanilla_payload_response(ret_const, payload, content_type, extra_headers)
if content_type == nil then
content_type = "text/plain"
end
if(extra_headers == nil) then extra_headers = {} end
sendHTTPHeader(content_type, nil, extra_headers, ret_const.http_code)
print(payload)
end
return rest_utils
|