From 20433ae2d445e034cadfe4a80b60cfee217a5d8a Mon Sep 17 00:00:00 2001 From: 186526 Date: Sun, 5 Mar 2023 16:00:45 +0800 Subject: [PATCH] add pdb --- .drone.yml | 2 ++ src/index.ts | 23 ++++++++++++++++------- src/pdb.ts | 16 ++++++++++++++++ 3 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 src/pdb.ts diff --git a/.drone.yml b/.drone.yml index 3cef988..26acc4e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -16,6 +16,8 @@ steps: environment: RIPE_PASSWORD: from_secret: ripe_password + PDB_TOKEN: + from_secret: pdb_token commands: - apk add bgpq4 --repository=https://dl-cdn.alpinelinux.org/alpine/edge/testing - yarn diff --git a/src/index.ts b/src/index.ts index 7394d54..c959b33 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ import bgpq4 from "./bgpq4"; import fs from "node:fs"; import YAML from "yaml"; +import { getNetName } from "./pdb"; import axios from "axios"; import { env } from "node:process"; @@ -86,18 +87,26 @@ const main = async () => { i++; console.log(""); } - const answer = asSets.map((k) => { - return `as-set: ${k["AS-SET"]} + const answer = await Promise.all( + asSets.map( + async (k) => + ` +as-set: ${k["AS-SET"]} ${k["MNT-BY"].map((k) => `mnt-by: ${k}`).join("\n")} ${k["TECH-C"].map((k) => `tech-c: ${k}`).join("\n")} ${k["ADMIN-C"].map((k) => `admin-c: ${k}`).join("\n")} ${k.remarks.map((k) => `remarks: ${k}`).join("\n")} -${k.members.map((k) => `members: AS${k}`).join("\n")}${k.include.map( - (k) => `\nmembers: ${k}` - )} +${( + await Promise.all( + k.members.map( + async (k) => `remarks: ${await getNetName(k)}\nmembers: AS${k}` + ) + ) +).join("\n")}${k.include.map((k) => `\nmembers: ${k}`)} source: RIPE\npassword: ${env["RIPE_PASSWORD"]}\n -`; - }); +` + ) + ); console.log("INFO: sending update to RIPE Syncupdates..."); const update = await axios.post( "https://syncupdates.db.ripe.net", diff --git a/src/pdb.ts b/src/pdb.ts new file mode 100644 index 0000000..6c22b5f --- /dev/null +++ b/src/pdb.ts @@ -0,0 +1,16 @@ +import axios from "axios"; +import { env } from "node:process"; + +const list = axios.get("https://www.peeringdb.com/api/net",{ + headers: { + "User-Agent": "NET186-AS-SET/1.0.0", + "Authorization": `Api-Key ${env.PDB_TOKEN}`, + "Content-Type": "application/json" + } +}); + +export const getNetName = async (ASN: number): Promise => { + const answer = (await list).data; + return (answer.data.find((k: any) => k.asn === ASN) ?? { name: `AS${ASN}` }) + .name; +}; \ No newline at end of file