Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

type_url.go 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package config
  2. import (
  3. "fmt"
  4. "net"
  5. "net/url"
  6. )
  7. type TypeURL struct {
  8. value *url.URL
  9. }
  10. func (c *TypeURL) UnmarshalText(data []byte) error { // nolint: cyclop
  11. if len(data) == 0 {
  12. return nil
  13. }
  14. value, err := url.Parse(string(data))
  15. if err != nil {
  16. return fmt.Errorf("incorrect URL: %w", err)
  17. }
  18. switch value.Scheme {
  19. case "http", "https", "socks5":
  20. case "":
  21. return fmt.Errorf("url %s has to have a schema", value)
  22. default:
  23. return fmt.Errorf("unsupported schema %s", value.Scheme)
  24. }
  25. if value.Host == "" {
  26. return fmt.Errorf("url %s has to have a host", value)
  27. }
  28. if _, _, err := net.SplitHostPort(value.Host); err != nil {
  29. switch value.Scheme {
  30. case "http":
  31. value.Host = net.JoinHostPort(value.Host, "80")
  32. case "https":
  33. value.Host = net.JoinHostPort(value.Host, "443")
  34. case "socks5":
  35. value.Host = net.JoinHostPort(value.Host, "1080")
  36. default:
  37. return fmt.Errorf("cannot set a default port for %s", value)
  38. }
  39. }
  40. c.value = value
  41. return nil
  42. }
  43. func (c *TypeURL) MarshalText() ([]byte, error) {
  44. return []byte(c.String()), nil
  45. }
  46. func (c TypeURL) String() string {
  47. if c.value == nil {
  48. return ""
  49. }
  50. return c.value.String()
  51. }
  52. func (c TypeURL) Value(defaultValue *url.URL) *url.URL {
  53. if c.value == nil {
  54. return defaultValue
  55. }
  56. return c.value
  57. }