Add authentication to websocket

This commit is contained in:
Thomas Basler 2022-11-23 21:00:54 +01:00
parent cc342673df
commit 2a19b46d52
3 changed files with 23 additions and 3 deletions

View File

@ -5,8 +5,8 @@
#include "WebApi_ws_live.h" #include "WebApi_ws_live.h"
#include "AsyncJson.h" #include "AsyncJson.h"
#include "Configuration.h" #include "Configuration.h"
#include "defaults.h"
#include "WebApi.h" #include "WebApi.h"
#include "defaults.h"
WebApiWsLiveClass::WebApiWsLiveClass() WebApiWsLiveClass::WebApiWsLiveClass()
: _ws("/livedata") : _ws("/livedata")
@ -66,6 +66,13 @@ void WebApiWsLiveClass::loop()
String buffer; String buffer;
if (buffer) { if (buffer) {
serializeJson(root, buffer); serializeJson(root, buffer);
if (Configuration.get().Security_AllowReadonly) {
_ws.setAuthentication("", "");
} else {
_ws.setAuthentication(AUTH_USERNAME, Configuration.get().Security_Password);
}
_ws.textAll(buffer); _ws.textAll(buffer);
} }

View File

@ -16,6 +16,18 @@ export function authHeader(): Headers {
return new Headers(headers); return new Headers(headers);
} }
export function authUrl(): string {
let user = null;
try {
user = JSON.parse(localStorage.getItem('user') || "");
} catch { }
if (user && user.authdata) {
return encodeURIComponent(atob(user.authdata)).replace("%3A", ":") + '@';
}
return "";
}
export function logout() { export function logout() {
// remove user from local storage to log user out // remove user from local storage to log user out
localStorage.removeItem('user'); localStorage.removeItem('user');

View File

@ -342,7 +342,7 @@ import type { EventlogItems } from '@/types/EventlogStatus';
import type { LiveData, Inverter } from '@/types/LiveDataStatus'; import type { LiveData, Inverter } from '@/types/LiveDataStatus';
import type { LimitStatus } from '@/types/LimitStatus'; import type { LimitStatus } from '@/types/LimitStatus';
import type { LimitConfig } from '@/types/LimitConfig'; import type { LimitConfig } from '@/types/LimitConfig';
import { isLoggedIn, handleResponse, authHeader } from '@/utils/authentication'; import { isLoggedIn, handleResponse, authHeader, authUrl } from '@/utils/authentication';
import { formatNumber } from '@/utils'; import { formatNumber } from '@/utils';
export default defineComponent({ export default defineComponent({
@ -474,8 +474,9 @@ export default defineComponent({
console.log("Starting connection to WebSocket Server"); console.log("Starting connection to WebSocket Server");
const { protocol, host } = location; const { protocol, host } = location;
const authString = authUrl();
const webSocketUrl = `${protocol === "https:" ? "wss" : "ws" const webSocketUrl = `${protocol === "https:" ? "wss" : "ws"
}://${host}/livedata`; }://${authString}${host}/livedata`;
this.socket = new WebSocket(webSocketUrl); this.socket = new WebSocket(webSocketUrl);