GCC Code Coverage Report
Directory: lib/ Exec Total Coverage
File: lib/HTMLHandler/HTMLHandler.cpp Lines: 80 96 83.3 %
Date: 2020-08-11 11:38:58 Branches: 69 156 44.2 %

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, "&#x274C; The valve is closed", "&#x274E; 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