projects
/
quanweb.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
cc857b1
)
Rework error handling to use http.Error()
author
Chris Jaekl
<chris@localhost>
Wed, 11 Nov 2020 05:05:35 +0000
(
00:05
-0500)
committer
Chris Jaekl
<chris@localhost>
Wed, 11 Nov 2020 05:05:35 +0000
(
00:05
-0500)
main/handler.go
patch
|
blob
|
history
diff --git
a/main/handler.go
b/main/handler.go
index 599f5d557bcde26ee40fbaed3e5eb8a0eb739771..d0771fa61d303e5a6bcb8b748c5b277ab2146b73 100644
(file)
--- a/
main/handler.go
+++ b/
main/handler.go
@@
-17,7
+17,7
@@
const MAX_TERMS = 10
// ============================================================================
func bookMimeType(bookPath string) string {
upper := strings.ToUpper(bookPath)
// ============================================================================
func bookMimeType(bookPath string) string {
upper := strings.ToUpper(bookPath)
-
+
if strings.HasSuffix(upper, ".EPUB") {
return "application/epub+zip"
} else if strings.HasSuffix(upper, ".PDF") {
if strings.HasSuffix(upper, ".EPUB") {
return "application/epub+zip"
} else if strings.HasSuffix(upper, ".PDF") {
@@
-40,7
+40,7
@@
func efsPathForId(efsId int) string {
func handler(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if nil != err {
func handler(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if nil != err {
-
fmt.Fprintln(w, "ERROR!", err
)
+
handleError(w, err.Error()
)
return
}
return
}
@@
-56,32
+56,37
@@
func handler(w http.ResponseWriter, r *http.Request) {
case "search":
handleSearch(w, r)
default:
case "search":
handleSearch(w, r)
default:
- fmt.Fprintf(w, "Unrecognized request: %s\n", r.URL.Path[1:])
- fmt.Fprintf(w, "id: %s\n", r.FormValue("id"))
-
- fmt.Fprintln(w, "URL: ", r.URL)
- fmt.Fprintln(w, "Query: ", r.URL.Query())
+ handleError(
+ w,
+ fmt.Sprintf(
+ "Unrecognized request: %s\nid: %s\nURL: %s\nQuery: %s\n",
+ r.URL.Path[1:],
+ r.FormValue("id"),
+ r.URL,
+ r.URL.Query()))
}
}
// Download a book, based on the path stored in the DB
func handleBook(w http.ResponseWriter, r *http.Request) {
}
}
// Download a book, based on the path stored in the DB
func handleBook(w http.ResponseWriter, r *http.Request) {
+ fmt.Println("handleBook:", r.URL.Path)
path := r.URL.Path[1:]
tok := strings.Split(path, "/")
if 2 != len(tok) {
path := r.URL.Path[1:]
tok := strings.Split(path, "/")
if 2 != len(tok) {
-
fmt.Fprintln(w, "Unexpected path for book download:", path
)
+
handleError(w, fmt.Sprintf("Unexpected path for book download: %s\n", path)
)
return
}
bookId, err := strconv.Atoi(tok[1])
if (nil != err) || (0 == bookId) {
return
}
bookId, err := strconv.Atoi(tok[1])
if (nil != err) || (0 == bookId) {
- fmt.Fprintln(w, "Invalid id for book download:", path, err)
+ msg := fmt.Sprintf("Invalid id for book download: \"%s\" (%s)\n", path, err.Error())
+ handleError(w, msg)
return
}
bookPath := queryBookPathById(bookId)
if 0 == len(bookPath) {
return
}
bookPath := queryBookPathById(bookId)
if 0 == len(bookPath) {
-
fmt.Fprintln(w, "No book for ID:", bookId
)
+
handleError(w, fmt.Sprintf("No book for ID: %s\n", bookId)
)
return
}
return
}
@@
-89,22
+94,22
@@
func handleBook(w http.ResponseWriter, r *http.Request) {
mimeType := bookMimeType(bookPath)
if 0 == len(mimeType) {
mimeType := bookMimeType(bookPath)
if 0 == len(mimeType) {
-
fmt.Fprintln(w, "Failed to determine MIME type for book:", bookPath
)
+
handleError(w, fmt.Sprintf("Failed to determine MIME type for book: %s\n", bookPath)
)
return
}
var info os.FileInfo
info, err = os.Stat(bookPath)
if nil != err {
return
}
var info os.FileInfo
info, err = os.Stat(bookPath)
if nil != err {
-
fmt.Fprintln(w, "Failed to read file metadata:", bookPath, err
)
+
handleError(w, fmt.Sprintf("Failed to read file metadata: \"%s\" (%s)\n", bookPath, err.Error())
)
return
}
modTime := info.ModTime()
return
}
modTime := info.ModTime()
-
+
var fd *os.File
fd, err = os.Open(bookPath)
if nil != err {
var fd *os.File
fd, err = os.Open(bookPath)
if nil != err {
-
fmt.Fprintln(w, "Failed to open file:", bookPath, err
)
+
handleError(w, fmt.Sprintf("Failed to open file: \"%s\" (%s)\n", bookPath, err.Error())
)
return
}
defer fd.Close()
return
}
defer fd.Close()
@@
-127,7
+132,7
@@
func handleDownload(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Invalid id for download:", path, err)
return
}
fmt.Fprintln(w, "Invalid id for download:", path, err)
return
}
-
+
mimeType := queryMimeTypeByEfsId(efsId)
if 0 == len(mimeType) {
fmt.Fprintln(w, "No MIME type found for id:", efsId)
mimeType := queryMimeTypeByEfsId(efsId)
if 0 == len(mimeType) {
fmt.Fprintln(w, "No MIME type found for id:", efsId)
@@
-148,12
+153,17
@@
func handleDownload(w http.ResponseWriter, r *http.Request) {
io.Copy(w, fd)
}
io.Copy(w, fd)
}
+func handleError(w http.ResponseWriter, msg string) {
+ fmt.Printf("ERROR: %s", msg)
+ http.Error(w, msg, http.StatusInternalServerError)
+}
+
func handleInfo(w http.ResponseWriter, r *http.Request) {
idParams := r.Form[PARAM_IDS]
if 1 != len(idParams) {
func handleInfo(w http.ResponseWriter, r *http.Request) {
idParams := r.Form[PARAM_IDS]
if 1 != len(idParams) {
-
fmt.Fprintln
(w, "ERROR! Detected either zero or multiple ids= parameters. Exactly one expected.")
- return
- }
+
handleError
(w, "ERROR! Detected either zero or multiple ids= parameters. Exactly one expected.")
+ return
+ }
idParam := idParams[0]
idStrings := strings.Split(idParam, ",")
idParam := idParams[0]
idStrings := strings.Split(idParam, ",")
@@
-171,7
+181,7
@@
func handleInfo(w http.ResponseWriter, r *http.Request) {
var jsonValue []byte
jsonValue, err = json.Marshal(books)
if nil != err {
var jsonValue []byte
jsonValue, err = json.Marshal(books)
if nil != err {
-
fmt.Fprintln(w, "ERROR!", err
)
+
handleError(w, err.Error()
)
} else {
w.Write(jsonValue)
}
} else {
w.Write(jsonValue)
}
@@
-204,7
+214,7
@@
func handleSearch(w http.ResponseWriter, r *http.Request) {
jsonValue, err := json.Marshal(ids)
if nil != err {
jsonValue, err := json.Marshal(ids)
if nil != err {
-
fmt.Fprintln(w, "ERROR!", err
)
+
handleError(w, err.Error()
)
} else {
w.Write(jsonValue)
}
} else {
w.Write(jsonValue)
}