mirror of
				https://github.com/Telecominfraproject/wlan-cloud-ucentralsec.git
				synced 2025-10-31 02:37:56 +00:00 
			
		
		
		
	Signed-off-by: stephb9959 <stephane.bourque@gmail.com>
This commit is contained in:
		| @@ -565,12 +565,6 @@ components: | |||||||
|             - $ref: '#/components/schemas/StringList' |             - $ref: '#/components/schemas/StringList' | ||||||
|             - $ref: '#/components/schemas/TagValuePairList' |             - $ref: '#/components/schemas/TagValuePairList' | ||||||
|  |  | ||||||
|     SystemCommandResults: |  | ||||||
|       type: object |  | ||||||
|       oneOf: |  | ||||||
|         - $ref: '#/components/schemas/StringList' |  | ||||||
|         - $ref: '#/components/schemas/TagValuePairList' |  | ||||||
|  |  | ||||||
|     SystemInfoResults: |     SystemInfoResults: | ||||||
|       type: object |       type: object | ||||||
|       properties: |       properties: | ||||||
| @@ -599,6 +593,33 @@ components: | |||||||
|                 type: integer |                 type: integer | ||||||
|                 format: int64 |                 format: int64 | ||||||
|  |  | ||||||
|  |     SystemResources: | ||||||
|  |       type: object | ||||||
|  |       properties: | ||||||
|  |         numberOfFileDescriptors: | ||||||
|  |           type: integer | ||||||
|  |           format: int64 | ||||||
|  |         currRealMem: | ||||||
|  |           type: integer | ||||||
|  |           format: int64 | ||||||
|  |         peakRealMem: | ||||||
|  |           type: integer | ||||||
|  |           format: int64 | ||||||
|  |         currVirtMem: | ||||||
|  |           type: integer | ||||||
|  |           format: int64 | ||||||
|  |         peakVirtMem: | ||||||
|  |           type: integer | ||||||
|  |           format: int64 | ||||||
|  |  | ||||||
|  |     SystemCommandResults: | ||||||
|  |       type: object | ||||||
|  |       oneOf: | ||||||
|  |         - $ref: '#/components/schemas/SystemResources' | ||||||
|  |         - $ref: '#/components/schemas/SystemInfoResults' | ||||||
|  |         - $ref: '#/components/schemas/StringList' | ||||||
|  |         - $ref: '#/components/schemas/TagValuePairList' | ||||||
|  |  | ||||||
|     ProfileAction: |     ProfileAction: | ||||||
|       type: object |       type: object | ||||||
|       properties: |       properties: | ||||||
| @@ -1967,16 +1988,12 @@ paths: | |||||||
|             type: string |             type: string | ||||||
|             enum: |             enum: | ||||||
|               - info |               - info | ||||||
|  |               - extraConfiguration | ||||||
|  |               - resources | ||||||
|           required: true |           required: true | ||||||
|  |  | ||||||
|       responses: |       responses: | ||||||
|         200: |         200: | ||||||
|           description: Successful command execution |           $ref: '#/components/schemas/SystemCommandResults' | ||||||
|           content: |  | ||||||
|             application/json: |  | ||||||
|               schema: |  | ||||||
|                 oneOf: |  | ||||||
|                   - $ref: '#/components/schemas/SystemInfoResults' |  | ||||||
|         403: |         403: | ||||||
|           $ref: '#/components/responses/Unauthorized' |           $ref: '#/components/responses/Unauthorized' | ||||||
|         404: |         404: | ||||||
|   | |||||||
| @@ -37,6 +37,10 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|         "uuid": { |         "uuid": { | ||||||
|             "type": "integer" |             "type": "integer" | ||||||
|         }, |         }, | ||||||
|  |         "public_ip_lookup": { | ||||||
|  |             "type": "string", | ||||||
|  |             "format": "uc-fqdn" | ||||||
|  |         }, | ||||||
|         "unit": { |         "unit": { | ||||||
|             "$ref": "#/$defs/unit" |             "$ref": "#/$defs/unit" | ||||||
|         }, |         }, | ||||||
| @@ -634,26 +638,6 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                     "type": "string", |                     "type": "string", | ||||||
|                     "format": "uc-timeout", |                     "format": "uc-timeout", | ||||||
|                     "default": "6h" |                     "default": "6h" | ||||||
|                 }, |  | ||||||
|                 "relay-server": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "format": "ipv4", |  | ||||||
|                     "example": "192.168.2.1" |  | ||||||
|                 }, |  | ||||||
|                 "circuit-id-format": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "example": [ |  | ||||||
|                         "\\{Interface\\}:\\{VLAN-Id\\}:\\{SSID\\}:\\{Model\\}:\\{Name\\}:\\{AP-MAC\\}:\\{Location\\}", |  | ||||||
|                         "\\{AP-MAC\\};\\{SSID\\};\\{Crypto\\}", |  | ||||||
|                         "\\{Name\\} \\{ESSID\\}" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "remote-id-format": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "example": [ |  | ||||||
|                         "\\{Client-MAC-hex\\} \\{SSID\\}", |  | ||||||
|                         "\\{AP-MAC-hex\\} \\{SSID\\}" |  | ||||||
|                     ] |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
| @@ -1232,6 +1216,32 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                         "secret" |                         "secret" | ||||||
|                     ] |                     ] | ||||||
|                 }, |                 }, | ||||||
|  |                 "secondary": { | ||||||
|  |                     "type": "object", | ||||||
|  |                     "properties": { | ||||||
|  |                         "host": { | ||||||
|  |                             "type": "string", | ||||||
|  |                             "format": "uc-host", | ||||||
|  |                             "examples": [ | ||||||
|  |                                 "192.168.1.10" | ||||||
|  |                             ] | ||||||
|  |                         }, | ||||||
|  |                         "port": { | ||||||
|  |                             "type": "integer", | ||||||
|  |                             "maximum": 65535, | ||||||
|  |                             "minimum": 1024, | ||||||
|  |                             "examples": [ | ||||||
|  |                                 1812 | ||||||
|  |                             ] | ||||||
|  |                         }, | ||||||
|  |                         "secret": { | ||||||
|  |                             "type": "string", | ||||||
|  |                             "examples": [ | ||||||
|  |                                 "secret" | ||||||
|  |                             ] | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|                 "request-attribute": { |                 "request-attribute": { | ||||||
|                     "type": "array", |                     "type": "array", | ||||||
|                     "items": { |                     "items": { | ||||||
| @@ -1309,6 +1319,25 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                                         "value": "Example Operator" |                                         "value": "Example Operator" | ||||||
|                                     } |                                     } | ||||||
|                                 ] |                                 ] | ||||||
|  |                             }, | ||||||
|  |                             { | ||||||
|  |                                 "type": "object", | ||||||
|  |                                 "properties": { | ||||||
|  |                                     "id": { | ||||||
|  |                                         "type": "integer", | ||||||
|  |                                         "maximum": 255, | ||||||
|  |                                         "minimum": 1 | ||||||
|  |                                     }, | ||||||
|  |                                     "hex-value": { | ||||||
|  |                                         "type": "string" | ||||||
|  |                                     } | ||||||
|  |                                 }, | ||||||
|  |                                 "examples": [ | ||||||
|  |                                     { | ||||||
|  |                                         "id": 32, | ||||||
|  |                                         "value": "0a0b0c0d" | ||||||
|  |                                     } | ||||||
|  |                                 ] | ||||||
|                             } |                             } | ||||||
|                         ] |                         ] | ||||||
|                     } |                     } | ||||||
| @@ -1658,6 +1687,236 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "service.captive.click": { | ||||||
|  |             "type": "object", | ||||||
|  |             "properties": { | ||||||
|  |                 "auth-mode": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "const": "click-to-continue" | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "service.captive.radius": { | ||||||
|  |             "type": "object", | ||||||
|  |             "properties": { | ||||||
|  |                 "auth-mode": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "const": "radius" | ||||||
|  |                 }, | ||||||
|  |                 "auth-server": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "format": "uc-host", | ||||||
|  |                     "examples": [ | ||||||
|  |                         "192.168.1.10" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "auth-port": { | ||||||
|  |                     "type": "integer", | ||||||
|  |                     "maximum": 65535, | ||||||
|  |                     "minimum": 1024, | ||||||
|  |                     "default": 1812 | ||||||
|  |                 }, | ||||||
|  |                 "auth-secret": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "examples": [ | ||||||
|  |                         "secret" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "acct-server": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "format": "uc-host", | ||||||
|  |                     "examples": [ | ||||||
|  |                         "192.168.1.10" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "acct-port": { | ||||||
|  |                     "type": "integer", | ||||||
|  |                     "maximum": 65535, | ||||||
|  |                     "minimum": 1024, | ||||||
|  |                     "default": 1812 | ||||||
|  |                 }, | ||||||
|  |                 "acct-secret": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "examples": [ | ||||||
|  |                         "secret" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "acct-interval": { | ||||||
|  |                     "type": "integer", | ||||||
|  |                     "default": 600 | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "service.captive.credentials": { | ||||||
|  |             "type": "object", | ||||||
|  |             "properties": { | ||||||
|  |                 "auth-mode": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "const": "credentials" | ||||||
|  |                 }, | ||||||
|  |                 "credentials": { | ||||||
|  |                     "type": "array", | ||||||
|  |                     "items": { | ||||||
|  |                         "type": "object", | ||||||
|  |                         "properties": { | ||||||
|  |                             "username": { | ||||||
|  |                                 "type": "string" | ||||||
|  |                             }, | ||||||
|  |                             "password": { | ||||||
|  |                                 "type": "string" | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "service.captive.uam": { | ||||||
|  |             "type": "object", | ||||||
|  |             "properties": { | ||||||
|  |                 "auth-mode": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "const": "uam" | ||||||
|  |                 }, | ||||||
|  |                 "uam-port": { | ||||||
|  |                     "type": "integer", | ||||||
|  |                     "maximum": 65535, | ||||||
|  |                     "minimum": 1024, | ||||||
|  |                     "default": 3990 | ||||||
|  |                 }, | ||||||
|  |                 "uam-secret": { | ||||||
|  |                     "type": "string" | ||||||
|  |                 }, | ||||||
|  |                 "uam-server": { | ||||||
|  |                     "type": "string" | ||||||
|  |                 }, | ||||||
|  |                 "nasid": { | ||||||
|  |                     "type": "string" | ||||||
|  |                 }, | ||||||
|  |                 "nasmac": { | ||||||
|  |                     "type": "string" | ||||||
|  |                 }, | ||||||
|  |                 "auth-server": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "format": "uc-host", | ||||||
|  |                     "examples": [ | ||||||
|  |                         "192.168.1.10" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "auth-port": { | ||||||
|  |                     "type": "integer", | ||||||
|  |                     "maximum": 65535, | ||||||
|  |                     "minimum": 1024, | ||||||
|  |                     "default": 1812 | ||||||
|  |                 }, | ||||||
|  |                 "auth-secret": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "examples": [ | ||||||
|  |                         "secret" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "acct-server": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "format": "uc-host", | ||||||
|  |                     "examples": [ | ||||||
|  |                         "192.168.1.10" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "acct-port": { | ||||||
|  |                     "type": "integer", | ||||||
|  |                     "maximum": 65535, | ||||||
|  |                     "minimum": 1024, | ||||||
|  |                     "default": 1812 | ||||||
|  |                 }, | ||||||
|  |                 "acct-secret": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "examples": [ | ||||||
|  |                         "secret" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "acct-interval": { | ||||||
|  |                     "type": "integer", | ||||||
|  |                     "default": 600 | ||||||
|  |                 }, | ||||||
|  |                 "ssid": { | ||||||
|  |                     "type": "string" | ||||||
|  |                 }, | ||||||
|  |                 "mac-format": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "enum": [ | ||||||
|  |                         "aabbccddeeff", | ||||||
|  |                         "aa-bb-cc-dd-ee-ff", | ||||||
|  |                         "aa:bb:cc:dd:ee:ff", | ||||||
|  |                         "AABBCCDDEEFF", | ||||||
|  |                         "AA:BB:CC:DD:EE:FF", | ||||||
|  |                         "AA-BB-CC-DD-EE-FF" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "final-redirect-url": { | ||||||
|  |                     "type": "string", | ||||||
|  |                     "enum": [ | ||||||
|  |                         "default", | ||||||
|  |                         "uam" | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "mac-auth": { | ||||||
|  |                     "type": "boolean", | ||||||
|  |                     "default": "default" | ||||||
|  |                 }, | ||||||
|  |                 "radius-gw-proxy": { | ||||||
|  |                     "type": "boolean", | ||||||
|  |                     "default": false | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         "service.captive": { | ||||||
|  |             "allOf": [ | ||||||
|  |                 { | ||||||
|  |                     "oneOf": [ | ||||||
|  |                         { | ||||||
|  |                             "$ref": "#/$defs/service.captive.click" | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             "$ref": "#/$defs/service.captive.radius" | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             "$ref": "#/$defs/service.captive.credentials" | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             "$ref": "#/$defs/service.captive.uam" | ||||||
|  |                         } | ||||||
|  |                     ] | ||||||
|  |                 }, | ||||||
|  |                 { | ||||||
|  |                     "type": "object", | ||||||
|  |                     "properties": { | ||||||
|  |                         "walled-garden-fqdn": { | ||||||
|  |                             "type": "array", | ||||||
|  |                             "items": { | ||||||
|  |                                 "type": "string" | ||||||
|  |                             } | ||||||
|  |                         }, | ||||||
|  |                         "walled-garden-ipaddr": { | ||||||
|  |                             "type": "array", | ||||||
|  |                             "items": { | ||||||
|  |                                 "type": "string", | ||||||
|  |                                 "format": "uc-ip" | ||||||
|  |                             } | ||||||
|  |                         }, | ||||||
|  |                         "web-root": { | ||||||
|  |                             "type": "string", | ||||||
|  |                             "format": "uc-base64" | ||||||
|  |                         }, | ||||||
|  |                         "idle-timeout": { | ||||||
|  |                             "type": "integer", | ||||||
|  |                             "default": 600 | ||||||
|  |                         }, | ||||||
|  |                         "session-timeout": { | ||||||
|  |                             "type": "integer" | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             ] | ||||||
|  |         }, | ||||||
|         "interface.ssid": { |         "interface.ssid": { | ||||||
|             "type": "object", |             "type": "object", | ||||||
|             "properties": { |             "properties": { | ||||||
| @@ -1710,6 +1969,10 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                 "isolate-clients": { |                 "isolate-clients": { | ||||||
|                     "type": "boolean" |                     "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|  |                 "strict-forwarding": { | ||||||
|  |                     "type": "boolean", | ||||||
|  |                     "default": false | ||||||
|  |                 }, | ||||||
|                 "power-save": { |                 "power-save": { | ||||||
|                     "type": "boolean" |                     "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
| @@ -1778,7 +2041,14 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                     "$ref": "#/$defs/interface.ssid.rate-limit" |                     "$ref": "#/$defs/interface.ssid.rate-limit" | ||||||
|                 }, |                 }, | ||||||
|                 "roaming": { |                 "roaming": { | ||||||
|                     "$ref": "#/$defs/interface.ssid.roaming" |                     "anyOf": [ | ||||||
|  |                         { | ||||||
|  |                             "$ref": "#/$defs/interface.ssid.roaming" | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             "type": "boolean" | ||||||
|  |                         } | ||||||
|  |                     ] | ||||||
|                 }, |                 }, | ||||||
|                 "radius": { |                 "radius": { | ||||||
|                     "$ref": "#/$defs/interface.ssid.radius" |                     "$ref": "#/$defs/interface.ssid.radius" | ||||||
| @@ -1795,6 +2065,9 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                 "access-control-list": { |                 "access-control-list": { | ||||||
|                     "$ref": "#/$defs/interface.ssid.acl" |                     "$ref": "#/$defs/interface.ssid.acl" | ||||||
|                 }, |                 }, | ||||||
|  |                 "captive": { | ||||||
|  |                     "$ref": "#/$defs/service.captive" | ||||||
|  |                 }, | ||||||
|                 "hostapd-bss-raw": { |                 "hostapd-bss-raw": { | ||||||
|                     "type": "array", |                     "type": "array", | ||||||
|                     "items": { |                     "items": { | ||||||
| @@ -2084,6 +2357,10 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                     "examples": [ |                     "examples": [ | ||||||
|                         "01234567890123456789012345678901" |                         "01234567890123456789012345678901" | ||||||
|                     ] |                     ] | ||||||
|  |                 }, | ||||||
|  |                 "mutual-tls": { | ||||||
|  |                     "type": "boolean", | ||||||
|  |                     "default": true | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
| @@ -2693,236 +2970,6 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "service.captive.click": { |  | ||||||
|             "type": "object", |  | ||||||
|             "properties": { |  | ||||||
|                 "auth-mode": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "const": "click-to-continue" |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         }, |  | ||||||
|         "service.captive.radius": { |  | ||||||
|             "type": "object", |  | ||||||
|             "properties": { |  | ||||||
|                 "auth-mode": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "const": "radius" |  | ||||||
|                 }, |  | ||||||
|                 "auth-server": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "format": "uc-host", |  | ||||||
|                     "examples": [ |  | ||||||
|                         "192.168.1.10" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "auth-port": { |  | ||||||
|                     "type": "integer", |  | ||||||
|                     "maximum": 65535, |  | ||||||
|                     "minimum": 1024, |  | ||||||
|                     "default": 1812 |  | ||||||
|                 }, |  | ||||||
|                 "auth-secret": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "examples": [ |  | ||||||
|                         "secret" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "acct-server": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "format": "uc-host", |  | ||||||
|                     "examples": [ |  | ||||||
|                         "192.168.1.10" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "acct-port": { |  | ||||||
|                     "type": "integer", |  | ||||||
|                     "maximum": 65535, |  | ||||||
|                     "minimum": 1024, |  | ||||||
|                     "default": 1812 |  | ||||||
|                 }, |  | ||||||
|                 "acct-secret": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "examples": [ |  | ||||||
|                         "secret" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "acct-interval": { |  | ||||||
|                     "type": "integer", |  | ||||||
|                     "default": 600 |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         }, |  | ||||||
|         "service.captive.credentials": { |  | ||||||
|             "type": "object", |  | ||||||
|             "properties": { |  | ||||||
|                 "auth-mode": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "const": "credentials" |  | ||||||
|                 }, |  | ||||||
|                 "credentials": { |  | ||||||
|                     "type": "array", |  | ||||||
|                     "items": { |  | ||||||
|                         "type": "object", |  | ||||||
|                         "properties": { |  | ||||||
|                             "username": { |  | ||||||
|                                 "type": "string" |  | ||||||
|                             }, |  | ||||||
|                             "password": { |  | ||||||
|                                 "type": "string" |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         }, |  | ||||||
|         "service.captive.uam": { |  | ||||||
|             "type": "object", |  | ||||||
|             "properties": { |  | ||||||
|                 "auth-mode": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "const": "uam" |  | ||||||
|                 }, |  | ||||||
|                 "uam-port": { |  | ||||||
|                     "type": "integer", |  | ||||||
|                     "maximum": 65535, |  | ||||||
|                     "minimum": 1024, |  | ||||||
|                     "default": 3990 |  | ||||||
|                 }, |  | ||||||
|                 "uam-secret": { |  | ||||||
|                     "type": "string" |  | ||||||
|                 }, |  | ||||||
|                 "uam-server": { |  | ||||||
|                     "type": "string" |  | ||||||
|                 }, |  | ||||||
|                 "nasid": { |  | ||||||
|                     "type": "string" |  | ||||||
|                 }, |  | ||||||
|                 "nasmac": { |  | ||||||
|                     "type": "string" |  | ||||||
|                 }, |  | ||||||
|                 "auth-server": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "format": "uc-host", |  | ||||||
|                     "examples": [ |  | ||||||
|                         "192.168.1.10" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "auth-port": { |  | ||||||
|                     "type": "integer", |  | ||||||
|                     "maximum": 65535, |  | ||||||
|                     "minimum": 1024, |  | ||||||
|                     "default": 1812 |  | ||||||
|                 }, |  | ||||||
|                 "auth-secret": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "examples": [ |  | ||||||
|                         "secret" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "acct-server": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "format": "uc-host", |  | ||||||
|                     "examples": [ |  | ||||||
|                         "192.168.1.10" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "acct-port": { |  | ||||||
|                     "type": "integer", |  | ||||||
|                     "maximum": 65535, |  | ||||||
|                     "minimum": 1024, |  | ||||||
|                     "default": 1812 |  | ||||||
|                 }, |  | ||||||
|                 "acct-secret": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "examples": [ |  | ||||||
|                         "secret" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "acct-interval": { |  | ||||||
|                     "type": "integer", |  | ||||||
|                     "default": 600 |  | ||||||
|                 }, |  | ||||||
|                 "ssid": { |  | ||||||
|                     "type": "string" |  | ||||||
|                 }, |  | ||||||
|                 "mac-format": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "enum": [ |  | ||||||
|                         "aabbccddeeff", |  | ||||||
|                         "aa-bb-cc-dd-ee-ff", |  | ||||||
|                         "aa:bb:cc:dd:ee:ff", |  | ||||||
|                         "AABBCCDDEEFF", |  | ||||||
|                         "AA:BB:CC:DD:EE:FF", |  | ||||||
|                         "AA-BB-CC-DD-EE-FF" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "final-redirect-url": { |  | ||||||
|                     "type": "string", |  | ||||||
|                     "enum": [ |  | ||||||
|                         "default", |  | ||||||
|                         "uam" |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 "mac-auth": { |  | ||||||
|                     "type": "boolean", |  | ||||||
|                     "default": "default" |  | ||||||
|                 }, |  | ||||||
|                 "radius-gw-proxy": { |  | ||||||
|                     "type": "boolean", |  | ||||||
|                     "default": false |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         }, |  | ||||||
|         "service.captive": { |  | ||||||
|             "allOf": [ |  | ||||||
|                 { |  | ||||||
|                     "oneOf": [ |  | ||||||
|                         { |  | ||||||
|                             "$ref": "#/$defs/service.captive.click" |  | ||||||
|                         }, |  | ||||||
|                         { |  | ||||||
|                             "$ref": "#/$defs/service.captive.radius" |  | ||||||
|                         }, |  | ||||||
|                         { |  | ||||||
|                             "$ref": "#/$defs/service.captive.credentials" |  | ||||||
|                         }, |  | ||||||
|                         { |  | ||||||
|                             "$ref": "#/$defs/service.captive.uam" |  | ||||||
|                         } |  | ||||||
|                     ] |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "type": "object", |  | ||||||
|                     "properties": { |  | ||||||
|                         "walled-garden-fqdn": { |  | ||||||
|                             "type": "array", |  | ||||||
|                             "items": { |  | ||||||
|                                 "type": "string" |  | ||||||
|                             } |  | ||||||
|                         }, |  | ||||||
|                         "walled-garden-ipaddr": { |  | ||||||
|                             "type": "array", |  | ||||||
|                             "items": { |  | ||||||
|                                 "type": "string", |  | ||||||
|                                 "format": "uc-ip" |  | ||||||
|                             } |  | ||||||
|                         }, |  | ||||||
|                         "web-root": { |  | ||||||
|                             "type": "string", |  | ||||||
|                             "format": "uc-base64" |  | ||||||
|                         }, |  | ||||||
|                         "idle-timeout": { |  | ||||||
|                             "type": "integer", |  | ||||||
|                             "default": 600 |  | ||||||
|                         }, |  | ||||||
|                         "session-timeout": { |  | ||||||
|                             "type": "integer" |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         "service.gps": { |         "service.gps": { | ||||||
|             "type": "object", |             "type": "object", | ||||||
|             "properties": { |             "properties": { | ||||||
| @@ -2941,6 +2988,32 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "service.dhcp-relay": { | ||||||
|  |             "type": "object", | ||||||
|  |             "properties": { | ||||||
|  |                 "select-ports": { | ||||||
|  |                     "type": "array", | ||||||
|  |                     "items": { | ||||||
|  |                         "type": "string" | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |                 "vlans": { | ||||||
|  |                     "type": "array", | ||||||
|  |                     "items": { | ||||||
|  |                         "type": "object", | ||||||
|  |                         "properties": { | ||||||
|  |                             "vlan": { | ||||||
|  |                                 "type": "number" | ||||||
|  |                             }, | ||||||
|  |                             "relay-server": { | ||||||
|  |                                 "type": "string", | ||||||
|  |                                 "format": "uc-ip" | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|         "service": { |         "service": { | ||||||
|             "type": "object", |             "type": "object", | ||||||
|             "properties": { |             "properties": { | ||||||
| @@ -3000,6 +3073,9 @@ static std::string DefaultUCentralSchema = R"foo( | |||||||
|                 }, |                 }, | ||||||
|                 "gps": { |                 "gps": { | ||||||
|                     "$ref": "#/$defs/service.gps" |                     "$ref": "#/$defs/service.gps" | ||||||
|  |                 }, | ||||||
|  |                 "dhcp-relay": { | ||||||
|  |                     "$ref": "#/$defs/service.dhcp-relay" | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|   | |||||||
| @@ -24,50 +24,63 @@ namespace OpenWifi { | |||||||
| 							 Server, TransactionId, Internal) {} | 							 Server, TransactionId, Internal) {} | ||||||
| 		static auto PathName() { return std::list<std::string>{"/api/v1/system"}; } | 		static auto PathName() { return std::list<std::string>{"/api/v1/system"}; } | ||||||
|  |  | ||||||
| 		inline void DoGet() { | 		inline void DoGet() final { | ||||||
| 			std::string Arg; | 			std::string Arg; | ||||||
| 			if (HasParameter("command", Arg) && Arg == "info") { | 			if (HasParameter("command", Arg)) { | ||||||
| 				Poco::JSON::Object Answer; | 				if (Arg == "info") { | ||||||
| 				Answer.set(RESTAPI::Protocol::VERSION, MicroServiceVersion()); | 					Poco::JSON::Object Answer; | ||||||
| 				Answer.set(RESTAPI::Protocol::UPTIME, MicroServiceUptimeTotalSeconds()); | 					Answer.set(RESTAPI::Protocol::VERSION, MicroServiceVersion()); | ||||||
| 				Answer.set(RESTAPI::Protocol::START, MicroServiceStartTimeEpochTime()); | 					Answer.set(RESTAPI::Protocol::UPTIME, MicroServiceUptimeTotalSeconds()); | ||||||
| 				Answer.set(RESTAPI::Protocol::OS, Poco::Environment::osName()); | 					Answer.set(RESTAPI::Protocol::START, MicroServiceStartTimeEpochTime()); | ||||||
| 				Answer.set(RESTAPI::Protocol::PROCESSORS, Poco::Environment::processorCount()); | 					Answer.set(RESTAPI::Protocol::OS, Poco::Environment::osName()); | ||||||
| 				Answer.set(RESTAPI::Protocol::HOSTNAME, Poco::Environment::nodeName()); | 					Answer.set(RESTAPI::Protocol::PROCESSORS, Poco::Environment::processorCount()); | ||||||
| 				Answer.set(RESTAPI::Protocol::UI, MicroServiceGetUIURI()); | 					Answer.set(RESTAPI::Protocol::HOSTNAME, Poco::Environment::nodeName()); | ||||||
|  | 					Answer.set(RESTAPI::Protocol::UI, MicroServiceGetUIURI()); | ||||||
|  |  | ||||||
| 				Poco::JSON::Array Certificates; | 					Poco::JSON::Array Certificates; | ||||||
| 				auto SubSystems = MicroServiceGetFullSubSystems(); | 					auto SubSystems = MicroServiceGetFullSubSystems(); | ||||||
| 				std::set<std::string> CertNames; | 					std::set<std::string> CertNames; | ||||||
|  |  | ||||||
| 				for (const auto &i : SubSystems) { | 					for (const auto &i : SubSystems) { | ||||||
| 					auto Hosts = i->HostSize(); | 						auto Hosts = i->HostSize(); | ||||||
| 					for (uint64_t j = 0; j < Hosts; ++j) { | 						for (uint64_t j = 0; j < Hosts; ++j) { | ||||||
| 						auto CertFileName = i->Host(j).CertFile(); | 							auto CertFileName = i->Host(j).CertFile(); | ||||||
| 						if (!CertFileName.empty()) { | 							if (!CertFileName.empty()) { | ||||||
| 							Poco::File F1(CertFileName); | 								Poco::File F1(CertFileName); | ||||||
| 							if (F1.exists()) { | 								if (F1.exists()) { | ||||||
| 								auto InsertResult = CertNames.insert(CertFileName); | 									auto InsertResult = CertNames.insert(CertFileName); | ||||||
| 								if (InsertResult.second) { | 									if (InsertResult.second) { | ||||||
| 									Poco::JSON::Object Inner; | 										Poco::JSON::Object Inner; | ||||||
| 									Poco::Path F(CertFileName); | 										Poco::Path F(CertFileName); | ||||||
| 									Inner.set("filename", F.getFileName()); | 										Inner.set("filename", F.getFileName()); | ||||||
| 									Poco::Crypto::X509Certificate C(CertFileName); | 										Poco::Crypto::X509Certificate C(CertFileName); | ||||||
| 									auto ExpiresOn = C.expiresOn(); | 										auto ExpiresOn = C.expiresOn(); | ||||||
| 									Inner.set("expiresOn", ExpiresOn.timestamp().epochTime()); | 										Inner.set("expiresOn", ExpiresOn.timestamp().epochTime()); | ||||||
| 									Certificates.add(Inner); | 										Certificates.add(Inner); | ||||||
|  | 									} | ||||||
| 								} | 								} | ||||||
| 							} | 							} | ||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
|  | 					Answer.set("certificates", Certificates); | ||||||
|  | 					return ReturnObject(Answer); | ||||||
|  | 				} | ||||||
|  | 				if (Arg == "extraConfiguration") { | ||||||
|  | 					Poco::JSON::Object Answer; | ||||||
|  | 					MicroServiceGetExtraConfiguration(Answer); | ||||||
|  | 					return ReturnObject(Answer); | ||||||
|  | 				} | ||||||
|  | 				if (Arg == "resources") { | ||||||
|  | 					Poco::JSON::Object Answer; | ||||||
|  | 					Answer.set("numberOfFileDescriptors", Utils::get_open_fds()); | ||||||
|  | 					std::uint64_t currRealMem, peakRealMem, currVirtMem, peakVirtMem; | ||||||
|  | 					Utils::getMemory(currRealMem, peakRealMem, currVirtMem, peakVirtMem); | ||||||
|  | 					Answer.set("currRealMem", currRealMem); | ||||||
|  | 					Answer.set("peakRealMem", peakRealMem); | ||||||
|  | 					Answer.set("currVirtMem", currVirtMem); | ||||||
|  | 					Answer.set("peakVirtMem", peakVirtMem); | ||||||
|  | 					return ReturnObject(Answer); | ||||||
| 				} | 				} | ||||||
| 				Answer.set("certificates", Certificates); |  | ||||||
| 				return ReturnObject(Answer); |  | ||||||
| 			} |  | ||||||
| 			if (GetBoolParameter("extraConfiguration")) { |  | ||||||
| 				Poco::JSON::Object Answer; |  | ||||||
| 				MicroServiceGetExtraConfiguration(Answer); |  | ||||||
| 				return ReturnObject(Answer); |  | ||||||
| 			} | 			} | ||||||
| 			BadRequest(RESTAPI::Errors::InvalidCommand); | 			BadRequest(RESTAPI::Errors::InvalidCommand); | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -401,6 +401,9 @@ namespace OpenWifi::RESTAPI::Errors { | |||||||
| 		1171, "Command not supported on simulated device." | 		1171, "Command not supported on simulated device." | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	static const struct msg DefFirmwareNameExists { 1172, "Firmware name already exists." }; | ||||||
|  |  | ||||||
|     static const struct msg SimulationDoesNotExist { |     static const struct msg SimulationDoesNotExist { | ||||||
|         7000, "Simulation Instance ID does not exist." |         7000, "Simulation Instance ID does not exist." | ||||||
|     }; |     }; | ||||||
|   | |||||||
| @@ -13,6 +13,8 @@ | |||||||
| #include <string> | #include <string> | ||||||
| #include <thread> | #include <thread> | ||||||
|  |  | ||||||
|  | #include <dirent.h> | ||||||
|  |  | ||||||
| #include "Poco/Base64Decoder.h" | #include "Poco/Base64Decoder.h" | ||||||
| #include "Poco/Base64Encoder.h" | #include "Poco/Base64Encoder.h" | ||||||
| #include "Poco/File.h" | #include "Poco/File.h" | ||||||
| @@ -181,4 +183,67 @@ namespace OpenWifi::Utils { | |||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	static inline std::uint64_t GetValue(FILE *file) { | ||||||
|  | 		unsigned long v=0; | ||||||
|  | 		char factor[32]; | ||||||
|  | 		if(fscanf(file, " %lu %31s", &v, factor)==2) { | ||||||
|  | 			switch (factor[0]) { | ||||||
|  | 			case 'k': | ||||||
|  | 				return v * 1000; | ||||||
|  | 			case 'M': | ||||||
|  | 				return v * 1000000; | ||||||
|  | 			case 'G': | ||||||
|  | 				return v * 1000000000; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return v; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	inline bool getMemory( | ||||||
|  | 		std::uint64_t &currRealMem, std::uint64_t &peakRealMem, | ||||||
|  | 		std::uint64_t &currVirtMem, std::uint64_t &peakVirtMem) { | ||||||
|  |  | ||||||
|  | 		// stores each word in status file | ||||||
|  | 		char buffer[1024] = ""; | ||||||
|  |  | ||||||
|  | 		currRealMem = peakRealMem = currVirtMem = peakVirtMem = 0; | ||||||
|  |  | ||||||
|  | 		// linux file contains this-process info | ||||||
|  | 		FILE * file = std::fopen("/proc/self/status", "r"); | ||||||
|  | 		if (file == nullptr) { | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// read the entire file, recording mems in kB | ||||||
|  | 		while (fscanf(file, " %1023s", buffer) == 1) { | ||||||
|  |  | ||||||
|  | 			if (strcmp(buffer, "VmRSS:") == 0) { | ||||||
|  | 				currRealMem= GetValue(file); | ||||||
|  | 			} else if (strcmp(buffer, "VmHWM:") == 0) { | ||||||
|  | 				peakRealMem= GetValue(file); | ||||||
|  | 			} else if (strcmp(buffer, "VmSize:") == 0) { | ||||||
|  | 				currVirtMem= GetValue(file); | ||||||
|  | 			} else if (strcmp(buffer, "VmPeak:") == 0) { | ||||||
|  | 				peakVirtMem= GetValue(file); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		fclose(file); | ||||||
|  |  | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	inline int get_open_fds() { | ||||||
|  | 		DIR *dp = opendir("/proc/self/fd"); | ||||||
|  | 		struct dirent *de; | ||||||
|  | 		int count = -3; // '.', '..', dp | ||||||
|  |  | ||||||
|  | 		if (dp == nullptr) | ||||||
|  | 			return -1; | ||||||
|  | 		while ((de = readdir(dp)) != nullptr) | ||||||
|  | 			count++; | ||||||
|  | 		(void)closedir(dp); | ||||||
|  |  | ||||||
|  | 		return count; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| } // namespace OpenWifi::Utils | } // namespace OpenWifi::Utils | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 stephb9959
					stephb9959