|
@@ -182,7 +182,17 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t er
|
|
|
seclevel = 0xFF;
|
|
|
}
|
|
|
|
|
|
- if ( Authenticated == false )
|
|
|
+ if ( Authenticated == false && sSettings.sRADIUS.Auth_enable == false)
|
|
|
+ {
|
|
|
+ HTTP_LOGIN(sendBuf, &sendBufLoadLen);
|
|
|
+
|
|
|
+ hs->file = sendBuf;
|
|
|
+ hs->left = sendBufLoadLen;
|
|
|
+ send_data(pcb, hs);
|
|
|
+ tcp_sent(pcb, http_sent);
|
|
|
+ }
|
|
|
+
|
|
|
+ else if ( Authenticated == false )//&& sSettings.sRADIUS.Auth_enable == true
|
|
|
{
|
|
|
if (strncmp(data, "GET /main.css", 13) == 0) // +
|
|
|
{
|
|
@@ -405,11 +415,20 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t er
|
|
|
else if (strncmp(data, "GET /settings.html", 18) == 0) // +
|
|
|
{
|
|
|
HTTP_UpdateUserLoginTime(user_id);
|
|
|
- fs_open("/settings.html", &file);
|
|
|
- hs->file = file.data;
|
|
|
- hs->left = file.len;
|
|
|
- send_data(pcb, hs);
|
|
|
- tcp_sent(pcb, http_sent);
|
|
|
+ if (seclevel == 0){
|
|
|
+ fs_open("/settings.html", &file);
|
|
|
+ hs->file = file.data;
|
|
|
+ hs->left = file.len;
|
|
|
+ send_data(pcb, hs);
|
|
|
+ tcp_sent(pcb, http_sent);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ fs_open("/index.html", &file);
|
|
|
+ hs->file = file.data;
|
|
|
+ hs->left = file.len;
|
|
|
+ send_data(pcb, hs);
|
|
|
+ tcp_sent(pcb, http_sent);
|
|
|
+ }
|
|
|
}
|
|
|
else if (strncmp(data, "GET /info.html", 14) == 0) // +
|
|
|
{
|
|
@@ -432,21 +451,23 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t er
|
|
|
{
|
|
|
SET_PAGE = SET_PAGE_PAGE2;
|
|
|
|
|
|
- if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen) == SEND_REQUIRED_YES)
|
|
|
- {
|
|
|
- hs->file = sendBuf;
|
|
|
- hs->left = sendBufLoadLen;
|
|
|
- send_data(pcb, hs);
|
|
|
- tcp_sent(pcb, http_sent);
|
|
|
+ if (seclevel == 0) {
|
|
|
+ if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen) == SEND_REQUIRED_YES)
|
|
|
+ {
|
|
|
+ hs->file = sendBuf;
|
|
|
+ hs->left = sendBufLoadLen;
|
|
|
+ send_data(pcb, hs);
|
|
|
+ tcp_sent(pcb, http_sent);
|
|
|
+ }
|
|
|
+ /*else
|
|
|
+ {
|
|
|
+ fs_open("/settings.html", &file);
|
|
|
+ hs->file = file.data;
|
|
|
+ hs->left = file.len;
|
|
|
+ send_data(pcb, hs);
|
|
|
+ tcp_sent(pcb, http_sent);
|
|
|
+ }*/
|
|
|
}
|
|
|
- /*else
|
|
|
- {
|
|
|
- fs_open("/settings.html", &file);
|
|
|
- hs->file = file.data;
|
|
|
- hs->left = file.len;
|
|
|
- send_data(pcb, hs);
|
|
|
- tcp_sent(pcb, http_sent);
|
|
|
- }*/
|
|
|
}
|
|
|
else if (strncmp(data, "POST /settings.cgi", 18) == 0)
|
|
|
{
|
|
@@ -473,14 +494,30 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t er
|
|
|
send_data(pcb, hs);
|
|
|
tcp_sent(pcb, http_sent);
|
|
|
}
|
|
|
- else
|
|
|
+ /* else
|
|
|
{
|
|
|
fs_open("/info.html", &file);
|
|
|
hs->file = file.data;
|
|
|
hs->left = file.len;
|
|
|
send_data(pcb, hs);
|
|
|
tcp_sent(pcb, http_sent);
|
|
|
- }
|
|
|
+ }*/
|
|
|
+ }
|
|
|
+ else if (strncmp(data, "POST /info.cgi", 14) == 0)
|
|
|
+ {
|
|
|
+ strncat(&receiveBuf, " ", 1);
|
|
|
+ HTTP_SetInfo(receiveBuf, receivedBufLen);
|
|
|
+ memset(sendBuf, 0, SEND_BUF_MAX_LEN);
|
|
|
+
|
|
|
+ strcpy(sendBuf, "HTTP/1.1 200 OK\r\n");
|
|
|
+ strcat(sendBuf, "\r\n\r\n");
|
|
|
+ strcat(sendBuf,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/info.html\"/></head></html>\r\n\r\n");
|
|
|
+
|
|
|
+ sendBufLoadLen = strlen(sendBuf);
|
|
|
+ hs->file = sendBuf;
|
|
|
+ hs->left = sendBufLoadLen;
|
|
|
+ send_data(pcb, hs);
|
|
|
+ tcp_sent(pcb, http_sent);
|
|
|
}
|
|
|
/* Тест АКБ ИБП */
|
|
|
else if (strncmp(data, "POST /bat_test.cgi", 18) == 0)
|
|
@@ -532,7 +569,7 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t er
|
|
|
tcp_sent(pcb, http_sent);
|
|
|
}
|
|
|
/* Проверка пароля, переход в bootloader */
|
|
|
- else if (strncmp(data, "POST /fw_update.cgi", 18) == 0)
|
|
|
+ else if (strncmp(data, "GET /fw_update.cgi", 18) == 0)
|
|
|
{
|
|
|
HTTP_ConfirmBootPwd(receiveBuf, sendBuf, receivedBufLen, &sendBufLoadLen);
|
|
|
|
|
@@ -782,7 +819,7 @@ int HTTP_SettingsPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *le
|
|
|
/* В запросе есть параметры, нужно парсить и сохранять настройки */
|
|
|
else
|
|
|
{
|
|
|
- HTTP_SetSettings(bufIn, lenBufIn);
|
|
|
+ //HTTP_SetSettings(bufIn, lenBufIn);
|
|
|
|
|
|
return SEND_REQUIRED_NO;
|
|
|
}
|
|
@@ -811,7 +848,7 @@ int HTTP_InfoPage(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBuf
|
|
|
/* В запросе есть параметры, нужно парсить и сохранять настройки */
|
|
|
else
|
|
|
{
|
|
|
- HTTP_SetInfo(bufIn, lenBufIn);
|
|
|
+ //HTTP_SetInfo(bufIn, lenBufIn);
|
|
|
return SEND_REQUIRED_NO;
|
|
|
/*
|
|
|
HTTP_SetSettings(bufIn, lenBufIn);
|
|
@@ -906,7 +943,7 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
|
|
|
SetDhcpStateStr(value);
|
|
|
|
|
|
if (strncmp(value, "on", 2) != 0) // Если dhcp off устанавливаем параметры
|
|
|
- {
|
|
|
+ {
|
|
|
memset(value, 0, len);
|
|
|
|
|
|
GetParamValue(buf, "ipaddr=", value, &valueLen);
|
|
@@ -921,29 +958,39 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
|
|
|
SetMaskStr(value);
|
|
|
memset(value, 0, len);
|
|
|
}
|
|
|
- memset(value, 0, len);
|
|
|
+ memset(value, 0, len);
|
|
|
|
|
|
- /* параметры RADIUS*/
|
|
|
- GetParamValue(buf, "rs_enabled=", value, &valueLen);
|
|
|
- SetRDSEnableStateStr(value);
|
|
|
+ GetParamValue(buf, "auth=", value, &valueLen);
|
|
|
+ SetAuthEnableStateStr(value);
|
|
|
|
|
|
- memset(value, 0, len);
|
|
|
+ memset(value, 0, len);
|
|
|
|
|
|
- GetParamValue(buf, "rs_server=", value, &valueLen);
|
|
|
- SetRDSIpStr(value);
|
|
|
- memset(value, 0, len);
|
|
|
+ if (strncmp(value, "on", 2) == 0){
|
|
|
+ /* параметры RADIUS*/
|
|
|
+ GetParamValue(buf, "rs_enabled=", value, &valueLen);
|
|
|
+ SetRDSEnableStateStr(value);
|
|
|
|
|
|
- GetParamValue(buf, "rs_port=", value, &valueLen);
|
|
|
- SetRDSPortStr(value);
|
|
|
- memset(value, 0, len);
|
|
|
+ memset(value, 0, len);
|
|
|
|
|
|
- GetParamValue(buf, "rs_pwd=", value, &valueLen);
|
|
|
- SetRDSPasswordkStr(value);
|
|
|
- memset(value, 0, len);
|
|
|
+ if (strncmp(value, "on", 2) == 0) // Если raddius off устанавливаем параметры
|
|
|
+ {
|
|
|
+ GetParamValue(buf, "rs_server=", value, &valueLen);
|
|
|
+ SetRDSIpStr(value);
|
|
|
+ memset(value, 0, len);
|
|
|
|
|
|
- GetParamValue(buf, "rs_key=", value, &valueLen);
|
|
|
- SetRDSKeyAccesstStr(value);
|
|
|
- memset(value, 0, len);
|
|
|
+ GetParamValue(buf, "rs_port=", value, &valueLen);
|
|
|
+ SetRDSPortStr(value);
|
|
|
+ memset(value, 0, len);
|
|
|
+
|
|
|
+ GetParamValue(buf, "rs_pwd=", value, &valueLen);
|
|
|
+ SetRDSPasswordkStr(value);
|
|
|
+ memset(value, 0, len);
|
|
|
+
|
|
|
+ GetParamValue(buf, "rs_key=", value, &valueLen);
|
|
|
+ SetRDSKeyAccesstStr(value);
|
|
|
+ memset(value, 0, len);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// Параметры реле и сухих контактов
|
|
|
GetParamValue(buf, "di1=", value, &valueLen);
|
|
@@ -1008,27 +1055,28 @@ void HTTP_SetInfo(char *buf, uint16_t lenBuf)
|
|
|
uint8_t valueLen = 0;
|
|
|
const uint8_t len = 110;
|
|
|
char value[110];
|
|
|
+ char str[110];
|
|
|
|
|
|
- ClearParamString(buf);
|
|
|
+ // ClearParamString(buf);
|
|
|
|
|
|
memset(value, 0, len);
|
|
|
|
|
|
/* Владелец */
|
|
|
GetParamValue(buf, "owner=", value, &valueLen);
|
|
|
- HTTP_ReplaceSimbol(value, '+', ' ');
|
|
|
- SetOwner(value);
|
|
|
+ url_decode(str, sizeof(str), value);
|
|
|
+ SetOwner(str);
|
|
|
memset(value, 0, len);
|
|
|
|
|
|
/* Владелец */
|
|
|
GetParamValue(buf, "sysLocation=", value, &valueLen);
|
|
|
- HTTP_ReplaceSimbol(value, '+', ' ');
|
|
|
- SetLocation(value);
|
|
|
+ url_decode(str, sizeof(str), value);
|
|
|
+ SetLocation(str);
|
|
|
memset(value, 0, len);
|
|
|
|
|
|
/* Комментарий */
|
|
|
GetParamValue(buf, "comment=", value, &valueLen);
|
|
|
- HTTP_ReplaceSimbol(value, '+', ' ');
|
|
|
- SetComment(value);
|
|
|
+ url_decode(str, sizeof(str), value);
|
|
|
+ SetComment(str);
|
|
|
memset(value, 0, len);
|
|
|
|
|
|
HTTP_SaveSettings();
|
|
@@ -1259,6 +1307,39 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
|
|
|
return SEND_REQUIRED_NO;
|
|
|
}
|
|
|
|
|
|
+void HTTP_LOGIN(char *bufOut, uint16_t *lenBufOut)
|
|
|
+{
|
|
|
+ char tempStr[50];
|
|
|
+ uint8_t valueLen;
|
|
|
+ char WebLogin[MAX_WEB_LOGIN_LEN];
|
|
|
+
|
|
|
+ GetUserLogin(ADMIN, WebLogin, &valueLen);
|
|
|
+
|
|
|
+ memset(tempStr, 0, 50);
|
|
|
+
|
|
|
+ /* TODO replace global flag with user-pass-cookie */
|
|
|
+ Authenticated = true;
|
|
|
+
|
|
|
+ /* Generate cookie */
|
|
|
+ sprintf(tempStr, "%X", (unsigned int)GetRandomNumber());
|
|
|
+
|
|
|
+ /* Set users cookie */
|
|
|
+ HTTP_SetUserCookie(tempStr, ADMIN);
|
|
|
+
|
|
|
+ HTTP_UpdateUserLoginTime(ADMIN);
|
|
|
+
|
|
|
+ /* Send login and cookie back */
|
|
|
+ strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nSet-Cookie: uname=");
|
|
|
+ strcat(bufOut, WebLogin);
|
|
|
+ strcat(bufOut, "\r\nSet-Cookie: id=");
|
|
|
+ strcat(bufOut, tempStr);
|
|
|
+ strcat(bufOut, "\r\nSet-Cookie: role=0");
|
|
|
+ strcat(bufOut, "\r\n\r\n");
|
|
|
+ strcat(bufOut,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/index.html\"/></head></html>\r\n\r\n");
|
|
|
+
|
|
|
+ *lenBufOut = strlen(bufOut);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* @brief
|
|
|
* @retval None
|
|
@@ -1372,24 +1453,6 @@ void ClearParamString(char *inBuf)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * @brief Замена символа в строке
|
|
|
- * @param *str - входная строка
|
|
|
- * @param sim1 - символ который надо заменить
|
|
|
- * @param sim2 - символ на который надо заменить
|
|
|
- */
|
|
|
-void HTTP_ReplaceSimbol(char *str, char sim1, char sim2)
|
|
|
-{
|
|
|
- uint16_t len = strlen(str);
|
|
|
-
|
|
|
- for (uint16_t i = 0; i < len; i++)
|
|
|
- {
|
|
|
- if (*str == sim1)
|
|
|
- *str = sim2;
|
|
|
- str++;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* @brief Чтение Cookie пользователя
|
|
|
*/
|
|
@@ -1479,8 +1542,8 @@ static void HTTP_ForceUserLogout(uint8_t user_id)
|
|
|
*/
|
|
|
void LogoutTimerCallback(TimerHandle_t pxTimer) {
|
|
|
uint8_t user_id = (uint8_t)pvTimerGetTimerID( pxTimer );
|
|
|
-
|
|
|
- HTTP_ForceUserLogout(user_id);
|
|
|
+ if( sSettings.sRADIUS.Auth_enable )
|
|
|
+ HTTP_ForceUserLogout(user_id);
|
|
|
}
|
|
|
|
|
|
/**
|