darkmist icon

Build Your Own Web Framework in Go.go

darkmist | PRO | 07/20/17 06:59:07 PM UTC | 0 ⭐ | 197 👁️ | Never ⏰ | []
Go |

1.09 KB

|

None

|

0 👍

/

0 👎

package main
 
import (
    "bytes"
    "github.com/goji/httpauth"
    "github.com/gorilla/handlers"
    "net/http"
    "os"
)
 
func enforceXMLHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if r.ContentLength == 0 {
            http.Error(w, http.StatusText(400), 400)
            return
        }
 
        buf := new(bytes.Buffer)
        buf.ReadFrom(r.Body)
        if http.DetectContentType(buf.Bytes()) != "text/xml; charset=utf-8" {
            http.Error(w, http.StatusText(415), 415)
            return
        }
 
        next.ServeHTTP(w, r)
    })
}
 
func myLoggingHandler(h http.Handler) http.Handler {
    logFile, err := os.OpenFile("server.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        panic(err)
    }
    return handlers.LoggingHandler(logFile, h)
}
 
func main() {
    indexHandler := http.HandlerFunc(index)
    authHandler := httpauth.SimpleBasicAuth("username", "password")
 
    http.Handle("/", myLoggingHandler(authHandler(enforceXMLHandler(indexHandler))))
    http.ListenAndServe(":3000", nil)
}
 
func index(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("OK"))
}

Comments