mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-02-12 16:12:44 +00:00
120 lines
3.3 KiB
Go
120 lines
3.3 KiB
Go
//go:build dev
|
|
|
|
package seed
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/go-errors/errors"
|
|
|
|
"github.com/brianvoe/gofakeit/v7"
|
|
"github.com/google/uuid"
|
|
"github.com/oapi-codegen/nullable"
|
|
"github.com/phishingclub/phishingclub/errs"
|
|
"github.com/phishingclub/phishingclub/model"
|
|
"github.com/phishingclub/phishingclub/repository"
|
|
"github.com/phishingclub/phishingclub/vo"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type DevelopmentDomain struct {
|
|
Name string
|
|
CompanyID string
|
|
}
|
|
|
|
func SeedDevelopmentDomains(
|
|
domainRepository *repository.Domain,
|
|
companyRepository *repository.Company,
|
|
faker *gofakeit.Faker,
|
|
) error {
|
|
domains := []DevelopmentDomain{
|
|
{
|
|
Name: TEST_DOMAIN_NAME_1,
|
|
},
|
|
{
|
|
Name: TEST_DOMAIN_NAME_2,
|
|
},
|
|
{
|
|
Name: TEST_DOMAIN_NAME_3,
|
|
},
|
|
{
|
|
Name: TEST_DOMAIN_NAME_4,
|
|
},
|
|
}
|
|
// random domains
|
|
for i := 0; i < 10; i++ {
|
|
domains = append(domains, DevelopmentDomain{
|
|
Name: faker.DomainName() + ".test",
|
|
})
|
|
}
|
|
err := createDevelopmentDomains(domains, faker, domainRepository)
|
|
if err != nil {
|
|
return errors.Errorf("failed to seed development domains: %w", err)
|
|
}
|
|
// random domains attached to companies
|
|
err = forEachDevelopmentCompany(companyRepository, func(company *model.Company) error {
|
|
domains := []DevelopmentDomain{}
|
|
for i := 0; i < 10; i++ {
|
|
domains = append(domains, DevelopmentDomain{
|
|
Name: "phishing.club." + gofakeit.DomainName() + ".test",
|
|
CompanyID: company.ID.MustGet().String(),
|
|
})
|
|
}
|
|
err := createDevelopmentDomains(domains, faker, domainRepository)
|
|
if err != nil {
|
|
return errors.Errorf("failed to seed development domains: %w", err)
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
return errors.Errorf("failed to seed development domains: %w", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func createDevelopmentDomains(
|
|
domains []DevelopmentDomain,
|
|
faker *gofakeit.Faker,
|
|
domainRepository *repository.Domain,
|
|
) error {
|
|
for _, domain := range domains {
|
|
id := nullable.NewNullableWithValue(uuid.New())
|
|
name := nullable.NewNullableWithValue(*vo.NewString255Must(domain.Name))
|
|
managedTLS := nullable.NewNullableWithValue(true)
|
|
hostWebsite := nullable.NewNullableWithValue(true)
|
|
pageContent := nullable.NewNullableWithValue(*vo.NewOptionalString1MBMust(faker.HackerPhrase()))
|
|
pageNotFoundContent := nullable.NewNullableWithValue(*vo.NewOptionalString1MBMust("not found - " + faker.HipsterSentence(5)))
|
|
redirectURL := nullable.NewNullableWithValue(*vo.NewOptionalString1024Must(""))
|
|
|
|
createDomain := model.Domain{
|
|
ID: id,
|
|
Name: name,
|
|
ManagedTLS: managedTLS,
|
|
HostWebsite: hostWebsite,
|
|
PageContent: pageContent,
|
|
PageNotFoundContent: pageNotFoundContent,
|
|
RedirectURL: redirectURL,
|
|
}
|
|
if domain.CompanyID != "" {
|
|
createDomain.CompanyID = nullable.NewNullableWithValue(uuid.MustParse(domain.CompanyID))
|
|
}
|
|
domainName := createDomain.Name.MustGet()
|
|
d, err := domainRepository.GetByName(
|
|
context.Background(),
|
|
&domainName,
|
|
&repository.DomainOption{},
|
|
)
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return errors.Errorf("%w: %s", errs.ErrDBSeedFailure, err)
|
|
}
|
|
if d != nil {
|
|
continue
|
|
}
|
|
_, err = domainRepository.Insert(context.TODO(), &createDomain)
|
|
if err != nil {
|
|
return errors.Errorf("%w: %s", errs.ErrDBSeedFailure, err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|