From d8f15ff06238dd96c62d96b5bfc4f4c3752fdeee Mon Sep 17 00:00:00 2001 From: terminaldweller Date: Mon, 4 Nov 2024 18:40:55 -0500 Subject: added the iana whois command. added the new genelirc option --- README.md | 12 +++++++++ iana_whois.go | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 10 +++++++- types.go | 1 + 4 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 iana_whois.go diff --git a/README.md b/README.md index 8e67ac1..134be91 100644 --- a/README.md +++ b/README.md @@ -219,6 +219,14 @@ Determines which proxy to use to connect to the LLM endpoint: llmProxy = "socks5://127.0.0.1:9050" ``` +#### generalProxy + +Determines which proxy to use for other things: + +``` +llmProxy = "socks5://127.0.0.1:9050" +``` + #### ircdName Name of the milla instance, must be unique across all instances. @@ -471,6 +479,10 @@ Pings the user after the given amount in seconds: `/remind 1200` Rolls a number between 1 and 6 if no arguments are given. With one argument it rolls a number between 1 and the given number. With two arguments it rolls a number between the two numbers: `/rool 10000 66666` +#### whois + +IANA whois endpoint query: `milla: /whois xyz` + ## Deploy ### Docker diff --git a/iana_whois.go b/iana_whois.go new file mode 100644 index 0000000..ed80c6e --- /dev/null +++ b/iana_whois.go @@ -0,0 +1,82 @@ +package main + +import ( + "log" + "net" + "net/http" + "net/url" + "time" + + "golang.org/x/net/html" + "golang.org/x/net/proxy" +) + +func IANAWhoisGet(query string, appConfig *TomlConfig) string { + var httpClient http.Client + + var dialer proxy.Dialer + + if appConfig.GeneralProxy != "" { + proxyURL, err := url.Parse(appConfig.GeneralProxy) + if err != nil { + log.Fatal(err.Error()) + + return "" + } + + dialer, err = proxy.FromURL(proxyURL, &net.Dialer{Timeout: time.Duration(appConfig.RequestTimeout) * time.Second}) + if err != nil { + log.Fatal(err.Error()) + + return "" + } + + httpClient = http.Client{ + Transport: &http.Transport{ + Dial: dialer.Dial, + }, + } + } + + resp, err := httpClient.Get("https://www.iana.org/whois?q=" + query) + if err != nil { + log.Println(err) + + return "" + } + + defer resp.Body.Close() + + doc, err := html.Parse(resp.Body) + if err != nil { + log.Println(err) + + return "" + } + + var getContent func(*html.Node) string + + getContent = func(n *html.Node) string { + if n.Type == html.ElementNode && n.Data == "pre" { + var content string + for c := n.FirstChild; c != nil; c = c.NextSibling { + if c.Type == html.TextNode { + content += c.Data + } + } + return content + } + for c := n.FirstChild; c != nil; c = c.NextSibling { + result := getContent(c) + if result != "" { + return result + } + } + return "" + } + + preContent := getContent(doc) + log.Println(preContent) + + return preContent +} diff --git a/main.go b/main.go index 6d0d349..31b9c88 100644 --- a/main.go +++ b/main.go @@ -594,6 +594,15 @@ func runCommand( case "forget": client.Cmd.Reply(event, "I no longer even know whether you're supposed to wear or drink a camel.'") + case "whois": + if len(args) < 2 { + client.Cmd.Reply(event, errNotEnoughArgs.Error()) + + break + } + + ianaResponse := IANAWhoisGet(args[1], appConfig) + client.Cmd.Reply(event, ianaResponse) case "roll": lowerLimit := 1 upperLimit := 6 @@ -1227,7 +1236,6 @@ func populateWatchListWords(appConfig *TomlConfig) { } } - // log.Print(appConfig.WatchLists["security"].Words) } func WatchListHandler(irc *girc.Client, appConfig TomlConfig) { diff --git a/types.go b/types.go index 7f1be93..8533525 100644 --- a/types.go +++ b/types.go @@ -73,6 +73,7 @@ type TomlConfig struct { DatabaseName string `toml:"databaseName"` LLMProxy string `toml:"llmProxy"` IRCProxy string `toml:"ircProxy"` + GeneralProxy string `toml:"generalProxy"` IRCDName string `toml:"ircdName"` WebIRCPassword string `toml:"webIRCPassword"` WebIRCGateway string `toml:"webIRCGateway"` -- cgit v1.2.3