foris 5.1.16-beta.43cb5bff → 5.2.0-beta.188ed87f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/hooks.js +3 -4
- package/api/utils.js +3 -2
- package/bootstrap/DownloadButton.js +7 -2
- package/bootstrap/PasswordInput.js +6 -3
- package/bootstrap/Select.js +5 -11
- package/common/WiFiSettings/WiFiForm.js +18 -11
- package/common/WiFiSettings/WiFiSettings.js +8 -0
- package/common/WiFiSettings/constants.js +5 -1
- package/foris-5.2.0.tgz +0 -0
- package/package.json +3 -3
- package/utils/forisUrls.js +2 -2
- package/webSockets/WebSockets.js +1 -9
- package/foris-5.1.16.tgz +0 -0
package/api/hooks.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
|
2
|
+
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
|
3
3
|
*
|
|
4
4
|
* This is free software, licensed under the GNU General Public License v3.
|
|
5
5
|
* See /LICENSE for more information.
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
import { useCallback, useEffect, useReducer, useState } from "react";
|
|
9
9
|
|
|
10
|
-
import { ForisURLs } from "../utils/forisUrls";
|
|
11
10
|
import {
|
|
12
11
|
API_ACTIONS,
|
|
13
12
|
API_METHODS,
|
|
@@ -84,8 +83,8 @@ function APIReducer(state, action) {
|
|
|
84
83
|
data: action.payload,
|
|
85
84
|
};
|
|
86
85
|
case API_ACTIONS.FAILURE:
|
|
87
|
-
if (action.status ===
|
|
88
|
-
window.location.
|
|
86
|
+
if (action.status === 401) {
|
|
87
|
+
window.location.reload();
|
|
89
88
|
}
|
|
90
89
|
|
|
91
90
|
// Not an API error - should be rethrown.
|
package/api/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
|
2
|
+
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
|
3
3
|
*
|
|
4
4
|
* This is free software, licensed under the GNU General Public License v3.
|
|
5
5
|
* See /LICENSE for more information.
|
|
@@ -11,6 +11,7 @@ export const HEADERS = {
|
|
|
11
11
|
Accept: "application/json",
|
|
12
12
|
"Content-Type": "application/json",
|
|
13
13
|
"X-CSRFToken": getCookie("_csrf_token"),
|
|
14
|
+
"X-Requested-With": "json",
|
|
14
15
|
};
|
|
15
16
|
|
|
16
17
|
export const TIMEOUT = 30500;
|
|
@@ -56,7 +57,7 @@ function getCookie(name) {
|
|
|
56
57
|
|
|
57
58
|
export function getErrorPayload(error) {
|
|
58
59
|
if (error.response) {
|
|
59
|
-
if (error.response.status ===
|
|
60
|
+
if (error.response.status === 401) {
|
|
60
61
|
return _("The session is expired. Please log in again.");
|
|
61
62
|
}
|
|
62
63
|
return getJSONErrorMessage(error);
|
|
@@ -21,9 +21,14 @@ DownloadButton.defaultProps = {
|
|
|
21
21
|
className: "btn-primary",
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
export function DownloadButton({ href, className, children }) {
|
|
24
|
+
export function DownloadButton({ href, className, children, ...props }) {
|
|
25
25
|
return (
|
|
26
|
-
<a
|
|
26
|
+
<a
|
|
27
|
+
href={href}
|
|
28
|
+
className={`btn ${className}`.trim()}
|
|
29
|
+
{...props}
|
|
30
|
+
download
|
|
31
|
+
>
|
|
27
32
|
{children}
|
|
28
33
|
</a>
|
|
29
34
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C) 2019 CZ.NIC z.s.p.o. (
|
|
2
|
+
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
|
3
3
|
*
|
|
4
4
|
* This is free software, licensed under the GNU General Public License v3.
|
|
5
5
|
* See /LICENSE for more information.
|
|
@@ -21,14 +21,17 @@ PasswordInput.propTypes = {
|
|
|
21
21
|
helpText: PropTypes.string,
|
|
22
22
|
/** Use show/hide password button. */
|
|
23
23
|
withEye: PropTypes.bool,
|
|
24
|
+
/** Use new-password in autocomplete attribute. */
|
|
25
|
+
newPass: PropTypes.bool,
|
|
24
26
|
};
|
|
25
27
|
|
|
26
|
-
export function PasswordInput({ withEye, ...props }) {
|
|
28
|
+
export function PasswordInput({ withEye, newPass, ...props }) {
|
|
27
29
|
const [isHidden, setHidden] = useState(true);
|
|
30
|
+
|
|
28
31
|
return (
|
|
29
32
|
<Input
|
|
30
33
|
type={withEye && !isHidden ? "text" : "password"}
|
|
31
|
-
autoComplete={
|
|
34
|
+
autoComplete={newPass ? "new-password" : "current-password"}
|
|
32
35
|
{...props}
|
|
33
36
|
>
|
|
34
37
|
{withEye ? (
|
package/bootstrap/Select.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C) 2019-
|
|
2
|
+
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
|
3
3
|
*
|
|
4
4
|
* This is free software, licensed under the GNU General Public License v3.
|
|
5
5
|
* See /LICENSE for more information.
|
|
@@ -18,20 +18,14 @@ Select.propTypes = {
|
|
|
18
18
|
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
|
19
19
|
/** Help text message. */
|
|
20
20
|
helpText: PropTypes.string,
|
|
21
|
-
/** Turns on/off alphabetical ordering of the Select options. */
|
|
22
|
-
customOrder: PropTypes.bool,
|
|
23
21
|
};
|
|
24
22
|
|
|
25
|
-
export function Select({ label, choices, helpText,
|
|
23
|
+
export function Select({ label, choices, helpText, ...props }) {
|
|
26
24
|
const uid = useUID();
|
|
27
25
|
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
const options = keys.map((key) => (
|
|
33
|
-
<option key={key} value={key}>
|
|
34
|
-
{choices[key]}
|
|
26
|
+
const options = Object.keys(choices).map((choice) => (
|
|
27
|
+
<option key={choice} value={choice}>
|
|
28
|
+
{choices[choice]}
|
|
35
29
|
</option>
|
|
36
30
|
));
|
|
37
31
|
|
|
@@ -64,6 +64,7 @@ DeviceForm.propTypes = {
|
|
|
64
64
|
channel: PropTypes.string.isRequired,
|
|
65
65
|
guest_wifi: PropTypes.object.isRequired,
|
|
66
66
|
encryption: PropTypes.string.isRequired,
|
|
67
|
+
available_bands: PropTypes.array.isRequired,
|
|
67
68
|
}),
|
|
68
69
|
formErrors: PropTypes.object.isRequired,
|
|
69
70
|
setFormValue: PropTypes.func.isRequired,
|
|
@@ -87,6 +88,7 @@ function DeviceForm({
|
|
|
87
88
|
...props
|
|
88
89
|
}) {
|
|
89
90
|
const deviceID = formData.id;
|
|
91
|
+
const bnds = formData.available_bands;
|
|
90
92
|
return (
|
|
91
93
|
<>
|
|
92
94
|
<Switch
|
|
@@ -159,18 +161,24 @@ function DeviceForm({
|
|
|
159
161
|
value={formData.hwmode}
|
|
160
162
|
helpText={HELP_TEXTS.hwmode}
|
|
161
163
|
inline
|
|
162
|
-
onChange={setFormValue((value) =>
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
164
|
+
onChange={setFormValue((value) => {
|
|
165
|
+
// Get the last item in an array of available HT modes
|
|
166
|
+
const [best2] = bnds[0].available_htmodes.slice(-1);
|
|
167
|
+
const [best5] = bnds[1].available_htmodes.slice(-1);
|
|
168
|
+
return {
|
|
169
|
+
devices: {
|
|
170
|
+
[deviceIndex]: {
|
|
171
|
+
hwmode: { $set: value },
|
|
172
|
+
channel: { $set: "0" },
|
|
173
|
+
htmode: {
|
|
174
|
+
$set:
|
|
175
|
+
// Set HT mode depending on checked frequency
|
|
176
|
+
value === "11a" ? best5 : best2,
|
|
177
|
+
},
|
|
170
178
|
},
|
|
171
179
|
},
|
|
172
|
-
}
|
|
173
|
-
})
|
|
180
|
+
};
|
|
181
|
+
})}
|
|
174
182
|
{...props}
|
|
175
183
|
/>
|
|
176
184
|
|
|
@@ -209,7 +217,6 @@ function DeviceForm({
|
|
|
209
217
|
[deviceIndex]: { encryption: { $set: value } },
|
|
210
218
|
},
|
|
211
219
|
}))}
|
|
212
|
-
customOrder
|
|
213
220
|
{...props}
|
|
214
221
|
/>
|
|
215
222
|
|
|
@@ -82,6 +82,10 @@ export function validator(formData) {
|
|
|
82
82
|
|
|
83
83
|
if (device.password.length < 8)
|
|
84
84
|
errors.password = _("Password must contain at least 8 symbols");
|
|
85
|
+
if (device.password.length >= 64)
|
|
86
|
+
errors.password = _(
|
|
87
|
+
"Password must not contain more than 63 symbols"
|
|
88
|
+
);
|
|
85
89
|
|
|
86
90
|
if (!device.guest_wifi.enabled) return errors;
|
|
87
91
|
|
|
@@ -97,6 +101,10 @@ export function validator(formData) {
|
|
|
97
101
|
guest_wifi_errors.password = _(
|
|
98
102
|
"Password must contain at least 8 symbols"
|
|
99
103
|
);
|
|
104
|
+
if (device.guest_wifi.password.length >= 64)
|
|
105
|
+
guest_wifi_errors.password = _(
|
|
106
|
+
"Password must not contain more than 63 symbols"
|
|
107
|
+
);
|
|
100
108
|
|
|
101
109
|
if (guest_wifi_errors.SSID || guest_wifi_errors.password) {
|
|
102
110
|
errors.guest_wifi = guest_wifi_errors;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C) 2019-
|
|
2
|
+
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
|
3
3
|
*
|
|
4
4
|
* This is free software, licensed under the GNU General Public License v3.
|
|
5
5
|
* See /LICENSE for more information.
|
|
@@ -13,6 +13,10 @@ export const HTMODES = {
|
|
|
13
13
|
VHT40: _("802.11ac - 40 MHz wide channel"),
|
|
14
14
|
VHT80: _("802.11ac - 80 MHz wide channel"),
|
|
15
15
|
VHT160: _("802.11ac - 160 MHz wide channel"),
|
|
16
|
+
HE20: _("802.11ax - 20 MHz wide channel"),
|
|
17
|
+
HE40: _("802.11ax - 40 MHz wide channel"),
|
|
18
|
+
HE80: _("802.11ax - 80 MHz wide channel"),
|
|
19
|
+
HE160: _("802.11ax - 160 MHz wide channel"),
|
|
16
20
|
};
|
|
17
21
|
export const HWMODES = {
|
|
18
22
|
"11g": "2.4",
|
package/foris-5.2.0.tgz
ADDED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "foris",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0-beta.188ed87f",
|
|
4
4
|
"description": "Set of components and utils for Foris and its plugins.",
|
|
5
5
|
"author": "CZ.NIC, z.s.p.o.",
|
|
6
6
|
"repository": {
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
"react": "16.9.0",
|
|
54
54
|
"react-dom": "16.9.0",
|
|
55
55
|
"react-router-dom": "^5.1.2",
|
|
56
|
-
"react-styleguidist": "^
|
|
56
|
+
"react-styleguidist": "^11.2.0",
|
|
57
57
|
"snapshot-diff": "^0.7.0",
|
|
58
58
|
"style-loader": "^1.2.1",
|
|
59
|
-
"webpack": "^5.
|
|
59
|
+
"webpack": "^5.68.0"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"lint": "eslint src",
|
package/utils/forisUrls.js
CHANGED
|
@@ -9,8 +9,8 @@ export const REFORIS_URL_PREFIX = "/reforis";
|
|
|
9
9
|
export const REFORIS_API_URL_PREFIX = `${REFORIS_URL_PREFIX}/api`;
|
|
10
10
|
|
|
11
11
|
export const ForisURLs = {
|
|
12
|
-
login:
|
|
13
|
-
logout:
|
|
12
|
+
login: `/login?${REFORIS_URL_PREFIX}/`,
|
|
13
|
+
logout: `/logout`,
|
|
14
14
|
|
|
15
15
|
static: `${REFORIS_URL_PREFIX}/static/reforis`,
|
|
16
16
|
wifi: `${REFORIS_URL_PREFIX}/network-settings/wifi`,
|
package/webSockets/WebSockets.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C) 2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
|
2
|
+
* Copyright (C) 2020-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
|
3
3
|
*
|
|
4
4
|
* This is free software, licensed under the GNU General Public License v3.
|
|
5
5
|
* See /LICENSE for more information.
|
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
/* eslint no-console: "off" */
|
|
9
9
|
|
|
10
|
-
import { ForisURLs } from "../utils/forisUrls";
|
|
11
|
-
|
|
12
10
|
const PROTOCOL = window.location.protocol === "http:" ? "ws" : "wss";
|
|
13
11
|
|
|
14
12
|
const URL = process.env.LIGHTTPD
|
|
@@ -21,12 +19,6 @@ export class WebSockets {
|
|
|
21
19
|
constructor() {
|
|
22
20
|
this.ws = new WebSocket(URL);
|
|
23
21
|
this.ws.onerror = (e) => {
|
|
24
|
-
if (!window.initialData.logged) {
|
|
25
|
-
console.error(
|
|
26
|
-
"WS: Error observed, you aren't logged probably."
|
|
27
|
-
);
|
|
28
|
-
window.location.replace(ForisURLs.login);
|
|
29
|
-
}
|
|
30
22
|
console.error("WS: Error:", e);
|
|
31
23
|
};
|
|
32
24
|
this.ws.onmessage = (e) => {
|
package/foris-5.1.16.tgz
DELETED
|
Binary file
|