// // Created by stephane bourque on 2021-10-27. // #ifndef OWSUB_RESTAPI_SUBOBJECTS_H #define OWSUB_RESTAPI_SUBOBJECTS_H #include #include "Poco/JSON/Object.h" namespace OpenWifi::SubObjects { struct HomeDeviceMode { bool enableLEDS = true; std::string type; // bridge, manual, automatic std::string subnet; std::string subnetMask; std::string startIP; std::string endIP; uint64_t created = 0 ; uint64_t modified = 0 ; std::string subnetV6; int subnetMaskV6=0; std::string startIPV6; std::string endIPV6; std::string leaseTime; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct IPReservation { std::string nickname; std::string ipAddress; std::string macAddress; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct IPReservationList { std::string id; std::vector reservations; uint64_t created = 0 ; uint64_t modified = 0 ; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct DnsConfiguration { bool ISP=false; bool custom=false; std::string primary; std::string secondary; std::string primaryV6; std::string secondaryV6; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct InternetConnection { std::string type; // automatic, pppoe, manual std::string username; std::string password; std::string ipAddress; std::string subnetMask; std::string defaultGateway; bool sendHostname = true; std::string primaryDns; std::string secondaryDns; uint64_t created=0; uint64_t modified=0; bool ipV6Support=false; std::string ipAddressV6; int subnetMaskV6=0; std::string defaultGatewayV6; std::string primaryDnsV6; std::string secondaryDnsV6; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct WifiNetwork { std::string type; // main, guest std::string name; std::string password; std::string encryption; std::vector bands; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct WifiNetworkList { std::vector wifiNetworks; uint64_t created=0; uint64_t modified=0; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct AccessTime { std::string day; std::vector rangeList; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct AccessTimes { std::vector schedule; uint64_t created=0; uint64_t modified=0; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct SubscriberDevice { std::string name; std::string description; std::string macAddress; std::string manufacturer; uint64_t firstContact=0; uint64_t lastContact=0; std::string group; std::string icon; bool suspended=false; std::string ip; std::vector schedule; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct SubscriberDeviceList { std::vector devices; uint64_t created=0; uint64_t modified=0; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct Association { std::string name; std::string ssid; std::string macAddress; int rssi=0; int power=0; std::string ipv4; std::string ipv6; uint64_t tx=0; uint64_t rx=0; std::string manufacturer; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct AssociationList { std::vector associations; uint64_t created=0; uint64_t modified=0; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct Client { std::string macAddress; std::string speed; std::string mode; std::string ipv4; std::string ipv6; uint64_t tx=0; uint64_t rx=0; std::string manufacturer; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct ClientList { std::vector clients; uint64_t created=0; uint64_t modified=0; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct Location { std::string buildingName; std::vector addressLines; std::string city; std::string state; std::string postal; std::string country; std::vector phones; std::vector mobiles; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct RadioHE { bool multipleBSSID = false; bool ema = false; uint64_t bssColor = 64; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct RadioRates { uint64_t beacon = 6000; uint64_t multicast = 24000; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct RadioInformation { std::string band; uint64_t bandwidth; uint64_t channel = 0 ; std::string country; std::string channelMode{"HE"}; uint64_t channelWidth = 80; std::string requireMode; uint64_t txpower=0; bool legacyRates = false; uint64_t beaconInterval = 100; uint64_t dtimPeriod = 2; uint64_t maximumClients = 64; RadioRates rates; RadioHE he; bool allowDFS=false; std::string mimo; std::vector rawInfo; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct AccessPoint { std::string id; std::string macAddress; std::string serialNumber; std::string name; std::string deviceType; SubscriberDeviceList subscriberDevices; IPReservationList ipReservations; Location address; WifiNetworkList wifiNetworks; InternetConnection internetConnection; HomeDeviceMode deviceMode; DnsConfiguration dnsConfiguration; std::vector radios; bool automaticUpgrade = true; std::string configurationUUID; std::string currentFirmware; uint64_t currentFirmwareDate; std::string latestFirmware; uint64_t latestFirmwareDate; bool newFirmwareAvailable; std::string latestFirmwareURI; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct AccessPointList { std::vector list; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct SubscriberInfo { std::string id; std::string userId; std::string firstName; std::string initials; std::string lastName; std::string phoneNumber; std::string secondaryEmail; AccessPointList accessPoints; Location serviceAddress; Location billingAddress; uint64_t created = 0; uint64_t modified = 0; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct StatsEntry { uint64_t timestamp=0; uint64_t tx=0; uint64_t rx=0; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; struct StatsBlock { uint64_t modified=0; std::vector external, internal; void to_json(Poco::JSON::Object &Obj) const; bool from_json(const Poco::JSON::Object::Ptr &Obj); }; } #endif //OWSUB_RESTAPI_SUBOBJECTS_H