mirror of
https://github.com/danielmiessler/Fabric.git
synced 2026-02-07 12:35:07 -05:00
### CHANGES - Introduce `cmd` directory for all main application binaries. - Move all Go packages into the `internal` directory. - Rename the `restapi` package to `server` for clarity. - Consolidate patterns and strategies into a new `data` directory. - Group all auxiliary scripts into a new `scripts` directory. - Move all documentation and images into a `docs` directory. - Update all Go import paths to reflect the new structure. - Adjust CI/CD workflows and build commands for new layout.
88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
// Package template provides system information operations for the template system.
|
|
package template
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/user"
|
|
"runtime"
|
|
)
|
|
|
|
// SysPlugin provides access to system-level information.
|
|
// Security Note: This plugin provides access to system information and
|
|
// environment variables. Be cautious with exposed variables in templates.
|
|
type SysPlugin struct{}
|
|
|
|
// Apply executes system operations with the following options:
|
|
// - hostname: System hostname
|
|
// - user: Current username
|
|
// - os: Operating system (linux, darwin, windows)
|
|
// - arch: System architecture (amd64, arm64, etc)
|
|
// - env:VALUE: Environment variable lookup
|
|
// - pwd: Current working directory
|
|
// - home: User's home directory
|
|
func (p *SysPlugin) Apply(operation string, value string) (string, error) {
|
|
debugf("Sys: operation=%q value=%q", operation, value)
|
|
|
|
switch operation {
|
|
case "hostname":
|
|
hostname, err := os.Hostname()
|
|
if err != nil {
|
|
debugf("Sys: hostname error: %v", err)
|
|
return "", fmt.Errorf("sys: hostname error: %v", err)
|
|
}
|
|
debugf("Sys: hostname=%q", hostname)
|
|
return hostname, nil
|
|
|
|
case "user":
|
|
currentUser, err := user.Current()
|
|
if err != nil {
|
|
debugf("Sys: user error: %v", err)
|
|
return "", fmt.Errorf("sys: user error: %v", err)
|
|
}
|
|
debugf("Sys: user=%q", currentUser.Username)
|
|
return currentUser.Username, nil
|
|
|
|
case "os":
|
|
result := runtime.GOOS
|
|
debugf("Sys: os=%q", result)
|
|
return result, nil
|
|
|
|
case "arch":
|
|
result := runtime.GOARCH
|
|
debugf("Sys: arch=%q", result)
|
|
return result, nil
|
|
|
|
case "env":
|
|
if value == "" {
|
|
debugf("Sys: env error: missing variable name")
|
|
return "", fmt.Errorf("sys: env operation requires a variable name")
|
|
}
|
|
result := os.Getenv(value)
|
|
debugf("Sys: env %q=%q", value, result)
|
|
return result, nil
|
|
|
|
case "pwd":
|
|
dir, err := os.Getwd()
|
|
if err != nil {
|
|
debugf("Sys: pwd error: %v", err)
|
|
return "", fmt.Errorf("sys: pwd error: %v", err)
|
|
}
|
|
debugf("Sys: pwd=%q", dir)
|
|
return dir, nil
|
|
|
|
case "home":
|
|
homeDir, err := os.UserHomeDir()
|
|
if err != nil {
|
|
debugf("Sys: home error: %v", err)
|
|
return "", fmt.Errorf("sys: home error: %v", err)
|
|
}
|
|
debugf("Sys: home=%q", homeDir)
|
|
return homeDir, nil
|
|
|
|
default:
|
|
debugf("Sys: unknown operation %q", operation)
|
|
return "", fmt.Errorf("sys: unknown operation %q (supported: hostname, user, os, arch, env, pwd, home)", operation)
|
|
}
|
|
}
|