GCC Code Coverage Report | |||||||||||||||||||||
|
|||||||||||||||||||||
Line | Branch | Exec | Source |
1 |
// |
||
2 |
// Created by Nils Bokermann on 27.11.19. |
||
3 |
// |
||
4 |
|||
5 |
#include "HTMLHandler.h" |
||
6 |
#include <Arduino.h> |
||
7 |
|||
8 |
#ifdef UNIT_TEST |
||
9 |
#include <arduino/noniso.h> |
||
10 |
#endif |
||
11 |
|||
12 |
|||
13 |
/* TODO: Externalize dependency to ESP8266WiFi (GetEncryptionType) */ |
||
14 |
enum wl_enc_type { /* Values map to 802.11 encryption suites... */ |
||
15 |
ENC_TYPE_WEP = 5, |
||
16 |
ENC_TYPE_TKIP = 2, |
||
17 |
ENC_TYPE_CCMP = 4, |
||
18 |
/* ... except these two, 7 and 8 are reserved in 802.11-2007 */ |
||
19 |
ENC_TYPE_NONE = 7, |
||
20 |
ENC_TYPE_AUTO = 8 |
||
21 |
}; |
||
22 |
|||
23 |
5 |
static string GetEncryptionType(unsigned char thisType) { |
|
24 |
5 |
string output; |
|
25 |
// read the encryption type and print out the name: |
||
26 |
✗✗✓✗ ✗✗ |
5 |
switch (thisType) { |
27 |
case ENC_TYPE_WEP: |
||
28 |
output = "WEP"; |
||
29 |
break; |
||
30 |
case ENC_TYPE_TKIP: |
||
31 |
output = "WPA"; |
||
32 |
break; |
||
33 |
case ENC_TYPE_CCMP: |
||
34 |
✓✗ | 5 |
output = "WPA2"; |
35 |
5 |
break; |
|
36 |
case ENC_TYPE_NONE: |
||
37 |
output = "None"; |
||
38 |
break; |
||
39 |
case ENC_TYPE_AUTO: |
||
40 |
output = "Auto"; |
||
41 |
break; |
||
42 |
default: |
||
43 |
output = "Unknown"; |
||
44 |
} |
||
45 |
5 |
return output; |
|
46 |
} |
||
47 |
|||
48 |
|||
49 |
2 |
HTMLHandler::HTMLHandler(FilePersistence *persistence, Logging *log) : options("<option value=''>No WiFiNetwork</option>"), |
|
50 |
noNetwork(0), |
||
51 |
persistence(persistence), |
||
52 |
✓✗✓✗ |
2 |
_log(log) { |
53 |
✓✗ | 2 |
spiffsStarted = persistence->begin(); |
54 |
✓✗ | 2 |
_log->trace("SPIFFS started: '%i'", spiffsStarted); |
55 |
2 |
} |
|
56 |
|||
57 |
HTMLHandler::~HTMLHandler() { |
||
58 |
persistence->end(); |
||
59 |
} |
||
60 |
|||
61 |
1 |
string HTMLHandler::getMainPage() { |
|
62 |
1 |
const char *path = "/MainPage.html"; |
|
63 |
1 |
return getStaticPage(path); |
|
64 |
} |
||
65 |
|||
66 |
1 |
string HTMLHandler::getWifiSaveDonePage() { |
|
67 |
1 |
const char *path = "/WifiSetupDone.html"; |
|
68 |
1 |
return getStaticPage(path); |
|
69 |
} |
||
70 |
|||
71 |
16 |
string HTMLHandler::getStaticPage(const char *path) const { |
|
72 |
✗✓ | 16 |
if (!spiffsStarted) |
73 |
return internalError; |
||
74 |
32 |
string mainpage; |
|
75 |
✓✗✓✗ ✓✗ |
32 |
std::shared_ptr<StorageBlob> mainpageFile = persistence->open(path, "r"); |
76 |
✓✗✓✗ |
16 |
_log->trace("persistence.open returned File: %i", mainpageFile->isFile()); |
77 |
✓✗✓✗ ✓✗✓✗ ✓✗ |
16 |
if (mainpageFile->isFile() && mainpageFile->size() > 0) { |
78 |
✓✗✓✗ |
16 |
mainpage = mainpageFile->readString(); |
79 |
✓✗ | 16 |
mainpageFile->close(); |
80 |
} else { |
||
81 |
mainpage = internalError; |
||
82 |
} |
||
83 |
16 |
return mainpage; |
|
84 |
} |
||
85 |
|||
86 |
1 |
string HTMLHandler::getCss() { |
|
87 |
1 |
const char *path = "/portal.css"; |
|
88 |
1 |
return getStaticPage(path); |
|
89 |
} |
||
90 |
|||
91 |
1 |
void HTMLHandler::addRegisteredNetwork(const string &ssid) { |
|
92 |
1 |
const char *path = "/RegisteredNetwork.partial"; |
|
93 |
✓✗ | 2 |
string newRegisteredNetword = getStaticPage(path); |
94 |
✓✗✓✗ |
1 |
replaceString(newRegisteredNetword, "<ssid/>", ssid); |
95 |
✓✗ | 1 |
registeredNetwork += newRegisteredNetword; |
96 |
|||
97 |
1 |
} |
|
98 |
|||
99 |
5 |
void HTMLHandler::addAvailableNetwork(const string &ssid, const unsigned char encryption, int strength) { |
|
100 |
✗✓ | 5 |
if (ssid.length() < 2) { |
101 |
return; |
||
102 |
} |
||
103 |
|||
104 |
5 |
const char *path = "/AvailableNetwork.partial"; |
|
105 |
✓✗ | 10 |
string newAvalilableNetwork = getStaticPage(path); |
106 |
✓✗ | 5 |
_log->trace("adding Network '%s'", ssid.c_str()); |
107 |
char tmp[10]; |
||
108 |
✓✗✓✗ ✓✗✓✗ |
5 |
replaceString(newAvalilableNetwork, "<number/>", itoa(++noNetwork, tmp, 10)); |
109 |
✓✗✓✗ |
5 |
replaceString(newAvalilableNetwork, "<ssid/>", ssid); |
110 |
✓✗✓✗ ✓✗ |
5 |
replaceString(newAvalilableNetwork, "<encryption/>", GetEncryptionType(encryption)); |
111 |
✓✗✓✗ ✓✗✓✗ |
5 |
replaceString(newAvalilableNetwork, "<strength/>", itoa(strength, tmp, 10)); |
112 |
|||
113 |
✓✗ | 5 |
availableNetworks += newAvalilableNetwork; |
114 |
|||
115 |
✓✗✓✗ ✓✗✓✗ ✓✗ |
5 |
options += "<option value='" + ssid + "'>" + ssid + "</option>"; |
116 |
} |
||
117 |
|||
118 |
5 |
string HTMLHandler::getWifiPage() { |
|
119 |
✗✓ | 5 |
if (!spiffsStarted) |
120 |
return internalError; |
||
121 |
|||
122 |
5 |
const char *path = "/WifiPage.html"; |
|
123 |
✓✗ | 10 |
string wifiPage = getStaticPage(path); |
124 |
✓✗✓✗ |
5 |
replaceString(wifiPage, "<configuredNetworks/>", registeredNetwork); |
125 |
✓✗✓✗ |
5 |
replaceString(wifiPage, "<availableNetworks/>", availableNetworks); |
126 |
✓✗✓✗ |
5 |
replaceString(wifiPage, "<networkOptions/>", options); |
127 |
✓✗✓✗ |
5 |
replaceString(wifiPage, "<softapssid>", softAP_SSID); |
128 |
✓✗✓✗ |
5 |
replaceString(wifiPage, "<softappassword>", softAP_password); |
129 |
5 |
return wifiPage; |
|
130 |
} |
||
131 |
|||
132 |
7 |
void HTMLHandler::resetWifiPage() { |
|
133 |
7 |
options = "<option value=''>No WiFiNetwork</option>"; |
|
134 |
7 |
availableNetworks = ""; |
|
135 |
7 |
registeredNetwork = ""; |
|
136 |
7 |
noNetwork = 0; |
|
137 |
|||
138 |
7 |
} |
|
139 |
|||
140 |
2 |
string HTMLHandler::getSwitch(bool open) { |
|
141 |
✗✓ | 2 |
if (!spiffsStarted) |
142 |
return internalError; |
||
143 |
|||
144 |
2 |
const char *path = "/Valve.html"; |
|
145 |
✓✗ | 4 |
string valvepage = getStaticPage(path); |
146 |
✓✓ | 2 |
if (open) { |
147 |
✓✗✓✗ ✓✗ |
1 |
replaceString(valvepage, "❌ The valve is closed", "❎ The valve is open"); |
148 |
} |
||
149 |
2 |
return valvepage; |
|
150 |
} |
||
151 |
|||
152 |
50 |
void HTMLHandler::replaceString(string &original, const string &toReplace, const string &replacement) { |
|
153 |
50 |
size_t start = original.find(toReplace); |
|
154 |
✓✓ | 112 |
while (start != string::npos) { |
155 |
31 |
size_t len = toReplace.length(); |
|
156 |
31 |
original.replace(start, len, replacement); |
|
157 |
31 |
start = original.find(toReplace); |
|
158 |
} |
||
159 |
50 |
} |
|
160 |
|||
161 |
1 |
void HTMLHandler::setSoftAPCredentials(const string &ssid, const string &password) { |
|
162 |
1 |
softAP_SSID = ssid; |
|
163 |
1 |
softAP_password = password; |
|
164 |
✓✗✓✗ |
4 |
} |
165 |
Generated by: GCOVR (Version 4.2) |