Support pages and actions for the fwaas v2 service. Change-Id: Ieecd972ac2c5e9934bba9160681c4e390dc126dc
112 lines
3.0 KiB
JavaScript
112 lines
3.0 KiB
JavaScript
// Copyright 2021 99cloud
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import { get } from 'lodash';
|
|
import { action } from 'mobx';
|
|
import client from 'client';
|
|
import { isDefault } from 'resources/neutron/firewall-rule';
|
|
import Base from '../base';
|
|
|
|
export class FirewallRuleStore extends Base {
|
|
get client() {
|
|
return client.neutron.firewallRules;
|
|
}
|
|
|
|
get policyClient() {
|
|
return client.neutron.firewallPolicies;
|
|
}
|
|
|
|
get listFilterByProject() {
|
|
return true;
|
|
}
|
|
|
|
get mapper() {
|
|
return (item) => ({
|
|
...item,
|
|
protocol: item.protocol || 'any',
|
|
notDefault: !isDefault(item),
|
|
});
|
|
}
|
|
|
|
async listDidFetch(items) {
|
|
const policyResponse = await this.policyClient.list();
|
|
const allPolicies = policyResponse.firewall_policies;
|
|
items.forEach((it) => {
|
|
it.policies = allPolicies.filter(
|
|
(policy) => policy.firewall_rules.indexOf(it.id) >= 0
|
|
);
|
|
});
|
|
|
|
return items;
|
|
}
|
|
|
|
async detailDidFetch(item) {
|
|
const policyResponse = await this.policyClient.list();
|
|
const allPolicies = policyResponse.firewall_policies;
|
|
item.policies = allPolicies.filter(
|
|
(policy) => policy.firewall_rules.indexOf(item.id) >= 0
|
|
);
|
|
return item;
|
|
}
|
|
|
|
@action
|
|
async fetchListByPolicy({
|
|
limit,
|
|
page,
|
|
sortKey,
|
|
sortOrder,
|
|
conditions,
|
|
...filters
|
|
} = {}) {
|
|
this.list.isLoading = true;
|
|
// todo: no page, no limit, fetch all
|
|
const { tab, all_projects, firewall_rules, ...rest } = filters;
|
|
if (firewall_rules.length === 0) {
|
|
this.list.isLoading = false;
|
|
return;
|
|
}
|
|
const params = { ...rest };
|
|
if (all_projects) {
|
|
if (!this.listFilterByProject) {
|
|
params.all_projects = true;
|
|
}
|
|
}
|
|
|
|
const result = await this.client.list(params);
|
|
const allRules = get(result, this.listResponseKey, []);
|
|
const data = firewall_rules.map((rule) =>
|
|
allRules.find((r) => r.id === rule)
|
|
);
|
|
const items = data.map(this.mapper);
|
|
let newData = await this.listDidFetchProject(items, all_projects);
|
|
newData = await this.listDidFetch(newData, all_projects);
|
|
this.list.update({
|
|
data: newData,
|
|
total: items.length || 0,
|
|
limit: Number(limit) || 10,
|
|
page: Number(page) || 1,
|
|
sortKey,
|
|
sortOrder,
|
|
filters,
|
|
isLoading: false,
|
|
...(this.list.silent ? {} : { selectedRowKeys: [] }),
|
|
});
|
|
|
|
return newData;
|
|
}
|
|
}
|
|
|
|
const globalFirewallRuleStore = new FirewallRuleStore();
|
|
export default globalFirewallRuleStore;
|