Removed facebook + misc
parent
2e93df2e91
commit
6e087b14cc
|
@ -1,100 +0,0 @@
|
|||
package facebook
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"github.com/subfinder/subfinder/pkg/subscraping"
|
||||
)
|
||||
|
||||
type authResponse struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
}
|
||||
|
||||
type response struct {
|
||||
Data []struct {
|
||||
Domains []string `json:"domains"`
|
||||
} `json:"data"`
|
||||
|
||||
Paging struct {
|
||||
Next string `json:"next"`
|
||||
} `json:"paging"`
|
||||
}
|
||||
|
||||
// Source is the passive scraping agent
|
||||
type Source struct{}
|
||||
|
||||
// Run function returns all subdomains found with the service
|
||||
func (s *Source) Run(domain string, session *subscraping.Session) <-chan subscraping.Result {
|
||||
results := make(chan subscraping.Result)
|
||||
|
||||
go func() {
|
||||
if session.Keys.FacebookAppID == "" || session.Keys.FacebookAppSecret == "" {
|
||||
close(results)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := session.NormalGet(fmt.Sprintf("https://graph.facebook.com/oauth/access_token?client_id=%s&client_secret=%s&grant_type=client_credentials", session.Keys.FacebookAppID, session.Keys.FacebookAppSecret))
|
||||
if err != nil {
|
||||
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
|
||||
close(results)
|
||||
return
|
||||
}
|
||||
|
||||
auth := authResponse{}
|
||||
err = jsoniter.NewDecoder(resp.Body).Decode(&auth)
|
||||
if err != nil {
|
||||
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
|
||||
close(results)
|
||||
return
|
||||
}
|
||||
|
||||
if auth.AccessToken == "" {
|
||||
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: errors.New("no access token in Facebook API response")}
|
||||
close(results)
|
||||
return
|
||||
}
|
||||
|
||||
fetchURL := fmt.Sprintf("https://graph.facebook.com/certificates?fields=domains&access_token=%s&query=*.%s", auth.AccessToken, domain)
|
||||
|
||||
wrapper := new(response)
|
||||
for {
|
||||
resp, err := session.NormalGet(fetchURL)
|
||||
if err != nil {
|
||||
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
|
||||
close(results)
|
||||
return
|
||||
}
|
||||
|
||||
err = jsoniter.NewDecoder(resp.Body).Decode(&wrapper)
|
||||
if err != nil {
|
||||
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
|
||||
close(results)
|
||||
return
|
||||
}
|
||||
|
||||
for _, data := range wrapper.Data {
|
||||
for _, d := range data.Domains {
|
||||
d := strings.TrimPrefix(strings.ToLower(d), "*.")
|
||||
|
||||
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Subdomain, Value: d}
|
||||
}
|
||||
}
|
||||
|
||||
fetchURL = wrapper.Paging.Next
|
||||
if fetchURL == "" {
|
||||
break
|
||||
}
|
||||
}
|
||||
close(results)
|
||||
}()
|
||||
|
||||
return results
|
||||
}
|
||||
|
||||
// Name returns the name of the source
|
||||
func (s *Source) Name() string {
|
||||
return "facebook"
|
||||
}
|
Loading…
Reference in New Issue