import api from '@/store/api'; import i18n from '@/i18n'; const transferProtocolType = { CIFS: 'CIFS', FTP: 'FTP', SFTP: 'SFTP', HTTP: 'HTTP', HTTPS: 'HTTPS', NFS: 'NFS', SCP: 'SCP', TFTP: 'TFTP', OEM: 'OEM', }; const VirtualMediaStore = { namespaced: true, state: { proxyDevices: [], legacyDevices: [], connections: [], }, getters: { proxyDevices: (state) => state.proxyDevices, legacyDevices: (state) => state.legacyDevices, }, mutations: { setProxyDevicesData: (state, deviceData) => (state.proxyDevices = deviceData), setLegacyDevicesData: (state, deviceData) => (state.legacyDevices = deviceData), }, actions: { async getData({ commit }) { const virtualMediaListEnabled = process.env.VUE_APP_VIRTUAL_MEDIA_LIST_ENABLED === 'true' ? true : false; if (!virtualMediaListEnabled) { const device = { id: i18n.t('pageVirtualMedia.defaultDeviceName'), websocket: '/vm/0/0', file: null, transferProtocolType: transferProtocolType.OEM, isActive: false, }; commit('setProxyDevicesData', [device]); return; } return await api .get('/redfish/v1/Managers/bmc/VirtualMedia') .then((response) => response.data.Members.map((virtualMedia) => virtualMedia['@odata.id']) ) .then((devices) => api.all(devices.map((device) => api.get(device)))) .then((devices) => { const deviceData = devices.map((device) => { const isActive = device.data?.Inserted === true ? true : false; return { id: device.data?.Id, transferProtocolType: device.data?.TransferProtocolType, websocket: device.data?.Oem?.OpenBMC?.WebSocketEndpoint, isActive: isActive, }; }); const proxyDevices = deviceData .filter((d) => d.transferProtocolType === transferProtocolType.OEM) .map((device) => { return { ...device, file: null, }; }); const legacyDevices = deviceData .filter((d) => d.transferProtocolType !== transferProtocolType.OEM) .map((device) => { return { ...device, serverUri: '', username: '', password: '', isRW: false, }; }); commit('setProxyDevicesData', proxyDevices); commit('setLegacyDevicesData', legacyDevices); }) .catch((error) => { console.log('Virtual Media:', error); }); }, async mountImage(_, { id, data }) { return await api .post( `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.InsertMedia`, data ) .catch((error) => { console.log('Mount image:', error); throw new Error(); }); }, async unmountImage(_, id) { return await api .post( `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.EjectMedia` ) .catch((error) => { console.log('Unmount image:', error); throw new Error(); }); }, }, }; export default VirtualMediaStore;