socks_bridge.go 777 B

123456789101112131415161718192021222324252627282930313233
  1. package amneziawgnet
  2. import "encoding/json"
  3. // BuildSocksBridge swaps an "amneziawg" outbound for its loopback socks
  4. // form, preserving sibling keys; false = unbridgeable, fail loudly upstream.
  5. func BuildSocksBridge(raw []byte) ([]byte, bool) {
  6. var ob map[string]any
  7. if err := json.Unmarshal(raw, &ob); err != nil {
  8. return nil, false
  9. }
  10. tag, _ := ob["tag"].(string)
  11. if tag == "" {
  12. return nil, false
  13. }
  14. settings := map[string]any{
  15. "address": "127.0.0.1",
  16. "port": EgressBasePort,
  17. "user": tag,
  18. "pass": SocksPassword(),
  19. }
  20. bs, err := json.Marshal(settings)
  21. if err != nil {
  22. return nil, false
  23. }
  24. ob["protocol"] = "socks"
  25. ob["settings"] = json.RawMessage(bs)
  26. out, err := json.Marshal(ob)
  27. if err != nil {
  28. return nil, false
  29. }
  30. return out, true
  31. }