diff options
author | Yotam Nachum <me@yotam.net> | 2019-12-06 21:15:28 +0200 |
---|---|---|
committer | Yotam Nachum <me@yotam.net> | 2019-12-06 21:22:18 +0200 |
commit | bbc61ff2a997b38455a68432f27182f275573ced (patch) | |
tree | a6a9e3267278ed5f5c9685bc330ceeaefea1cda8 /recover.go | |
parent | Refactor main handler (diff) | |
download | shavit-bbc61ff2a997b38455a68432f27182f275573ced.tar.gz shavit-bbc61ff2a997b38455a68432f27182f275573ced.zip |
Recover from panics in the main handler
Diffstat (limited to 'recover.go')
-rw-r--r-- | recover.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/recover.go b/recover.go new file mode 100644 index 0000000..b4a82e7 --- /dev/null +++ b/recover.go @@ -0,0 +1,20 @@ +package main + +import ( + gemini "git.sr.ht/~yotam/go-gemini" +) + +// RecovererHandler wrap a Gemini handler and recover from panics +type RecovererHandler struct { + handler gemini.Handler +} + +// Handle implement the gemini.Handler interface by recovering inner handler +func (h RecovererHandler) Handle(req gemini.Request) (res gemini.Response) { + defer func() { + if r := recover(); r != nil { + res = gemini.Response{Status: gemini.StatusTemporaryFailure, Meta: "Internal server error", Body: nil} + } + }() + return h.handler.Handle(req) +} |