bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/plugins-engine/loader/manager.tsx
Lucas bdfde2befd
feat(plugin): Verify plugin integrity with 'checksum' option (#20693)
* feat(plugin): Verify plugin integrity with 'checksum' option

* fix(types): Add optional checksum type definition in PluginConfig
2024-07-15 16:34:14 -04:00

44 lines
1.2 KiB
TypeScript

import { PluginLoaderManagerProps } from './types';
import { useEffect } from 'react';
import logger from '/imports/startup/client/logger';
const PluginLoaderManager = (props: PluginLoaderManagerProps) => {
const {
uuid,
containerRef,
loadedPlugins,
setLastLoadedPlugin,
pluginConfig: plugin,
} = props;
useEffect(() => {
if (!plugin || !containerRef) {
return;
}
const div = document.createElement('div');
div.id = uuid;
containerRef.current?.appendChild(div);
const script = document.createElement('script');
script.onload = () => {
loadedPlugins.current += 1;
setLastLoadedPlugin(script);
logger.info(`Loaded plugin ${plugin.name}`);
};
script.onerror = (err) => {
logger.error(`Error when loading plugin ${plugin.name}, error: `, err);
};
script.src = plugin.url;
script.setAttribute('uuid', div.id);
script.setAttribute('pluginName', plugin.name);
if (plugin.checksum) {
script.setAttribute('integrity', plugin.checksum);
}
document.head.appendChild(script);
}, [plugin, containerRef]);
return null;
};
export default PluginLoaderManager;