Files
tinyauth/internal/service/access_controls_service.go
2025-10-28 19:30:39 +01:00

73 lines
1.4 KiB
Go

package service
import (
"os"
"strings"
"tinyauth/internal/config"
"tinyauth/internal/utils"
"github.com/rs/zerolog/log"
)
type AccessControlsService struct {
docker *DockerService
envACLs config.Apps
aclFlags map[string]string
}
func NewAccessControlsService(docker *DockerService) *AccessControlsService {
return &AccessControlsService{
docker: docker,
aclFlags: make(map[string]string),
}
}
func (acls *AccessControlsService) SetACLFlags(flags map[string]string) {
acls.aclFlags = flags
}
func (acls *AccessControlsService) Init() error {
env := os.Environ()
apps, err := utils.GetACLsConfig(env, acls.aclFlags)
if err != nil {
return err
}
acls.envACLs = apps
return nil
}
func (acls *AccessControlsService) lookupEnvACLs(appDomain string) *config.App {
if len(acls.envACLs.Apps) == 0 {
return nil
}
for appName, appACLs := range acls.envACLs.Apps {
if appACLs.Config.Domain == appDomain {
return &appACLs
}
if strings.SplitN(appDomain, ".", 2)[0] == appName {
return &appACLs
}
}
return nil
}
func (acls *AccessControlsService) GetAccessControls(appDomain string) (config.App, error) {
// First check environment variables
envACLs := acls.lookupEnvACLs(appDomain)
if envACLs != nil {
log.Debug().Str("domain", appDomain).Msg("Found matching access controls in environment variables")
return *envACLs, nil
}
// Fallback to Docker labels
return acls.docker.GetLabels(appDomain)
}