import "./service-accounts-details.scss"; import * as React from "react"; import { autorun, observable } from "mobx"; import { Trans } from "@lingui/macro"; import { Spinner } from "../spinner"; import { ServiceAccountsSecret } from "./service-accounts-secret"; import { DrawerItem, DrawerTitle } from "../drawer"; import { disposeOnUnmount, observer } from "mobx-react"; import { secretsStore } from "../+config-secrets/secrets.store"; import { Link } from "react-router-dom"; import { Secret, ServiceAccount, serviceAccountsApi } from "../../api/endpoints"; import { KubeEventDetails } from "../+events/kube-event-details"; import { getDetailsUrl } from "../../navigation"; import { KubeObjectDetailsProps } from "../kube-object"; import { apiManager } from "../../api/api-manager"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; interface Props extends KubeObjectDetailsProps { } @observer export class ServiceAccountsDetails extends React.Component { @observable secrets: Secret[]; @disposeOnUnmount loadSecrets = autorun(async () => { this.secrets = null; const { object: serviceAccount } = this.props; if (!serviceAccount) { return; } const namespace = serviceAccount.getNs(); const secrets = serviceAccount.getSecrets().map(({ name }) => { const secret = secretsStore.getByName(name, namespace); if (!secret) return secretsStore.load({ name, namespace }); return secret; }); this.secrets = await Promise.all(secrets); }) renderSecrets() { const { secrets } = this; if (!secrets) { return } return secrets.map(secret => ) } renderSecretLinks(secrets: Secret[]) { return secrets.map(secret => { return ( {secret.getName()} ) } ) } render() { const { object: serviceAccount } = this.props; if (!serviceAccount) { return null; } const tokens = secretsStore.items.filter(secret => secret.getNs() == serviceAccount.getNs() && secret.getAnnotations().some(annot => annot == `kubernetes.io/service-account.name: ${serviceAccount.getName()}`) ) const imagePullSecrets = serviceAccount.getImagePullSecrets().map(({ name }) => secretsStore.getByName(name, serviceAccount.getNs()) ) return (
{tokens.length > 0 && Tokens} className="links"> {this.renderSecretLinks(tokens)} } {imagePullSecrets.length > 0 && ImagePullSecrets} className="links"> {this.renderSecretLinks(imagePullSecrets)} } Mountable secrets}/>
{this.renderSecrets()}
) } } apiManager.registerViews(serviceAccountsApi, { Details: ServiceAccountsDetails })