UNPKG

scaleway-sync-firewall

Version:
54 lines (46 loc) 1.52 kB
import PrepareModel from './library/Model'; import SecurityGroupInterface from './library/interfaces/SecurityGroupInterface'; import FirewallRule from './FirewallRule'; export default class SecurityGroup extends PrepareModel<SecurityGroupInterface>('/security_groups') { /** * Model response sub-key. */ static subKey = 'security_group'; /** * A security group has many firewall rules. */ public get rules(): Promise<FirewallRule[]> { return this.hasMany( // @ts-ignore FirewallRule, this.zone, `${this.entry.id}/rules`, { securityGroupId: this.entry.id } ); } /** * Firewall rules we can edit. */ public get editableRules(): Promise<FirewallRule[]> { return this.rules.then((rules) => { return rules.filter((rule) => rule.entry.editable); }); } /** * Clear all rules for the current security group. */ public async clearRules() { const rules = await this.editableRules; return Promise.all(rules.map((rule) => { return rule.delete(); })); } /** * Add a list of rules to the current security group. */ public addRules(rules: FirewallRule[]) { return Promise.all(rules.map((rule) => { return new FirewallRule(rule.entry, this.zone, { securityGroupId: this.entry.id }).create(); })); } }