Skip to content

Commit 9c680e8

Browse files
committed
Resolve some typos
Use nullptr over NULL Fix confusing regexp Fix issue with non-compliant JWT encoding
1 parent 5d9ccd3 commit 9c680e8

11 files changed

+137
-139
lines changed

interface/src/forms/APSettingsForm.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class APSettingsForm extends React.Component {
6565
isAPEnabled(apSettings.provision_mode) &&
6666
<Fragment>
6767
<TextValidator
68-
validators={['required', 'matchRegexp:^.{0,32}$']}
68+
validators={['required', 'matchRegexp:^.{1,32}$']}
6969
errorMessages={['Access Point SSID is required', 'Access Point SSID must be 32 characeters or less']}
7070
name="ssid"
7171
label="Access Point SSID"
@@ -75,7 +75,7 @@ class APSettingsForm extends React.Component {
7575
margin="normal"
7676
/>
7777
<PasswordValidator
78-
validators={['required', 'matchRegexp:^.{0,64}$']}
78+
validators={['required', 'matchRegexp:^.{1,64}$']}
7979
errorMessages={['Access Point Password is required', 'Access Point Password must be 64 characters or less']}
8080
name="password"
8181
label="Access Point Password"

interface/src/forms/OTASettingsForm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class OTASettingsForm extends React.Component {
8585
/>
8686

8787
<PasswordValidator
88-
validators={['required', 'matchRegexp:^.{0,64}$']}
88+
validators={['required', 'matchRegexp:^.{1,64}$']}
8989
errorMessages={['OTA Password is required', 'OTA Point Password must be 64 characters or less']}
9090
name="password"
9191
label="Password"

interface/src/forms/SecuritySettingsForm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class SecuritySettingsForm extends React.Component {
4949
securitySettings ?
5050
<ValidatorForm onSubmit={this.onSubmit} ref="SecuritySettingsForm">
5151
<PasswordValidator
52-
validators={['required', 'matchRegexp:^.{0,64}$']}
52+
validators={['required', 'matchRegexp:^.{1,64}$']}
5353
errorMessages={['JWT Secret Required', 'JWT Secret must be 64 characters or less']}
5454
name="jwt_secret"
5555
label="JWT Secret"

interface/src/forms/UserForm.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class UserForm extends React.Component {
4848
<DialogContent dividers={true}>
4949
<TextValidator
5050
validators={creating ? ['required', 'uniqueUsername', 'matchRegexp:^[a-zA-Z0-9_\\.]{1,24}$'] : []}
51-
errorMessages={creating ? ['Username is required', "Username already exists", "Must be 1-24 characters: alpha numberic, '_' or '.'"] : []}
51+
errorMessages={creating ? ['Username is required', "Username already exists", "Must be 1-24 characters: alpha numeric, '_' or '.'"] : []}
5252
name="username"
5353
label="Username"
5454
className={classes.textField}
@@ -58,7 +58,7 @@ class UserForm extends React.Component {
5858
margin="normal"
5959
/>
6060
<PasswordValidator
61-
validators={['required', 'matchRegexp:^.{0,64}$']}
61+
validators={['required', 'matchRegexp:^.{1,64}$']}
6262
errorMessages={['Password is required', 'Password must be 64 characters or less']}
6363
name="password"
6464
label="Password"

interface/src/forms/WiFiSettingsForm.js

Lines changed: 118 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {Fragment} from 'react';
1+
import React, { Fragment } from 'react';
22
import PropTypes from 'prop-types';
33

44
import { withStyles } from '@material-ui/core/styles';
@@ -67,7 +67,7 @@ class WiFiSettingsForm extends React.Component {
6767
</ListItemAvatar>
6868
<ListItemText
6969
primary={selectedNetwork.ssid}
70-
secondary={"Security: "+ networkSecurityMode(selectedNetwork) + ", Ch: " + selectedNetwork.channel}
70+
secondary={"Security: " + networkSecurityMode(selectedNetwork) + ", Ch: " + selectedNetwork.channel}
7171
/>
7272
<ListItemSecondaryAction>
7373
<IconButton aria-label="Manual Config" onClick={deselectNetwork}>
@@ -84,57 +84,57 @@ class WiFiSettingsForm extends React.Component {
8484
return (
8585
<div>
8686
{
87-
!wifiSettingsFetched ?
88-
89-
<div className={classes.loadingSettings}>
90-
<LinearProgress className={classes.loadingSettingsDetails}/>
91-
<Typography variant="h4" className={classes.loadingSettingsDetails}>
92-
Loading...
93-
</Typography>
94-
</div>
95-
96-
: wifiSettings ?
97-
98-
<ValidatorForm onSubmit={onSubmit} ref="WiFiSettingsForm">
99-
{
100-
selectedNetwork ? this.renderSelectedNetwork() :
101-
<TextValidator
102-
validators={['required', 'matchRegexp:^.{0,32}$']}
103-
errorMessages={['SSID is required', 'SSID must be 32 characeters or less']}
104-
name="ssid"
105-
label="SSID"
106-
className={classes.textField}
107-
value={wifiSettings.ssid}
108-
onChange={handleValueChange('ssid')}
109-
margin="normal"
110-
/>
111-
}
112-
{
113-
!isNetworkOpen(selectedNetwork) &&
114-
<PasswordValidator
115-
validators={['matchRegexp:^.{0,64}$']}
116-
errorMessages={['Password must be 64 characters or less']}
117-
name="password"
118-
label="Password"
119-
className={classes.textField}
120-
value={wifiSettings.password}
121-
onChange={handleValueChange('password')}
122-
margin="normal"
123-
/>
124-
}
125-
126-
<TextValidator
127-
validators={['required', 'isHostname']}
128-
errorMessages={['Hostname is required', "Not a valid hostname"]}
129-
name="hostname"
130-
label="Hostname"
87+
!wifiSettingsFetched ?
88+
89+
<div className={classes.loadingSettings}>
90+
<LinearProgress className={classes.loadingSettingsDetails} />
91+
<Typography variant="h4" className={classes.loadingSettingsDetails}>
92+
Loading...
93+
</Typography>
94+
</div>
95+
96+
: wifiSettings ?
97+
98+
<ValidatorForm onSubmit={onSubmit} ref="WiFiSettingsForm">
99+
{
100+
selectedNetwork ? this.renderSelectedNetwork() :
101+
<TextValidator
102+
validators={['required', 'matchRegexp:^.{1,32}$']}
103+
errorMessages={['SSID is required', 'SSID must be 32 characeters or less']}
104+
name="ssid"
105+
label="SSID"
106+
className={classes.textField}
107+
value={wifiSettings.ssid}
108+
onChange={handleValueChange('ssid')}
109+
margin="normal"
110+
/>
111+
}
112+
{
113+
!isNetworkOpen(selectedNetwork) &&
114+
<PasswordValidator
115+
validators={['matchRegexp:^.{0,64}$']}
116+
errorMessages={['Password must be 64 characters or less']}
117+
name="password"
118+
label="Password"
131119
className={classes.textField}
132-
value={wifiSettings.hostname}
133-
onChange={handleValueChange('hostname')}
120+
value={wifiSettings.password}
121+
onChange={handleValueChange('password')}
134122
margin="normal"
135123
/>
124+
}
136125

137-
<FormControlLabel className={classes.checkboxControl}
126+
<TextValidator
127+
validators={['required', 'isHostname']}
128+
errorMessages={['Hostname is required', "Not a valid hostname"]}
129+
name="hostname"
130+
label="Hostname"
131+
className={classes.textField}
132+
value={wifiSettings.hostname}
133+
onChange={handleValueChange('hostname')}
134+
margin="normal"
135+
/>
136+
137+
<FormControlLabel className={classes.checkboxControl}
138138
control={
139139
<Checkbox
140140
value="static_ip_config"
@@ -145,82 +145,82 @@ class WiFiSettingsForm extends React.Component {
145145
label="Static IP Config?"
146146
/>
147147

148-
{
149-
wifiSettings.static_ip_config &&
150-
<Fragment>
151-
<TextValidator
152-
validators={['required', 'isIP']}
153-
errorMessages={['Local IP is required', 'Must be an IP address']}
154-
name="local_ip"
155-
label="Local IP"
156-
className={classes.textField}
157-
value={wifiSettings.local_ip}
158-
onChange={handleValueChange('local_ip')}
159-
margin="normal"
160-
/>
161-
<TextValidator
162-
validators={['required', 'isIP']}
163-
errorMessages={['Gateway IP is required', 'Must be an IP address']}
164-
name="gateway_ip"
165-
label="Gateway"
166-
className={classes.textField}
167-
value={wifiSettings.gateway_ip}
168-
onChange={handleValueChange('gateway_ip')}
169-
margin="normal"
170-
/>
171-
<TextValidator
172-
validators={['required', 'isIP']}
173-
errorMessages={['Subnet mask is required', 'Must be an IP address']}
174-
name="subnet_mask"
175-
label="Subnet"
176-
className={classes.textField}
177-
value={wifiSettings.subnet_mask}
178-
onChange={handleValueChange('subnet_mask')}
179-
margin="normal"
180-
/>
181-
<TextValidator
182-
validators={['isOptionalIP']}
183-
errorMessages={['Must be an IP address']}
184-
name="dns_ip_1"
185-
label="DNS IP #1"
186-
className={classes.textField}
187-
value={wifiSettings.dns_ip_1}
188-
onChange={handleValueChange('dns_ip_1')}
189-
margin="normal"
190-
/>
191-
<TextValidator
192-
validators={['isOptionalIP']}
193-
errorMessages={['Must be an IP address']}
194-
name="dns_ip_2"
195-
label="DNS IP #2"
196-
className={classes.textField}
197-
value={wifiSettings.dns_ip_2}
198-
onChange={handleValueChange('dns_ip_2')}
199-
margin="normal"
200-
/>
201-
</Fragment>
202-
}
148+
{
149+
wifiSettings.static_ip_config &&
150+
<Fragment>
151+
<TextValidator
152+
validators={['required', 'isIP']}
153+
errorMessages={['Local IP is required', 'Must be an IP address']}
154+
name="local_ip"
155+
label="Local IP"
156+
className={classes.textField}
157+
value={wifiSettings.local_ip}
158+
onChange={handleValueChange('local_ip')}
159+
margin="normal"
160+
/>
161+
<TextValidator
162+
validators={['required', 'isIP']}
163+
errorMessages={['Gateway IP is required', 'Must be an IP address']}
164+
name="gateway_ip"
165+
label="Gateway"
166+
className={classes.textField}
167+
value={wifiSettings.gateway_ip}
168+
onChange={handleValueChange('gateway_ip')}
169+
margin="normal"
170+
/>
171+
<TextValidator
172+
validators={['required', 'isIP']}
173+
errorMessages={['Subnet mask is required', 'Must be an IP address']}
174+
name="subnet_mask"
175+
label="Subnet"
176+
className={classes.textField}
177+
value={wifiSettings.subnet_mask}
178+
onChange={handleValueChange('subnet_mask')}
179+
margin="normal"
180+
/>
181+
<TextValidator
182+
validators={['isOptionalIP']}
183+
errorMessages={['Must be an IP address']}
184+
name="dns_ip_1"
185+
label="DNS IP #1"
186+
className={classes.textField}
187+
value={wifiSettings.dns_ip_1}
188+
onChange={handleValueChange('dns_ip_1')}
189+
margin="normal"
190+
/>
191+
<TextValidator
192+
validators={['isOptionalIP']}
193+
errorMessages={['Must be an IP address']}
194+
name="dns_ip_2"
195+
label="DNS IP #2"
196+
className={classes.textField}
197+
value={wifiSettings.dns_ip_2}
198+
onChange={handleValueChange('dns_ip_2')}
199+
margin="normal"
200+
/>
201+
</Fragment>
202+
}
203203

204-
<Button variant="contained" color="primary" className={classes.button} type="submit">
205-
Save
204+
<Button variant="contained" color="primary" className={classes.button} type="submit">
205+
Save
206206
</Button>
207-
<Button variant="contained" color="secondary" className={classes.button} onClick={onReset}>
208-
Reset
207+
<Button variant="contained" color="secondary" className={classes.button} onClick={onReset}>
208+
Reset
209209
</Button>
210210

211-
</ValidatorForm>
211+
</ValidatorForm>
212212

213-
:
213+
:
214214

215-
<div className={classes.loadingSettings}>
216-
<Typography variant="h4" className={classes.loadingSettingsDetails}>
217-
{errorMessage}
218-
</Typography>
219-
<Button variant="contained" color="secondary" className={classes.button} onClick={onReset}>
220-
Reset
215+
<div className={classes.loadingSettings}>
216+
<Typography variant="h4" className={classes.loadingSettingsDetails}>
217+
{errorMessage}
218+
</Typography>
219+
<Button variant="contained" color="secondary" className={classes.button} onClick={onReset}>
220+
Reset
221221
</Button>
222-
</div>
223-
}
222+
</div>
223+
}
224224
</div>
225225
);
226226
}

src/APSettingsService.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ void APSettingsService::stopAP() {
4646
Serial.println("Stopping captive portal");
4747
_dnsServer->stop();
4848
delete _dnsServer;
49-
_dnsServer = NULL;
49+
_dnsServer = nullptr;
5050
}
5151
Serial.println("Stopping software access point");
5252
WiFi.softAPdisconnect(true);

src/ArduinoJsonJWT.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ void ArduinoJsonJWT::parseJWT(String jwt, JsonDocument &jsonDocument) {
6969
return;
7070
}
7171
// must have signature of correct length
72-
int signatureDelimieterIndex = jwt.length() - JWT_SIG_SIZE - 1;
73-
if (jwt.lastIndexOf('.') != signatureDelimieterIndex) {
72+
int signatureDelimiterIndex = jwt.length() - JWT_SIG_SIZE - 1;
73+
if (jwt.lastIndexOf('.') != signatureDelimiterIndex) {
7474
return;
7575
}
7676

7777
// signature must be correct
78-
String signature = jwt.substring(signatureDelimieterIndex + 1);
79-
jwt = jwt.substring(0, signatureDelimieterIndex);
78+
String signature = jwt.substring(signatureDelimiterIndex + 1);
79+
jwt = jwt.substring(0, signatureDelimiterIndex);
8080
if (sign(jwt) != signature){
8181
return;
8282
}
@@ -115,7 +115,7 @@ String ArduinoJsonJWT::encode(const char *cstr, int inputLen) {
115115
String value = String(buffer);
116116

117117
// remove padding and convert to URL safe form
118-
while (value.charAt(value.length() - 1) == '='){
118+
while (value.length() > 0 && value.charAt(value.length() - 1) == '='){
119119
value.remove(value.length() - 1);
120120
}
121121
value.replace('+', '-');

src/AsyncArduinoJson6.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class AsyncCallbackJsonWebHandler: public AsyncWebHandler {
109109
}
110110
virtual void handleRequest(AsyncWebServerRequest *request) override final {
111111
if(_onRequest) {
112-
if (request->_tempObject != NULL) {
112+
if (request->_tempObject != nullptr) {
113113
DynamicJsonDocument _jsonDocument(_maxContentLength);
114114
DeserializationError err = deserializeJson(_jsonDocument, (uint8_t*)(request->_tempObject));
115115
if (err == DeserializationError::Ok) {
@@ -127,10 +127,10 @@ class AsyncCallbackJsonWebHandler: public AsyncWebHandler {
127127
virtual void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) override final {
128128
if (_onRequest) {
129129
_contentLength = total;
130-
if (total > 0 && request->_tempObject == NULL && total < _maxContentLength) {
130+
if (total > 0 && request->_tempObject == nullptr && total < _maxContentLength) {
131131
request->_tempObject = malloc(total);
132132
}
133-
if (request->_tempObject != NULL) {
133+
if (request->_tempObject != nullptr) {
134134
memcpy((uint8_t*)(request->_tempObject) + index, data, len);
135135
}
136136
}

src/AsyncJsonWebHandler.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class AsyncJsonWebHandler: public AsyncWebHandler {
3131

3232
AsyncJsonWebHandler() :
3333
_method(HTTP_POST|HTTP_PUT|HTTP_PATCH),
34-
_onRequest(NULL),
34+
_onRequest(nullptr),
3535
_maxContentLength(ASYNC_JSON_REQUEST_DEFAULT_MAX_SIZE),
3636
_uri() {}
3737

0 commit comments

Comments
 (0)