hetznercloud/ts/classes.firewall.ts

74 lines
2.4 KiB
TypeScript

// Hetzner Cloud Firewall Class
import type { HetznerAccount } from './classes.account.js';
import * as plugins from './hetznercloud.plugins.js';
import * as types from './types.js';
export class HetznerFirewall {
// STATIC
public static create = async (
hetznerAccountRefArg: HetznerAccount,
optionsArg: {
name: string;
labels?: {[key: string]: string},
rules: types.IFirewall['rules'],
}
) => {
const firewall = new HetznerFirewall(hetznerAccountRefArg);
const createFirewallUrl = '/firewalls';
const createFirewallPayload: types.TFirewallCreateRequestBody = {
name: optionsArg.name,
labels: optionsArg.labels || {} as any,
rules: optionsArg.rules
};
const response = await firewall.hetznerAccountRef.request(
'POST',
createFirewallUrl,
createFirewallPayload
);
firewall.data = (response.body as types.TFirewallCreateResponseBody).firewall;
return firewall;
}
public static getFirewalls = async (hetznerAccountRefArg: HetznerAccount) => {
const firewallsGetUrl = '/firewalls';
const response = await hetznerAccountRefArg.request('GET', firewallsGetUrl, {});
const firewallsDataArray = (response.body as types.TFirewallsGetResponseBody).firewalls;
const firewalls: HetznerFirewall[] = [];
for (const firewallData of firewallsDataArray) {
const firewall = new HetznerFirewall(hetznerAccountRefArg);
firewall.data = firewallData;
firewalls.push(firewall);
}
return firewalls;
}
public static getFirewallsByLabel = async (hetznerAccountRefArg: HetznerAccount, labelObject: {[key: string]: string}) => {
const firewalls = await HetznerFirewall.getFirewalls(hetznerAccountRefArg);
const results: HetznerFirewall[] = [];
for (const firewall of firewalls) {
let isMatch = true;
for (const key in labelObject) {
if (firewall.data.labels[key] !== labelObject[key]) {
isMatch = false;
}
}
if (isMatch) {
results.push(firewall);
}
}
return results;
}
// INSTANCE
public data: types.IFirewall;
public hetznerAccountRef: HetznerAccount;
constructor(hetznerAccountRefArg: HetznerAccount) {
this.hetznerAccountRef = hetznerAccountRefArg;
}
public async delete() {
await this.hetznerAccountRef.request('DELETE', `/firewalls/${this.data.id}`, {});
}
}