2022-11-15 01:37:00 +05:30
|
|
|
package runner
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
|
"github.com/projectdiscovery/gologger"
|
|
|
|
|
"github.com/projectdiscovery/nuclei/v2/internal/runner/nucleicloud"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// initializeCloudDataSources initializes cloud data sources
|
|
|
|
|
func (r *Runner) initializeCloudDataSources() ([]string, error) {
|
|
|
|
|
var ids []string
|
2022-11-16 13:38:55 +05:30
|
|
|
var secret string
|
|
|
|
|
|
2022-11-15 01:37:00 +05:30
|
|
|
for _, repo := range r.options.GithubTemplateRepo {
|
|
|
|
|
ID, err := r.cloudClient.StatusDataSource(nucleicloud.StatusDataSourceRequest{Repo: repo, Token: r.options.GithubToken})
|
|
|
|
|
if err != nil {
|
|
|
|
|
if !strings.Contains(err.Error(), "invalid status code recieved") {
|
|
|
|
|
return nil, errors.Wrap(err, "could not get data source status")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gologger.Info().Msgf("Adding new data source + syncing: %s\n", repo)
|
2022-11-16 13:38:55 +05:30
|
|
|
ID, secret, err = r.cloudClient.AddDataSource(nucleicloud.AddDataSourceRequest{Type: "github", Repo: repo, Token: r.options.GithubToken})
|
2022-11-15 01:37:00 +05:30
|
|
|
if err != nil {
|
|
|
|
|
return nil, errors.Wrap(err, "could not add data source")
|
|
|
|
|
}
|
|
|
|
|
if err = r.cloudClient.SyncDataSource(ID); err != nil {
|
|
|
|
|
return nil, errors.Wrap(err, "could not sync data source")
|
|
|
|
|
}
|
2022-11-16 13:38:55 +05:30
|
|
|
gologger.Info().Msgf("Webhook URL for added source: %s/datasources/%s/webhook", r.options.CloudURL, ID)
|
|
|
|
|
if secret != "" {
|
|
|
|
|
gologger.Info().Msgf("Secret for webhook: %s", secret)
|
|
|
|
|
}
|
2022-11-15 01:37:00 +05:30
|
|
|
}
|
|
|
|
|
if r.options.UpdateTemplates {
|
|
|
|
|
gologger.Info().Msgf("Syncing data source: %s (%s)\n", repo, ID)
|
|
|
|
|
if err = r.cloudClient.SyncDataSource(ID); err != nil {
|
|
|
|
|
return nil, errors.Wrap(err, "could not sync data source")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ids = append(ids, ID)
|
|
|
|
|
gologger.Info().Msgf("Got connected data source: %s\n", ID)
|
|
|
|
|
}
|
|
|
|
|
return ids, nil
|
|
|
|
|
}
|