debil-finder/main.go

99 lines
2 KiB
Go

package main
import (
"git.ddd.rip/ptrcnull/debil-finder/checks"
"git.ddd.rip/ptrcnull/telegram"
"github.com/CaliDog/certstream-go"
"log"
"os"
"strings"
)
func main() {
tg := telegram.Client{Token: os.Getenv("TELEGRAM_TOKEN")}
chatId := os.Getenv("TELEGRAM_CHAT_ID")
res, err := tg.SendMessage(chatId, "Starting...")
if err != nil {
panic(err)
}
log.Println(res)
c := &checks.Checks{
Message: func(msg string) {
tg.SendMessage(chatId, msg)
},
}
recent := make([]string, 100)
for i := range recent {
recent[i] = ""
}
stream, errStream := certstream.CertStreamEventStream(false)
for {
select {
case jq := <-stream:
messageType, err := jq.String("message_type")
if err != nil {
tg.SendMessage(chatId, "failed decoding message: " + err.Error())
}
if messageType != "certificate_update" {
continue
}
allDomains, err := jq.ArrayOfStrings("data", "leaf_cert", "all_domains")
if err != nil {
tg.SendMessage(chatId, "failed getting domains: " + err.Error())
}
match := false
for _, domain := range allDomains {
for _, tld := range []string{".pl", ".app", ".dev", ".cloud"} {
if strings.HasSuffix(domain, tld) {
match = true
}
}
}
for _, domain := range allDomains {
for _, suffix := range []string{"ndc.pl", "workers.dev", "ec2.aws.dev"} {
if strings.HasSuffix(domain, suffix) {
match = false
}
}
}
if !match {
continue
}
log.Println(allDomains)
for _, domain := range allDomains {
if domain[0] == '*' || domain == "sni.cloudflaressl.com" {
continue
}
// skip if was checked recently
skip := false
for _, recentDomain := range recent {
if domain == recentDomain {
skip = true
}
}
if skip {
continue
}
log.Println("checking " + domain)
go c.CheckGit(domain)
go c.CheckEnv(domain)
go c.CheckIndex(domain)
recent = append(recent[1:], domain)
}
case err := <-errStream:
log.Println(err)
}
}
}