package bsl import ( "context" "fmt" "strings" "edge-infra.dev/pkg/edge/api/bsl/types" ) const ( SharedKey = "shared_key" SecretKey = "secret_key" OrgDelimiter = "/" NepOrganization = "Nep-Organization" getUsersGroups = "/security/group-memberships/groups?username=%s" ) type AccessKeySecret func(ctx context.Context, organization string) (*AccessKey, error) func WithRootOrg(root, organization string) string { if !strings.Contains(organization, TrimOrg(root)) { organization = fmt.Sprintf("%s%s/", root, TrimOrg(organization)) } else { organization = fmt.Sprintf("/%s/", TrimOrg(organization)) } return organization } func TrimOrg(org string) string { return strings.Trim(org, OrgDelimiter) } func GetOrgShortName(org string) string { splitPath := strings.Split(TrimOrg(org), OrgDelimiter) return splitPath[len(splitPath)-1] } func CreateFullAccountName(user *types.AuthUser) string { if user.AuthProvider == "okta" { return fmt.Sprintf("acct:commerce@%s-%s", user.Username, user.Email) } return fmt.Sprintf("acct:%s@%s", GetOrgShortName(user.Organization), user.Username) } func WithOrganizationPrefix(b types.BSPConfig, org string) string { if b.OrganizationPrefix == "" { return org } orgParts := strings.Split(org, OrgDelimiter) orgIndex := findOrgIndex(orgParts) if !strings.HasPrefix(orgParts[orgIndex], b.OrganizationPrefix) { orgParts[orgIndex] = b.OrganizationPrefix + orgParts[orgIndex] } return strings.Join(orgParts, OrgDelimiter) } func GetTenant(root, orgName string) string { orgWithoutRoot := strings.TrimPrefix(orgName, root) orgParts := strings.Split(orgWithoutRoot, OrgDelimiter) if len(orgParts) > 0 { return orgParts[0] } return "" } func findOrgIndex(orgParts []string) int { i := len(orgParts) - 1 for ; i >= 0; i-- { if len(orgParts[i]) > 0 { break } } return i }