2020-04-23 04:52:11 -05:00
|
|
|
import React from 'react';
|
2020-05-04 08:05:31 -05:00
|
|
|
import { Badge, BadgeProps } from '@grafana/ui';
|
|
|
|
import { PluginSignatureStatus } from '@grafana/data';
|
2020-04-23 04:52:11 -05:00
|
|
|
|
|
|
|
interface Props {
|
2020-07-08 04:05:20 -05:00
|
|
|
status?: PluginSignatureStatus;
|
2020-04-23 04:52:11 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
export const PluginSignatureBadge: React.FC<Props> = ({ status }) => {
|
|
|
|
const display = getSignatureDisplayModel(status);
|
2020-05-04 08:05:31 -05:00
|
|
|
return <Badge text={display.text} color={display.color} icon={display.icon} tooltip={display.tooltip} />;
|
2020-04-26 06:16:31 -05:00
|
|
|
};
|
|
|
|
|
2020-07-08 04:05:20 -05:00
|
|
|
function getSignatureDisplayModel(signature?: PluginSignatureStatus): BadgeProps {
|
|
|
|
if (!signature) {
|
|
|
|
signature = PluginSignatureStatus.invalid;
|
|
|
|
}
|
|
|
|
|
2020-04-23 04:52:11 -05:00
|
|
|
switch (signature) {
|
|
|
|
case PluginSignatureStatus.internal:
|
|
|
|
return { text: 'Core', icon: 'cube', color: 'blue', tooltip: 'Core plugin that is bundled with Grafana' };
|
|
|
|
case PluginSignatureStatus.valid:
|
|
|
|
return { text: 'Signed', icon: 'lock', color: 'green', tooltip: 'Signed and verified plugin' };
|
|
|
|
case PluginSignatureStatus.invalid:
|
|
|
|
return {
|
|
|
|
text: 'Invalid',
|
|
|
|
icon: 'exclamation-triangle',
|
|
|
|
color: 'red',
|
|
|
|
tooltip: 'Invalid plugin signature',
|
|
|
|
};
|
|
|
|
case PluginSignatureStatus.modified:
|
|
|
|
return {
|
|
|
|
text: 'Modified',
|
|
|
|
icon: 'exclamation-triangle',
|
|
|
|
color: 'red',
|
|
|
|
tooltip: 'Valid signature but content has been modified',
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
return { text: 'Unsigned', icon: 'exclamation-triangle', color: 'red', tooltip: 'Unsigned external plugin' };
|
|
|
|
}
|
|
|
|
|
|
|
|
PluginSignatureBadge.displayName = 'PluginSignatureBadge';
|