1
0

flags.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // Copyright 2023 The frp Authors
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package sub
  15. import (
  16. "fmt"
  17. "github.com/spf13/cobra"
  18. "github.com/fatedier/frp/pkg/config/types"
  19. v1 "github.com/fatedier/frp/pkg/config/v1"
  20. "github.com/fatedier/frp/pkg/config/v1/validation"
  21. )
  22. type BandwidthQuantityFlag struct {
  23. V *types.BandwidthQuantity
  24. }
  25. func (f *BandwidthQuantityFlag) Set(s string) error {
  26. return f.V.UnmarshalString(s)
  27. }
  28. func (f *BandwidthQuantityFlag) String() string {
  29. return f.V.String()
  30. }
  31. func (f *BandwidthQuantityFlag) Type() string {
  32. return "string"
  33. }
  34. func RegisterProxyFlags(cmd *cobra.Command, c v1.ProxyConfigurer) {
  35. registerProxyBaseConfigFlags(cmd, c.GetBaseConfig())
  36. switch cc := c.(type) {
  37. case *v1.TCPProxyConfig:
  38. cmd.Flags().IntVarP(&cc.RemotePort, "remote_port", "r", 0, "remote port")
  39. case *v1.UDPProxyConfig:
  40. cmd.Flags().IntVarP(&cc.RemotePort, "remote_port", "r", 0, "remote port")
  41. case *v1.HTTPProxyConfig:
  42. registerProxyDomainConfigFlags(cmd, &cc.DomainConfig)
  43. cmd.Flags().StringSliceVarP(&cc.Locations, "locations", "", []string{}, "locations")
  44. cmd.Flags().StringVarP(&cc.HTTPUser, "http_user", "", "", "http auth user")
  45. cmd.Flags().StringVarP(&cc.HTTPPassword, "http_pwd", "", "", "http auth password")
  46. cmd.Flags().StringVarP(&cc.HostHeaderRewrite, "host_header_rewrite", "", "", "host header rewrite")
  47. case *v1.HTTPSProxyConfig:
  48. registerProxyDomainConfigFlags(cmd, &cc.DomainConfig)
  49. case *v1.TCPMuxProxyConfig:
  50. registerProxyDomainConfigFlags(cmd, &cc.DomainConfig)
  51. cmd.Flags().StringVarP(&cc.Multiplexer, "mux", "", "", "multiplexer")
  52. case *v1.STCPProxyConfig:
  53. cmd.Flags().StringVarP(&cc.Secretkey, "sk", "", "", "secret key")
  54. case *v1.SUDPProxyConfig:
  55. cmd.Flags().StringVarP(&cc.Secretkey, "sk", "", "", "secret key")
  56. case *v1.XTCPProxyConfig:
  57. cmd.Flags().StringVarP(&cc.Secretkey, "sk", "", "", "secret key")
  58. }
  59. }
  60. func registerProxyBaseConfigFlags(cmd *cobra.Command, c *v1.ProxyBaseConfig) {
  61. if c == nil {
  62. return
  63. }
  64. cmd.Flags().StringVarP(&c.Name, "proxy_name", "n", "", "proxy name")
  65. cmd.Flags().StringVarP(&c.LocalIP, "local_ip", "i", "127.0.0.1", "local ip")
  66. cmd.Flags().IntVarP(&c.LocalPort, "local_port", "l", 0, "local port")
  67. cmd.Flags().BoolVarP(&c.Transport.UseEncryption, "ue", "", false, "use encryption")
  68. cmd.Flags().BoolVarP(&c.Transport.UseCompression, "uc", "", false, "use compression")
  69. cmd.Flags().StringVarP(&c.Transport.BandwidthLimitMode, "bandwidth_limit_mode", "", types.BandwidthLimitModeClient, "bandwidth limit mode")
  70. cmd.Flags().VarP(&BandwidthQuantityFlag{V: &c.Transport.BandwidthLimit}, "bandwidth_limit", "", "bandwidth limit (e.g. 100KB or 1MB)")
  71. }
  72. func registerProxyDomainConfigFlags(cmd *cobra.Command, c *v1.DomainConfig) {
  73. if c == nil {
  74. return
  75. }
  76. cmd.Flags().StringSliceVarP(&c.CustomDomains, "custom_domain", "d", []string{}, "custom domains")
  77. cmd.Flags().StringVarP(&c.SubDomain, "sd", "", "", "sub domain")
  78. }
  79. func RegisterVisitorFlags(cmd *cobra.Command, c v1.VisitorConfigurer) {
  80. registerVisitorBaseConfigFlags(cmd, c.GetBaseConfig())
  81. // add visitor flags if exist
  82. }
  83. func registerVisitorBaseConfigFlags(cmd *cobra.Command, c *v1.VisitorBaseConfig) {
  84. if c == nil {
  85. return
  86. }
  87. cmd.Flags().StringVarP(&c.Name, "visitor_name", "n", "", "visitor name")
  88. cmd.Flags().BoolVarP(&c.Transport.UseEncryption, "ue", "", false, "use encryption")
  89. cmd.Flags().BoolVarP(&c.Transport.UseCompression, "uc", "", false, "use compression")
  90. cmd.Flags().StringVarP(&c.SecretKey, "sk", "", "", "secret key")
  91. cmd.Flags().StringVarP(&c.ServerName, "server_name", "", "", "server name")
  92. cmd.Flags().StringVarP(&c.BindAddr, "bind_addr", "", "", "bind addr")
  93. cmd.Flags().IntVarP(&c.BindPort, "bind_port", "", 0, "bind port")
  94. }
  95. func RegisterClientCommonConfigFlags(cmd *cobra.Command, c *v1.ClientCommonConfig) {
  96. cmd.PersistentFlags().StringVarP(&c.ServerAddr, "server_addr", "s", "127.0.0.1", "frp server's address")
  97. cmd.PersistentFlags().IntVarP(&c.ServerPort, "server_port", "P", 7000, "frp server's port")
  98. cmd.PersistentFlags().StringVarP(&c.User, "user", "u", "", "user")
  99. cmd.PersistentFlags().StringVarP(&c.Transport.Protocol, "protocol", "p", "tcp",
  100. fmt.Sprintf("optional values are %v", validation.SupportedTransportProtocols))
  101. cmd.PersistentFlags().StringVarP(&c.Auth.Token, "token", "t", "", "auth token")
  102. cmd.PersistentFlags().StringVarP(&c.Log.Level, "log_level", "", "info", "log level")
  103. cmd.PersistentFlags().StringVarP(&c.Log.To, "log_file", "", "console", "console or file path")
  104. cmd.PersistentFlags().Int64VarP(&c.Log.MaxDays, "log_max_days", "", 3, "log file reversed days")
  105. cmd.PersistentFlags().BoolVarP(&c.Log.DisablePrintColor, "disable_log_color", "", false, "disable log color in console")
  106. cmd.PersistentFlags().StringVarP(&c.Transport.TLS.ServerName, "tls_server_name", "", "", "specify the custom server name of tls certificate")
  107. cmd.PersistentFlags().StringVarP(&c.DNSServer, "dns_server", "", "", "specify dns server instead of using system default one")
  108. c.Transport.TLS.Enable = cmd.PersistentFlags().BoolP("tls_enable", "", true, "enable frpc tls")
  109. }