Files
phishingclub/backend/app/controllers.go
Ronni Skansing f6eb87fa2b OAuth providers
Signed-off-by: Ronni Skansing <rskansing@gmail.com>
2025-11-20 23:54:00 +01:00

234 lines
6.7 KiB
Go

package app
import (
"github.com/phishingclub/phishingclub/config"
"github.com/phishingclub/phishingclub/controller"
"go.uber.org/zap"
"gorm.io/gorm"
)
// Controllers is a collection of controllers
type Controllers struct {
Asset *controller.Asset
Attachment *controller.Attachment
Company *controller.Company
Health *controller.Health
Installer *controller.Install
InitialSetup *controller.InitialSetup
Page *controller.Page
Proxy *controller.Proxy
Log *controller.Log
Option *controller.Option
User *controller.User
Domain *controller.Domain
Recipient *controller.Recipient
RecipientGroup *controller.RecipientGroup
SMTPConfiguration *controller.SMTPConfiguration
Email *controller.Email
CampaignTemplate *controller.CampaignTemplate
Campaign *controller.Campaign
QR *controller.QRGenerator
APISender *controller.APISender
AllowDeny *controller.AllowDeny
GeoIP *controller.GeoIP
Webhook *controller.Webhook
Identifier *controller.Identifier
Version *controller.Version
SSO *controller.SSO
Update *controller.Update
Import *controller.Import
Backup *controller.Backup
IPAllowList *controller.IPAllowList
OAuthProvider *controller.OAuthProvider
}
// NewControllers creates a collection of controllers
func NewControllers(
staticAssetPath string,
attachmentsPath string,
repositories *Repositories,
services *Services,
logger *zap.SugaredLogger,
atomLogger *zap.AtomicLevel,
utillities *Utilities,
db *gorm.DB,
conf *config.Config,
) *Controllers {
common := controller.Common{
SessionService: services.Session,
Logger: logger,
Response: utillities.JSONResponseHandler,
}
asset := &controller.Asset{
Common: common,
StaticAssetPath: staticAssetPath,
AssetService: services.Asset,
OptionService: services.Option,
DomainService: services.Domain,
}
attachment := &controller.Attachment{
Common: common,
StaticAttachmentPath: attachmentsPath,
AttachmentService: services.Attachment,
OptionService: services.Option,
TemplateService: services.Template,
CompanyService: services.Company,
}
company := &controller.Company{
Common: common,
CampaignService: services.Campaign,
CompanyService: services.Company,
RecipientService: services.Recipient,
}
initialSetup := &controller.InitialSetup{
Common: common,
CLIOutputter: utillities.CLIOutputter,
OptionRepository: repositories.Option,
InstallService: services.InstallSetup,
OptionService: services.Option,
}
installer := &controller.Install{
Common: common,
UserRepository: repositories.User,
CompanyRepository: repositories.Company,
OptionRepository: repositories.Option,
PasswordHasher: *utillities.PasswordHasher,
DB: db,
ImportService: services.Import,
}
health := &controller.Health{}
log := &controller.Log{
Common: common,
OptionService: services.Option,
Database: db,
LoggerAtom: atomLogger,
}
page := &controller.Page{
Common: common,
PageService: services.Page,
TemplateService: services.Template,
}
proxy := &controller.Proxy{
Common: common,
ProxyService: services.Proxy,
}
option := &controller.Option{
Common: common,
OptionService: services.Option,
}
user := &controller.User{
Common: common,
UserService: services.User,
}
domain := &controller.Domain{
Common: common,
DomainService: services.Domain,
}
recipient := &controller.Recipient{
Common: common,
RecipientService: services.Recipient,
}
recipientGroup := &controller.RecipientGroup{
Common: common,
RecipientGroupService: services.RecipientGroup,
}
smtpConfiguration := &controller.SMTPConfiguration{
Common: common,
SMTPConfigurationService: services.SMTPConfiguration,
}
email := &controller.Email{
Common: common,
EmailService: services.Email,
TemplateService: services.Template,
EmailRepository: repositories.Email,
}
campaignTemplate := &controller.CampaignTemplate{
Common: common,
CampaignTemplateService: services.CampaignTemplate,
}
campaign := &controller.Campaign{
Common: common,
CampaignService: services.Campaign,
}
qr := &controller.QRGenerator{
Common: common,
}
apiSender := &controller.APISender{
Common: common,
APISenderService: services.APISender,
}
allowDeny := &controller.AllowDeny{
Common: common,
AllowDenyService: services.AllowDeny,
}
webhook := &controller.Webhook{
Common: common,
WebhookService: services.Webhook,
}
identifier := &controller.Identifier{
Common: common,
IdentifierService: services.Identifier,
}
version := &controller.Version{Common: common}
sso := &controller.SSO{Common: common, SSO: services.SSO}
update := &controller.Update{
Common: common,
UpdateService: services.Update,
OptionService: services.Option,
}
importController := &controller.Import{
Common: common,
ImportService: services.Import,
}
backup := &controller.Backup{
Common: common,
BackupService: services.Backup,
}
ipAllowList := &controller.IPAllowList{
Common: common,
IPAllowListService: services.IPAllowList,
}
geoIP := &controller.GeoIP{
Common: common,
}
oauthProvider := &controller.OAuthProvider{
Common: common,
OAuthProviderService: services.OAuthProvider,
Config: conf,
}
return &Controllers{
Asset: asset,
Attachment: attachment,
Company: company,
Installer: installer,
InitialSetup: initialSetup,
Health: health,
Page: page,
Proxy: proxy,
Log: log,
Option: option,
User: user,
Domain: domain,
Recipient: recipient,
RecipientGroup: recipientGroup,
SMTPConfiguration: smtpConfiguration,
Email: email,
CampaignTemplate: campaignTemplate,
Campaign: campaign,
QR: qr,
APISender: apiSender,
AllowDeny: allowDeny,
GeoIP: geoIP,
Webhook: webhook,
Identifier: identifier,
Version: version,
SSO: sso,
Update: update,
Import: importController,
Backup: backup,
IPAllowList: ipAllowList,
OAuthProvider: oauthProvider,
}
}