Add setting to unsecure the serial when authentication is on

This commit is contained in:
Luc
2021-02-25 14:12:55 +01:00
parent 96dd998e4d
commit eaba22990a
13 changed files with 53 additions and 10 deletions

View File

@@ -178,6 +178,8 @@ ESP_AUTO_NOTIFICATION 1022 //1 byte = flag
ESP_VERBOSE_BOOT 1023 //1 byte = flag
ESP_WEBDAV_ON 1024 //1 byte = flag
ESP_WEBDAV_PORT 1025 //4 bytes = int
ESP_STA_DNS_VALUE 1029 //4 bytes= int
ESP_SECURE_SERIAL 1033 //1 byte = flag
* Get/Set Check update at boot state which can be ON, OFF
[ESP402]<state>pwd=<admin password>

View File

@@ -253,7 +253,7 @@ bool Commands::execute_internal_command (int cmd, const char* cmd_params, level_
//do not overwrite previous authetic <time=YYYY-MM-DD#H24:MM:SS>ation level
if (auth_type == LEVEL_GUEST) {
String pwd=get_param (cmd_params, "pwd=");
auth_type = AuthenticationService::authenticated_level(pwd.c_str());
auth_type = AuthenticationService::authenticated_level(pwd.c_str(), output);
}
#endif //AUTHENTICATION_FEATURE
//log_esp3d("Authentication = %d", auth_type);

View File

@@ -53,7 +53,7 @@ bool Commands::ESP103(const char* cmd_params, level_authenticate_type auth_type,
res += Settings_ESP3D::read_IP_String(ESP_STA_GATEWAY_VALUE);
res += ", MSK:";
res += Settings_ESP3D::read_IP_String(ESP_STA_MASK_VALUE);
res += ", DNS:";
res += ", DNS:";
res += Settings_ESP3D::read_IP_String(ESP_STA_DNS_VALUE);
output->printMSG (res.c_str());
} else { //set

View File

@@ -209,6 +209,13 @@ bool Commands::ESP400(const char* cmd_params, level_authenticate_type auth_type,
output->print ("\",\"H\":\"session timeout\",\"M\":\"");
output->print (Settings_ESP3D::get_min_byte(ESP_SESSION_TIMEOUT));
output->print ("\"}");
//Secure Serial
output->print (",{\"F\":\"security/security\",\"P\":\"");
output->print (ESP_SECURE_SERIAL);
output->print ("\",\"T\":\"B\",\"V\":\"");
output->print (Settings_ESP3D::read_byte(ESP_SECURE_SERIAL));
output->print ("\",\"H\":\"serial\",\"O\":[{\"no\":\"0\"},{\"yes\":\"1\"}]}");
#endif //AUTHENTICATION_FEATURE
#ifdef HTTP_FEATURE

View File

@@ -85,6 +85,9 @@ bool Commands::ESP401(const char* cmd_params, level_authenticate_type auth_type,
case ESP_TARGET_FW:
Settings_ESP3D::GetFirmwareTarget(true);
break;
case ESP_SECURE_SERIAL:
serial_service.setParameters();
break;
#ifdef AUTHENTICATION_FEATURE
case ESP_SESSION_TIMEOUT:
AuthenticationService::setSessionTimeout(1000*60*sval.toInt());

View File

@@ -118,6 +118,7 @@
#define DEFAULT_NOTIFICATION_TOKEN2 ""
#define DEFAULT_NOTIFICATION_SETTINGS ""
#define DEFAULT_AUTO_NOTIFICATION_STATE 1
#define DEFAULT_SECURE_SERIAL 1
//default int values
@@ -239,6 +240,9 @@ uint8_t Settings_ESP3D::get_default_byte_value(int pos)
{
uint8_t res;
switch(pos) {
case ESP_SECURE_SERIAL:
res = DEFAULT_SECURE_SERIAL;
break;
case ESP_RADIO_MODE:
res = DEFAULT_ESP_RADIO_MODE;
break;
@@ -1068,7 +1072,7 @@ bool Settings_ESP3D::reset(bool networkonly)
Settings_ESP3D::write_IP(ESP_STA_GATEWAY_VALUE, Settings_ESP3D::get_default_IP_value(ESP_STA_GATEWAY_VALUE));
//STA static Mask
Settings_ESP3D::write_IP(ESP_STA_MASK_VALUE, Settings_ESP3D::get_default_IP_value(ESP_STA_MASK_VALUE));
//STA static DNS
//STA static DNS
Settings_ESP3D::write_IP(ESP_STA_DNS_VALUE, Settings_ESP3D::get_default_IP_value(ESP_STA_DNS_VALUE));
#endif //WIFI_FEATURE || ETH_FEATURE
if (networkonly) {
@@ -1095,7 +1099,8 @@ bool Settings_ESP3D::reset(bool networkonly)
Settings_ESP3D::write_byte(ESP_SETUP,Settings_ESP3D::get_default_byte_value(ESP_SETUP));
//Verbose boot
Settings_ESP3D::write_byte(ESP_VERBOSE_BOOT,Settings_ESP3D::get_default_byte_value(ESP_VERBOSE_BOOT));
//Secure Serial
Settings_ESP3D::write_byte(ESP_SECURE_SERIAL,Settings_ESP3D::get_default_byte_value(ESP_SECURE_SERIAL));
#if defined(DISPLAY_DEVICE) && defined(DISPLAY_TOUCH_DRIVER)
//Calibration done (internal only)
Settings_ESP3D::write_byte(ESP_CALIBRATION,Settings_ESP3D::get_default_byte_value(ESP_CALIBRATION));

View File

@@ -105,6 +105,7 @@
#define ESP_WEBDAV_ON 1024 //1 byte = flag
#define ESP_WEBDAV_PORT 1025 //4 bytes= int
#define ESP_STA_DNS_VALUE 1029 //4 bytes= int
#define ESP_SECURE_SERIAL 1033 //1 byte = flag
//Hidden password

View File

@@ -22,7 +22,7 @@
#define _VERSION_ESP3D_H
//version and sources location
#define FW_VERSION "3.0.0.a90"
#define FW_VERSION "3.0.0.a91"
#define REPOSITORY "https://github.com/luc-github/ESP3D/tree/3.0"
#endif //_VERSION_ESP3D_H

View File

@@ -48,7 +48,7 @@ uint8_t AuthenticationService::_current_nb_ip = 0;
//#define ALLOW_MULTIPLE_SESSIONS
//check authentification
level_authenticate_type AuthenticationService::authenticated_level(const char * pwd)
level_authenticate_type AuthenticationService::authenticated_level(const char * pwd, ESP3DOutput * output)
{
#ifdef AUTHENTICATION_FEATURE
level_authenticate_type auth_type = LEVEL_GUEST;
@@ -60,7 +60,13 @@ level_authenticate_type AuthenticationService::authenticated_level(const char *
if (isuser (pwd) && (auth_type != LEVEL_ADMIN)) {
auth_type = LEVEL_USER;
}
return auth_type;
} else {
if(output) {
if (output->client() !=ESP_HTTP_CLIENT) {
return auth_type;
}
}
#if defined (HTTP_FEATURE)
if (_webserver) {
if (_webserver->hasHeader ("Authorization") ) {
@@ -92,6 +98,7 @@ level_authenticate_type AuthenticationService::authenticated_level(const char *
return auth_type;
#else
(void)pwd;
(void)output;
return LEVEL_ADMIN;
#endif //AUTHENTICATION_FEATURE
}

View File

@@ -32,6 +32,7 @@ const char DEFAULT_ADMIN_LOGIN [] = "admin";
const char DEFAULT_USER_LOGIN [] = "user";
#include "../../include/esp3d_config.h"
#include "../../core/esp3doutput.h"
#if defined (AUTHENTICATION_FEATURE)
#if defined (HTTP_FEATURE)
#include <IPAddress.h>
@@ -58,7 +59,7 @@ typedef void Authwebserver;
class AuthenticationService
{
public:
static level_authenticate_type authenticated_level(const char * pwd = nullptr);
static level_authenticate_type authenticated_level(const char * pwd = nullptr, ESP3DOutput * output= nullptr);
#ifdef AUTHENTICATION_FEATURE
static bool begin(Authwebserver * webserver);
static void end();

View File

@@ -26,6 +26,7 @@
#if COMMUNICATION_PROTOCOL == MKS_SERIAL
#include "../mks/mks_service.h"
#endif //COMMUNICATION_PROTOCOL == MKS_SERIAL
#include "../authentication/authentication_service.h"
//Serial Parameters
#define ESP_SERIAL_PARAM SERIAL_8N1
@@ -59,6 +60,7 @@ SerialService::SerialService()
{
_buffer_size = 0;
_started = false;
_needauthentication = true;
}
//Destructor
@@ -79,12 +81,23 @@ void ESP3DSerialTaskfn( void * parameter )
}
#endif //ARDUINO_ARCH_ESP32
//extra parameters that do not need a begin
void SerialService::setParameters()
{
#if defined (AUTHENTICATION_FEATURE)
_needauthentication = (Settings_ESP3D::read_byte (ESP_SECURE_SERIAL)==0)?false:true;
#else
_needauthentication = false;
#endif //AUTHENTICATION_FEATURE
}
//Setup Serial
bool SerialService::begin()
{
_lastflush = millis();
//read from settings
long br = Settings_ESP3D::read_uint32(ESP_BAUD_RATE);
setParameters();
_buffer_size = 0;
//change only if different from current
if (br != baudRate() || (ESP_RX_PIN != -1) || (ESP_TX_PIN != -1)) {
@@ -197,7 +210,7 @@ void SerialService::flushbuffer()
ESP3DOutput output(ESP_SERIAL_CLIENT);
_buffer[_buffer_size] = 0x0;
//dispatch command
esp3d_commands.process(_buffer, _buffer_size, &output);
esp3d_commands.process(_buffer, _buffer_size, &output,_needauthentication?LEVEL_GUEST:LEVEL_ADMIN);
_lastflush = millis();
_buffer_size = 0;
}

View File

@@ -30,6 +30,7 @@ class SerialService : public Print
public:
SerialService();
~SerialService();
void setParameters();
bool begin();
bool end();
void updateBaudRate(long br);
@@ -73,6 +74,7 @@ public:
}
private:
bool _started;
bool _needauthentication;
uint32_t _lastflush;
uint8_t _buffer[ESP3D_SERIAL_BUFFER_SIZE + 1]; //keep space of 0x0 terminal
size_t _buffer_size;

View File

@@ -148,7 +148,8 @@ const char * SysboolKeysVal[] = {"Active_Printer_LCD",
"Active_WebSocket",
"Active_Telnet",
"Active_BT",
"Boot_verbose"
"Boot_verbose",
"Secure_serial"
} ;
const uint16_t SysboolKeysPos[] = {ESP_PRINTER_LCD_FLAG,
@@ -157,7 +158,8 @@ const uint16_t SysboolKeysPos[] = {ESP_PRINTER_LCD_FLAG,
ESP_WEBSOCKET_FLAG,
ESP_TELNET_FLAG,
ESP_BT_FLAG,
ESP_VERBOSE_BOOT
ESP_VERBOSE_BOOT,
ESP_SECURE_SERIAL
} ;
const char * NetbyteKeysVal[] = {