reprogl

Форк
0
/
response.go 
60 строк · 1.1 Кб
1
package http
2

3
import (
4
	"fmt"
5
	base "net/http"
6
	"runtime"
7
	"time"
8

9
	"xelbot.com/reprogl/container"
10
)
11

12
type LogResponseWriter interface {
13
	base.ResponseWriter
14
	Status() int
15
	Duration() time.Duration
16
}
17

18
type Response struct {
19
	base.ResponseWriter
20
	StatusCode int
21

22
	start time.Time
23
}
24

25
func CreateLogResponse(w base.ResponseWriter) *Response {
26
	return &Response{
27
		ResponseWriter: w,
28
		start:          time.Now(),
29
	}
30
}
31

32
func (lrw *Response) WriteHeader(statusCode int) {
33
	lrw.StatusCode = statusCode
34
	lrw.ResponseWriter.WriteHeader(statusCode)
35
}
36

37
func (lrw *Response) Write(body []byte) (int, error) {
38
	if _, ok := lrw.ResponseWriter.Header()["Cache-Control"]; !ok {
39
		lrw.ResponseWriter.Header().Set("Cache-Control", "private, no-cache, max-age=0")
40
	}
41

42
	lrw.Header().Set("X-Powered-By", fmt.Sprintf(
43
		"Reprogl/%s (%s)",
44
		container.Version,
45
		runtime.Version()))
46

47
	return lrw.ResponseWriter.Write(body)
48
}
49

50
func (lrw *Response) Status() int {
51
	if lrw.StatusCode == 0 {
52
		return base.StatusOK
53
	}
54

55
	return lrw.StatusCode
56
}
57

58
func (lrw *Response) Duration() time.Duration {
59
	return time.Since(lrw.start)
60
}
61

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.