flags.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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 main
  15. import (
  16. "strconv"
  17. "github.com/spf13/cobra"
  18. "github.com/fatedier/frp/pkg/config/types"
  19. v1 "github.com/fatedier/frp/pkg/config/v1"
  20. )
  21. type PortsRangeSliceFlag struct {
  22. V *[]types.PortsRange
  23. }
  24. func (f *PortsRangeSliceFlag) String() string {
  25. if f.V == nil {
  26. return ""
  27. }
  28. return types.PortsRangeSlice(*f.V).String()
  29. }
  30. func (f *PortsRangeSliceFlag) Set(s string) error {
  31. slice, err := types.NewPortsRangeSliceFromString(s)
  32. if err != nil {
  33. return err
  34. }
  35. *f.V = slice
  36. return nil
  37. }
  38. func (f *PortsRangeSliceFlag) Type() string {
  39. return "string"
  40. }
  41. type BoolFuncFlag struct {
  42. TrueFunc func()
  43. FalseFunc func()
  44. v bool
  45. }
  46. func (f *BoolFuncFlag) String() string {
  47. return strconv.FormatBool(f.v)
  48. }
  49. func (f *BoolFuncFlag) Set(s string) error {
  50. f.v = strconv.FormatBool(f.v) == "true"
  51. if !f.v {
  52. if f.FalseFunc != nil {
  53. f.FalseFunc()
  54. }
  55. return nil
  56. }
  57. if f.TrueFunc != nil {
  58. f.TrueFunc()
  59. }
  60. return nil
  61. }
  62. func (f *BoolFuncFlag) Type() string {
  63. return "bool"
  64. }
  65. func RegisterServerConfigFlags(cmd *cobra.Command, c *v1.ServerConfig) {
  66. cmd.PersistentFlags().StringVarP(&c.BindAddr, "bind_addr", "", "0.0.0.0", "bind address")
  67. cmd.PersistentFlags().IntVarP(&c.BindPort, "bind_port", "p", 7000, "bind port")
  68. cmd.PersistentFlags().IntVarP(&c.KCPBindPort, "kcp_bind_port", "", 0, "kcp bind udp port")
  69. cmd.PersistentFlags().StringVarP(&c.ProxyBindAddr, "proxy_bind_addr", "", "0.0.0.0", "proxy bind address")
  70. cmd.PersistentFlags().IntVarP(&c.VhostHTTPPort, "vhost_http_port", "", 0, "vhost http port")
  71. cmd.PersistentFlags().IntVarP(&c.VhostHTTPSPort, "vhost_https_port", "", 0, "vhost https port")
  72. cmd.PersistentFlags().Int64VarP(&c.VhostHTTPTimeout, "vhost_http_timeout", "", 60, "vhost http response header timeout")
  73. cmd.PersistentFlags().StringVarP(&c.WebServer.Addr, "dashboard_addr", "", "0.0.0.0", "dashboard address")
  74. cmd.PersistentFlags().IntVarP(&c.WebServer.Port, "dashboard_port", "", 0, "dashboard port")
  75. cmd.PersistentFlags().StringVarP(&c.WebServer.User, "dashboard_user", "", "admin", "dashboard user")
  76. cmd.PersistentFlags().StringVarP(&c.WebServer.Password, "dashboard_pwd", "", "admin", "dashboard password")
  77. cmd.PersistentFlags().BoolVarP(&c.EnablePrometheus, "enable_prometheus", "", false, "enable prometheus dashboard")
  78. cmd.PersistentFlags().StringVarP(&c.Log.To, "log_file", "", "console", "log file")
  79. cmd.PersistentFlags().StringVarP(&c.Log.Level, "log_level", "", "info", "log level")
  80. cmd.PersistentFlags().Int64VarP(&c.Log.MaxDays, "log_max_days", "", 3, "log max days")
  81. cmd.PersistentFlags().BoolVarP(&c.Log.DisablePrintColor, "disable_log_color", "", false, "disable log color in console")
  82. cmd.PersistentFlags().StringVarP(&c.Auth.Token, "token", "t", "", "auth token")
  83. cmd.PersistentFlags().StringVarP(&c.SubDomainHost, "subdomain_host", "", "", "subdomain host")
  84. cmd.PersistentFlags().VarP(&PortsRangeSliceFlag{V: &c.AllowPorts}, "allow_ports", "", "allow ports")
  85. cmd.PersistentFlags().Int64VarP(&c.MaxPortsPerClient, "max_ports_per_client", "", 0, "max ports per client")
  86. cmd.PersistentFlags().BoolVarP(&c.Transport.TLS.Force, "tls_only", "", false, "frps tls only")
  87. webServerTLS := v1.TLSConfig{}
  88. cmd.PersistentFlags().StringVarP(&webServerTLS.CertFile, "dashboard_tls_cert_file", "", "", "dashboard tls cert file")
  89. cmd.PersistentFlags().StringVarP(&webServerTLS.KeyFile, "dashboard_tls_key_file", "", "", "dashboard tls key file")
  90. cmd.PersistentFlags().VarP(&BoolFuncFlag{
  91. TrueFunc: func() { c.WebServer.TLS = &webServerTLS },
  92. }, "dashboard_tls_mode", "", "if enable dashboard tls mode")
  93. }