first commit
This commit is contained in:
@@ -0,0 +1,319 @@
|
||||
package whois
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"dehasher/internal/sqlite"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"go.uber.org/zap"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type DehashedWHOISSearchRequest struct {
|
||||
Include []string `json:"include,omitempty"`
|
||||
Exclude []string `json:"exclude,omitempty"`
|
||||
IPAddress string `json:"ip_address,omitempty"`
|
||||
ReverseType string `json:"reverse_type,omitempty"`
|
||||
Domain string `json:"domain,omitempty"`
|
||||
MXAddress string `json:"mx_address,omitempty"`
|
||||
NSAddress string `json:"ns_address,omitempty"`
|
||||
SearchType string `json:"search_type,omitempty"`
|
||||
}
|
||||
|
||||
func WhoisSearch(domain, apiKey string) (sqlite.WhoIsLookupResult, error) {
|
||||
var whois sqlite.WhoIsLookupResult
|
||||
whoisSearchRequest := DehashedWHOISSearchRequest{
|
||||
Domain: domain,
|
||||
SearchType: "whois",
|
||||
}
|
||||
reqBody, _ := json.Marshal(whoisSearchRequest)
|
||||
req, err := http.NewRequest("POST", "https://api.dehashed.com/v2/whois/search", bytes.NewReader(reqBody))
|
||||
if err != nil {
|
||||
return whois, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Dehashed-Api-Key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if res != nil {
|
||||
defer res.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
return whois, err
|
||||
}
|
||||
if res == nil {
|
||||
return whois, errors.New("response was nil")
|
||||
}
|
||||
b, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return whois, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal(b, &whois)
|
||||
if err != nil {
|
||||
zap.L().Error("whois_search",
|
||||
zap.String("message", "failed to unmarshal response body"),
|
||||
zap.Error(err),
|
||||
)
|
||||
fmt.Println("Error unmarshalling response body:", err)
|
||||
fmt.Println("Response body:", string(b))
|
||||
return whois, err
|
||||
}
|
||||
|
||||
return whois, nil
|
||||
}
|
||||
|
||||
func WhoisHistory(domain, apiKey string) (sqlite.WhoIsHistory, error) {
|
||||
var whois sqlite.WhoIsHistory
|
||||
whoisSearchRequest := DehashedWHOISSearchRequest{
|
||||
Domain: domain,
|
||||
SearchType: "whois-history",
|
||||
}
|
||||
reqBody, _ := json.Marshal(whoisSearchRequest)
|
||||
req, err := http.NewRequest("POST", "https://api.dehashed.com/v2/whois/search", bytes.NewReader(reqBody))
|
||||
if err != nil {
|
||||
return whois, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Dehashed-Api-Key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if res != nil {
|
||||
zap.L().Info("whois_history",
|
||||
zap.String("message", "response was not nil"),
|
||||
)
|
||||
defer res.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
zap.L().Error("whois_history",
|
||||
zap.String("message", "failed to perform request"),
|
||||
zap.Error(err),
|
||||
)
|
||||
return whois, err
|
||||
}
|
||||
if res == nil {
|
||||
zap.L().Error("whois_history",
|
||||
zap.String("message", "response was nil"),
|
||||
)
|
||||
return whois, errors.New("response was nil")
|
||||
}
|
||||
b, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
zap.L().Error("whois_history",
|
||||
zap.String("message", "failed to read response body"),
|
||||
zap.Error(err),
|
||||
)
|
||||
return whois, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal(b, &whois)
|
||||
if err != nil {
|
||||
zap.L().Error("whois_history",
|
||||
zap.String("message", "failed to unmarshal response body"),
|
||||
zap.Error(err),
|
||||
)
|
||||
fmt.Println("Error unmarshalling response body:", err)
|
||||
fmt.Println("Response body:", string(b))
|
||||
return whois, err
|
||||
}
|
||||
|
||||
return whois, nil
|
||||
}
|
||||
|
||||
func ReverseWHOIS(include []string, exclude []string, reverseType, apiKey string) (string, error) {
|
||||
whoisSearchRequest := DehashedWHOISSearchRequest{
|
||||
Include: include,
|
||||
Exclude: exclude,
|
||||
ReverseType: reverseType,
|
||||
SearchType: "reverse-whois",
|
||||
}
|
||||
reqBody, _ := json.Marshal(whoisSearchRequest)
|
||||
req, err := http.NewRequest("POST", "https://api.dehashed.com/v2/whois/search", bytes.NewReader(reqBody))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Dehashed-Api-Key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if res != nil {
|
||||
defer res.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if res == nil {
|
||||
return "", errors.New("response was nil")
|
||||
}
|
||||
b, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(b), nil
|
||||
}
|
||||
|
||||
func WhoisIP(ipAddress, apiKey string) ([]byte, error) {
|
||||
whoisSearchRequest := DehashedWHOISSearchRequest{
|
||||
IPAddress: ipAddress,
|
||||
SearchType: "reverse-ip",
|
||||
}
|
||||
reqBody, _ := json.Marshal(whoisSearchRequest)
|
||||
req, err := http.NewRequest("POST", "https://api.dehashed.com/v2/whois/search", bytes.NewReader(reqBody))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Dehashed-Api-Key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if res != nil {
|
||||
defer res.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if res == nil {
|
||||
return nil, errors.New("response was nil")
|
||||
}
|
||||
b, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return b, nil
|
||||
}
|
||||
|
||||
func WhoisMX(mxAddress, apiKey string) (string, error) {
|
||||
whoisSearchRequest := DehashedWHOISSearchRequest{
|
||||
MXAddress: mxAddress,
|
||||
SearchType: "reverse-mx",
|
||||
}
|
||||
reqBody, _ := json.Marshal(whoisSearchRequest)
|
||||
req, err := http.NewRequest("POST", "https://api.dehashed.com/v2/whois/search", bytes.NewReader(reqBody))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Dehashed-Api-Key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if res != nil {
|
||||
defer res.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if res == nil {
|
||||
return "", errors.New("response was nil")
|
||||
}
|
||||
b, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(b), nil
|
||||
}
|
||||
|
||||
func WhoisNS(nsAddress, apiKey string) (string, error) {
|
||||
whoisSearchRequest := DehashedWHOISSearchRequest{
|
||||
NSAddress: nsAddress,
|
||||
SearchType: "reverse-ns",
|
||||
}
|
||||
reqBody, _ := json.Marshal(whoisSearchRequest)
|
||||
req, err := http.NewRequest("POST", "https://api.dehashed.com/v2/whois/search", bytes.NewReader(reqBody))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Dehashed-Api-Key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if res != nil {
|
||||
defer res.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if res == nil {
|
||||
return "", errors.New("response was nil")
|
||||
}
|
||||
b, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(b), nil
|
||||
}
|
||||
|
||||
func WhoisSubdomainScan(domain, apiKey string) (sqlite.WhoIsSubdomainScan, error) {
|
||||
var whois sqlite.WhoIsSubdomainScan
|
||||
whoisSearchRequest := DehashedWHOISSearchRequest{
|
||||
Domain: domain,
|
||||
SearchType: "subdomain-scan",
|
||||
}
|
||||
reqBody, _ := json.Marshal(whoisSearchRequest)
|
||||
req, err := http.NewRequest("POST", "https://api.dehashed.com/v2/whois/search", bytes.NewReader(reqBody))
|
||||
if err != nil {
|
||||
return whois, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Dehashed-Api-Key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if res != nil {
|
||||
defer res.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
return whois, err
|
||||
}
|
||||
if res == nil {
|
||||
return whois, errors.New("response was nil")
|
||||
}
|
||||
b, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return whois, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal(b, &whois)
|
||||
if err != nil {
|
||||
zap.L().Error("whois_subdomain_scan",
|
||||
zap.String("message", "failed to unmarshal response body"),
|
||||
zap.Error(err),
|
||||
)
|
||||
fmt.Println("Error unmarshalling response body:", err)
|
||||
fmt.Println("Response body:", string(b))
|
||||
return whois, err
|
||||
}
|
||||
|
||||
return whois, nil
|
||||
}
|
||||
|
||||
func GetWHOISCredits(apiKey string) (sqlite.WhoIsCredits, error) {
|
||||
var whoisCredits sqlite.WhoIsCredits
|
||||
|
||||
req, err := http.NewRequest("GET", "https://api.dehashed.com/v2/whois/credits", nil)
|
||||
if err != nil {
|
||||
return whoisCredits, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Dehashed-Api-Key", apiKey)
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if res != nil {
|
||||
defer res.Body.Close()
|
||||
}
|
||||
if err != nil {
|
||||
return whoisCredits, err
|
||||
}
|
||||
if res == nil {
|
||||
return whoisCredits, errors.New("response was nil")
|
||||
}
|
||||
b, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return whoisCredits, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal(b, &whoisCredits)
|
||||
if err != nil {
|
||||
zap.L().Error("get_whois_credits",
|
||||
zap.String("message", "failed to unmarshal response body"),
|
||||
zap.Error(err),
|
||||
)
|
||||
fmt.Println("Error unmarshalling response body:", err)
|
||||
fmt.Println("Response body:", string(b))
|
||||
return whoisCredits, err
|
||||
}
|
||||
|
||||
return whoisCredits, nil
|
||||
}
|
||||
Reference in New Issue
Block a user