File: rest_utils.lua

package info (click to toggle)
ntopng 5.2.1%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 121,832 kB
  • sloc: javascript: 143,431; cpp: 71,175; ansic: 11,108; sh: 4,687; makefile: 911; python: 587; sql: 512; pascal: 234; perl: 118; ruby: 52; exp: 4
file content (151 lines) | stat: -rw-r--r-- 9,992 bytes parent folder | download
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