mirror of https://github.com/fatedier/frp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.7 KiB
136 lines
4.7 KiB
// Copyright 2023 The frp Authors |
|
// |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
|
|
package v1 |
|
|
|
import ( |
|
"sync" |
|
|
|
"github.com/fatedier/frp/pkg/util/util" |
|
) |
|
|
|
// TODO(fatedier): Due to the current implementation issue of the go json library, the UnmarshalJSON method |
|
// of a custom struct cannot access the DisallowUnknownFields parameter of the parent decoder. |
|
// Here, a global variable is temporarily used to control whether unknown fields are allowed. |
|
// Once the v2 version is implemented by the community, we can switch to a standardized approach. |
|
// |
|
// https://github.com/golang/go/issues/41144 |
|
// https://github.com/golang/go/discussions/63397 |
|
var ( |
|
DisallowUnknownFields = false |
|
DisallowUnknownFieldsMu sync.Mutex |
|
) |
|
|
|
type AuthScope string |
|
|
|
const ( |
|
AuthScopeHeartBeats AuthScope = "HeartBeats" |
|
AuthScopeNewWorkConns AuthScope = "NewWorkConns" |
|
) |
|
|
|
type AuthMethod string |
|
|
|
const ( |
|
AuthMethodToken AuthMethod = "token" |
|
AuthMethodOIDC AuthMethod = "oidc" |
|
) |
|
|
|
// QUIC protocol options |
|
type QUICOptions struct { |
|
KeepalivePeriod int `json:"keepalivePeriod,omitempty"` |
|
MaxIdleTimeout int `json:"maxIdleTimeout,omitempty"` |
|
MaxIncomingStreams int `json:"maxIncomingStreams,omitempty"` |
|
} |
|
|
|
func (c *QUICOptions) Complete() { |
|
c.KeepalivePeriod = util.EmptyOr(c.KeepalivePeriod, 10) |
|
c.MaxIdleTimeout = util.EmptyOr(c.MaxIdleTimeout, 30) |
|
c.MaxIncomingStreams = util.EmptyOr(c.MaxIncomingStreams, 100000) |
|
} |
|
|
|
type WebServerConfig struct { |
|
// This is the network address to bind on for serving the web interface and API. |
|
// By default, this value is "127.0.0.1". |
|
Addr string `json:"addr,omitempty"` |
|
// Port specifies the port for the web server to listen on. If this |
|
// value is 0, the admin server will not be started. |
|
Port int `json:"port,omitempty"` |
|
// User specifies the username that the web server will use for login. |
|
User string `json:"user,omitempty"` |
|
// Password specifies the password that the admin server will use for login. |
|
Password string `json:"password,omitempty"` |
|
// AssetsDir specifies the local directory that the admin server will load |
|
// resources from. If this value is "", assets will be loaded from the |
|
// bundled executable using embed package. |
|
AssetsDir string `json:"assetsDir,omitempty"` |
|
// Enable golang pprof handlers. |
|
PprofEnable bool `json:"pprofEnable,omitempty"` |
|
// Enable TLS if TLSConfig is not nil. |
|
TLS *TLSConfig `json:"tls,omitempty"` |
|
} |
|
|
|
func (c *WebServerConfig) Complete() { |
|
c.Addr = util.EmptyOr(c.Addr, "127.0.0.1") |
|
} |
|
|
|
type TLSConfig struct { |
|
// CertPath specifies the path of the cert file that client will load. |
|
CertFile string `json:"certFile,omitempty"` |
|
// KeyPath specifies the path of the secret key file that client will load. |
|
KeyFile string `json:"keyFile,omitempty"` |
|
// TrustedCaFile specifies the path of the trusted ca file that will load. |
|
TrustedCaFile string `json:"trustedCaFile,omitempty"` |
|
// ServerName specifies the custom server name of tls certificate. By |
|
// default, server name if same to ServerAddr. |
|
ServerName string `json:"serverName,omitempty"` |
|
} |
|
|
|
type LogConfig struct { |
|
// This is destination where frp should write the logs. |
|
// If "console" is used, logs will be printed to stdout, otherwise, |
|
// logs will be written to the specified file. |
|
// By default, this value is "console". |
|
To string `json:"to,omitempty"` |
|
// Level specifies the minimum log level. Valid values are "trace", |
|
// "debug", "info", "warn", and "error". By default, this value is "info". |
|
Level string `json:"level,omitempty"` |
|
// MaxDays specifies the maximum number of days to store log information |
|
// before deletion. |
|
MaxDays int64 `json:"maxDays"` |
|
// DisablePrintColor disables log colors when log.to is "console". |
|
DisablePrintColor bool `json:"disablePrintColor,omitempty"` |
|
} |
|
|
|
func (c *LogConfig) Complete() { |
|
c.To = util.EmptyOr(c.To, "console") |
|
c.Level = util.EmptyOr(c.Level, "info") |
|
c.MaxDays = util.EmptyOr(c.MaxDays, 3) |
|
} |
|
|
|
type HTTPPluginOptions struct { |
|
Name string `json:"name"` |
|
Addr string `json:"addr"` |
|
Path string `json:"path"` |
|
Ops []string `json:"ops"` |
|
TLSVerify bool `json:"tlsVerify,omitempty"` |
|
} |
|
|
|
type HeaderOperations struct { |
|
Set map[string]string `json:"set,omitempty"` |
|
} |
|
|
|
type HTTPHeader struct { |
|
Name string `json:"name"` |
|
Value string `json:"value"` |
|
}
|
|
|