config.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package vmess
  2. import (
  3. "encoding/json"
  4. "net"
  5. "github.com/v2ray/v2ray-core"
  6. "github.com/v2ray/v2ray-core/log"
  7. v2net "github.com/v2ray/v2ray-core/net"
  8. )
  9. type VMessUser struct {
  10. Id string `json:"id"`
  11. Email string `json:"email"`
  12. }
  13. func (u *VMessUser) ToUser() (core.User, error) {
  14. id, err := core.NewID(u.Id)
  15. return core.User{id}, err
  16. }
  17. type VMessInboundConfig struct {
  18. AllowedClients []VMessUser `json:"clients"`
  19. }
  20. func loadInboundConfig(rawConfig []byte) (VMessInboundConfig, error) {
  21. config := VMessInboundConfig{}
  22. err := json.Unmarshal(rawConfig, &config)
  23. return config, err
  24. }
  25. type VNextConfig struct {
  26. Address string `json:"address"`
  27. Port uint16 `json:"port"`
  28. Users []VMessUser `json:"users"`
  29. }
  30. func (config VNextConfig) ToVNextServer() VNextServer {
  31. users := make([]core.User, 0, len(config.Users))
  32. for _, user := range config.Users {
  33. vuser, err := user.ToUser()
  34. if err != nil {
  35. panic(log.Error("Failed to convert %v to User.", user))
  36. }
  37. users = append(users, vuser)
  38. }
  39. ip := net.ParseIP(config.Address)
  40. if ip == nil {
  41. panic(log.Error("Unable to parse VNext IP: %s", config.Address))
  42. }
  43. return VNextServer{
  44. v2net.IPAddress(ip, config.Port),
  45. users}
  46. }
  47. type VMessOutboundConfig struct {
  48. VNextList []VNextConfig `json:"vnext"`
  49. }
  50. func loadOutboundConfig(rawConfig []byte) (VMessOutboundConfig, error) {
  51. config := VMessOutboundConfig{}
  52. err := json.Unmarshal(rawConfig, &config)
  53. return config, err
  54. }