From a616e424323dfe5cefcb9f53bd7629175a3d6659 Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Wed, 9 Jun 2021 16:41:15 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8D=E5=AD=98=E5=9C=A8=E7=9A=84=E6=8A=A5=E9=94=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/base/cmd.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server/base/cmd.go b/server/base/cmd.go index 74f1c4d..1ea3288 100644 --- a/server/base/cmd.go +++ b/server/base/cmd.go @@ -1,6 +1,7 @@ package base import ( + "errors" "fmt" "math/rand" "os" @@ -63,7 +64,13 @@ func init() { viper.SetConfigFile(cfgFile) viper.AutomaticEnv() - err := viper.ReadInConfig() + _, err := os.Stat(cfgFile) + if errors.Is(err, os.ErrNotExist) { + // 文件不存在,不做处理 + return + } + + err = viper.ReadInConfig() if err != nil { fmt.Println("Using config file:", err) } From 0ef18ee2f90ae0c7fef4f77d66c43b1373789d4d Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Thu, 17 Jun 2021 16:58:38 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E4=B8=BA=E5=8D=95=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- README.md | 6 +-- build.sh | 20 +++++----- docker_entrypoint.sh | 2 +- question.md | 4 +- server/admin/server.go | 8 +++- server/base/cfg.go | 23 ++++++------ server/base/cmd.go | 13 ++----- server/base/config.go | 5 ++- .../conf/{server.toml => server-sample.toml} | 9 ++--- server/conf/test_vpn_cert.pem | 19 ---------- server/conf/test_vpn_key.pem | 27 -------------- server/handler/server.go | 37 +++++++++++++++---- server/main.go | 13 ++++++- 14 files changed, 86 insertions(+), 102 deletions(-) rename server/conf/{server.toml => server-sample.toml} (87%) delete mode 100644 server/conf/test_vpn_cert.pem delete mode 100644 server/conf/test_vpn_key.pem diff --git a/Dockerfile b/Dockerfile index ef466cb..bab8015 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ COPY --from=builder_node /web/ui /anylink/server/ui #TODO 本地打包时使用镜像 #RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories RUN apk add --no-cache git -RUN cd /anylink/server;go build -o anylink -ldflags "-X main.COMMIT_ID=$(git rev-parse HEAD)" \ +RUN cd /anylink/server;go build -o anylink -ldflags "-X main.CommitId=$(git rev-parse HEAD)" \ && /anylink/server/anylink tool -v # anylink diff --git a/README.md b/README.md index 3e7d760..a721c50 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ AnyLink 服务端仅在CentOS 7、Ubuntu 18.04测试通过,如需要安装在 > > https://github.com/bjdgyc/anylink/releases -> 升级 go version = 1.15 +> 升级 go version = 1.16 > > 需要提前安装好 golang 和 nodejs @@ -47,11 +47,11 @@ sh build.sh # 注意使用root权限运行 cd anylink-deploy -sudo ./anylink --conf="conf/server.toml" +sudo ./anylink # 默认管理后台访问地址 # http://host:8800 -# 默认账号密码 +# 默认账号 密码 # admin 123456 ``` diff --git a/build.sh b/build.sh index 8408c92..eda8745 100644 --- a/build.sh +++ b/build.sh @@ -12,11 +12,6 @@ function RETVAL() { #当前目录 cpath=$(pwd) -echo "编译二进制文件" -cd $cpath/server -go build -v -o anylink -ldflags "-X main.COMMIT_ID=$(git rev-parse HEAD)" -RETVAL $? - echo "编译前端项目" cd $cpath/web #国内可替换源加快速度 @@ -26,21 +21,26 @@ npm run build --registry=https://registry.npm.taobao.org #npm run build RETVAL $? +echo "编译二进制文件" +cd $cpath/server +rm -rf ui +cp -rf $cpath/web/ui . +go build -v -o anylink -ldflags "-X main.CommitId=$(git rev-parse HEAD)" +RETVAL $? + cd $cpath echo "整理部署文件" deploy="anylink-deploy" -rm -rf $deploy +rm -rf $deploy ${deploy}.tar.gz mkdir $deploy -mkdir $deploy/log cp -r server/anylink $deploy -cp -r server/conf $deploy -cp -r server/files $deploy cp -r server/bridge-init.sh $deploy cp -r systemd $deploy -cp -r web/ui $deploy + +tar zcvf ${deploy}.tar.gz $deploy #注意使用root权限运行 #cd anylink-deploy diff --git a/docker_entrypoint.sh b/docker_entrypoint.sh index 3a7291a..e0393a3 100644 --- a/docker_entrypoint.sh +++ b/docker_entrypoint.sh @@ -16,7 +16,7 @@ case $var1 in *) sysctl -w net.ipv4.ip_forward=1 iptables -t nat -A POSTROUTING -s "${IPV4_CIDR}" -o eth0+ -j MASQUERADE - # iptables -nL -t nat + iptables -nL -t nat /app/anylink "$@" ;; diff --git a/question.md b/question.md index bacb417..d6542ca 100644 --- a/question.md +++ b/question.md @@ -6,10 +6,10 @@ > 添加QQ群: 567510628 ### 远程桌面连接 -> 本软件不支持远程桌面连接,请注意。 +> 本软件不支持远程桌面里面连接anyconnect,请注意。 ### 私有证书问题 > anylink 默认不支持私有证书 > -> 仅测试的话,可以通过 https://github.com/square/certstrap 生成私有的证书, 然后把CA证书放在客户端机器上即可以连接。 +> 其他使用私有证书的问题,请自行解决 diff --git a/server/admin/server.go b/server/admin/server.go index e679a99..557debc 100644 --- a/server/admin/server.go +++ b/server/admin/server.go @@ -2,6 +2,7 @@ package admin import ( + "embed" "net/http" "net/http/pprof" @@ -9,7 +10,9 @@ import ( "github.com/gorilla/mux" ) -// 开启服务 +var UiData embed.FS + +// StartAdmin 开启服务 func StartAdmin() { r := mux.NewRouter() @@ -17,7 +20,8 @@ func StartAdmin() { r.Handle("/", http.RedirectHandler("/ui/", http.StatusFound)).Name("index") r.PathPrefix("/ui/").Handler( - http.StripPrefix("/ui/", http.FileServer(http.Dir(base.Cfg.UiPath))), + // http.StripPrefix("/ui/", http.FileServer(http.Dir(base.Cfg.UiPath))), + http.FileServer(http.FS(UiData)), ).Name("static") r.HandleFunc("/base/login", Login).Name("login") diff --git a/server/base/cfg.go b/server/base/cfg.go index 4d7f79a..bfaab70 100644 --- a/server/base/cfg.go +++ b/server/base/cfg.go @@ -39,7 +39,6 @@ type ServerConfig struct { DbFile string `json:"db_file"` CertFile string `json:"cert_file"` CertKey string `json:"cert_key"` - UiPath string `json:"ui_path"` FilesPath string `json:"files_path"` LogPath string `json:"log_path"` LogLevel string `json:"log_level"` @@ -70,20 +69,20 @@ type ServerConfig struct { func initServerCfg() { - sf, _ := filepath.Abs(cfgFile) - base := filepath.Dir(sf) + // TODO 取消绝对地址转换 + // sf, _ := filepath.Abs(cfgFile) + // base := filepath.Dir(sf) // 转换成绝对路径 - Cfg.DbFile = getAbsPath(base, Cfg.DbFile) - Cfg.CertFile = getAbsPath(base, Cfg.CertFile) - Cfg.CertKey = getAbsPath(base, Cfg.CertKey) - Cfg.UiPath = getAbsPath(base, Cfg.UiPath) - Cfg.FilesPath = getAbsPath(base, Cfg.FilesPath) - Cfg.LogPath = getAbsPath(base, Cfg.LogPath) + // Cfg.DbFile = getAbsPath(base, Cfg.DbFile) + // Cfg.CertFile = getAbsPath(base, Cfg.CertFile) + // Cfg.CertKey = getAbsPath(base, Cfg.CertKey) + // Cfg.UiPath = getAbsPath(base, Cfg.UiPath) + // Cfg.FilesPath = getAbsPath(base, Cfg.FilesPath) + // Cfg.LogPath = getAbsPath(base, Cfg.LogPath) - if len(Cfg.JwtSecret) < 20 { - fmt.Println("请设置 jwt_secret 长度20位以上") - os.Exit(0) + if Cfg.JwtSecret == defaultJwt { + fmt.Fprintln(os.Stderr, "=== 使用默认的jwt_secret有安全风险,请设置新的jwt_secret ===") } fmt.Printf("ServerCfg: %+v \n", Cfg) diff --git a/server/base/cmd.go b/server/base/cmd.go index 1ea3288..baa3afb 100644 --- a/server/base/cmd.go +++ b/server/base/cmd.go @@ -1,13 +1,10 @@ package base import ( - "errors" "fmt" - "math/rand" "os" "runtime" "strings" - "time" "github.com/bjdgyc/anylink/pkg/utils" "github.com/spf13/cobra" @@ -64,13 +61,12 @@ func init() { viper.SetConfigFile(cfgFile) viper.AutomaticEnv() - _, err := os.Stat(cfgFile) - if errors.Is(err, os.ErrNotExist) { - // 文件不存在,不做处理 + if cfgFile == "" { + // 没有配置文件,不做处理 return } - err = viper.ReadInConfig() + err := viper.ReadInConfig() if err != nil { fmt.Println("Using config file:", err) } @@ -79,7 +75,7 @@ func init() { viper.SetEnvPrefix("link") // 基础配置 - rootCmd.Flags().StringVarP(&cfgFile, "conf", "c", "./conf/server.toml", "config file") + rootCmd.Flags().StringVarP(&cfgFile, "conf", "c", "", "config file") for _, v := range configs { if v.Typ == cfgStr { @@ -118,7 +114,6 @@ func initToolCmd() *cobra.Command { fmt.Printf("%s v%s build on %s [%s, %s] commit_id(%s) \n", APP_NAME, APP_VER, runtime.Version(), runtime.GOOS, runtime.GOARCH, CommitId) case secret: - rand.Seed(time.Now().UnixNano()) s, _ := utils.RandSecret(40, 60) s = strings.Trim(s, "=") fmt.Printf("Secret:%s\n", s) diff --git a/server/base/config.go b/server/base/config.go index f45d80d..8202d79 100644 --- a/server/base/config.go +++ b/server/base/config.go @@ -4,6 +4,8 @@ const ( cfgStr = iota cfgInt cfgBool + + defaultJwt = "abcdef.0123456789.abcdef" ) type config struct { @@ -24,7 +26,6 @@ var configs = []config{ {Typ: cfgStr, Name: "db_file", Usage: "数据库地址", ValStr: "./data.db"}, {Typ: cfgStr, Name: "cert_file", Usage: "证书文件", ValStr: "./vpn_cert.pem"}, {Typ: cfgStr, Name: "cert_key", Usage: "证书密钥", ValStr: "./vpn_cert.key"}, - {Typ: cfgStr, Name: "ui_path", Usage: "ui文件路径", ValStr: "./ui"}, {Typ: cfgStr, Name: "files_path", Usage: "外部下载文件路径", ValStr: "./files"}, {Typ: cfgStr, Name: "log_path", Usage: "日志文件路径", ValStr: ""}, {Typ: cfgStr, Name: "log_level", Usage: "日志等级", ValStr: "info"}, @@ -32,7 +33,7 @@ var configs = []config{ {Typ: cfgStr, Name: "issuer", Usage: "系统名称", ValStr: "XX公司VPN"}, {Typ: cfgStr, Name: "admin_user", Usage: "管理用户名", ValStr: "admin"}, {Typ: cfgStr, Name: "admin_pass", Usage: "管理用户密码", ValStr: "$2a$10$UQ7C.EoPifDeJh6d8.31TeSPQU7hM/NOM2nixmBucJpAuXDQNqNke"}, - {Typ: cfgStr, Name: "jwt_secret", Usage: "JWT密钥", ValStr: "iLmspvOiz*%ovfcs*wersdf#heR8pNU4XxBm&mW$aPCjSRMbYH#&"}, + {Typ: cfgStr, Name: "jwt_secret", Usage: "JWT密钥", ValStr: defaultJwt}, {Typ: cfgStr, Name: "link_mode", Usage: "虚拟网络类型", ValStr: "tun"}, {Typ: cfgStr, Name: "ipv4_cidr", Usage: "ip地址网段", ValStr: "192.168.10.0/24"}, {Typ: cfgStr, Name: "ipv4_gateway", Usage: "ipv4_gateway", ValStr: "192.168.10.1"}, diff --git a/server/conf/server.toml b/server/conf/server-sample.toml similarity index 87% rename from server/conf/server.toml rename to server/conf/server-sample.toml index 0cd6b76..cfd89db 100644 --- a/server/conf/server.toml +++ b/server/conf/server-sample.toml @@ -6,10 +6,9 @@ #数据文件 db_file = "./data.db" #证书文件 -cert_file = "./test_vpn_cert.pem" -cert_key = "./test_vpn_key.pem" -ui_path = "../ui" -files_path = "../files" +cert_file = "./vpn_cert.pem" +cert_key = "./vpn_cert.key" +files_path = "./files" #日志目录,为空写入标准输出 #log_path = "../log" log_path = "" @@ -22,7 +21,7 @@ issuer = "XX公司VPN" admin_user = "admin" #pass 123456 admin_pass = "$2a$10$UQ7C.EoPifDeJh6d8.31TeSPQU7hM/NOM2nixmBucJpAuXDQNqNke" -jwt_secret = "iLmspvOiz*%ovfcs*wersdf#heR8pNU4XxBm&mW$aPCjSRMbYH#&" +jwt_secret = "abcdef.0123456789.abcdef" #服务监听地址 diff --git a/server/conf/test_vpn_cert.pem b/server/conf/test_vpn_cert.pem deleted file mode 100644 index a5e002a..0000000 --- a/server/conf/test_vpn_cert.pem +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDGDCCAgACCQCecQDpy/8hRTANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJD -TjELMAkGA1UECAwCQkoxCzAJBgNVBAcMAkJKMQswCQYDVQQKDAJCRDELMAkGA1UE -CwwCQkQxCzAJBgNVBAMMAkNTMB4XDTIxMDMyNjA5MTkwNloXDTMxMDMyNDA5MTkw -NlowTjELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAlNIMQswCQYDVQQHDAJTSDELMAkG -A1UECgwCVE0xCzAJBgNVBAsMAlRNMQswCQYDVQQDDAJDUzCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAJtDxHduS8gjI0P6txHS+cODxKjyjNiCBa7tFgSc -d9hRrzCvK4Q4M5StKJoSczmHl0C3HVoq92Gv1vENxq4irYdCrwLeOZGyt7urUlbs -PkvEoVXxfAkPpue+JewG/CvGArJeP7UGsP5IrD0Dt5X1DP677K6qf5igzyaJqYJu -RDJ5wR84BoDvY66Zc578N9tK9XusdJ63gQ5jGcG4Dneu1UX3g8lQkJ6P0xLXTh7W -u5Sjx8axbDcFxbDLxNGL1yPgAjhIRgMfaWLwuQQg4WKFsdMljv1Flz8/h91z2xo+ -+E/B4YF0UFWTcWQ2TQ8w8noDqnnXVVQyOvuI3aajodml/f0CAwEAATANBgkqhkiG -9w0BAQsFAAOCAQEAd89n0eWXgO1lqMciWmS9xY8Sj/U840bPo/4Kclsm1vFNvIXu -I50PeaNiU2E5+CMk8AwXaJ5gDO7vsRxvLLRAUWZeuxSror2a0RkViEFW+UKcBuuB -Izl9giXUhB/P85+We1ma5jizqj7OpzgMkzkcTZL2M6Gw6IWY4jopvLQjiCooSiYF -wtLZjuFKfpLrPw5RgpWI4L8Hftbkmh6Q8nqcoQvgwm7rLrD5VqiTu7Rk1SXTFuXn -uuazXasWIWRVGFuFcYP1rwyOfp9HhCFKngi0w8IRnbOcaPdXydtbKMcKt5z9zQX5 -BqrZ3ZfPp5HeklG7L8eQrnp4ines6YDshPnaRQ== ------END CERTIFICATE----- diff --git a/server/conf/test_vpn_key.pem b/server/conf/test_vpn_key.pem deleted file mode 100644 index 74897b9..0000000 --- a/server/conf/test_vpn_key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEAm0PEd25LyCMjQ/q3EdL5w4PEqPKM2IIFru0WBJx32FGvMK8r -hDgzlK0omhJzOYeXQLcdWir3Ya/W8Q3GriKth0KvAt45kbK3u6tSVuw+S8ShVfF8 -CQ+m574l7Ab8K8YCsl4/tQaw/kisPQO3lfUM/rvsrqp/mKDPJompgm5EMnnBHzgG -gO9jrplznvw320r1e6x0nreBDmMZwbgOd67VRfeDyVCQno/TEtdOHta7lKPHxrFs -NwXFsMvE0YvXI+ACOEhGAx9pYvC5BCDhYoWx0yWO/UWXPz+H3XPbGj74T8HhgXRQ -VZNxZDZNDzDyegOqeddVVDI6+4jdpqOh2aX9/QIDAQABAoIBADWT2fz4g5AJiAbS -QlAVRHjSRI+kOzQPEhT93SY0NCribRjYqaSTnEEGy8b27OoCPxBm3+sYfosoGXzP -Kys17jmJqkjMFIORb1OEWAKEvS56KM42aX3a99ZqSD29X1Ffn9ibK1K1f2gP/deE -K9rEV/qjMJZJYYRyoWkEAglvMXtU/NMRoTuFYtrJPr9sFEfpBFq97WpWiyMdLKTG -MmlN+T1CXFQj/+mpv+DDSXcwLPBxAttDYE2GeqlhntId0I6cgaEGMO42D6fnqrKi -PDilA/D6zos4o/bpRGvVBdXHqOXvX2stNHK+PvEX46GRd+OZhLh0KEcrWAx8cXs9 -ZhugTyECgYEAyffRPd98acL0OhXJR9mZTgDdotl7iYq+RTZbmEvAFst3mL3LA6Ba -BTrwRLh9x8lzxoTQHHFaJL63kIrN6QAR9e3+pR0e8IX3vYCVGIlRCYB5CrE/O3Pi -B9R17tCI5dFrFXYiST38sjwrWG9+geKarbUH5AZrZEO5uw0q7+4F3TkCgYEAxM1h -Xo+xRt8RXoWZ6Cl66HhZKIvDcxkBtoNh54YLzrVpv0D+RvAWNDzRVXbbIUUpBGPN -pHrwU8G0qWr4Q/Zx+vnckqotGMTNCB7vcmB/qwF9grNW9E0rCyIYLXtJcEiclJIF -Oe406YXl7mSG1I6QjAADz8PNb4++Ct1+hVS56uUCgYAx9g/Y0nQgZY2s4L7N+1Il -LammI06gE6ZF0NCPuA1oliSbsDeMShp6uL2/AjR7O6ZcMXaZ0qCN/m/CXdPaE55d -y+X2SmHg9gL26dv4Gd/mDdXjgz01I9GCRlh2Hzf+QfPPd027+I2OObwvQEV3M+s3 -lVTCX6QpRWeokfVRLPxeYQKBgDIYPVK+rNdnbJps05JfDKQkDj3d5bBkiyUUKFWw -r0y8rOA8AP25m01MtdRVXs4HNruhU/UsPgRz6DK/wdY64ySJeXXzz2rgnXgVt8mb -eqPiyzn7wISLKAu7cAATw8vLD+BZku7+DYXryW13NULhzzVzw4SdSKu/IRbO7qet -u21pAoGAd2mBJ+PWKnUkARS8gQ3Y3cagA/qGGr094P9relglRDBv/Pm7kTUt6K8B -NnpqWydcVtcrXmNzGRx4ftm18SzmTJEohF14nF9424q4aiWoNZyG8adxaI0Yqv3G -LnH8n2fzC+pf31LijBRM8DRnepah64mLF+OM/SxgVg1nP9jVUG4= ------END RSA PRIVATE KEY----- diff --git a/server/handler/server.go b/server/handler/server.go index ffd5672..4df919b 100644 --- a/server/handler/server.go +++ b/server/handler/server.go @@ -2,27 +2,52 @@ package handler import ( "crypto/tls" + "errors" "fmt" "log" "net" "net/http" + "os" "time" "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/pkg/proxyproto" "github.com/gorilla/mux" + "github.com/pion/dtls/v2/pkg/crypto/selfsign" ) func startTls() { - addr := base.Cfg.ServerAddr - certFile := base.Cfg.CertFile - keyFile := base.Cfg.CertKey + + var ( + err error + + addr = base.Cfg.ServerAddr + certFile = base.Cfg.CertFile + keyFile = base.Cfg.CertKey + certs = make([]tls.Certificate, 1) + ln net.Listener + ) + + // 判断证书文件 + _, err = os.Stat(certFile) + if errors.Is(err, os.ErrNotExist) { + // 自动生成证书 + certs[0], err = selfsign.GenerateSelfSignedWithDNS("vpn.anylink") + } else { + // 使用自定义证书 + certs[0], err = tls.LoadX509KeyPair(certFile, keyFile) + } + + if err != nil { + panic(err) + } // 设置tls信息 tlsConfig := &tls.Config{ NextProtos: []string{"http/1.1"}, MinVersion: tls.VersionTLS12, InsecureSkipVerify: true, + Certificates: certs, } srv := &http.Server{ Addr: addr, @@ -31,9 +56,7 @@ func startTls() { ErrorLog: base.GetBaseLog(), } - var ln net.Listener - - ln, err := net.Listen("tcp", addr) + ln, err = net.Listen("tcp", addr) if err != nil { log.Fatal(err) } @@ -44,7 +67,7 @@ func startTls() { } base.Info("listen server", addr) - err = srv.ServeTLS(ln, certFile, keyFile) + err = srv.ServeTLS(ln, "", "") if err != nil { base.Fatal(err) } diff --git a/server/main.go b/server/main.go index 17012db..f2efc9e 100644 --- a/server/main.go +++ b/server/main.go @@ -1,21 +1,30 @@ // AnyLink 是一个企业级远程办公vpn软件,可以支持多人同时在线使用。 +// +build !windows + package main import ( + "embed" "os" "os/signal" "syscall" + "github.com/bjdgyc/anylink/admin" + "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/handler" ) +//go:embed ui +var uiData embed.FS + // 程序版本 -var COMMIT_ID string +var CommitId string func main() { - base.CommitId = COMMIT_ID + base.CommitId = CommitId + admin.UiData = uiData base.Start() handler.Start() From 993cd40c41fc6d74b1e18c5767e877888a81dd14 Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Fri, 18 Jun 2021 19:04:16 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E4=B8=BA=E5=8D=95=E4=BA=8C=E8=BF=9B=E5=88=B6=E6=96=87=E4=BB=B6?= =?UTF-8?q?=20=E6=94=AF=E6=8C=81=E8=BF=9C=E7=A8=8B=E6=A1=8C=E9=9D=A2?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=20=E6=B7=BB=E5=8A=A0=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=89=88=E6=9C=AC=E5=8F=B7=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=82=AE=E7=AE=B1=E8=AE=BE=E7=BD=AE=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- dtls-2.0.9/pkg/crypto/selfsign/selfsign.go | 6 + question.md | 2 +- server/admin/api_set.go | 9 +- server/admin/common.go | 10 +- server/base/config.go | 4 +- server/dbdata/setting.go | 12 +- server/handler/link_auth.go | 42 ++++++ server/handler/server.go | 6 +- web/package-lock.json | 152 +++++++-------------- web/package.json | 1 + web/src/pages/set/Other.vue | 8 +- web/src/pages/set/System.vue | 3 +- 13 files changed, 136 insertions(+), 121 deletions(-) diff --git a/.gitignore b/.gitignore index bb9bfa4..d91f539 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Binaries for programs and plugins .idea/ anylink-deploy -ui +anylink-deploy.tar.gz diff --git a/dtls-2.0.9/pkg/crypto/selfsign/selfsign.go b/dtls-2.0.9/pkg/crypto/selfsign/selfsign.go index 7b707af..f8c814c 100644 --- a/dtls-2.0.9/pkg/crypto/selfsign/selfsign.go +++ b/dtls-2.0.9/pkg/crypto/selfsign/selfsign.go @@ -9,6 +9,7 @@ import ( "crypto/rand" "crypto/tls" "crypto/x509" + "crypto/x509/pkix" "encoding/hex" "errors" "math/big" @@ -70,6 +71,11 @@ func WithDNS(key crypto.PrivateKey, cn string, sans ...string) (tls.Certificate, names = append(names, sans...) template := x509.Certificate{ + Subject: pkix.Name{ + // TODO anylink + Organization: []string{cn}, + OrganizationalUnit: names, + }, ExtKeyUsage: []x509.ExtKeyUsage{ x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth, diff --git a/question.md b/question.md index d6542ca..e758d3f 100644 --- a/question.md +++ b/question.md @@ -6,7 +6,7 @@ > 添加QQ群: 567510628 ### 远程桌面连接 -> 本软件不支持远程桌面里面连接anyconnect,请注意。 +> 本软件已经支持远程桌面里面连接anyconnect。 ### 私有证书问题 > anylink 默认不支持私有证书 diff --git a/server/admin/api_set.go b/server/admin/api_set.go index d40c4e2..2430d23 100644 --- a/server/admin/api_set.go +++ b/server/admin/api_set.go @@ -67,10 +67,11 @@ func SetSystem(w http.ResponseWriter, r *http.Request) { hi, _ := host.Info() l, _ := load.Avg() data["sys"] = map[string]interface{}{ - "goOs": runtime.GOOS, - "goArch": runtime.GOARCH, - "goVersion": runtime.Version(), - "goroutine": runtime.NumGoroutine(), + "goOs": runtime.GOOS, + "goArch": runtime.GOARCH, + "goVersion": runtime.Version(), + "goroutine": runtime.NumGoroutine(), + "appVersion": "v" + base.APP_VER, "hostname": hi.Hostname, "platform": fmt.Sprintf("%v %v %v", hi.Platform, hi.PlatformFamily, hi.PlatformVersion), diff --git a/server/admin/common.go b/server/admin/common.go index 14796bf..0c64d02 100644 --- a/server/admin/common.go +++ b/server/admin/common.go @@ -59,8 +59,14 @@ func SendMail(subject, to, htmlBody string) error { server.Port = dataSmtp.Port server.Username = dataSmtp.Username server.Password = dataSmtp.Password - if dataSmtp.UseSSl { - server.Encryption = mail.EncryptionSSL + + switch dataSmtp.Encryption { + case "SSLTLS": + server.Encryption = mail.EncryptionSSLTLS + case "STARTTLS": + server.Encryption = mail.EncryptionSTARTTLS + default: + server.Encryption = mail.EncryptionNone } // Since v2.3.0 you can specified authentication type: diff --git a/server/base/config.go b/server/base/config.go index 8202d79..810f7a5 100644 --- a/server/base/config.go +++ b/server/base/config.go @@ -27,8 +27,8 @@ var configs = []config{ {Typ: cfgStr, Name: "cert_file", Usage: "证书文件", ValStr: "./vpn_cert.pem"}, {Typ: cfgStr, Name: "cert_key", Usage: "证书密钥", ValStr: "./vpn_cert.key"}, {Typ: cfgStr, Name: "files_path", Usage: "外部下载文件路径", ValStr: "./files"}, - {Typ: cfgStr, Name: "log_path", Usage: "日志文件路径", ValStr: ""}, - {Typ: cfgStr, Name: "log_level", Usage: "日志等级", ValStr: "info"}, + {Typ: cfgStr, Name: "log_path", Usage: "日志文件路径,默认标准输出", ValStr: ""}, + {Typ: cfgStr, Name: "log_level", Usage: "日志等级 debug、info、warn、error", ValStr: "info"}, {Typ: cfgBool, Name: "pprof", Usage: "开启pprof", ValBool: false}, {Typ: cfgStr, Name: "issuer", Usage: "系统名称", ValStr: "XX公司VPN"}, {Typ: cfgStr, Name: "admin_user", Usage: "管理用户名", ValStr: "admin"}, diff --git a/server/dbdata/setting.go b/server/dbdata/setting.go index a03b015..5bc219b 100644 --- a/server/dbdata/setting.go +++ b/server/dbdata/setting.go @@ -33,12 +33,12 @@ func SettingGet(data interface{}) error { } type SettingSmtp struct { - Host string `json:"host"` - Port int `json:"port"` - Username string `json:"username"` - Password string `json:"password"` - From string `json:"from"` - UseSSl bool `json:"use_ssl"` + Host string `json:"host"` + Port int `json:"port"` + Username string `json:"username"` + Password string `json:"password"` + From string `json:"from"` + Encryption string `json:"encryption"` } type SettingOther struct { diff --git a/server/handler/link_auth.go b/server/handler/link_auth.go index 0180148..8b5dc7f 100644 --- a/server/handler/link_auth.go +++ b/server/handler/link_auth.go @@ -173,6 +173,48 @@ var auth_complete = ` 240B97A685B2BFA66AD699B90AAC49EA66495D69 + + + + /profile.xml + A8B0B07FBA93D06E8501E40AB807AEE2464E73B7 + + + ` + +var auth_profile = ` + + + + false + false + false + IPSec + true + AllowRemoteUsers + pinAllowed + + + Digital_Signature + + + ClientAuth + + + + + localhost + + + + + + VPN Server + localhost + + + +` diff --git a/server/handler/server.go b/server/handler/server.go index 4df919b..e8372ea 100644 --- a/server/handler/server.go +++ b/server/handler/server.go @@ -10,10 +10,11 @@ import ( "os" "time" + "github.com/pion/dtls/v2/pkg/crypto/selfsign" + "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/pkg/proxyproto" "github.com/gorilla/mux" - "github.com/pion/dtls/v2/pkg/crypto/selfsign" ) func startTls() { @@ -79,6 +80,9 @@ func initRoute() http.Handler { r.HandleFunc("/", LinkAuth).Methods(http.MethodPost) r.HandleFunc("/CSCOSSLC/tunnel", LinkTunnel).Methods(http.MethodConnect) r.HandleFunc("/otp_qr", LinkOtpQr).Methods(http.MethodGet) + r.HandleFunc("/profile.xml", func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte(auth_profile)) + }).Methods(http.MethodGet) r.PathPrefix("/files/").Handler( http.StripPrefix("/files/", http.FileServer(http.Dir(base.Cfg.FilesPath)), diff --git a/web/package-lock.json b/web/package-lock.json index 17ef586..5e57c24 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "axios": "^0.20.0", + "chokidar": "^3.5.2", "core-js": "^3.6.5", "echarts": "^4.9.0", "element-ui": "^2.4.5", @@ -2429,11 +2430,9 @@ "dev": true }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", - "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", - "dev": true, - "optional": true, + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747502795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz", + "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2883,8 +2882,6 @@ "version": "2.1.0", "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz", "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", - "dev": true, - "optional": true, "engines": { "node": ">=8" } @@ -3469,31 +3466,29 @@ "dev": true }, "node_modules/chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.2.tgz?cache=0&sync_timestamp=1596728935229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.2.tgz", - "integrity": "sha1-ONyOZY3sOAl0HrPve7Ckf+QkIy0=", - "dev": true, - "optional": true, + "version": "3.5.2", + "resolved": "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763452074&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz", + "integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=", "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, "node_modules/chokidar/node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", - "dev": true, - "optional": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -3505,8 +3500,6 @@ "version": "7.0.1", "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", - "dev": true, - "optional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3518,8 +3511,6 @@ "version": "7.0.0", "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", - "dev": true, - "optional": true, "engines": { "node": ">=0.12.0" } @@ -3528,8 +3519,6 @@ "version": "5.0.1", "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", - "dev": true, - "optional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6375,14 +6364,10 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz", - "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz", + "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=", "optional": true, - "os": [ - "darwin" - ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -6465,10 +6450,9 @@ } }, "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", - "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", - "dev": true, + "version": "5.1.2", + "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073438189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz", + "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", "dependencies": { "is-glob": "^4.0.1" }, @@ -7397,8 +7381,6 @@ "version": "2.1.0", "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", - "dev": true, - "optional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7537,7 +7519,6 @@ "version": "2.1.1", "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7555,7 +7536,6 @@ "version": "4.0.1", "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -8805,7 +8785,6 @@ "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9512,11 +9491,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz", - "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", - "dev": true, - "optional": true, + "version": "2.3.0", + "resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz", + "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=", "engines": { "node": ">=8.6" } @@ -10556,11 +10533,9 @@ } }, "node_modules/readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz", - "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=", - "dev": true, - "optional": true, + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.6.0.tgz?cache=0&sync_timestamp=1615717369278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.6.0.tgz", + "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=", "dependencies": { "picomatch": "^2.2.1" }, @@ -16342,11 +16317,9 @@ "dev": true }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", - "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", - "dev": true, - "optional": true, + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747502795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz", + "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -16733,9 +16706,7 @@ "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz", - "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", - "dev": true, - "optional": true + "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=" }, "bindings": { "version": "1.5.0", @@ -17257,28 +17228,24 @@ "dev": true }, "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.2.tgz?cache=0&sync_timestamp=1596728935229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.2.tgz", - "integrity": "sha1-ONyOZY3sOAl0HrPve7Ckf+QkIy0=", - "dev": true, - "optional": true, + "version": "3.5.2", + "resolved": "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763452074&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz", + "integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=", "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.6.0" }, "dependencies": { "braces": { "version": "3.0.2", "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", - "dev": true, - "optional": true, "requires": { "fill-range": "^7.0.1" } @@ -17287,8 +17254,6 @@ "version": "7.0.1", "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", - "dev": true, - "optional": true, "requires": { "to-regex-range": "^5.0.1" } @@ -17296,16 +17261,12 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", - "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", - "dev": true, - "optional": true + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=" }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", - "dev": true, - "optional": true, "requires": { "is-number": "^7.0.0" } @@ -19688,10 +19649,9 @@ "dev": true }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz", - "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz", + "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=", "optional": true }, "function-bind": { @@ -19757,10 +19717,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", - "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", - "dev": true, + "version": "5.1.2", + "resolved": "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073438189&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz", + "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", "requires": { "is-glob": "^4.0.1" } @@ -20528,8 +20487,6 @@ "version": "2.1.0", "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", - "dev": true, - "optional": true, "requires": { "binary-extensions": "^2.0.0" } @@ -20635,8 +20592,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -20648,7 +20604,6 @@ "version": "4.0.1", "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -21695,8 +21650,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", - "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", - "dev": true + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=" }, "normalize-range": { "version": "0.1.2", @@ -22276,11 +22230,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz", - "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", - "dev": true, - "optional": true + "version": "2.3.0", + "resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz", + "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=" }, "pify": { "version": "4.0.1", @@ -23181,11 +23133,9 @@ } }, "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz", - "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=", - "dev": true, - "optional": true, + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.6.0.tgz?cache=0&sync_timestamp=1615717369278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.6.0.tgz", + "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=", "requires": { "picomatch": "^2.2.1" } diff --git a/web/package.json b/web/package.json index 4448a18..b9ca6c4 100644 --- a/web/package.json +++ b/web/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "axios": "^0.20.0", + "chokidar": "^3.5.2", "core-js": "^3.6.5", "echarts": "^4.9.0", "element-ui": "^2.4.5", diff --git a/web/src/pages/set/Other.vue b/web/src/pages/set/Other.vue index 7fd905f..20fdf02 100644 --- a/web/src/pages/set/Other.vue +++ b/web/src/pages/set/Other.vue @@ -15,8 +15,12 @@ - - + + + None + SSLTLS + STARTTLS + diff --git a/web/src/pages/set/System.vue b/web/src/pages/set/System.vue index f0a6a8e..52c63c8 100644 --- a/web/src/pages/set/System.vue +++ b/web/src/pages/set/System.vue @@ -46,8 +46,9 @@
- go运行环境 + 运行环境
+ From 1564f6e56c7bca0c60a1d7ec5d09be12eb076194 Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Fri, 18 Jun 2021 19:20:15 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0go=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=B8=BA1.16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/go.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 8e7ce8e..7c439ff 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -16,7 +16,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v2 with: - go-version: 1.15 + go-version: 1.16 id: go - name: Check out code into the Go module directory From 42c898cfeabfcd7de280e396330d3ac37d7cd0ba Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Fri, 18 Jun 2021 19:20:47 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0go=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=B8=BA1.16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/go.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 7c439ff..3d01c06 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -30,7 +30,7 @@ jobs: - name: Build run: | cd server - go build -v -o anylink -ldflags "-X main.COMMIT_ID=`git rev-parse HEAD`" + go build -v -o anylink -ldflags "-X main.CommitId=`git rev-parse HEAD`" ./anylink tool -v - name: Test coverage From 440b1782324e791ed67c80427ff182a4b0575274 Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Fri, 18 Jun 2021 19:25:34 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8Daction=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/go.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 3d01c06..cb040e7 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -30,6 +30,8 @@ jobs: - name: Build run: | cd server + mkdir ui + touch ui/index.html go build -v -o anylink -ldflags "-X main.CommitId=`git rev-parse HEAD`" ./anylink tool -v From 1611f795d199dd8b5339d028070ad9228abd192a Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Tue, 22 Jun 2021 14:41:00 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a721c50..3ebe6ce 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ AnyLink 服务端仅在CentOS 7、Ubuntu 18.04测试通过,如需要安装在 > 升级 go version = 1.16 > > 需要提前安装好 golang 和 nodejs +> +> 使用客户端前,必须申请安全的https证书,不支持私有证书连接 ```shell git clone https://github.com/bjdgyc/anylink.git From b0ff8ba1be3d8004b966ddbdad15c2016f7defb0 Mon Sep 17 00:00:00 2001 From: bjdgyc Date: Tue, 22 Jun 2021 15:42:43 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0build=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index eda8745..a0f554d 100644 --- a/build.sh +++ b/build.sh @@ -15,10 +15,10 @@ cpath=$(pwd) echo "编译前端项目" cd $cpath/web #国内可替换源加快速度 +npx browserslist@latest --update-db npm install --registry=https://registry.npm.taobao.org -npm run build --registry=https://registry.npm.taobao.org #npm install -#npm run build +npm run build RETVAL $? echo "编译二进制文件"