diff --git a/fst/info.go b/fst/info.go new file mode 100644 index 0000000..8f7fbdb --- /dev/null +++ b/fst/info.go @@ -0,0 +1,5 @@ +package fst + +type Info struct { + User int `json:"user"` +} diff --git a/main.go b/main.go index 1521586..2449b68 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,6 @@ import ( "git.gensokyo.uk/security/fortify/internal/app" "git.gensokyo.uk/security/fortify/internal/fmsg" "git.gensokyo.uk/security/fortify/internal/linux" - "git.gensokyo.uk/security/fortify/internal/state" "git.gensokyo.uk/security/fortify/internal/system" ) @@ -128,24 +127,20 @@ func main() { // Ignore errors; set is set for ExitOnError. _ = set.Parse(args[1:]) - var ( - config *fst.Config - instance *state.State - name string - ) - - if len(set.Args()) != 1 { + switch len(set.Args()) { + case 0: // system + printShowSystem(short) + case 1: // instance + name := set.Args()[0] + config, instance := tryShort(name) + if config == nil { + config = tryPath(name) + } + printShowInstance(instance, config, short) + default: fmsg.Fatal("show requires 1 argument") - } else { - name = set.Args()[0] - config, instance = tryShort(name) } - if config == nil { - config = tryPath(name) - } - - printShow(instance, config, short) fmsg.Exit(0) case "app": // launch app from configuration file if len(args) < 2 { diff --git a/print.go b/print.go index 702f35e..e78861f 100644 --- a/print.go +++ b/print.go @@ -16,14 +16,37 @@ import ( "git.gensokyo.uk/security/fortify/internal/state" ) -func printShow(instance *state.State, config *fst.Config, short bool) { - if flagJSON { - v := any(config) - if instance != nil { - v = instance - } +func printShowSystem(short bool) { + info := new(fst.Info) - printJSON(v) + // get fid by querying uid of aid 0 + if uid, err := os.Uid(0); err != nil { + fmsg.Fatalf("cannot obtain uid from fsu: %v", err) + } else { + info.User = (uid / 10000) - 100 + } + + if flagJSON { + printJSON(info) + return + } + + w := tabwriter.NewWriter(direct.Stdout, 0, 1, 4, ' ', 0) + + fmt.Fprintf(w, "User:\t%d\n", info.User) + + if err := w.Flush(); err != nil { + fmsg.Fatalf("cannot flush tabwriter: %v", err) + } +} + +func printShowInstance(instance *state.State, config *fst.Config, short bool) { + if flagJSON { + if instance != nil { + printJSON(instance) + } else { + printJSON(config) + } return }