89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"tildegit.org/andinus/cetus/cache"
|
|
"tildegit.org/andinus/lynx"
|
|
)
|
|
|
|
var (
|
|
version string = "v0.6.9"
|
|
dump bool
|
|
random bool
|
|
notify bool
|
|
print bool
|
|
|
|
err error
|
|
body string
|
|
file string
|
|
reqInfo map[string]string
|
|
|
|
apodDate string
|
|
)
|
|
|
|
func main() {
|
|
initCetus()
|
|
|
|
// Early Check: If command was not passed then print usage and
|
|
// exit. Later command & service both are checked, this check
|
|
// is for version command. If not checked then running cetus
|
|
// without any args will fail because os.Args[1] will panic
|
|
// the program & produce runtime error.
|
|
if len(os.Args) == 1 {
|
|
printUsage()
|
|
os.Exit(0)
|
|
}
|
|
|
|
parseArgs()
|
|
}
|
|
|
|
func initCetus() {
|
|
// We cannot use complex switches here so instead we unveil
|
|
// everything we need. This is bad but the other way will make
|
|
// the code too complex, we need a better structure for code.
|
|
// This also runs UnveilBlock, instead we could remove this
|
|
// unveil func & inline Unveil calls in other functions, this
|
|
// way we will only unveil when required.
|
|
//
|
|
// This method is still used because in earlier lynx version
|
|
// we had to manage build flags manually, so keeping
|
|
// everything in a single func made sense.
|
|
unveil()
|
|
}
|
|
|
|
func unveil() {
|
|
paths := make(map[string]string)
|
|
|
|
paths[cache.Dir()] = "rwc"
|
|
paths["/dev/null"] = "rw" // required by feh
|
|
paths["/etc/resolv.conf"] = "r"
|
|
|
|
// ktrace output
|
|
paths["/usr/libexec/ld.so"] = "r"
|
|
paths["/var/run/ld.so.hints"] = "r"
|
|
paths["/usr/lib"] = "r"
|
|
paths["/dev/urandom"] = "r"
|
|
paths["/etc/hosts"] = "r"
|
|
paths["/etc/ssl"] = "r"
|
|
|
|
err := lynx.UnveilPaths(paths)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
commands := []string{"feh", "gsettings", "pcmanfm", "notify-send"}
|
|
|
|
err = lynx.UnveilCommands(commands)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Block further unveil calls
|
|
err = lynx.UnveilBlock()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|