Intercepting Http Response writer in Go

Sometimes we have to use http handler written by external library which we don’t want to change. It’s all fine until we need to know what the handler does, like what is the status code written to the response header.

In Go net/http it’s not possible to read the response directly for many good reason. Luckily ResponseWriter is interface!

Here is example of the interceptor, to get status code.

type HTTPResponseInterceptor struct {
	http.ResponseWriter
	StatusCode int
}

//NewHTTPResponseInterceptor create new httpInterceptor
func NewHTTPResponseInterceptor(w http.ResponseWriter) *HTTPResponseInterceptor {
	return &HTTPResponseInterceptor{w, http.StatusOK}
}

//WriteHeader override response WriteHeader
func (i *HTTPResponseInterceptor) WriteHeader(code int) {
	i.StatusCode = code
	i.ResponseWriter.WriteHeader(code)
}

The usage is pretty straight forward, wrap the writer with the one from the interceptor. Below example is how I used in my toy project, to get status code then update echo context status code.

func (i *Index) GetIndexHandler(context echo.Context) (err error) {
	i.bleveGetIndex.IndexNameLookup = func(*http.Request) string {
		return context.Param(i.indexNameLookupKey)
	}
	w := util.NewHTTPResponseInterceptor(context.Response().Writer)
	i.bleveGetIndex.ServeHTTP(w, context.Request())
	context.Response().Status = w.StatusCode

	return
}

I need 2 hours to come up with this solution, but it’s worth the time.
Quick googling give me this blog post which does exactly the same http://ndersson.me/post/capturing_status_code_in_net_http/

Advertisements

HFS for linux

Bagi yang udah baca yang satu ini. Pastinya kalau kita kerja di lingkungan distro linux pastinya pengen juga yang seperti itu. Kalau biasanya pake apache ntar bingung cari cms yang enak ato pake freenas aja. tetapi semua itu sudah bisa kita lakukan dengan mudah.

Yap Http File Server Buat linux ama pembuatnya emang nggak dibuat. Tetapi gara-gara wine itu semua bisa diwujudkan dengan mudah dan tanpa kendala. Just work bei beh.

Aku sih belum coba tapi Lihat ni deh!..

Membuat File Server sederhana berbasis Http

Pada sebuah lingkungan jaringan tentunya kita sudah tidak asing lagi dengan berbagi data atau biasa di sebut file sharing. Pembuatan file sharing begitu mudah (apalagi di lingkungan windows) tetapi ada berbagai kelemahan pada sistem ini diluar berbagai kelebihannya, mulai dari masalah keamanan sampai flexibilitasnya.
Tetapi fokus kita bukan membuat sistem seperti file sharing pada windows Xp tetapi membuat file server, memang fungsinya sama tetapi pastinya perlakuan kita sedikit berbeda pada file server. Menurut saya perbedaan yang mencolok pada file server adalah harus dapat digunakan pada jaringan heterogen (berbagai jenis os) dengan mudah. Tidak seperti file sharing pada windows yang membutuhkan SAMBA agar Distro Linux dapat mengaksesnya, dan tidak juga seperti NFS pada Unix yang (sampai saat ini aku belum tahu) sulit juga bekerja dengan windows.
Karena alasan itulah HTTP atau FTP adalah protokol yang umum digunakan pada File Server (fitur wajib setiap produk File Server), Walau penggunaan http kurang begitu terkenal dibandingkan ftp (emang fungsinya). Tetapi bukan berarti mensetup http file server itu sulit. Makanya kita akan membahas bagaimana cara membuat file server dengan http. Continue reading