import { KubeObject } from "../kube-object"; import { KubeApi } from "../kube-api"; export class SelfSubjectRulesReviewApi extends KubeApi { create({ namespace = "default" }): Promise { return super.create({}, { spec: { namespace }, } ); } } export interface ISelfSubjectReviewRule { verbs: string[]; apiGroups?: string[]; resources?: string[]; resourceNames?: string[]; nonResourceURLs?: string[]; } export class SelfSubjectRulesReview extends KubeObject { static kind = "SelfSubjectRulesReview" spec: { // fixme: add more types from api docs namespace?: string; } status: { resourceRules: ISelfSubjectReviewRule[]; nonResourceRules: ISelfSubjectReviewRule[]; incomplete: boolean; } getResourceRules() { const rules = this.status && this.status.resourceRules || []; return rules.map(rule => this.normalize(rule)); } getNonResourceRules() { const rules = this.status && this.status.nonResourceRules || []; return rules.map(rule => this.normalize(rule)); } protected normalize(rule: ISelfSubjectReviewRule): ISelfSubjectReviewRule { const { apiGroups = [], resourceNames = [], verbs = [], nonResourceURLs = [], resources = [] } = rule; return { apiGroups, nonResourceURLs, resourceNames, verbs, resources: resources.map((resource, index) => { const apiGroup = apiGroups.length >= index + 1 ? apiGroups[index] : apiGroups.slice(-1)[0]; const separator = apiGroup == "" ? "" : "."; return resource + separator + apiGroup; }) } } } export const selfSubjectRulesReviewApi = new SelfSubjectRulesReviewApi({ kind: SelfSubjectRulesReview.kind, apiBase: "/apis/authorization.k8s.io/v1/selfsubjectrulesreviews", isNamespaced: false, objectConstructor: SelfSubjectRulesReview, });