diff --git a/Gopkg.lock b/Gopkg.lock index fcab5f1..918eb6e 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,8 +2,17 @@ [[projects]] - name = "github.com/sirupsen/logrus" + name = "github.com/rifflock/lfshook" packages = ["."] + revision = "bf539943797a1f34c1f502d07de419b5238ae6c6" + version = "v2.3" + +[[projects]] + name = "github.com/sirupsen/logrus" + packages = [ + ".", + "hooks/syslog" + ] revision = "c155da19408a8799da419ed3eeb0cb5db0ad5dbc" version = "v1.0.5" @@ -25,6 +34,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "559be3832a82b6c8884ca8103c92b2343135b96374cdf98f6cc294427bd26219" + inputs-digest = "f6199a143c790c5c1422bd35477ede08e5d2e3a0e5552d769e7c4de6ed8a14b1" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 5defd2b..addef28 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -23,3 +23,7 @@ [[constraint]] name = "github.com/sirupsen/logrus" version = "1.0.5" + +[[constraint]] + name = "github.com/rifflock/lfshook" + version = "2.3.0" diff --git a/Makefile b/Makefile index fd6784f..2df7eca 100644 --- a/Makefile +++ b/Makefile @@ -4,22 +4,22 @@ all: deps browserpass test deps: dep ensure -browserpass: *.go +browserpass: *.go **/*.go go build -o $@ -browserpass-linux64: *.go +browserpass-linux64: *.go **/*.go env GOOS=linux GOARCH=amd64 go build -o $@ -browserpass-windows64: *.go +browserpass-windows64: *.go **/*.go env GOOS=windows GOARCH=amd64 go build -o $@.exe -browserpass-darwinx64: *.go +browserpass-darwinx64: *.go **/*.go env GOOS=darwin GOARCH=amd64 go build -o $@ -browserpass-openbsd64: *.go +browserpass-openbsd64: *.go **/*.go env GOOS=openbsd GOARCH=amd64 go build -o $@ -browserpass-freebsd64: *.go +browserpass-freebsd64: *.go **/*.go env GOOS=freebsd GOARCH=amd64 go build -o $@ .PHONY: test diff --git a/main.go b/main.go index 79c4a5a..222ba7e 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "os" "github.com/maximbaz/browserpass-native/openbsd" + "github.com/maximbaz/browserpass-native/persistentlog" log "github.com/sirupsen/logrus" ) @@ -31,6 +32,8 @@ func main() { log.SetLevel(log.DebugLevel) } + persistentlog.AddPersistentLogHook() + log.Debugf("Starting browserpass host app v%v", VERSION) process() } diff --git a/persistentlog/syslog.go b/persistentlog/syslog.go new file mode 100644 index 0000000..d56dfdc --- /dev/null +++ b/persistentlog/syslog.go @@ -0,0 +1,21 @@ +// +build !windows,!nacl,!plan9 + +package persistentlog + +import ( + "log/syslog" + + log "github.com/sirupsen/logrus" + logSyslog "github.com/sirupsen/logrus/hooks/syslog" +) + +// AddPersistentLogHook configures persisting logs in syslog +func AddPersistentLogHook() { + hook, err := logSyslog.NewSyslogHook("", "", syslog.LOG_INFO, "browserpass") + + if err == nil { + log.AddHook(hook) + } else { + log.Warn("Unable to connect to syslog, logs will NOT be persisted") + } +} diff --git a/persistentlog/unsupported.go b/persistentlog/unsupported.go new file mode 100644 index 0000000..1c50714 --- /dev/null +++ b/persistentlog/unsupported.go @@ -0,0 +1,10 @@ +// +build nacl,plan9 + +package persistentlog + +import log "github.com/sirupsen/logrus" + +// AddPersistentLogHook configures persisting logs, not supported on these systems +func AddPersistentLogHook() { + log.Warn("Persistent logging is not implemented on this OS") +} diff --git a/persistentlog/windows.go b/persistentlog/windows.go new file mode 100644 index 0000000..4485841 --- /dev/null +++ b/persistentlog/windows.go @@ -0,0 +1,28 @@ +// +build windows + +package persistentlog + +import ( + "os" + "path/filepath" + + "github.com/rifflock/lfshook" + log "github.com/sirupsen/logrus" +) + +// AddPersistentLogHook configures persisting logs in a file +func AddPersistentLogHook() { + appDataPath := os.Getenv("LOCALAPPDATA") + if appDataPath == "" { + log.Warn("Unable to determine %%APPDATA%% folder location, logs will NOT be persisted") + return + } + logFolderPath := filepath.Join(appDataPath, "browserpass") + if err := os.MkdirAll(logFolderPath, os.ModePerm); err != nil { + log.Warn("Unable to create browserpass folder in %%APPDATA%%, logs will NOT be persisted") + return + } + logFilePath := filepath.Join(logFolderPath, "browserpass.log") + log.Debug("Logs will being written to: ", logFilePath) + log.AddHook(lfshook.NewHook(logFilePath, &log.TextFormatter{FullTimestamp: true})) +}