consul/ui/packages/consul-ui/app/services/repository/intention.js

72 lines
2.1 KiB
JavaScript
Raw Normal View History

import { set, get } from '@ember/object';
import RepositoryService from 'consul-ui/services/repository';
import { PRIMARY_KEY } from 'consul-ui/models/intention';
const modelName = 'intention';
export default class IntentionRepository extends RepositoryService {
managedByCRDs = false;
getModelName() {
return modelName;
}
getPrimaryKey() {
return PRIMARY_KEY;
}
create(obj) {
delete obj.Namespace;
return super.create({
Action: 'allow',
...obj,
});
}
isManagedByCRDs() {
if (!this.managedByCRDs) {
this.managedByCRDs = this.store
.peekAll(this.getModelName())
.toArray()
.some(item => item.IsManagedByCRD);
}
return this.managedByCRDs;
}
// legacy intentions are strange that in order to read/write you need access
// to either/or the destination or source
async authorizeBySlug(cb, access, slug, dc, nspace) {
const [, source, , destination] = slug.split(':');
const ability = this.permissions.abilityFor(this.getModelName());
const permissions = ability
.generateForSegment(source)
.concat(ability.generateForSegment(destination));
return this.authorizeByPermissions(cb, permissions, access, dc, nspace);
}
async persist(obj) {
const res = await super.persist(...arguments);
// if Action is set it means we are an l4 type intention
// we don't delete these at a UI level incase the user
// would like to switch backwards and forwards between
// allow/deny/l7 in the forms, but once its been saved
// to the backend we then delete them
if (get(res, 'Action.length')) {
set(res, 'Permissions', []);
}
return res;
}
async findByService(slug, dc, nspace, configuration = {}) {
const query = {
dc,
nspace,
filter: `SourceName == "${slug}" or DestinationName == "${slug}" or SourceName == "*" or DestinationName == "*"`,
};
if (typeof configuration.cursor !== 'undefined') {
query.index = configuration.cursor;
query.uri = configuration.uri;
}
return this.store.query(this.getModelName(), query);
}
}