adminforth 1.5.4-next.2 → 1.5.4-next.3
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/dist/modules/socketBroker.d.ts.map +1 -1
- package/dist/modules/socketBroker.js +7 -1
- package/dist/modules/socketBroker.js.map +1 -1
- package/dist/spa/src/App.vue +1 -0
- package/dist/spa/src/stores/core.ts +6 -0
- package/dist/spa/src/stores/user.ts +8 -1
- package/dist/spa/src/websocket.ts +24 -10
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socketBroker.d.ts","sourceRoot":"","sources":["../../modules/socketBroker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEnF,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,gBAAgB;IAC3D,OAAO,EAAE,gBAAgB,EAAE,CAAM;IACjC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KAAE,CAAM;IACnD,UAAU,EAAE,WAAW,CAAC;IACxB,kBAAkB,UAAS;gBAEf,UAAU,EAAE,WAAW;IAI7B,YAAY;IAYZ,gBAAgB;IActB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM;IAO7D,mBAAmB,CAAC,KAAK,EAAE,MAAM;IASjC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"socketBroker.d.ts","sourceRoot":"","sources":["../../modules/socketBroker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEnF,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,gBAAgB;IAC3D,OAAO,EAAE,gBAAgB,EAAE,CAAM;IACjC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KAAE,CAAM;IACnD,UAAU,EAAE,WAAW,CAAC;IACxB,kBAAkB,UAAS;gBAEf,UAAU,EAAE,WAAW;IAI7B,YAAY;IAYZ,gBAAgB;IActB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM;IAO7D,mBAAmB,CAAC,KAAK,EAAE,MAAM;IASjC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IA2DhD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;CASjC"}
|
|
@@ -56,7 +56,13 @@ export default class SocketBroker {
|
|
|
56
56
|
const data = JSON.parse(message);
|
|
57
57
|
if (data.type === 'subscribe') {
|
|
58
58
|
if (this.adminforth.config.auth.websocketTopicAuth) {
|
|
59
|
-
|
|
59
|
+
let authResult = false;
|
|
60
|
+
try {
|
|
61
|
+
authResult = await this.adminforth.config.auth.websocketTopicAuth(data.topic, client.adminUser);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.error('Error in websocketTopicAuth, assuming connection not allowed', e);
|
|
65
|
+
}
|
|
60
66
|
if (!authResult) {
|
|
61
67
|
client.send(JSON.stringify({ type: 'error', message: 'Unauthorized' }));
|
|
62
68
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socketBroker.js","sourceRoot":"","sources":["../../modules/socketBroker.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,YAAY;IAM/B,YAAY,UAAuB;QALnC,YAAO,GAAuB,EAAE,CAAC;QACjC,WAAM,GAA0C,EAAE,CAAC;QAEnD,uBAAkB,GAAG,KAAK,CAAC;QAGzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAE/B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAM,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,KAAM,EAAE,CAAC;gBACnC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC3B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB,CAAC,MAAwB,EAAE,KAAa;QAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,mBAAmB,CAAC,KAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,MAAwB;QACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACjC,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBACnD,
|
|
1
|
+
{"version":3,"file":"socketBroker.js","sourceRoot":"","sources":["../../modules/socketBroker.ts"],"names":[],"mappings":"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"}
|
package/dist/spa/src/App.vue
CHANGED
|
@@ -27,6 +27,11 @@ export const useCoreStore = defineStore('core', () => {
|
|
|
27
27
|
const resourceColumnsId = ref(null);
|
|
28
28
|
const adminUser = ref(null);
|
|
29
29
|
|
|
30
|
+
|
|
31
|
+
async function resetAdminUser() {
|
|
32
|
+
adminUser.value = null;
|
|
33
|
+
}
|
|
34
|
+
|
|
30
35
|
async function toggleTheme() {
|
|
31
36
|
theme.value = theme.value === 'light' ? 'dark' : 'light';
|
|
32
37
|
if (theme.value === 'light') {
|
|
@@ -194,5 +199,6 @@ export const useCoreStore = defineStore('core', () => {
|
|
|
194
199
|
toggleTheme,
|
|
195
200
|
theme,
|
|
196
201
|
fetchMenuBadges,
|
|
202
|
+
resetAdminUser,
|
|
197
203
|
}
|
|
198
204
|
})
|
|
@@ -3,7 +3,7 @@ import { defineStore } from 'pinia';
|
|
|
3
3
|
import { callAdminForthApi } from '@/utils';
|
|
4
4
|
import { useCoreStore } from './core';
|
|
5
5
|
import router from '@/router';
|
|
6
|
-
|
|
6
|
+
import { reconnect } from '@/websocket';
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
export const useUserStore = defineStore('user', () => {
|
|
@@ -22,17 +22,24 @@ export const useUserStore = defineStore('user', () => {
|
|
|
22
22
|
async function finishLogin() {
|
|
23
23
|
const coreStore = useCoreStore();
|
|
24
24
|
authorize(); // TODO not sure we need this approach with localStorage
|
|
25
|
+
reconnect();
|
|
25
26
|
await router.push('/');
|
|
26
27
|
await router.isReady();
|
|
27
28
|
await coreStore.fetchMenuAndResource();
|
|
29
|
+
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
async function logout() {
|
|
33
|
+
const coreStore = useCoreStore();
|
|
34
|
+
|
|
31
35
|
await callAdminForthApi({
|
|
32
36
|
path: '/logout',
|
|
33
37
|
method: 'POST',
|
|
34
38
|
});
|
|
39
|
+
reconnect();
|
|
40
|
+
coreStore.resetAdminUser();
|
|
35
41
|
unauthorize();
|
|
42
|
+
|
|
36
43
|
}
|
|
37
44
|
|
|
38
45
|
// async function checkAuth( skipApiCall = false){
|
|
@@ -17,12 +17,16 @@ function doPhysicalUnsubscribe(topic: string) {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
async function
|
|
20
|
+
async function connect () {
|
|
21
21
|
// if socket is not supported return
|
|
22
22
|
if (!window.WebSocket) {
|
|
23
23
|
console.error('Websocket not supported by this browser');
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
|
+
if (state.ws?.connected) {
|
|
27
|
+
console.error('🔌 AFWS already connected');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
26
30
|
state.ws = new WebSocket(`${
|
|
27
31
|
window.location.protocol === 'http:' ? 'ws' : 'wss'
|
|
28
32
|
}://${window.location.host}/afws`);
|
|
@@ -54,23 +58,33 @@ async function init() {
|
|
|
54
58
|
console.log('🔌 AFWS disconnected');
|
|
55
59
|
state.status = 'disconnected';
|
|
56
60
|
setTimeout(() => {
|
|
57
|
-
console.log('🔌 AFWS reconnecting');
|
|
58
|
-
|
|
59
|
-
},
|
|
61
|
+
console.log('🔌 AFWS reconnecting after close');
|
|
62
|
+
connect();
|
|
63
|
+
}, 2_000);
|
|
60
64
|
});
|
|
61
65
|
}
|
|
62
66
|
|
|
67
|
+
try {
|
|
68
|
+
connect();
|
|
69
|
+
} catch (e) {
|
|
70
|
+
console.error('🔌 AFWS failed to connect', e);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function reconnect() {
|
|
74
|
+
console.log('🔌 AFWS reconnect initiated');
|
|
75
|
+
// disconnect if already connected
|
|
76
|
+
if (state.status === 'connected') {
|
|
77
|
+
state.ws!.close();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
63
82
|
setInterval(() => {
|
|
64
83
|
if (state.status === 'connected') {
|
|
65
84
|
state.ws!.send('ping');
|
|
66
85
|
}
|
|
67
86
|
}, 10_000);
|
|
68
87
|
|
|
69
|
-
try {
|
|
70
|
-
init();
|
|
71
|
-
} catch (e) {
|
|
72
|
-
console.error('Failed to initialize websocket', e);
|
|
73
|
-
}
|
|
74
88
|
|
|
75
89
|
export default {
|
|
76
90
|
subscribe(topic: string, callback: (data: any) => void): void {
|
|
@@ -88,7 +102,7 @@ export default {
|
|
|
88
102
|
if (state.status === 'connected') {
|
|
89
103
|
doPhysicalUnsubscribe(topic);
|
|
90
104
|
}
|
|
91
|
-
}
|
|
105
|
+
},
|
|
92
106
|
|
|
93
107
|
unsubscribeAll(): void {
|
|
94
108
|
Object.keys(subscriptions).forEach((topic) => {
|