]> Sergey Matveev's repositories - tofuproxy.git/blob - rounds/spy.go
ee785cca96904324385d0fe86692445c1b742271
[tofuproxy.git] / rounds / spy.go
1 /*
2 tofuproxy -- flexible HTTP/HTTPS proxy, TLS terminator, X.509 TOFU
3              manager, WARC/geminispace browser
4 Copyright (C) 2021-2023 Sergey Matveev <stargrave@stargrave.org>
5
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, version 3 of the License.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 package rounds
20
21 import (
22         "fmt"
23         "net/http"
24         "strings"
25
26         "go.stargrave.org/tofuproxy/caches"
27         "go.stargrave.org/tofuproxy/fifos"
28 )
29
30 func IsSpy(host string) bool {
31         caches.SpiesM.RLock()
32         defer caches.SpiesM.RUnlock()
33         for _, spy := range caches.Spies {
34                 if strings.HasSuffix(host, spy) {
35                         return true
36                 }
37         }
38         return false
39 }
40
41 func RoundDenySpy(
42         host string,
43         resp *http.Response,
44         w http.ResponseWriter,
45         req *http.Request,
46 ) (bool, error) {
47         if IsSpy(host) {
48                 http.NotFound(w, req)
49                 fifos.LogVarious <- fmt.Sprintf("%s %s\tdeny spy", req.Method, req.URL)
50                 return false, nil
51         }
52         return true, nil
53 }