This file is indexed.

/usr/share/gocode/src/github.com/emicklei/go-restful/examples/restful-pre-post-filters.go is in golang-github-emicklei-go-restful-dev 1.2-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package main

import (
	"github.com/emicklei/go-restful"
	"io"
	"log"
	"net/http"
)

// This example shows how the different types of filters are called in the request-response flow.
// The call chain is logged on the console when sending an http request.
//
// GET http://localhost:8080/1
// GET http://localhost:8080/2

var indentLevel int

func container_filter_A(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
	log.Printf("url path:%v\n", req.Request.URL)
	trace("container_filter_A: before", 1)
	chain.ProcessFilter(req, resp)
	trace("container_filter_A: after", -1)
}

func container_filter_B(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
	trace("container_filter_B: before", 1)
	chain.ProcessFilter(req, resp)
	trace("container_filter_B: after", -1)
}

func service_filter_A(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
	trace("service_filter_A: before", 1)
	chain.ProcessFilter(req, resp)
	trace("service_filter_A: after", -1)
}

func service_filter_B(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
	trace("service_filter_B: before", 1)
	chain.ProcessFilter(req, resp)
	trace("service_filter_B: after", -1)
}

func route_filter_A(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
	trace("route_filter_A: before", 1)
	chain.ProcessFilter(req, resp)
	trace("route_filter_A: after", -1)
}

func route_filter_B(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) {
	trace("route_filter_B: before", 1)
	chain.ProcessFilter(req, resp)
	trace("route_filter_B: after", -1)
}

func trace(what string, delta int) {
	indented := what
	if delta < 0 {
		indentLevel += delta
	}
	for t := 0; t < indentLevel; t++ {
		indented = "." + indented
	}
	log.Printf("%s", indented)
	if delta > 0 {
		indentLevel += delta
	}
}

func main() {
	restful.Filter(container_filter_A)
	restful.Filter(container_filter_B)

	ws1 := new(restful.WebService)
	ws1.Path("/1")
	ws1.Filter(service_filter_A)
	ws1.Filter(service_filter_B)
	ws1.Route(ws1.GET("").To(doit1).Filter(route_filter_A).Filter(route_filter_B))

	ws2 := new(restful.WebService)
	ws2.Path("/2")
	ws2.Filter(service_filter_A)
	ws2.Filter(service_filter_B)
	ws2.Route(ws2.GET("").To(doit2).Filter(route_filter_A).Filter(route_filter_B))

	restful.Add(ws1)
	restful.Add(ws2)

	log.Print("go-restful example listing on http://localhost:8080/1 and http://localhost:8080/2")
	log.Fatal(http.ListenAndServe(":8080", nil))
}

func doit1(req *restful.Request, resp *restful.Response) {
	io.WriteString(resp, "nothing to see in 1")
}

func doit2(req *restful.Request, resp *restful.Response) {
	io.WriteString(resp, "nothing to see in 2")
}