in config/exec_resource.go [46:105]
func (e *execResource) download(ctx context.Context, execR *agentendpointpb.OSPolicy_Resource_ExecResource_Exec) (string, error) {
tmpDir, err := ioutil.TempDir(e.tempDir, "")
if err != nil {
return "", fmt.Errorf("failed to create temp dir: %s", err)
}
// File extensions are important on Windows.
var name string
perms := os.FileMode(0644)
switch execR.GetSource().(type) {
case *agentendpointpb.OSPolicy_Resource_ExecResource_Exec_Script:
switch execR.GetInterpreter() {
case agentendpointpb.OSPolicy_Resource_ExecResource_Exec_NONE:
if goos == "windows" {
name = "script.cmd"
} else {
name = "script"
}
perms = os.FileMode(0755)
case agentendpointpb.OSPolicy_Resource_ExecResource_Exec_SHELL:
if goos == "windows" {
name = "script.cmd"
} else {
name = "script.sh"
}
case agentendpointpb.OSPolicy_Resource_ExecResource_Exec_POWERSHELL:
name = "script.ps1"
default:
return "", fmt.Errorf("unsupported interpreter %q", execR.GetInterpreter())
}
name = filepath.Join(tmpDir, name)
if _, err := util.AtomicWriteFileStream(strings.NewReader(execR.GetScript()), "", name, perms); err != nil {
return "", err
}
case *agentendpointpb.OSPolicy_Resource_ExecResource_Exec_File:
if execR.GetFile().GetLocalPath() != "" {
return execR.GetFile().GetLocalPath(), nil
}
switch {
case execR.GetFile().GetGcs().GetObject() != "":
name = path.Base(execR.GetFile().GetGcs().GetObject())
case execR.GetFile().GetRemote().GetUri() != "":
name = path.Base(execR.GetFile().GetRemote().GetUri())
default:
return "", fmt.Errorf("unsupported File %v", execR.GetFile())
}
if execR.GetInterpreter() == agentendpointpb.OSPolicy_Resource_ExecResource_Exec_NONE {
perms = os.FileMode(0755)
}
name = filepath.Join(tmpDir, name)
if _, err := downloadFile(ctx, name, perms, execR.GetFile()); err != nil {
return "", err
}
default:
return "", fmt.Errorf("unrecognized Source type for ExecResource: %q", execR.GetSource())
}
return name, nil
}