// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package framework import ( "errors" "github.com/hashicorp/errwrap" "github.com/hashicorp/vault/sdk/helper/identitytpl" "github.com/hashicorp/vault/sdk/logical" ) // PopulateIdentityTemplate takes a template string, an entity ID, and an // instance of system view. It will query system view for information about the // entity and use the resulting identity information to populate the template // string. func PopulateIdentityTemplate(tpl string, entityID string, sysView logical.SystemView) (string, error) { entity, err := sysView.EntityInfo(entityID) if err != nil { return "", err } if entity == nil { return "", errors.New("no entity found") } groups, err := sysView.GroupsForEntity(entityID) if err != nil { return "", err } input := identitytpl.PopulateStringInput{ String: tpl, Entity: entity, Groups: groups, Mode: identitytpl.ACLTemplating, } _, out, err := identitytpl.PopulateString(input) if err != nil { return "", err } return out, nil } // ValidateIdentityTemplate takes a template string and returns if the string is // a valid identity template. func ValidateIdentityTemplate(tpl string) (bool, error) { hasTemplating, _, err := identitytpl.PopulateString(identitytpl.PopulateStringInput{ Mode: identitytpl.ACLTemplating, ValidityCheckOnly: true, String: tpl, }) if err != nil { return false, errwrap.Wrapf("failed to validate policy templating: {{err}}", err) } return hasTemplating, nil }