## Summary * **What is the goal of this PR?** Use last connected network as default * **What changes are included?** - Refactor how an action type of Settings are handled - Add a new System Settings option → Network - Add the ability to forget a network in the Network Selection Screen - Add the ability to Refresh network list - Save the last connected network SSID - Use the last connection whenever network is needed (OPDS, Koreader sync, update etc) ## Additional Context * Add any other information that might be helpful for the reviewer (e.g., performance implications, potential risks, specific areas to focus on).   https://github.com/user-attachments/assets/95bf34a8-44ce-4279-8cd8-f78524ce745b --- ### AI Usage Did you use AI tools to help write this code? _** PARTIALLY: I wrote most of it but I also used Gemini as assist. --------- Co-authored-by: Eliz Kilic <elizk@google.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
#pragma once
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
struct WifiCredential {
|
|
std::string ssid;
|
|
std::string password; // Stored obfuscated in file
|
|
};
|
|
|
|
/**
|
|
* Singleton class for storing WiFi credentials on the SD card.
|
|
* Credentials are stored in /sd/.crosspoint/wifi.bin with basic
|
|
* XOR obfuscation to prevent casual reading (not cryptographically secure).
|
|
*/
|
|
class WifiCredentialStore {
|
|
private:
|
|
static WifiCredentialStore instance;
|
|
std::vector<WifiCredential> credentials;
|
|
std::string lastConnectedSsid;
|
|
|
|
static constexpr size_t MAX_NETWORKS = 8;
|
|
|
|
// Private constructor for singleton
|
|
WifiCredentialStore() = default;
|
|
|
|
// XOR obfuscation (symmetric - same for encode/decode)
|
|
void obfuscate(std::string& data) const;
|
|
|
|
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();
|
|
|
|
// Credential management
|
|
bool addCredential(const std::string& ssid, const std::string& password);
|
|
bool removeCredential(const std::string& ssid);
|
|
const WifiCredential* findCredential(const std::string& ssid) const;
|
|
|
|
// Get all stored credentials (for UI display)
|
|
const std::vector<WifiCredential>& getCredentials() const { return credentials; }
|
|
|
|
// Check if a network is saved
|
|
bool hasSavedCredential(const std::string& ssid) const;
|
|
|
|
// Last connected network
|
|
void setLastConnectedSsid(const std::string& ssid);
|
|
const std::string& getLastConnectedSsid() const;
|
|
void clearLastConnectedSsid();
|
|
|
|
// Clear all credentials
|
|
void clearAll();
|
|
};
|
|
|
|
// Helper macro to access credentials store
|
|
#define WIFI_STORE WifiCredentialStore::getInstance()
|