Add PoC support for BSSID

This commit is contained in:
Lorow
2026-01-10 22:05:26 +01:00
parent c6584af3b5
commit e205509fec
13 changed files with 139 additions and 209 deletions

View File

@@ -13,6 +13,11 @@ void from_json(const nlohmann::json& j, UpdateWifiPayload& payload)
payload.ssid = j.at("ssid").get<std::string>();
}
if (j.contains("bssid"))
{
payload.ssid = j.at("bssid").get<std::string>();
}
if (j.contains("password"))
{
payload.password = j.at("password").get<std::string>();

View File

@@ -10,17 +10,19 @@ struct WifiPayload : BasePayload
{
std::string name;
std::string ssid;
std::string bssid;
std::string password;
uint8_t channel;
uint8_t power;
};
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(WifiPayload, name, ssid, password, channel, power)
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(WifiPayload, name, ssid, bssid, password, channel, power)
struct UpdateWifiPayload : BasePayload
{
std::string name;
std::optional<std::string> ssid;
std::optional<std::string> bssid;
std::optional<std::string> password;
std::optional<uint8_t> channel;
std::optional<uint8_t> power;

View File

@@ -19,8 +19,14 @@ CommandResult setWiFiCommand(std::shared_ptr<DependencyRegistry> registry, const
return CommandResult::getErrorResult("Invalid payload: missing SSID");
}
auto bssid_len = payload.bssid.length();
if (bssid_len > 0 && bssid_len != 11)
{
return CommandResult::getErrorResult("BSSID is malformed");
}
std::shared_ptr<ProjectConfig> projectConfig = registry->resolve<ProjectConfig>(DependencyType::project_config);
projectConfig->setWifiConfig(payload.name, payload.ssid, payload.password, payload.channel, payload.power);
projectConfig->setWifiConfig(payload.name, payload.ssid, payload.bssid, payload.password, payload.channel, payload.power);
return CommandResult::getSuccessResult("Config updated");
}
@@ -53,12 +59,22 @@ CommandResult updateWiFiCommand(std::shared_ptr<DependencyRegistry> registry, co
return CommandResult::getErrorResult("Invalid payload - missing network name");
}
if (payload.bssid.has_value())
{
auto bssid_len = payload.bssid.value().length();
if (bssid_len > 0 && bssid_len != 11)
{
return CommandResult::getErrorResult("BSSID is malformed");
}
}
auto projectConfig = registry->resolve<ProjectConfig>(DependencyType::project_config);
auto storedNetworks = projectConfig->getWifiConfigs();
if (const auto networkToUpdate = std::ranges::find_if(storedNetworks, [&](auto& network) { return network.name == payload.name; });
networkToUpdate != storedNetworks.end())
{
projectConfig->setWifiConfig(payload.name, payload.ssid.has_value() ? payload.ssid.value() : networkToUpdate->ssid,
payload.bssid.has_value() ? payload.bssid.value() : networkToUpdate->bssid,
payload.password.has_value() ? payload.password.value() : networkToUpdate->password,
payload.channel.has_value() ? payload.channel.value() : networkToUpdate->channel,
payload.power.has_value() ? payload.power.value() : networkToUpdate->power);