From 896becce45131889535870fc6e4f303d25f3299c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Aime?= Date: Fri, 22 Jan 2021 09:49:53 +0100 Subject: [PATCH 1/7] Adding ethernet support to install script --- install.sh | 102 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/install.sh b/install.sh index b3c089c..83751b2 100644 --- a/install.sh +++ b/install.sh @@ -1,10 +1,11 @@ #!/bin/bash -ifaces=() -rfaces=() CURRENT_USER="${SUDO_USER}" SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )" HOST="$( hostname )" +IFACES="$( ifconfig -a | grep -Eo '[a-z0-9]{4,14}\: ' | grep -oE [a-z0-9]+ )" +IFACE_OUT="" +IFACE_IN="" welcome_screen() { cat << "EOF" @@ -148,10 +149,10 @@ WantedBy=multi-user.target EOL echo -e "\e[92m [✔] Enabling services\e[39m" - systemctl enable tinycheck-frontend - systemctl enable tinycheck-backend - systemctl enable tinycheck-kiosk - systemctl enable tinycheck-watchers + systemctl enable tinycheck-frontend &> /dev/null + systemctl enable tinycheck-backend &> /dev/null + systemctl enable tinycheck-kiosk &> /dev/null + systemctl enable tinycheck-watchers &> /dev/null } configure_dnsmask() { @@ -166,7 +167,7 @@ configure_dnsmask() { ## TinyCheck configuration ## -interface=${ifaces[-1]} +interface=${IFACE_IN} dhcp-range=192.168.100.2,192.168.100.3,255.255.255.0,24h EOL else @@ -185,7 +186,7 @@ configure_dhcpcd() { ## TinyCheck configuration ## -interface ${ifaces[-1]} +interface ${IFACE_IN} static ip_address=192.168.100.1/24 nohook wpa_supplicant EOL @@ -196,8 +197,8 @@ EOL update_config(){ # Update the configuration - sed -i "s/iface_out/${ifaces[0]}/g" /usr/share/tinycheck/config.yaml - sed -i "s/iface_in/${ifaces[-1]}/g" /usr/share/tinycheck/config.yaml + sed -i "s/iface_out/${IFACE_OUT}/g" /usr/share/tinycheck/config.yaml + sed -i "s/iface_in/${IFACE_IN}/g" /usr/share/tinycheck/config.yaml } change_hostname() { @@ -302,24 +303,71 @@ cleaning() { sudo apt autoremove -y &> /dev/null } -check_wlan_interfaces() { - # Check the presence of two wireless interfaces by using rfkill. - # Check if they are recognized by ifconfig, if not unblock them with rfkill. - echo -e "\e[39m[+] Checking your wireless interfaces" +check_interfaces(){ - for iface in $(ifconfig | grep -oE "(wlan[0-9]|wlx[a-f0-9]{12})"); do ifaces+=("$iface"); done - for iface in $(rfkill list | grep -oE phy[0-9]); do rfaces+=("$iface"); done + # Get the current connected interface name. + for iface in $IFACES; + do + config="$(ifconfig $iface)" + if echo "$config" | grep -q "inet "; then + ciface=$iface + fi + done - if [[ "${#rfaces[@]}" > 1 ]]; then - echo -e "\e[92m [✔] Two interfaces detected, lets continue!\e[39m" - if [[ "${#ifaces[@]}" < 1 ]]; then - for iface in rfaces; do rfkill unblock "$iface"; done - fi - else - echo -e "\e[91m [✘] Two wireless interfaces are required." - echo -e " Please, check if you have two Wi-Fi interfaces available (with the command iw list | grep Wiphy).\e[39m" - exit - fi + # Setup of iface_out which can be any interface, + # but needs to be connected now or in the future. + echo -n " [?] The interface $ciface is connected. Do you want to use it as a bridge to Internet (network/out) ? [Yes/No] " + read answer + if [[ "$answer" =~ ^([yY][eE][sS]|[yY])$ ]] + then + IFACES=( "${IFACES[@]/$ciface}" ) + IFACE_OUT=$ciface + echo -e "\e[92m [✔] $ciface setted as a bridge to the Internet\e[39m" + else + IFACES=( "${IFACES[@]/$ciface}" ) + for iface in $IFACES; + do + config="$(ifconfig $iface)" + echo -n " [?] Do you want to use $iface as a bridge to Internet (network/out) ? [Y/n] " + read answer + if [[ "$answer" =~ ^([yY][eE][sS]|[yY])$ ]] + then + IFACE_OUT=$iface + IFACES=( "${IFACES[@]/$iface}" ) + echo -e "\e[92m [✔] $iface setted as a bridge to the Internet\e[39m" + break + fi + done + fi + + # Setup of iface_in which can be a only a + # Wi-Fi interface with AP mode available. + for iface in $IFACES; + do + if echo "$iface" | grep -Eq "(wlan[0-9]|wlx[a-f0-9]{12})"; then + config="$(ifconfig $iface)" # Get the iface logic configuration + if echo "$config" | grep -qv "inet "; then # Test if not currently connected + hw="$(iw $iface info | grep wiphy | cut -d" " -f2)" # Get the iface hardware id. + info="$(iw phy$hw info)" # Get the iface hardware infos. + if echo "$info" | grep -qE "* AP$"; then # Know if the iface has the AP mode available. + echo -n " [?] The interface $iface can be used for the Wi-Fi Access Point. Do you want to use it for the TinyCheck Access Point ? [Yes/No] " + read answer + if [[ "$answer" =~ ^([yY][eE][sS]|[yY])$ ]] + then + IFACE_IN="$iface" + echo -e "\e[92m [✔] $iface setted as an Access Point\e[39m" + break + fi + fi + fi + fi + done + if [ "${IFACE_IN}" != "" ] && [ "${IFACE_OUT}" != "" ]; then + echo -e "\e[92m [✔] Network configuration setted!\e[39m" + else + echo -e "\e[91m [✘] You must select two interfaces, exiting.\e[39m" + exit 1 + fi } create_database() { @@ -363,7 +411,7 @@ elif [[ -f /usr/share/tinycheck/config.yaml ]]; then else welcome_screen check_operating_system - check_wlan_interfaces + check_interfaces create_directory set_credentials check_dependencies From 3620e93ae6096c96883c4116ed63cc7c9f8614b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Aime?= Date: Fri, 22 Jan 2021 14:09:03 +0100 Subject: [PATCH 2/7] Welcome to ethernet --- app/backend/src/views/network-manage.vue | 8 +- app/frontend/package-lock.json | 160 +++++++++++------------ app/frontend/src/views/home.vue | 14 +- app/frontend/src/views/splash-screen.vue | 49 +++++-- install.sh | 2 +- server/backend/app/classes/config.py | 29 +++- server/frontend/app/blueprints/misc.py | 3 +- 7 files changed, 156 insertions(+), 109 deletions(-) diff --git a/app/backend/src/views/network-manage.vue b/app/backend/src/views/network-manage.vue index 2a7faf9..a8de818 100644 --- a/app/backend/src/views/network-manage.vue +++ b/app/backend/src/views/network-manage.vue @@ -7,18 +7,18 @@
- First interface + Wireless AP interface
- +
- Second interface + Internet link interface
- +
diff --git a/app/frontend/package-lock.json b/app/frontend/package-lock.json index 8a1af8c..ebba075 100644 --- a/app/frontend/package-lock.json +++ b/app/frontend/package-lock.json @@ -1806,6 +1806,16 @@ "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "cacache": { "version": "13.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", @@ -1832,6 +1842,34 @@ "unique-filename": "^1.1.1" } }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, "find-cache-dir": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", @@ -1853,6 +1891,25 @@ "path-exists": "^4.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -1917,6 +1974,16 @@ "minipass": "^3.1.1" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "terser-webpack-plugin": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", @@ -1933,6 +2000,18 @@ "terser": "^4.6.12", "webpack-sources": "^1.4.3" } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.1.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz", + "integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } } } }, @@ -11257,87 +11336,6 @@ } } }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.0.0-rc.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.1.tgz", - "integrity": "sha512-yR+BS90EOXTNieasf8ce9J3TFCpm2DGqoqdbtiwQ33hon3FyIznLX7sKavAq1VmfBnOeV6It0Htg4aniv8ph1g==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "vue-router": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz", diff --git a/app/frontend/src/views/home.vue b/app/frontend/src/views/home.vue index f10c89c..5714ebd 100644 --- a/app/frontend/src/views/home.vue +++ b/app/frontend/src/views/home.vue @@ -11,14 +11,22 @@ import router from '../router' export default { name: 'home', - props: { saved_ssid: String, list_ssids: Array, internet: Boolean }, + props: { saved_ssid: String, iface_out: String, list_ssids: Array, internet: Boolean }, methods: { next: function() { var saved_ssid = this.saved_ssid var list_ssids = this.list_ssids var internet = this.internet - router.push({ name: 'wifi-select', params: { saved_ssid: saved_ssid, list_ssids: list_ssids, internet:internet } }); - } + console.log(this.iface_out) + if (this.iface_out.charAt(0) == "e"){ + router.push({ name: 'generate-ap' }); + } else { + router.push({ name: 'wifi-select', + params: { saved_ssid: saved_ssid, + list_ssids: list_ssids, + internet:internet } }); + } + } } } diff --git a/app/frontend/src/views/splash-screen.vue b/app/frontend/src/views/splash-screen.vue index f68f91e..6b794e4 100644 --- a/app/frontend/src/views/splash-screen.vue +++ b/app/frontend/src/views/splash-screen.vue @@ -15,35 +15,58 @@ data() { return { list_ssids: [], - internet: false + internet: false, + iface_out:"" } }, methods: { - // Check if the device is already connected to internet. + // Check if the device is connected to internet. internet_check: function() { axios.get(`/api/network/status`, { timeout: 10000 }) .then(response => { - if (response.data.internet) this.internet = true - this.get_wifi_networks() + if (response.data.internet){ + this.internet = true + this.load_config() + } }) .catch(err => (console.log(err))) }, // Get the WiFi networks around the box. get_wifi_networks: function() { axios.get(`/api/network/wifi/list`, { timeout: 10000 }) - .then(response => (this.append_ssids(response.data.networks))) + .then(response => { + this.list_ssids = response.data.networks + this.goto_home(); + }) .catch(err => (console.log(err))) }, - // Handle the get_wifi_networks answer and call goto_home. - append_ssids: function(networks) { - this.list_ssids = networks - this.goto_home() - }, - // Pass the list of ssids and the internet status as a prop to the home view. + // Forward the view to home, with some props + // such as (SSIDs, internet & interface) goto_home: function() { var list_ssids = this.list_ssids - var internet = this.internet - router.replace({ name: 'home', params: { list_ssids: list_ssids, internet: internet } }); + var internet = this.internet + var iface_out = this.iface_out + router.replace({ name: 'home', params: { list_ssids: list_ssids, internet: internet, iface_out : iface_out } }); + }, + // Get the network_out from the config + // to determine the next steps. + load_config: function() { + axios.get(`/api/misc/config`, { timeout: 60000 }) + .then(response => { + if(response.data.iface_out){ + this.iface_out = response.data.iface_out + // If ethernet, just goto the homepage. + // Else, get wifi networks and then go to home. + if(this.iface_out.charAt(0) == "e"){ + setTimeout(function () { this.goto_home(); }.bind(this), 1000); + } else { + this.get_wifi_networks(); + } + } + }) + .catch(error => { + console.log(error) + }); } }, created: function() { diff --git a/install.sh b/install.sh index 83751b2..121b51d 100644 --- a/install.sh +++ b/install.sh @@ -344,7 +344,7 @@ check_interfaces(){ # Wi-Fi interface with AP mode available. for iface in $IFACES; do - if echo "$iface" | grep -Eq "(wlan[0-9]|wlx[a-f0-9]{12})"; then + if echo "$iface" | grep -Eq "(wlan[0-9]|wl[a-z0-9]{20})"; then config="$(ifconfig $iface)" # Get the iface logic configuration if echo "$config" | grep -qv "inet "; then # Test if not currently connected hw="$(iw $iface info | grep wiphy | cut -d" " -f2)" # Get the iface hardware id. diff --git a/server/backend/app/classes/config.py b/server/backend/app/classes/config.py index cd187dc..3839543 100644 --- a/server/backend/app/classes/config.py +++ b/server/backend/app/classes/config.py @@ -32,7 +32,8 @@ class Config(object): """ config = yaml.load( open(os.path.join(self.dir, "config.yaml"), "r"), Loader=yaml.SafeLoader) - config["interfaces"] = self.get_wireless_interfaces() + config["ifaces_in"] = self.get_ifaces_in() + config["ifaces_out"] = self.get_ifaces_out() return config def write_config(self, cat, key, value): @@ -55,9 +56,13 @@ class Config(object): # Changes for network interfaces. if cat == "network" and key in ["in", "out"]: - if re.match("^(wlan[0-9]|wlx[a-f0-9]{12})$", value): + if re.match("^(wlan[0-9]|wl[a-z0-9]{20})$", value): if key == "in": self.edit_configuration_files(value) + config[cat][key] = value + if key == "out": + config[cat][key] = value + elif re.match("^(eth[0-9]|en[a-z0-9]{20})$", value) and key == "out": config[cat][key] = value else: return {"status": False, @@ -114,15 +119,27 @@ class Config(object): as_attachment=True, attachment_filename='tinycheck-export-db.sqlite') - def get_wireless_interfaces(self): + def get_ifaces_in(self): """ - List the Wireless interfaces installed on the box + List the Wireless interfaces on the box + which can be used as Access Points. :return: list of the interfaces """ try: - return [i for i in os.listdir("/sys/class/net/") if i.startswith(("wlan", "wlx"))] + return [i for i in os.listdir("/sys/class/net/") if i.startswith("wl")] except: - return ["Interface not found", "Interface not found"] + return ["No wireless interface"] + + def get_ifaces_out(self): + """ + List the network interfaces on the box + which can be used to access to Internet. + :return: list of the interfaces + """ + try: + return [i for i in os.listdir("/sys/class/net/") if i.startswith(("wl", "et"))] + except: + return ["No network interfaces"] def edit_configuration_files(self, iface): """ diff --git a/server/frontend/app/blueprints/misc.py b/server/frontend/app/blueprints/misc.py index 250c821..00ed033 100644 --- a/server/frontend/app/blueprints/misc.py +++ b/server/frontend/app/blueprints/misc.py @@ -56,5 +56,6 @@ def get_config(): "sparklines": read_config(("frontend", "sparklines")), "quit_option": read_config(("frontend", "quit_option")), "shutdown_option": read_config(("frontend", "shutdown_option")), - "reboot_option": read_config(("frontend", "reboot_option")) + "reboot_option": read_config(("frontend", "reboot_option")), + "iface_out": read_config(("network", "iface_out")) }) From e78541a1750e1985ef7a0156aaef77500a02c36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Aim=C3=A9?= Date: Fri, 22 Jan 2021 14:18:57 +0100 Subject: [PATCH 3/7] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e0f80cd..abb549b 100644 --- a/README.md +++ b/README.md @@ -57,10 +57,12 @@ It is worthy to note that not all configuration options are editable from the ba ### Installation -Prior the TinyCheck installation, you need to have: +Prior the TinyCheck installation, you need to understand how it works. It simply does a bridge between the analyzed device and Internet. For that, you need to have two different network interfaces. The first one, which act as a Wifi Access point and the second one, which will be used for the Internet link. This last one can be a second Wi-Fi interface or an Ethernet one. + +To recap', you need to have: - A Raspberry Pi with [Raspberry Pi OS Buster](https://www.raspberrypi.org/documentation/installation/installing-images/) (or any computer with a Debian-like system) -- Two working Wi-Fi interfaces (check their number with `iw list | grep Wiphy | wc -l`). +- At least one Wi-Fi which will be used as an Access Point (check their number with `iw list | grep -E "* AP$" | wc -l`). - A working internet connection - (Adviced) A small touchscreen previously installed for the kiosk mode of TinyCheck. From 0db4a4110be37c03c7f07f6d8215992b38b9b9b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Aim=C3=A9?= Date: Fri, 22 Jan 2021 14:19:49 +0100 Subject: [PATCH 4/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index abb549b..96ac236 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ It is worthy to note that not all configuration options are editable from the ba ### Installation -Prior the TinyCheck installation, you need to understand how it works. It simply does a bridge between the analyzed device and Internet. For that, you need to have two different network interfaces. The first one, which act as a Wifi Access point and the second one, which will be used for the Internet link. This last one can be a second Wi-Fi interface or an Ethernet one. +Prior the TinyCheck installation, you need to understand how it works. It simply does a bridge between the analyzed device and Internet. For that, you need to have two different network interfaces. The first one, a wireless interface which act as a Wi-Fi Access point and the second one, which will be used for the Internet link. This last one can be a second wireless interface or an Ethernet one. To recap', you need to have: From 309a8a302cc6756f36384f7d97e2bb24ca225c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Aim=C3=A9?= Date: Fri, 22 Jan 2021 14:32:49 +0100 Subject: [PATCH 5/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 96ac236..b4f47c5 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ TinyCheck can be used in several ways by individuals and entities: - Over a network - TinyCheck is installed on a network and can be accessed from a workstation via a browser. - In kiosk mode - TinyCheck can be used as a kiosk to allow visitors to test their own devices. -- Fully standalone - By using a powerbank and a small screen, [like in this video](https://twitter.com/felixaime/status/1331535790392946689), you can tap any device anywhere. +- Fully standalone - By using a powerbank, two Wi-Fi interfaces and a small screen, [like in this video](https://twitter.com/felixaime/status/1331535790392946689), you can tap any device anywhere. ### Few steps to analyze your smartphone From f01dd7f57174630113af2e75d0edf70f053abae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Aim=C3=A9?= Date: Fri, 22 Jan 2021 14:34:25 +0100 Subject: [PATCH 6/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4f47c5..2a0aece 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ TinyCheck can be used in several ways by individuals and entities: - Over a network - TinyCheck is installed on a network and can be accessed from a workstation via a browser. - In kiosk mode - TinyCheck can be used as a kiosk to allow visitors to test their own devices. -- Fully standalone - By using a powerbank, two Wi-Fi interfaces and a small screen, [like in this video](https://twitter.com/felixaime/status/1331535790392946689), you can tap any device anywhere. +- Fully standalone - By using a powerbank, two Wi-Fi interfaces or a 4G dongle and a small touch screen [like in this video](https://twitter.com/felixaime/status/1331535790392946689), you can tap any device anywhere. ### Few steps to analyze your smartphone From 7ce0d4554480046aae7cf8136c01aebe501c4757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Aime?= Date: Fri, 22 Jan 2021 15:06:08 +0100 Subject: [PATCH 7/7] Changing wrong configuration key --- server/frontend/app/blueprints/misc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/frontend/app/blueprints/misc.py b/server/frontend/app/blueprints/misc.py index 00ed033..6964121 100644 --- a/server/frontend/app/blueprints/misc.py +++ b/server/frontend/app/blueprints/misc.py @@ -57,5 +57,5 @@ def get_config(): "quit_option": read_config(("frontend", "quit_option")), "shutdown_option": read_config(("frontend", "shutdown_option")), "reboot_option": read_config(("frontend", "reboot_option")), - "iface_out": read_config(("network", "iface_out")) + "iface_out": read_config(("network", "out")) })