mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-24 01:25:29 +00:00
* Add s3 bucket template provider - Refactor the custom github template code - add interface for template provider * Validate if aws creds are passed if bucket flag - refactor s3 provider struct to take client - add function which returns the aws s3 client - update error messages * Add aws s3 bucket flags documentation in README.md - Rename the github_test.go to customTemplate_test.go * go mod update * Move template provider code to pkg/external/customtemplates dir * Remove github and aws update variables from flag * Rename CustomTemplateProvider to Provider * Update integration and function command in makefile * Update github test case, accept token * readme update * go mod tidy * Update build-test.yml * handle empty dir in s3 * Add requested changes - download/update s3 and github only when `-ut` is passed - only print the missing env variable for s3 - add the custom templates path in ~/.config/nuclei/.template-config.json * print custom paths only if exists in config file * misc update * tag update Co-authored-by: sandeep <8293321+ehsandeep@users.noreply.github.com> Co-authored-by: Sandeep Singh <sandeep@projectdiscovery.io>
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package customtemplates
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"github.com/projectdiscovery/gologger"
|
|
"github.com/projectdiscovery/nuclei/v2/pkg/types"
|
|
)
|
|
|
|
const (
|
|
CustomGithubTemplateDirectory = "github"
|
|
CustomS3TemplateDirectory = "s3"
|
|
)
|
|
|
|
type Provider interface {
|
|
Download(location string, ctx context.Context)
|
|
Update(location string, ctx context.Context)
|
|
}
|
|
|
|
// parseCustomTemplates function reads the options.GithubTemplateRepo list,
|
|
// Checks the given repos are valid or not and stores them into runner.CustomTemplates
|
|
func ParseCustomTemplates(options *types.Options) []Provider {
|
|
var customTemplates []Provider
|
|
gitHubClient := getGHClientIncognito()
|
|
|
|
for _, repoName := range options.GithubTemplateRepo {
|
|
owner, repo, err := getOwnerAndRepo(repoName)
|
|
if err != nil {
|
|
gologger.Info().Msgf("%s", err)
|
|
continue
|
|
}
|
|
githubRepo, err := getGithubRepo(gitHubClient, owner, repo, options.GithubToken)
|
|
if err != nil {
|
|
gologger.Info().Msgf("%s", err)
|
|
continue
|
|
}
|
|
customTemplateRepo := &customTemplateGithubRepo{
|
|
owner: owner,
|
|
reponame: repo,
|
|
gitCloneURL: githubRepo.GetCloneURL(),
|
|
githubToken: options.GithubToken,
|
|
}
|
|
customTemplates = append(customTemplates, customTemplateRepo)
|
|
}
|
|
if options.AwsBucketName != "" {
|
|
s3c, err := getS3Client(context.TODO(), options.AwsAccessKey, options.AwsSecretKey, options.AwsRegion)
|
|
if err != nil {
|
|
gologger.Error().Msgf("error downloading s3 bucket %s %s", options.AwsBucketName, err)
|
|
return customTemplates
|
|
}
|
|
ctBucket := &customTemplateS3Bucket{
|
|
bucketName: options.AwsBucketName,
|
|
s3Client: s3c,
|
|
}
|
|
if strings.Contains(options.AwsBucketName, "/") {
|
|
bPath := strings.SplitN(options.AwsBucketName, "/", 2)
|
|
ctBucket.bucketName = bPath[0]
|
|
ctBucket.prefix = bPath[1]
|
|
}
|
|
customTemplates = append(customTemplates, ctBucket)
|
|
}
|
|
return customTemplates
|
|
}
|