mirror of
				https://github.com/Telecominfraproject/wlan-cloud-ucentralgw.git
				synced 2025-11-04 04:37:46 +00:00 
			
		
		
		
	Compare commits
	
		
			14 Commits
		
	
	
		
			v4.0.0-RC1
			...
			add_enroll
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					3b7a24ea30 | ||
| 
						 | 
					438309714f | ||
| 
						 | 
					a9130eeb75 | ||
| 
						 | 
					33068fca9e | ||
| 
						 | 
					d329151f6c | ||
| 
						 | 
					ec846006bb | ||
| 
						 | 
					242261de0a | ||
| 
						 | 
					31a4edead5 | ||
| 
						 | 
					f7b697f219 | ||
| 
						 | 
					e020da75fc | ||
| 
						 | 
					89702f56e0 | ||
| 
						 | 
					0ac97442c0 | ||
| 
						 | 
					e38b4c8a13 | ||
| 
						 | 
					9c5bbee834 | 
@@ -1,5 +1,5 @@
 | 
				
			|||||||
cmake_minimum_required(VERSION 3.13)
 | 
					cmake_minimum_required(VERSION 3.13)
 | 
				
			||||||
project(owgw VERSION 4.0.0)
 | 
					project(owgw VERSION 4.1.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set(CMAKE_CXX_STANDARD 20)
 | 
					set(CMAKE_CXX_STANDARD 20)
 | 
				
			||||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
 | 
					set(CMAKE_CXX_STANDARD_REQUIRED True)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								PROTOCOL.md
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								PROTOCOL.md
									
									
									
									
									
								
							@@ -880,6 +880,32 @@ The device should answer:
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Controller wants the device to perform re-enrollment
 | 
				
			||||||
 | 
					Controller sends this command to trigger re-enrollment, i.e. update of operational certificate. Extreme care must be taken.
 | 
				
			||||||
 | 
					```json
 | 
				
			||||||
 | 
					{    "jsonrpc" : "2.0" , 
 | 
				
			||||||
 | 
					     "method" : "reenroll" , 
 | 
				
			||||||
 | 
					     "params" : {
 | 
				
			||||||
 | 
					        "serial" : <serial number>,
 | 
				
			||||||
 | 
					        "when" : Optional - <UTC time when to apply this config, 0 mean immediate, this is a suggestion>
 | 
				
			||||||
 | 
					     },
 | 
				
			||||||
 | 
					     "id" : <some number>
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The device should answer:
 | 
				
			||||||
 | 
					```json
 | 
				
			||||||
 | 
					{     "jsonrpc" : "2.0" , 
 | 
				
			||||||
 | 
					      "result" : {
 | 
				
			||||||
 | 
					          "serial" : <serial number> ,
 | 
				
			||||||
 | 
					          "status" : {
 | 
				
			||||||
 | 
					            "error" : <0 or the value of $? from the shell running the command, 255 signifies a timeout>,
 | 
				
			||||||
 | 
					            "txt" : <text describing the error or success>
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					  "id" : <same number as request>
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Controller wants the device to switch to another controller
 | 
					#### Controller wants the device to switch to another controller
 | 
				
			||||||
Controller sends this when the device should change the controller it connects to without looking up a new redirector.
 | 
					Controller sends this when the device should change the controller it connects to without looking up a new redirector.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1576,6 +1576,15 @@ components:
 | 
				
			|||||||
          format: base64
 | 
					          format: base64
 | 
				
			||||||
          description: This is a base64 encoded string of the certificate bundle (the current bundle .tar.gz file from the PKI portal)
 | 
					          description: This is a base64 encoded string of the certificate bundle (the current bundle .tar.gz file from the PKI portal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ReenrollRequest:
 | 
				
			||||||
 | 
					      type: object
 | 
				
			||||||
 | 
					      properties:
 | 
				
			||||||
 | 
					        serialNumber:
 | 
				
			||||||
 | 
					          type: string
 | 
				
			||||||
 | 
					        when:
 | 
				
			||||||
 | 
					          type: integer
 | 
				
			||||||
 | 
					          format: int64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    PowerCycleRequest:
 | 
					    PowerCycleRequest:
 | 
				
			||||||
      type: object
 | 
					      type: object
 | 
				
			||||||
      properties:
 | 
					      properties:
 | 
				
			||||||
@@ -3056,6 +3065,32 @@ paths:
 | 
				
			|||||||
        404:
 | 
					        404:
 | 
				
			||||||
          $ref: '#/components/responses/NotFound'
 | 
					          $ref: '#/components/responses/NotFound'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /device/{serialNumber}/reenroll:
 | 
				
			||||||
 | 
					    post:
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					        - Commands
 | 
				
			||||||
 | 
					      summary: Reenroll operational certificate for the device.
 | 
				
			||||||
 | 
					      operationId: reenrollCertificate
 | 
				
			||||||
 | 
					      parameters:
 | 
				
			||||||
 | 
					        - in: path
 | 
				
			||||||
 | 
					          name: serialNumber
 | 
				
			||||||
 | 
					          schema:
 | 
				
			||||||
 | 
					            type: string
 | 
				
			||||||
 | 
					          required: true
 | 
				
			||||||
 | 
					      requestBody:
 | 
				
			||||||
 | 
					        description: Reenroll operational certificate for the device
 | 
				
			||||||
 | 
					        content:
 | 
				
			||||||
 | 
					          application/json:
 | 
				
			||||||
 | 
					            schema:
 | 
				
			||||||
 | 
					              $ref: '#/components/schemas/ReenrollRequest'
 | 
				
			||||||
 | 
					      responses:
 | 
				
			||||||
 | 
					        200:
 | 
				
			||||||
 | 
					          $ref: '#/components/responses/Success'
 | 
				
			||||||
 | 
					        403:
 | 
				
			||||||
 | 
					          $ref: '#/components/responses/Unauthorized'
 | 
				
			||||||
 | 
					        404:
 | 
				
			||||||
 | 
					          $ref: '#/components/responses/NotFound'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /device/{serialNumber}/powercycle:
 | 
					  /device/{serialNumber}/powercycle:
 | 
				
			||||||
    post:
 | 
					    post:
 | 
				
			||||||
      tags:
 | 
					      tags:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -213,6 +213,7 @@ namespace OpenWifi {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			State_.certificateExpiryDate = PeerCert.expiresOn().timestamp().epochTime();
 | 
								State_.certificateExpiryDate = PeerCert.expiresOn().timestamp().epochTime();
 | 
				
			||||||
 | 
								State_.certificateIssuerName = PeerCert.issuerName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			poco_trace(Logger_,
 | 
								poco_trace(Logger_,
 | 
				
			||||||
					   fmt::format("TLS-CONNECTION({}): Session={} CN={} Completed. (t={})", CId_,
 | 
										   fmt::format("TLS-CONNECTION({}): Session={} CN={} Completed. (t={})", CId_,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -170,6 +170,7 @@ namespace OpenWifi {
 | 
				
			|||||||
		{APCommands::Commands::powercycle, false, true, &RESTAPI_device_commandHandler::PowerCycle, 60000ms},
 | 
							{APCommands::Commands::powercycle, false, true, &RESTAPI_device_commandHandler::PowerCycle, 60000ms},
 | 
				
			||||||
		{APCommands::Commands::fixedconfig, false, true, &RESTAPI_device_commandHandler::FixedConfig, 120000ms},
 | 
							{APCommands::Commands::fixedconfig, false, true, &RESTAPI_device_commandHandler::FixedConfig, 120000ms},
 | 
				
			||||||
		{APCommands::Commands::cablediagnostics, false, true, &RESTAPI_device_commandHandler::CableDiagnostics, 120000ms},
 | 
							{APCommands::Commands::cablediagnostics, false, true, &RESTAPI_device_commandHandler::CableDiagnostics, 120000ms},
 | 
				
			||||||
 | 
							{APCommands::Commands::reenroll, false, true, &RESTAPI_device_commandHandler::ReEnroll, 120000ms},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1651,4 +1652,45 @@ namespace OpenWifi {
 | 
				
			|||||||
										   *ParsedBody_, *Request, *Response, timeout, nullptr, this,
 | 
															   *ParsedBody_, *Request, *Response, timeout, nullptr, this,
 | 
				
			||||||
										   Logger_);
 | 
															   Logger_);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void RESTAPI_device_commandHandler::ReEnroll(
 | 
				
			||||||
 | 
							const std::string &CMD_UUID, uint64_t CMD_RPC,
 | 
				
			||||||
 | 
							[[maybe_unused]] std::chrono::milliseconds timeout,
 | 
				
			||||||
 | 
							[[maybe_unused]] const GWObjects::DeviceRestrictions &Restrictions) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(UserInfo_.userinfo.userRole != SecurityObjects::ROOT &&
 | 
				
			||||||
 | 
								UserInfo_.userinfo.userRole != SecurityObjects::ADMIN) {
 | 
				
			||||||
 | 
								CallCanceled("REENROLL", CMD_UUID, CMD_RPC, RESTAPI::Errors::ACCESS_DENIED);
 | 
				
			||||||
 | 
								return UnAuthorized(RESTAPI::Errors::ACCESS_DENIED);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							poco_debug(Logger_, fmt::format("REENROLL({},{}): TID={} user={} serial={}", CMD_UUID,
 | 
				
			||||||
 | 
															CMD_RPC, TransactionId_, Requester(), SerialNumber_));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(IsDeviceSimulated(SerialNumber_)) {
 | 
				
			||||||
 | 
								CallCanceled("REENROLL", CMD_UUID, CMD_RPC, RESTAPI::Errors::SimulatedDeviceNotSupported);
 | 
				
			||||||
 | 
								return BadRequest(RESTAPI::Errors::SimulatedDeviceNotSupported);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							GWObjects::ReEnroll PR;
 | 
				
			||||||
 | 
							if(!PR.from_json(ParsedBody_)) {
 | 
				
			||||||
 | 
								return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							GWObjects::CommandDetails Cmd;
 | 
				
			||||||
 | 
							Cmd.SerialNumber = SerialNumber_;
 | 
				
			||||||
 | 
							Cmd.SubmittedBy = Requester();
 | 
				
			||||||
 | 
							Cmd.UUID = CMD_UUID;
 | 
				
			||||||
 | 
							Cmd.Command = uCentralProtocol::REENROLL;
 | 
				
			||||||
 | 
							std::ostringstream os;
 | 
				
			||||||
 | 
							ParsedBody_->stringify(os);
 | 
				
			||||||
 | 
							Cmd.Details = os.str();
 | 
				
			||||||
 | 
							Cmd.RunAt = PR.when;
 | 
				
			||||||
 | 
							Cmd.ErrorCode = 0;
 | 
				
			||||||
 | 
							Cmd.WaitingForFile = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return RESTAPI_RPC::WaitForCommand(CMD_RPC, APCommands::Commands::reenroll, false, Cmd,
 | 
				
			||||||
 | 
															   *ParsedBody_, *Request, *Response, timeout, nullptr, this,
 | 
				
			||||||
 | 
															   Logger_);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
} // namespace OpenWifi
 | 
					} // namespace OpenWifi
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,6 +74,8 @@ namespace OpenWifi {
 | 
				
			|||||||
					  const GWObjects::DeviceRestrictions &R);
 | 
										  const GWObjects::DeviceRestrictions &R);
 | 
				
			||||||
		void CableDiagnostics(const std::string &UUID, uint64_t RPC, std::chrono::milliseconds timeout,
 | 
							void CableDiagnostics(const std::string &UUID, uint64_t RPC, std::chrono::milliseconds timeout,
 | 
				
			||||||
					  const GWObjects::DeviceRestrictions &R);
 | 
										  const GWObjects::DeviceRestrictions &R);
 | 
				
			||||||
 | 
							void ReEnroll(const std::string &UUID, uint64_t RPC, std::chrono::milliseconds timeout,
 | 
				
			||||||
 | 
										  const GWObjects::DeviceRestrictions &R);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		static auto PathName() {
 | 
							static auto PathName() {
 | 
				
			||||||
			return std::list<std::string>{"/api/v1/device/{serialNumber}/{command}"};
 | 
								return std::list<std::string>{"/api/v1/device/{serialNumber}/{command}"};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -297,6 +297,7 @@ namespace OpenWifi::GWObjects {
 | 
				
			|||||||
		field_to_json(Obj, "connectionCompletionTime", connectionCompletionTime);
 | 
							field_to_json(Obj, "connectionCompletionTime", connectionCompletionTime);
 | 
				
			||||||
		field_to_json(Obj, "totalConnectionTime", Utils::Now() - started);
 | 
							field_to_json(Obj, "totalConnectionTime", Utils::Now() - started);
 | 
				
			||||||
		field_to_json(Obj, "certificateExpiryDate", certificateExpiryDate);
 | 
							field_to_json(Obj, "certificateExpiryDate", certificateExpiryDate);
 | 
				
			||||||
 | 
							field_to_json(Obj, "certificateIssuerName", certificateIssuerName);
 | 
				
			||||||
		field_to_json(Obj, "connectReason", connectReason);
 | 
							field_to_json(Obj, "connectReason", connectReason);
 | 
				
			||||||
		field_to_json(Obj, "uptime", uptime);
 | 
							field_to_json(Obj, "uptime", uptime);
 | 
				
			||||||
        field_to_json(Obj, "compatible", Compatible);
 | 
					        field_to_json(Obj, "compatible", Compatible);
 | 
				
			||||||
@@ -358,6 +359,7 @@ namespace OpenWifi::GWObjects {
 | 
				
			|||||||
            field_from_json(Obj, "connectionCompletionTime", connectionCompletionTime);
 | 
					            field_from_json(Obj, "connectionCompletionTime", connectionCompletionTime);
 | 
				
			||||||
            field_from_json(Obj, "totalConnectionTime", totalConnectionTime);
 | 
					            field_from_json(Obj, "totalConnectionTime", totalConnectionTime);
 | 
				
			||||||
            field_from_json(Obj, "certificateExpiryDate", certificateExpiryDate);
 | 
					            field_from_json(Obj, "certificateExpiryDate", certificateExpiryDate);
 | 
				
			||||||
 | 
								field_from_json(Obj, "certificateIssuerName", certificateIssuerName);
 | 
				
			||||||
            field_from_json(Obj, "connectReason", connectReason);
 | 
					            field_from_json(Obj, "connectReason", connectReason);
 | 
				
			||||||
            field_from_json(Obj, "uptime", uptime);
 | 
					            field_from_json(Obj, "uptime", uptime);
 | 
				
			||||||
            field_from_json(Obj, "hasRADIUSSessions", hasRADIUSSessions );
 | 
					            field_from_json(Obj, "hasRADIUSSessions", hasRADIUSSessions );
 | 
				
			||||||
@@ -819,4 +821,14 @@ namespace OpenWifi::GWObjects {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						bool ReEnroll::from_json(const Poco::JSON::Object::Ptr &Obj) {
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								field_from_json(Obj, "serial", serialNumber);
 | 
				
			||||||
 | 
								field_from_json(Obj, "when", when);
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
							} catch (const Poco::Exception &E) {
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
} // namespace OpenWifi::GWObjects
 | 
					} // namespace OpenWifi::GWObjects
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,6 +42,7 @@ namespace OpenWifi::GWObjects {
 | 
				
			|||||||
		uint64_t sessionId = 0;
 | 
							uint64_t sessionId = 0;
 | 
				
			||||||
		double connectionCompletionTime = 0.0;
 | 
							double connectionCompletionTime = 0.0;
 | 
				
			||||||
		std::uint64_t certificateExpiryDate = 0;
 | 
							std::uint64_t certificateExpiryDate = 0;
 | 
				
			||||||
 | 
							std::string certificateIssuerName;
 | 
				
			||||||
		std::uint64_t hasRADIUSSessions = 0;
 | 
							std::uint64_t hasRADIUSSessions = 0;
 | 
				
			||||||
		bool hasGPS = false;
 | 
							bool hasGPS = false;
 | 
				
			||||||
		std::uint64_t sanity=0;
 | 
							std::uint64_t sanity=0;
 | 
				
			||||||
@@ -545,6 +546,12 @@ namespace OpenWifi::GWObjects {
 | 
				
			|||||||
		std::uint64_t 	when;
 | 
							std::uint64_t 	when;
 | 
				
			||||||
		std::vector<std::string> ports;
 | 
							std::vector<std::string> ports;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							bool from_json(const Poco::JSON::Object::Ptr &Obj);
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						struct ReEnroll {
 | 
				
			||||||
 | 
							std::string 	serialNumber;
 | 
				
			||||||
 | 
							std::uint64_t 	when;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool from_json(const Poco::JSON::Object::Ptr &Obj);
 | 
							bool from_json(const Poco::JSON::Object::Ptr &Obj);
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
} // namespace OpenWifi::GWObjects
 | 
					} // namespace OpenWifi::GWObjects
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3952,8 +3952,10 @@ static std::string DefaultAPSchema = R"foo(
 | 
				
			|||||||
                            "inactive-deauth",
 | 
					                            "inactive-deauth",
 | 
				
			||||||
                            "key-mismatch",
 | 
					                            "key-mismatch",
 | 
				
			||||||
                            "beacon-report",
 | 
					                            "beacon-report",
 | 
				
			||||||
                            "radar-detected"
 | 
					                            "radar-detected",
 | 
				
			||||||
                        ]
 | 
					                            "ft-finish",
 | 
				
			||||||
 | 
					                            "sta-authorized"
 | 
				
			||||||
 | 
								 ]
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -7920,7 +7922,9 @@ static std::string DefaultSWITCHSchema = R"foo(
 | 
				
			|||||||
                            "inactive-deauth",
 | 
					                            "inactive-deauth",
 | 
				
			||||||
                            "key-mismatch",
 | 
					                            "key-mismatch",
 | 
				
			||||||
                            "beacon-report",
 | 
					                            "beacon-report",
 | 
				
			||||||
                            "radar-detected"
 | 
					                            "radar-detected",
 | 
				
			||||||
 | 
					                            "ft-finish",
 | 
				
			||||||
 | 
					                            "sta-authorized"
 | 
				
			||||||
                        ]
 | 
					                        ]
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -583,6 +583,7 @@ namespace OpenWifi::RESTAPI::Protocol {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	static const char *FIXEDCONFIG = "fixedconfig";
 | 
						static const char *FIXEDCONFIG = "fixedconfig";
 | 
				
			||||||
	static const char *CABLEDIAGNOSTICS = "cable-diagnostics";
 | 
						static const char *CABLEDIAGNOSTICS = "cable-diagnostics";
 | 
				
			||||||
 | 
						static const char *REENROLL = "reenroll";
 | 
				
			||||||
} // namespace OpenWifi::RESTAPI::Protocol
 | 
					} // namespace OpenWifi::RESTAPI::Protocol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace OpenWifi::uCentralProtocol {
 | 
					namespace OpenWifi::uCentralProtocol {
 | 
				
			||||||
@@ -698,6 +699,8 @@ namespace OpenWifi::uCentralProtocol {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	static const char *FIXEDCONFIG = "fixedconfig";
 | 
						static const char *FIXEDCONFIG = "fixedconfig";
 | 
				
			||||||
	static const char *CABLEDIAGNOSTICS = "cable-diagnostics";
 | 
						static const char *CABLEDIAGNOSTICS = "cable-diagnostics";
 | 
				
			||||||
 | 
						static const char *REENROLL = "reenroll";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace OpenWifi::uCentralProtocol
 | 
					} // namespace OpenWifi::uCentralProtocol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -797,6 +800,7 @@ namespace OpenWifi::APCommands {
 | 
				
			|||||||
		powercycle,
 | 
							powercycle,
 | 
				
			||||||
		fixedconfig,
 | 
							fixedconfig,
 | 
				
			||||||
		cablediagnostics,
 | 
							cablediagnostics,
 | 
				
			||||||
 | 
							reenroll,
 | 
				
			||||||
		unknown
 | 
							unknown
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -812,7 +816,8 @@ namespace OpenWifi::APCommands {
 | 
				
			|||||||
		RESTAPI::Protocol::PING,		 RESTAPI::Protocol::SCRIPT,
 | 
							RESTAPI::Protocol::PING,		 RESTAPI::Protocol::SCRIPT,
 | 
				
			||||||
		RESTAPI::Protocol::RRM,		 	 RESTAPI::Protocol::CERTUPDATE,
 | 
							RESTAPI::Protocol::RRM,		 	 RESTAPI::Protocol::CERTUPDATE,
 | 
				
			||||||
		RESTAPI::Protocol::TRANSFER,	 RESTAPI::Protocol::POWERCYCLE,
 | 
							RESTAPI::Protocol::TRANSFER,	 RESTAPI::Protocol::POWERCYCLE,
 | 
				
			||||||
		RESTAPI::Protocol::FIXEDCONFIG,  RESTAPI::Protocol::CABLEDIAGNOSTICS
 | 
							RESTAPI::Protocol::FIXEDCONFIG,  RESTAPI::Protocol::CABLEDIAGNOSTICS,
 | 
				
			||||||
 | 
							RESTAPI::Protocol::REENROLL
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	inline const char *to_string(Commands Cmd) { return uCentralAPCommands[(uint8_t)Cmd]; }
 | 
						inline const char *to_string(Commands Cmd) { return uCentralAPCommands[(uint8_t)Cmd]; }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@
 | 
				
			|||||||
#include "nlohmann/json.hpp"
 | 
					#include "nlohmann/json.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "Poco/NObserver.h"
 | 
					#include "Poco/NObserver.h"
 | 
				
			||||||
 | 
					#include <Poco/Net/Context.h>
 | 
				
			||||||
#include "Poco/Net/SocketNotification.h"
 | 
					#include "Poco/Net/SocketNotification.h"
 | 
				
			||||||
#include "Poco/Net/NetException.h"
 | 
					#include "Poco/Net/NetException.h"
 | 
				
			||||||
#include "Poco/Net/WebSocketImpl.h"
 | 
					#include "Poco/Net/WebSocketImpl.h"
 | 
				
			||||||
@@ -71,6 +72,7 @@ namespace OpenWifi {
 | 
				
			|||||||
				const auto &RootCas =
 | 
									const auto &RootCas =
 | 
				
			||||||
					MicroServiceConfigPath("ucentral.websocket.host.0.rootca", "");
 | 
										MicroServiceConfigPath("ucentral.websocket.host.0.rootca", "");
 | 
				
			||||||
				const auto &Cas = MicroServiceConfigPath("ucentral.websocket.host.0.cas", "");
 | 
									const auto &Cas = MicroServiceConfigPath("ucentral.websocket.host.0.cas", "");
 | 
				
			||||||
 | 
									const auto &ClientCasFile = MicroServiceConfigPath("ucentral.websocket.host.0.clientcas", "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				Poco::Net::Context::Params P;
 | 
									Poco::Net::Context::Params P;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -86,6 +88,7 @@ namespace OpenWifi {
 | 
				
			|||||||
				Poco::Crypto::X509Certificate Cert(CertFileName);
 | 
									Poco::Crypto::X509Certificate Cert(CertFileName);
 | 
				
			||||||
				Poco::Crypto::X509Certificate Root(RootCaFileName);
 | 
									Poco::Crypto::X509Certificate Root(RootCaFileName);
 | 
				
			||||||
				Poco::Crypto::X509Certificate Issuing(IssuerFileName);
 | 
									Poco::Crypto::X509Certificate Issuing(IssuerFileName);
 | 
				
			||||||
 | 
					                std::vector<Poco::Crypto::X509Certificate> ClientCasCerts;
 | 
				
			||||||
				Poco::Crypto::RSAKey Key("", KeyFileName, KeyPassword);
 | 
									Poco::Crypto::RSAKey Key("", KeyFileName, KeyPassword);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				DeviceSecureContext->useCertificate(Cert);
 | 
									DeviceSecureContext->useCertificate(Cert);
 | 
				
			||||||
@@ -93,7 +96,11 @@ namespace OpenWifi {
 | 
				
			|||||||
				DeviceSecureContext->addCertificateAuthority(Root);
 | 
									DeviceSecureContext->addCertificateAuthority(Root);
 | 
				
			||||||
				DeviceSecureContext->addChainCertificate(Issuing);
 | 
									DeviceSecureContext->addChainCertificate(Issuing);
 | 
				
			||||||
				DeviceSecureContext->addCertificateAuthority(Issuing);
 | 
									DeviceSecureContext->addCertificateAuthority(Issuing);
 | 
				
			||||||
				DeviceSecureContext->addCertificateAuthority(Root);
 | 
					                ClientCasCerts = Poco::Net::X509Certificate::readPEM(ClientCasFile);
 | 
				
			||||||
 | 
					                for (const auto &cert : ClientCasCerts) {
 | 
				
			||||||
 | 
					                    DeviceSecureContext->addChainCertificate(cert);
 | 
				
			||||||
 | 
					                    DeviceSecureContext->addCertificateAuthority(cert);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
				DeviceSecureContext->enableSessionCache(true);
 | 
									DeviceSecureContext->enableSessionCache(true);
 | 
				
			||||||
				DeviceSecureContext->setSessionCacheSize(0);
 | 
									DeviceSecureContext->setSessionCacheSize(0);
 | 
				
			||||||
				DeviceSecureContext->setSessionTimeout(120);
 | 
									DeviceSecureContext->setSessionTimeout(120);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user