config.go 1.3 KB

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