summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorCharlotte Brandhorst-Satzkorn <charlotte@tailscale.com>2024-01-22 14:12:21 -0800
committerCharlotte Brandhorst-Satzkorn <charlotte@tailscale.com>2024-01-24 13:15:58 -0800
commitb3ad2806b88d8c62ec5d39bbae0e41cfa7cb397e (patch)
tree59e20a06ecc8a05c882018e2b5461f5d9e6bcc62
parentfd94d96e2bb149cbd5b09e719d0412dfd9386e28 (diff)
downloadtailscale-catzkorn/jira.tar.xz
tailscale-catzkorn/jira.zip
-rw-r--r--cmd/connector-gen/atlasian.go92
-rw-r--r--cmd/connector-gen/connector-gen.go8
-rw-r--r--cmd/connector-gen/google-workspace.go55
-rw-r--r--cmd/connector-gen/stripe.go249
4 files changed, 404 insertions, 0 deletions
diff --git a/cmd/connector-gen/atlasian.go b/cmd/connector-gen/atlasian.go
new file mode 100644
index 000000000..c096f8960
--- /dev/null
+++ b/cmd/connector-gen/atlasian.go
@@ -0,0 +1,92 @@
+// Copyright (c) Tailscale Inc & AUTHORS
+// SPDX-License-Identifier: BSD-3-Clause
+
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "log"
+ "net/http"
+ "net/netip"
+
+ "go4.org/netipx"
+)
+
+// See https://ip-ranges.atlassian.com/
+type AtlassianMeta struct {
+ CreationDate string `json:"creationDate"`
+ SyncToken int `json:"syncToken"`
+ Items []struct {
+ Network string `json:"network"`
+ MaskLen int `json:"mask_len"`
+ Cidr string `json:"cidr"`
+ Mask string `json:"mask"`
+ Region []string `json:"region"`
+ Product []string `json:"product"`
+ Direction []string `json:"direction"`
+ Perimeter string `json:"perimeter"`
+ } `json:"items"`
+}
+
+func jira() {
+ parseAtlassian("jira")
+}
+
+func confluence() {
+ parseAtlassian("confluence")
+}
+
+func parseAtlassian(productName string) {
+ r, err := http.Get("https://ip-ranges.atlassian.com/")
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ var meta AtlassianMeta
+
+ if err := json.NewDecoder(r.Body).Decode(&meta); err != nil {
+ log.Fatal(err)
+ }
+ r.Body.Close()
+
+ var ips netipx.IPSetBuilder
+ for _, item := range meta.Items {
+ isProductName := false
+ isIngress := false
+
+ for _, direction := range item.Direction {
+ if direction != "ingress" {
+ // For routes, we are only interested in
+ // ingress routes. Skip over any that aren't
+ // marked as such.
+ continue
+ }
+ isIngress = true
+ break
+ }
+
+ for _, product := range item.Product {
+ if product != productName {
+ continue
+ }
+ isProductName = true
+ break
+ }
+
+ if !isProductName || !isIngress {
+ continue
+ }
+
+ ips.AddPrefix(netip.MustParsePrefix(item.Cidr))
+ }
+
+ set, err := ips.IPSet()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ for _, addr := range set.Prefixes() {
+ fmt.Println(fmt.Sprintf(`"%s",`, addr))
+ }
+}
diff --git a/cmd/connector-gen/connector-gen.go b/cmd/connector-gen/connector-gen.go
index 6947f6410..6cbd0385d 100644
--- a/cmd/connector-gen/connector-gen.go
+++ b/cmd/connector-gen/connector-gen.go
@@ -27,6 +27,14 @@ func main() {
github()
case "aws":
aws()
+ case "jira":
+ jira()
+ case "confluence":
+ confluence()
+ case "workspace":
+ workspace()
+ case "stripe":
+ stripe()
default:
help()
os.Exit(128)
diff --git a/cmd/connector-gen/google-workspace.go b/cmd/connector-gen/google-workspace.go
new file mode 100644
index 000000000..7ab3bd50e
--- /dev/null
+++ b/cmd/connector-gen/google-workspace.go
@@ -0,0 +1,55 @@
+// Copyright (c) Tailscale Inc & AUTHORS
+// SPDX-License-Identifier: BSD-3-Clause
+
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "log"
+ "net/http"
+)
+
+// See https://www.gstatic.com/ipranges/goog.json
+
+type Workspace struct {
+ SyncToken string `json:"syncToken"`
+ CreationTime string `json:"creationTime"`
+ Prefixes []struct {
+ Ipv4Prefix string `json:"ipv4Prefix,omitempty"`
+ Ipv6Prefix string `json:"ipv6Prefix,omitempty"`
+ } `json:"prefixes"`
+}
+
+func workspace() {
+ r, err := http.Get("https://www.gstatic.com/ipranges/goog.json")
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ var workspaceAddresses Workspace
+
+ if err := json.NewDecoder(r.Body).Decode(&workspaceAddresses); err != nil {
+ log.Fatal(err)
+ }
+ r.Body.Close()
+
+ var v4 []string
+ var v6 []string
+ for _, item := range workspaceAddresses.Prefixes {
+ if item.Ipv4Prefix != "" {
+ v4 = append(v4, item.Ipv4Prefix)
+ }
+
+ if item.Ipv6Prefix != "" {
+ v6 = append(v6, item.Ipv6Prefix)
+ }
+ }
+
+ for _, addr := range v4 {
+ fmt.Println(fmt.Sprintf(`"%s",`, addr))
+ }
+ for _, addr := range v6 {
+ fmt.Println(fmt.Sprintf(`"%s",`, addr))
+ }
+}
diff --git a/cmd/connector-gen/stripe.go b/cmd/connector-gen/stripe.go
new file mode 100644
index 000000000..057cf6269
--- /dev/null
+++ b/cmd/connector-gen/stripe.go
@@ -0,0 +1,249 @@
+package main
+
+import (
+ "fmt"
+ "log"
+ "net/netip"
+ "strings"
+
+ "go4.org/netipx"
+)
+
+var (
+ stripeRoutes = []string{
+ "13.112.224.240",
+ "13.115.13.148",
+ "13.210.129.177",
+ "13.210.176.167",
+ "13.228.126.182",
+ "13.228.224.121",
+ "13.230.11.13",
+ "13.230.90.110",
+ "13.55.153.188",
+ "13.55.5.15",
+ "13.56.126.253",
+ "13.56.173.200",
+ "13.56.173.232",
+ "13.57.108.134",
+ "13.57.155.157",
+ "13.57.156.206",
+ "13.57.157.116",
+ "13.57.90.254",
+ "13.57.98.27",
+ "18.194.147.12",
+ "18.195.120.229",
+ "18.195.125.165",
+ "34.200.27.109",
+ "34.200.47.89",
+ "34.202.153.183",
+ "34.204.109.15",
+ "34.213.149.138",
+ "34.214.229.69",
+ "34.223.201.215",
+ "34.237.201.68",
+ "34.237.253.141",
+ "34.238.187.115",
+ "34.239.14.72",
+ "34.240.123.193",
+ "34.241.202.139",
+ "34.241.54.72",
+ "34.241.59.225",
+ "34.250.29.31",
+ "34.250.89.120",
+ "35.156.131.6",
+ "35.156.194.238",
+ "35.157.227.67",
+ "35.158.254.198",
+ "35.163.82.19",
+ "35.164.105.206",
+ "35.164.124.216",
+ "50.16.2.231",
+ "50.18.212.157",
+ "50.18.212.223",
+ "50.18.219.232",
+ "52.1.23.197",
+ "52.196.53.105",
+ "52.196.95.231",
+ "52.204.6.233",
+ "52.205.132.193",
+ "52.211.198.11",
+ "52.212.99.37",
+ "52.213.35.125",
+ "52.22.83.139",
+ "52.220.44.249",
+ "52.25.214.31",
+ "52.26.11.205",
+ "52.26.132.102",
+ "52.26.14.11",
+ "52.36.167.221",
+ "52.53.133.6",
+ "52.54.150.82",
+ "52.57.221.37",
+ "52.59.173.230",
+ "52.62.14.35",
+ "52.62.203.73",
+ "52.63.106.9",
+ "52.63.119.77",
+ "52.65.161.237",
+ "52.73.161.98",
+ "52.74.114.251",
+ "52.74.98.83",
+ "52.76.14.176",
+ "52.76.156.251",
+ "52.76.174.156",
+ "52.77.80.43",
+ "52.8.19.58",
+ "52.8.8.189",
+ "54.149.153.72",
+ "54.152.36.104",
+ "54.183.95.195",
+ "54.187.182.230",
+ "54.187.199.38",
+ "54.187.208.163",
+ "54.238.140.239",
+ "54.65.115.204",
+ "54.65.97.98",
+ "54.67.48.128",
+ "54.67.52.245",
+ "54.68.165.206",
+ "54.68.183.151",
+ "107.23.48.182",
+ "107.23.48.232",
+ "198.137.150.21",
+ "198.137.150.22",
+ "198.137.150.23",
+ "198.137.150.24",
+ "198.137.150.25",
+ "198.137.150.26",
+ "198.137.150.27",
+ "198.137.150.28",
+ "198.137.150.101",
+ "198.137.150.102",
+ "198.137.150.103",
+ "198.137.150.104",
+ "198.137.150.105",
+ "198.137.150.106",
+ "198.137.150.107",
+ "198.137.150.108",
+ "198.137.150.171",
+ "198.137.150.172",
+ "198.137.150.173",
+ "198.137.150.174",
+ "198.137.150.175",
+ "198.137.150.176",
+ "198.137.150.177",
+ "198.137.150.178",
+ "198.137.150.221",
+ "198.137.150.222",
+ "198.137.150.223",
+ "198.137.150.224",
+ "198.137.150.225",
+ "198.137.150.226",
+ "198.137.150.227",
+ "198.137.150.228",
+ "198.202.176.21",
+ "198.202.176.22",
+ "198.202.176.23",
+ "198.202.176.24",
+ "198.202.176.25",
+ "198.202.176.26",
+ "198.202.176.27",
+ "198.202.176.28",
+ "198.202.176.101",
+ "198.202.176.102",
+ "198.202.176.103",
+ "198.202.176.104",
+ "198.202.176.105",
+ "198.202.176.106",
+ "198.202.176.107",
+ "198.202.176.108",
+ "198.202.176.171",
+ "198.202.176.172",
+ "198.202.176.173",
+ "198.202.176.174",
+ "198.202.176.175",
+ "198.202.176.176",
+ "198.202.176.177",
+ "198.202.176.178",
+ "198.202.176.221",
+ "198.202.176.222",
+ "198.202.176.223",
+ "198.202.176.224",
+ "198.202.176.225",
+ "198.202.176.226",
+ "198.202.176.227",
+ "198.202.176.228",
+ "3.94.14.82",
+ "3.104.99.60",
+ "3.114.81.222",
+ "3.114.158.108",
+ "3.224.33.77",
+ "13.113.237.213",
+ "13.115.27.220",
+ "13.228.40.76",
+ "13.236.164.101",
+ "18.136.179.41",
+ "18.138.166.37",
+ "18.141.119.41",
+ "18.180.10.245",
+ "23.22.133.111",
+ "34.233.255.214",
+ "34.247.101.32",
+ "35.72.84.177",
+ "44.235.152.108",
+ "44.236.89.158",
+ "44.240.26.72",
+ "50.19.26.15",
+ "52.64.98.19",
+ "52.64.208.186",
+ "52.210.46.219",
+ "54.66.89.9",
+ "54.151.226.211",
+ "54.163.195.10",
+ "54.169.250.228",
+ "54.170.183.1",
+ "54.187.175.68",
+ "54.191.201.88",
+ "54.194.97.239",
+ "54.203.175.79",
+ "54.206.239.65",
+ "54.228.85.11",
+ "176.34.78.115",
+ "198.137.150.0/24",
+ "198.202.176.0/24",
+ "3.18.12.63",
+ "3.130.192.231",
+ "13.235.14.237",
+ "13.235.122.149",
+ "18.211.135.69",
+ "35.154.171.200",
+ "52.15.183.38",
+ "54.88.130.119",
+ "54.88.130.237",
+ "54.187.174.169",
+ "54.187.205.235",
+ "54.187.216.72",
+ }
+)
+
+func stripe() {
+ var ips netipx.IPSetBuilder
+ for _, route := range stripeRoutes {
+ if strings.Contains(route, "/") {
+ ips.AddPrefix(netip.MustParsePrefix(route))
+ continue
+ }
+
+ ips.Add((netip.MustParseAddr(route)))
+ }
+
+ set, err := ips.IPSet()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ for _, addr := range set.Prefixes() {
+ fmt.Println(fmt.Sprintf(`"%s",`, addr))
+ }
+
+}