Γ–ffentliche Dateiansicht: Raw-Dateien, Tree, Releases und Issues sind ohne Login verfΓΌgbar.
main.go Raw
 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
package main

import (
	"flag"
	"fmt"
	"os"
	"strings"
	"sync"

	"github.com/adrian-lorenz/privacy-guard-proxy/internal/api"
	"github.com/adrian-lorenz/privacy-guard-proxy/internal/proxy"
)

func main() {
	apiPort := flag.Int("api-port", 0, "port for the built-in privacy-guard HTTP API (0 = disabled)")
	flag.Parse()

	if *apiPort == 0 {
		fmt.Sscan(os.Getenv("PRIVACY_GUARD_API_PORT"), apiPort)
	}

	root, err := proxy.LoadConfigs("config.json")
	if err != nil {
		fmt.Fprintf(os.Stderr, "error: failed to load config.json: %v\n", err)
		os.Exit(1)
	}

	// api_port from config is used when not overridden by flag/env
	if *apiPort == 0 && root.APIPort > 0 {
		*apiPort = root.APIPort
	}

	const sep = "────────────────────────────────────────────────"
	fmt.Println()
	fmt.Println("  privacy-guard-proxy")
	fmt.Println(" ", sep)
	fmt.Println()

	var wg sync.WaitGroup

	for _, cfg := range root.Proxies {
		upstreamBase := strings.TrimRight(cfg.Upstream, "/")
		detectors := "all"
		if len(cfg.PrivacyGuard.Detectors) > 0 {
			detectors = strings.Join(cfg.PrivacyGuard.Detectors, ", ")
		}
		whitelist := "β€”"
		if len(cfg.PrivacyGuard.Whitelist) > 0 {
			whitelist = strings.Join(cfg.PrivacyGuard.Whitelist, ", ")
		}
		fmt.Printf("  proxy    :%d  %s  β†’  %s\n", cfg.Port, cfg.Type, upstreamBase)
		fmt.Printf("           detectors : %s\n", detectors)
		fmt.Printf("           whitelist : %s\n", whitelist)
		fmt.Println()

		wg.Add(1)
		go func(cfg proxy.Config) {
			defer wg.Done()
			proxy.RunProxy(cfg)
		}(cfg)
	}

	if *apiPort > 0 {
		fmt.Printf("  api      http://localhost:%d\n", *apiPort)
		fmt.Printf("  ui       http://localhost:%d\n", *apiPort)
		fmt.Println()
		wg.Add(1)
		go func() {
			defer wg.Done()
			api.Run(*apiPort, "config.json")
		}()
	}

	fmt.Println(" ", sep)
	for _, cfg := range root.Proxies {
		fmt.Printf("  export ANTHROPIC_BASE_URL=http://127.0.0.1:%d\n", cfg.Port)
	}
	fmt.Println()

	wg.Wait()
}