chore: Refactor stores to use PersistableStore CRTP template (#2464)
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
#pragma once
|
||||
#include <ArduinoJson.h>
|
||||
#include <PersistableStore.h>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -7,21 +10,14 @@ struct WifiCredential {
|
||||
std::string password; // Plaintext in memory; obfuscated with hardware key on disk
|
||||
};
|
||||
|
||||
class WifiCredentialStore;
|
||||
namespace JsonSettingsIO {
|
||||
bool saveWifi(const WifiCredentialStore& store, const char* path);
|
||||
bool loadWifi(WifiCredentialStore& store, const char* json, bool* needsResave);
|
||||
} // namespace JsonSettingsIO
|
||||
|
||||
/**
|
||||
* Singleton class for storing WiFi credentials on the SD card.
|
||||
* Passwords are XOR-obfuscated with the device's unique hardware MAC address
|
||||
* and base64-encoded before writing to JSON (not cryptographically secure,
|
||||
* but prevents casual reading and ties credentials to the specific device).
|
||||
*/
|
||||
class WifiCredentialStore {
|
||||
class WifiCredentialStore : public PersistableStore<WifiCredentialStore> {
|
||||
private:
|
||||
static WifiCredentialStore instance;
|
||||
std::vector<WifiCredential> credentials;
|
||||
std::string lastConnectedSsid;
|
||||
|
||||
@@ -30,22 +26,12 @@ class WifiCredentialStore {
|
||||
// Private constructor for singleton
|
||||
WifiCredentialStore() = default;
|
||||
|
||||
bool loadFromBinaryFile();
|
||||
|
||||
friend bool JsonSettingsIO::saveWifi(const WifiCredentialStore&, const char*);
|
||||
friend bool JsonSettingsIO::loadWifi(WifiCredentialStore&, const char*, bool*);
|
||||
friend class PersistableStore<WifiCredentialStore>;
|
||||
|
||||
public:
|
||||
// Delete copy constructor and assignment
|
||||
WifiCredentialStore(const WifiCredentialStore&) = delete;
|
||||
WifiCredentialStore& operator=(const WifiCredentialStore&) = delete;
|
||||
|
||||
// Get singleton instance
|
||||
static WifiCredentialStore& getInstance() { return instance; }
|
||||
|
||||
// Save/load from SD card
|
||||
bool saveToFile() const;
|
||||
bool loadFromFile();
|
||||
static const char* getFilePath() { return "/.crosspoint/wifi.json"; }
|
||||
void toJson(JsonDocument& doc) const;
|
||||
bool fromJson(JsonVariantConst doc);
|
||||
|
||||
// Credential management
|
||||
bool addCredential(const std::string& ssid, const std::string& password);
|
||||
|
||||
Reference in New Issue
Block a user