mirror of
https://github.com/harvester/harvester-ui-extension.git
synced 2026-02-04 06:51:44 +00:00
117 lines
3.1 KiB
JavaScript
117 lines
3.1 KiB
JavaScript
import { clone } from '@shell/utils/object';
|
|
import { HCI } from '../../types';
|
|
import { PRODUCT_NAME as HARVESTER_PRODUCT } from '../../config/harvester';
|
|
import Secret from '@shell/models/secret';
|
|
import { NAMESPACE } from '@shell/config/types';
|
|
|
|
export default class HciSecret extends Secret {
|
|
// prevent harvester secret detail page be overridden.
|
|
// See isFullPageOverride in https://github.com/rancher/dashboard/blob/master/shell/components/ResourceDetail/index.vue
|
|
get fullDetailPageOverride() {
|
|
return false;
|
|
}
|
|
|
|
get listLocation() {
|
|
const listLocation = clone(super.listLocation);
|
|
|
|
listLocation.name = this.harvesterResourcesInExplorer ? 'c-cluster-product-resource' : `${ HARVESTER_PRODUCT }-c-cluster-resource`;
|
|
listLocation.params.resource = HCI.SECRET;
|
|
|
|
return listLocation;
|
|
}
|
|
|
|
get harvesterResourcesInExplorer() {
|
|
return this.$rootGetters['productId'] !== HARVESTER_PRODUCT;
|
|
}
|
|
|
|
get _detailLocation() {
|
|
const schema = this.$getters['schemaFor'](this.type);
|
|
|
|
const id = this.id?.replace(/.*\//, '');
|
|
|
|
return {
|
|
name: `${ HARVESTER_PRODUCT }-c-cluster-resource${ schema?.attributes?.namespaced ? '-namespace' : '' }-id`,
|
|
params: {
|
|
product: HARVESTER_PRODUCT,
|
|
cluster: this.$rootGetters['clusterId'],
|
|
resource: this.type,
|
|
id,
|
|
namespace: this.metadata.namespace,
|
|
},
|
|
};
|
|
}
|
|
|
|
get detailLocation() {
|
|
const detailLocation = clone(this._detailLocation);
|
|
|
|
detailLocation.params.resource = HCI.SECRET;
|
|
|
|
return detailLocation;
|
|
}
|
|
|
|
get doneOverride() {
|
|
const detailLocation = clone(this._detailLocation);
|
|
|
|
delete detailLocation.params.namespace;
|
|
delete detailLocation.params.id;
|
|
detailLocation.params.resource = HCI.SECRET;
|
|
detailLocation.name = `${ HARVESTER_PRODUCT }-c-cluster-resource`;
|
|
|
|
return detailLocation;
|
|
}
|
|
|
|
get doneRoute() {
|
|
return this.doneOverride.name;
|
|
}
|
|
|
|
get parentNameOverride() {
|
|
return this.$rootGetters['i18n/t'](`typeLabel."${ HCI.SECRET }"`, { count: 1 })?.trim();
|
|
}
|
|
|
|
get parentLocationOverride() {
|
|
return this.doneOverride;
|
|
}
|
|
|
|
get isSystem() {
|
|
const inStore = this.$rootGetters['currentProduct'].inStore;
|
|
|
|
const systemNs = this.$rootGetters[`${ inStore }/all`](NAMESPACE).filter((ns) => ns.isSystem === true).map((ns) => ns.metadata.name);
|
|
|
|
return systemNs.includes(this.metadata.namespace);
|
|
}
|
|
|
|
get details() {
|
|
const out = [
|
|
{
|
|
label: this.t('secret.type'),
|
|
content: this.typeDisplay
|
|
}
|
|
];
|
|
|
|
if (this.cn) {
|
|
out.push({
|
|
label: this.t('secret.certificate.cn'),
|
|
content: this.plusMoreNames ? `${ this.cn } ${ this.t('secret.certificate.plusMore', { n: this.plusMoreNames }) }` : this.cn
|
|
});
|
|
}
|
|
|
|
if (this.issuer) {
|
|
out.push({
|
|
label: this.t('secret.certificate.issuer'),
|
|
content: this.issuer
|
|
});
|
|
}
|
|
|
|
if (this.notAfter) {
|
|
out.push({
|
|
label: 'Expires',
|
|
formatter: 'Date',
|
|
formatterOpts: { class: this.dateClass },
|
|
content: this.notAfter
|
|
});
|
|
}
|
|
|
|
return out;
|
|
}
|
|
}
|