From 3926fd8640bb699e4ab06608c3fb2dd9588490bf Mon Sep 17 00:00:00 2001 From: Stille Date: Wed, 26 Apr 2023 22:17:10 +0800 Subject: [PATCH] update v0.9.3 for anylink --- anylink/Dockerfile | 8 +- anylink/README.md | 11 - anylink/build.sh | 5 +- anylink/build_docker.sh | 3 +- anylink/doc/README.md | 31 - anylink/doc/question.md | 42 -- anylink/doc/screenshot/group.jpg | Bin 44890 -> 0 bytes anylink/doc/screenshot/ip_map.jpg | Bin 47854 -> 0 bytes anylink/doc/screenshot/jetbrains.png | Bin 167813 -> 0 bytes anylink/doc/screenshot/online.jpg | Bin 56343 -> 0 bytes anylink/doc/screenshot/qq.png | Bin 20725 -> 0 bytes anylink/doc/screenshot/setting.jpg | Bin 30744 -> 0 bytes anylink/doc/screenshot/system.jpg | Bin 50378 -> 0 bytes anylink/doc/screenshot/users.jpg | Bin 49510 -> 0 bytes anylink/doc/screenshot/wxpay.png | Bin 138423 -> 0 bytes anylink/doc/screenshot/wxpay2.png | Bin 72738 -> 0 bytes anylink/docker/Dockerfile | 6 - anylink/docker/docker_entrypoint.sh | 41 -- anylink/docker/docker_entrypoint_fix.sh | 37 -- anylink/docker/generate-certs.sh | 41 -- anylink/docker_entrypoint.sh | 4 +- anylink/server/admin/api_cert.go | 99 +++ anylink/server/admin/api_group.go | 31 +- anylink/server/admin/api_ip_map.go | 19 +- anylink/server/admin/api_other.go | 8 +- anylink/server/admin/api_policy.go | 4 +- anylink/server/admin/api_set_audit.go | 26 + anylink/server/admin/api_uploaduser.go | 114 ++++ anylink/server/admin/api_user.go | 76 ++- anylink/server/admin/resp_test.go | 6 +- anylink/server/admin/server.go | 19 +- anylink/server/base/app_ver.go | 2 +- anylink/server/base/cfg.go | 7 +- anylink/server/base/cmd.go | 14 +- anylink/server/base/config.go | 31 +- anylink/server/base/log.go | 46 +- anylink/server/conf/server-sample.toml | 30 +- anylink/server/conf/server.toml | 13 + anylink/server/conf/vpn_cert.crt | 48 +- anylink/server/conf/vpn_cert.key | 50 +- anylink/server/cron/clear_statsinfo.go | 5 - anylink/server/cron/clear_user_act_log.go | 20 + anylink/server/cron/start.go | 5 + anylink/server/dbdata/audit.go | 6 + anylink/server/dbdata/audit_test.go | 2 +- anylink/server/dbdata/cert.go | 412 +++++++++++++ anylink/server/dbdata/db.go | 42 +- anylink/server/dbdata/group.go | 29 + anylink/server/dbdata/group_test.go | 15 +- anylink/server/dbdata/ip_map.go | 31 +- anylink/server/dbdata/setting.go | 6 +- anylink/server/dbdata/statsinfo.go | 6 - anylink/server/dbdata/tables.go | 41 +- anylink/server/dbdata/user.go | 22 +- anylink/server/dbdata/user_act_log.go | 210 +++++++ anylink/server/dbdata/user_act_log_test.go | 82 +++ anylink/server/dbdata/user_test.go | 15 +- anylink/server/dbdata/userauth_ldap.go | 58 +- anylink/server/go.mod | 77 ++- anylink/server/go.sum | 287 +++++++-- anylink/server/handler/dtls.go | 10 +- anylink/server/handler/link_auth.go | 46 +- anylink/server/handler/link_base.go | 1 + anylink/server/handler/link_cstp.go | 68 ++- anylink/server/handler/link_dtls.go | 61 +- anylink/server/handler/link_home.go | 7 +- anylink/server/handler/link_tap.go | 2 +- anylink/server/handler/link_tun.go | 25 +- anylink/server/handler/link_tunnel.go | 34 +- anylink/server/handler/payload.go | 14 +- .../server/handler/payload_access_audit.go | 188 +++--- anylink/server/handler/payload_tcp_parser.go | 43 +- anylink/server/handler/payload_test.go | 12 +- anylink/server/handler/server.go | 29 +- anylink/server/main.go | 1 + anylink/server/pkg/proxyproto/protocol.go | 290 --------- .../server/pkg/proxyproto/protocol_test.go | 486 --------------- anylink/server/sessdata/compress.go | 35 ++ anylink/server/sessdata/compress_test.go | 28 + anylink/server/sessdata/ip_pool.go | 229 +++++-- anylink/server/sessdata/ip_pool_test.go | 49 +- anylink/server/sessdata/online.go | 2 + anylink/server/sessdata/session.go | 169 +++++- anylink/server/sessdata/session_test.go | 25 + anylink/server/sessdata/start.go | 1 + anylink/systemd/anylink.service | 7 + anylink/web/package.json | 1 + anylink/web/public/批量添加用户模版.xlsx | Bin 0 -> 14381 bytes anylink/web/src/components/audit/Access.vue | 321 ++++++++++ anylink/web/src/components/audit/ActLog.vue | 263 ++++++++ anylink/web/src/layout/LayoutAside.vue | 7 +- anylink/web/src/pages/Home.vue | 3 + anylink/web/src/pages/group/List.vue | 129 +++- anylink/web/src/pages/set/Audit.vue | 317 ++-------- anylink/web/src/pages/set/Other.vue | 568 ++++++++++++++---- anylink/web/src/pages/user/IpMap.vue | 478 ++++++++------- anylink/web/src/pages/user/List.vue | 59 +- anylink/web/src/pages/user/Online.vue | 9 + anylink/web/yarn.lock | 7 + 99 files changed, 4055 insertions(+), 2212 deletions(-) delete mode 100644 anylink/doc/README.md delete mode 100644 anylink/doc/question.md delete mode 100644 anylink/doc/screenshot/group.jpg delete mode 100644 anylink/doc/screenshot/ip_map.jpg delete mode 100644 anylink/doc/screenshot/jetbrains.png delete mode 100644 anylink/doc/screenshot/online.jpg delete mode 100644 anylink/doc/screenshot/qq.png delete mode 100644 anylink/doc/screenshot/setting.jpg delete mode 100644 anylink/doc/screenshot/system.jpg delete mode 100644 anylink/doc/screenshot/users.jpg delete mode 100644 anylink/doc/screenshot/wxpay.png delete mode 100644 anylink/doc/screenshot/wxpay2.png delete mode 100644 anylink/docker/Dockerfile delete mode 100644 anylink/docker/docker_entrypoint.sh delete mode 100644 anylink/docker/docker_entrypoint_fix.sh delete mode 100644 anylink/docker/generate-certs.sh create mode 100644 anylink/server/admin/api_cert.go create mode 100644 anylink/server/admin/api_uploaduser.go create mode 100644 anylink/server/cron/clear_user_act_log.go create mode 100644 anylink/server/dbdata/cert.go create mode 100644 anylink/server/dbdata/user_act_log.go create mode 100644 anylink/server/dbdata/user_act_log_test.go delete mode 100644 anylink/server/pkg/proxyproto/protocol.go delete mode 100644 anylink/server/pkg/proxyproto/protocol_test.go create mode 100644 anylink/server/sessdata/compress.go create mode 100644 anylink/server/sessdata/compress_test.go create mode 100644 anylink/web/public/批量添加用户模版.xlsx create mode 100644 anylink/web/src/components/audit/Access.vue create mode 100644 anylink/web/src/components/audit/ActLog.vue diff --git a/anylink/Dockerfile b/anylink/Dockerfile index 34cfe13..5bbaa7d 100644 --- a/anylink/Dockerfile +++ b/anylink/Dockerfile @@ -1,6 +1,6 @@ # web FROM node:16.17.1-alpine3.15 as builder_node -ENV VERSION 0.9.1 +ENV VERSION 0.9.3 WORKDIR /web COPY ./web /web RUN yarn install \ @@ -8,7 +8,7 @@ RUN yarn install \ && ls /web/ui # server -FROM golang:1.18-alpine as builder_golang +FROM golang:1.19-alpine as builder_golang #TODO 本地打包时使用镜像 ENV GOPROXY=https://goproxy.io ENV GOOS=linux @@ -26,13 +26,13 @@ RUN cd /anylink/server;go mod tidy;go build -o anylink -ldflags "-X main.CommitI FROM alpine LABEL maintainer="github.com/bjdgyc" -ENV IPV4_CIDR="192.168.10.0/24" +#ENV IPV4_CIDR="192.168.10.0/24" WORKDIR /app COPY --from=builder_golang /anylink/server/anylink /app/ COPY docker_entrypoint.sh /app/ -COPY ./server/bridge-init.sh /app/ +#COPY ./server/bridge-init.sh /app/ COPY ./server/conf /app/conf COPY ./LICENSE /app/LICENSE diff --git a/anylink/README.md b/anylink/README.md index 2f00b3f..0b04917 100644 --- a/anylink/README.md +++ b/anylink/README.md @@ -7,17 +7,6 @@ Docker [stilleshan/anylink](https://hub.docker.com/r/stilleshan/anylink) ## 简介 基于 [bjdgyc/anylink](https://github.com/bjdgyc/anylink) 项目的 docker 镜像. -## 更新 -- **2022-11-10** 更新`0.9.1-beta1`版 docker 镜像. -- **2022-07-04** 更新`0.8.1`版 docker 镜像. -- **2022-04-07** 更新`0.7.4`版 docker 镜像. -- **2022-02-16** 更新`0.7.3`版 docker 镜像. -- **2021-12-31** 更新`0.7.2`版 docker 镜像. -- **2021-12-29** 更新`0.7.1`版 docker 镜像. -- **2021-08-26** 更新`0.6.2`版 docker 镜像. -- **2021-08-02** 更新`0.5.1`版 docker 镜像. -- **2021-07-05** 更新`0.4.2`版 docker 镜像. -- **2021-06-09** 更新`0.3.3`版 docker 镜像,新增同时支持 X86 和 ARM 架构. ## 部署 ### docker diff --git a/anylink/build.sh b/anylink/build.sh index 59c1456..e8d2ce3 100644 --- a/anylink/build.sh +++ b/anylink/build.sh @@ -20,9 +20,10 @@ cd $cpath/web #npm install #npm run build -yarn install +yarn install --registry=https://registry.npmmirror.com yarn run build + RETVAL $? echo "编译二进制文件" @@ -43,7 +44,7 @@ rm -rf $deploy ${deploy}.tar.gz mkdir $deploy cp -r server/anylink $deploy -cp -r server/bridge-init.sh $deploy +#cp -r server/bridge-init.sh $deploy cp -r server/conf $deploy cp -r systemd $deploy diff --git a/anylink/build_docker.sh b/anylink/build_docker.sh index fad70ff..ec94d0f 100644 --- a/anylink/build_docker.sh +++ b/anylink/build_docker.sh @@ -5,7 +5,8 @@ echo $ver #docker login -u bjdgyc -docker build -t bjdgyc/anylink . +#docker build -t bjdgyc/anylink . +docker build -t bjdgyc/anylink -f docker/Dockerfile . docker tag bjdgyc/anylink:latest bjdgyc/anylink:$ver diff --git a/anylink/doc/README.md b/anylink/doc/README.md deleted file mode 100644 index 66c8c19..0000000 --- a/anylink/doc/README.md +++ /dev/null @@ -1,31 +0,0 @@ -## Donate - -> 如果您觉得 AnyLink 对你有帮助,欢迎给我们打赏,也是帮助 AnyLink 更好的发展。 - -

- -

- -## Donator - -> 感谢以下同学的打赏,AnyLink 有你更美好! - -| 昵称 | 主页 | -| -------------- | ---------------------------- | -| 代码 oo8 | | -| 甘磊 | https://github.com/ganlei333 | -| Oo@ | https://github.com/chooop | -| 虚极静笃 | | -| 请喝可乐 | | -| 加油加油 | | -| 李建 | | -| lanbin | | -| 乐在东途 | | -| 孤鸿 | | -| 刘国华 | | -| 改名好无聊 | | -| 全能互联网专家 | | - - - - diff --git a/anylink/doc/question.md b/anylink/doc/question.md deleted file mode 100644 index 9ff77f5..0000000 --- a/anylink/doc/question.md +++ /dev/null @@ -1,42 +0,0 @@ -# 常见问题 - -### anyconnect 客户端问题 -> 客户端请使用群共享文件的版本,其他版本没有测试过,不保证使用正常 -> -> 添加QQ群: 567510628 - -### OTP 动态码 -> 请使用手机安装 freeotp ,然后扫描otp二维码,生成的数字即是动态码 - -### 远程桌面连接 -> 本软件已经支持远程桌面里面连接anyconnect。 - -### 私有证书问题 -> anylink 默认不支持私有证书 -> -> 其他使用私有证书的问题,请自行解决 - -### dpd timeout 设置问题 -``` -#客户端失效检测时间(秒) dpd > keepalive -cstp_keepalive = 20 -cstp_dpd = 30 -mobile_keepalive = 40 -mobile_dpd = 50 -``` -> 以上dpd参数为客户端的超时检测时间, 如一段时间内,没有数据传输,防火墙会主动关闭连接 -> -> 如经常出现 timeout 的错误信息,应根据当前防火墙的设置,适当减小dpd数值 - -### 性能问题 -``` -内网环境测试数据 -虚拟服务器: centos7 4C8G -anylink: tun模式 tcp传输 -客户端文件下载速度:240Mb/s -客户端网卡下载速度:270Mb/s -服务端网卡上传速度:280Mb/s -``` -> 客户端tls加密协议、隧道header头都会占用一定带宽 - - diff --git a/anylink/doc/screenshot/group.jpg b/anylink/doc/screenshot/group.jpg deleted file mode 100644 index 1099a0b9b0b00fa41b25bf60d1b8244283e2b347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44890 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

(|YcD+Zq_uc^a9s{RiM~K7H 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 diff --git a/anylink/doc/screenshot/ip_map.jpg b/anylink/doc/screenshot/ip_map.jpg deleted file mode 100644 index 6db4ce6b3ec4536840343ff97b91d6e16151ebbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47854 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

h_VCw4^CfgM=hOM{yFunLNNbio=p$BG+L2$A zjXQyFRk{RNWz=l!2@n{=AGQ;sT;yRn38jrXv8`6O0j##RQgUpezO-xv&kkB5YCASP zSh@wr_tIW#$E%r@0F4EBy(-qK5D3^!fkjrHmCd5pE}~!ldIEy*=3B?3md>4$O*8wt z=|Q2H7SPppLxw~U*qy?+z-+J7@AKUT*G{^YMqbEfWqpxEz~~Pi9@Mc@Y-v_K zRW<%ped+v_g>d^i!j=z~*^)DIM~;BMnR1B|)wG)0EzFi}4mU`Ih3+a!MYjiIFv-QI zHz=%e_8;-mSJZFA3B0|$JaxmJu+?Ca8M!_%# zGMMaZ&kWi(B{h=~jhHRr*0u-T#b?ON!q)leKXKw~)r*R?^NC@h)+{x~MiklYq@hD- z-5vYtWh;lzCCo9CYjGzsTTfpajSc=F`IbW7V!2an?l(NVDc*FvhaAojxMLmON@K_L zXg&O5#cvQsJ%-DAh87Efkrlb`h<(@K;}o~`LPhfPVDdkShkq}k% z7ZUVRW|}MJa~T)1yyBGMv=lUQ!()EN#UUz^k$-YgeB#5Cykx51;e!`iXEQR8oGH~w zKB(FrHX}dwmBKh|l-6tUTT-Pza89(XRVs_h4#Wy1@R|*clS2kkd_1$G`P{Y9G3P5+f_Pi^ z1DimC-<_pa)>tESGt7S?bH@aw5{&N7)$rrMgd+F9CjRIJz!Y1|ZMf^bhPh}SMG_S( zDxe$gzws*Sp3F1yyC@&|hlM-vX755JKNVU`5!nq15Y;7K&bRw@Y^9t-wPrtrOW*(o z?4LEdogXG_KYeq>DW5vh;WGN1cq?nKN(wcT@7uqXseSk;nmpq+oRFw_%1uhWiP{V? zM<#Z_9UXAXYSZ{E}4>tbCJ z>3M^nJuVe{@$O9EkDyZ|CKDC{h5CPkX<``JM5LTM*(hWBo$JA#O~c5W_E)ZvF8&%r zAI|4+w#f03SOOj9nVjQJZOb(MmZ3dN)U#&4L`uR91f{(;%2=w^V%MJ)Owa=EF1Kxi z`>{NnsQ8Oo7A-C~f(}$c-j(4WI-W*b_v|e$(S~x&$VqXP+O+nZhAx40*EcJ>;LlgE z3!b+*%tYX4kGb}~cHvVVfD*xDpoeKwE6^?R;t)0Uq>{%0L99h@�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 Ra{6S(9Y5-dsyc%CN<_6jN9>LOz?)<> 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 Lk3+G;sh9r&6rp&g diff --git a/anylink/doc/screenshot/qq.png b/anylink/doc/screenshot/qq.png deleted file mode 100644 index 50e1fac5539c03ef1b7e0ea10b2ce2ae4a48c05a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20725 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 Ce(N~^ diff --git a/anylink/doc/screenshot/setting.jpg b/anylink/doc/screenshot/setting.jpg deleted file mode 100644 index 2e45a0fb19636dee2fc080dd7d072bfe89874565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30744 zcmeIb30PBS*EYIiTCkPD)>cM|R;%`{f|fGL5Up>ePB^vI$`CDTRD=W>5+o$CRBDbz3#Q1)uZdfLhavoeIJ4#`<37Pb0Y-Vk|F4wS(9zRl_&3?o(ld0OV}9t6;#~h z{u2Cn2fb|VG6=d&onqYnF8KW(_M0CPAjpAb{TIf@T-yObxSK2gx$Ikf)PO)v-ND^1 z8Zn*uu&=Flve+plYcp(M=IZs+HUC_=cH^BL?{95CUB``svZI3%1_pi#`aLeMb5zr@b->(^f+Z%l*B!MYkqj z!C~v~w`f`gKK+$TP5A4ULKHz2y=-HZn_t{Jpp)S5+9BAM$2%bFupsEtT$^p5oq;)z z{UBd-CSO@&vu*4LwD(8o{1+}{*x0XYNB@8JPzxWfa^xVVdg#TolFS+Mf=OfJz;1K_ zLo9V zsyyz?xl!&B?R+h{o_bjt*$mTL3@i0RC8SS{&2DmbX!~`^Kxos?Qyvx0jnWY+_{6*U zeCgLmWta%N!aF*bDxzc!zK?%h9;$ovIS0)++|cXcPSw7!*$5io88et!>2YBl*}XAyU{w@#p`T1u0TE_^8)=I!&&u44r|y;o2?kx7y^tR&G-thE(BcBx2;g}CyPuy7gTC$@CQWQecgSWWgt~@e{=q1$Kd^Q z2}4N1WSl4l!#;c;u9_`5B^up|(a+F6!K8TxovcRHeuf^5oAEQM!Zj|#O|r3nNp8h1 z1Ub8uXyK}+AoNT1OE(2V47FVKsBLGewhiHlNJu_tPr?A<+!YLiy?i7MO{zL zHADm$_?Z4^iw--o&MO0HI?jke3b)_K3K7ZNf&rB*(t+vZl$E4w$VsVjJ;g1zXG%+U z#!PIyo+UmB)qxT^Nt>&(wJ1_0qXLG#C>ZyTpy6(0WWLLj zrIj%K^8EK0+A9f)P zm}cl@jHb`Kzlk(h+HL!(&%CtQ)L`OqgR1!AP8%^b?|pRbX%E7gwC)Qkedsjmnb`i5 zZc17VU(oBjgz|C9ls=kSq>_t9>yjVF+KTfd-d{&l9aJ%wEg>axAdkEsTuU&akM8}_ z(H4?CBobC&%`R_>#h0*n7XwEN`pJSNz<7B7H(I z4kt)-wdM$a&7*nul{Ne4{fsOAS!4iL>BN`TYA${i^vs5waN_Pl>{1_HpD(PbfBln~H40sN#I%v6WL^$L_$g_c~#A_t;O*vr_ zyKQ4@^7v&KWovDHnrvO|M)SQob8sj}i-Kg>s6XS!<2EBt<8h5ESJ1z*XpF*; zcx?m*iVNF8clNvy_GD{>kS_0+?Zx0~Ov3ZjW+D3Ow40O;sM-;JOIz{+;^SopD$L&- zdS`#`=UFcsUB1J}9vH!H_xYrp>uA#;k=D&hG|_)zQ)wl9?(>db-)NGPxk2ZkGLQ_N zvw}8TW+tV?Llr@Ka|TLT4+Y^3M})Ddw%OmxdY3%Ty&%9m7QHt%jDZhPg$j&K;e7U#Y>_23Ai|81vu!`H%tA65=9 zlJOopY$D{29>r>@#fL5GsL4p`B9A^FA!ODY`C< z8AuO~zHCwVC28-;j8dM)My%lm9$09ZD#(ZFFBGz*>vCKZM=vzTDtIo;2KHj;b6*`~ zWDOk^bqALH$bjPmLav%+7h^3~8YT8j8R;8aUz?^hb2Go!ceX|D&eF~xXSh9t;f@7^@%S%RC=#*>@xSHnx4|-;Sm*R}ySONatSZLMz|E|Y7qLkn zUQC0`{kHdQL$KeZl`$c{F}=-Viw$QTTtqpSF55MOER~<9E_Tn$$|sqg%eg+zlp&%1 zxN@Dr#7H}CS!*96(n}Ajbqr$OX}GE{V0WHU_yb$U$XLjc*58|V#o{wIKBiqkKL@V(xDk;-H+kn3P(YVw1L}7=hP4c)v1w;j#cFYQ*6Yu z_uHuY7l_h?!jVJQCEBj@+^AI%h0#0!kiwCpL#kd<@;9cwo7xS%cZ?ZDZXe?OV&_!r zyveCwEKk_)oOf?<+pXSSS*@_`2RchxiF^@v9v{~=^kKr^}92Hx0-8>|@`9Fny9F`Ufo?F$*~ zZ%@It{O$u^G^QgUpT*GX3wF%$AFU6d1v|fh;A6kmPx~vroBMz8L!UV?ElO(f>eF*p zj{o!B4uJOSV0wgEf_Qc9^l$(8Vr)8JxBC6Fu}NGo@zCktF8-SuP@X{qog(tpcjwHI zY;;@q(hAZ)gk$>=wtw6ZZOm@oz7q_laWPa#eE8|BJBeScmao*E25wB^FW?c|1FMv^ zhT_*lrK~Sn+k5GX_R42g2O-1yEZK0yeCp(@7SGfR%A7Q-O5&|_DU3)8&8l%D}T`!WeMKB*-gVI%vBNX}J6^HBclB`W%LWA?gz)gNed1+BGbJ1-|& z2f5aT%troVLh#LwiI$9DjUy{J@QvQ=DKZr@95uKCmixiuc1%a&;Bm?D8P3n%H6fM` zl)dFnrFoi!m7lg3E4VN(-yz@dqQH$h`<&tuT&1`D!pD4dg~*JwpK_l?Up{~2_OA@gsb=&YwCWHRArg51M;xUtWVBlNSk$XnkY=$9*%iEO)rmR zb*B6%U5w{W4ie^U66idRzOUc4Z0xSPyF;HO1njMccfpJTEe zOJ6p%VQVWw;)|JR)2poraH096v=7C-bMpQlf)n|U2_C5b-S5zzFC&!p~ zl5JGKuI6T?s|KY`I(KqH{^#5fUH0hnd6z@)7px;LB)p`BIC*>%MXCTE3NDkOwlye4 zBN-~QK`wM0(>BbbQ+1asrq$K-&76(ho4+c_&Q_fB0CE@INl8kM+sAa*%5UE39%9FaS)|&n2{0_V4m<}_t(|TSF8|( ze}&6_Ru1z&-&s`uu`?NA&(N-k6AJ+BOqd%~q25AwrQFTt#yT(?X3?gVP~ljEV+v+tUH_77| z++jG@yC<3E79v#P-lZZiqW!37ZU`-4Sz6bSq=ky1Fd~7Men{0f?-^GR12(&kWA>S_ z6Hi~-h+BVPh8}>3eMbvfU|YB(kCsYMzFdI$yN3I!zAntyzo?h)i_!ZwrB<2uCy0hJ zzJSlPHqVS5H$<(h5c1#nZ!mJPUAWI#U;h378ulSY^a0L~Jq}f;!B=ntBsQsPz zu8nvhLyF@np{PjGt*%SF%)7F9oW7Ts;RoSJ9&N^2u^Jk%6K}1`g83(Dl^mkh`<3C! ztZ=I{_02@XtS@4tA>l|WK9F_U*MS+6;K)=bH?W-@IICssI7ab3>MciybBT8bjj zi{$|xWYTC${wvmJ_XELvMW_^pH>Q%=+28J^^;->^16WT)tr>DBEwX2h3*NpK1X-$t z34I}IsJJz*&8mD~kz>Cchi&->AIy!~w*3`>ln*ZDyy{9N;MMN`srCP^w<6BLRU~_f zQbC~f0*j;E(A)i?f!kGx1_ri9*loF4+y)|Eh#QT@D>9@4f4N#SlJM5sW= z_|V*3irj~MKFmTRr+OH4$UVq@z>Kv=BPKJ3Oj=g^Id!D z^|fa1G{)gf-o6->eq8x(2bT9x;P-H>@=oRkT%w6KousH2w?fq)Ds}9JW%}l?dBcd= z4$SL3v%HHF9)cM(`1fCRV3LO9s^>`aD!ru3LhMD5z97gj=bd_O#Jl|`v0?Z$(X~Hw zPsXSTsJZBK_^od%F4~Cw?_6#AHP)t0_{&Atn1q4>cK|hHYrb!Q+}Y1sUG82OWhoAv zU2D%2MMbm=yeJRCZ>)Gx77MIxOvl9uY1sut>;26d zw|~DqPL~*JYEbVX_Z=4Ndt))M8V@oTt@gz52sy3?Hd8D6ZeubSC(^Mxb*+5y%yG2c zVwLzAY#Ny&-RC#SFMXg(3Z}5xFKKRE9Ay4J)zAv@N$zOKE0Y67K9Pe@?s^>TI*41Xg~hTmM-tp8?- z*oBEC_&QXXXvxCGkRx#(Mpou(W@(7ef9#u*)Sv%WJDj>SC7M2{BR z^eD>XpGFEvDmpn^P4k;t;twD9pD6EJ1xe})kz&;Gdn0m}Kwu>f*r;}sL(0MOn0w~2 zyyMvjM|UjbVaJwl;RVY4h4YZ&C4YLp(?)FWD2*)gCbN40IqAS++^V>d0LH7)FCox- z@(GsDWuoRlVs_8H=NA#^Y__sq*rPKShjyBK&AB9oIhUDDoiJJCg8R^dkBc7zhp-+E zA+%6XEkQ#+Gz}h4FzQoAv*f%Dh@a>*ve0O%eXkKquP}*k=CmwV>^i!kJmq?CU6LDX ze`_ke7j4N87LBIl%o-nP4~QHA4Cg}_b7xc$>_43%}*>?cVv~67N_jK8bx8TZ^9_V&0 zhZ$?GW&!ekpOVgTxnDFl?}r<+vtR4@oB>#c8*vj_J~vbnyIgi$@;G;Dam|;t1i|15 zDIk=G)WxL-=sbA>j{>VW|9Y(5FMv^&|5EB}+veYuj2`w)j|+6yd7&ux3Jks&6JZ|T z!;Ws~u@g(rzws$=vTYfqoq<>Rub9?(+wW` z!_?&HVfc~uC(Wt>e$Qa5@*SdNZ^g5kwxQzEBev1|F;K{QLymyXiB0_WmD9W^Yg!=W zhgK-|Xy|F7XhpG5TbXjaw~>}kAw^lD#Ac{kdPA5g!6R(MTiItGoz9c$~aP^a_p75$GIv?;*%p zXl`-Svl+RMvI$fAu4;8KKU$>Y19jCsi0^i|5HMUNUKCCPJ2GneO^#tjYv^LQ zs(HS~@y08UW#dZ+-q9IkAfgKDHEAg(`-2Knc3b#T9GX|Y9E+K+aAY?2K3@W%hYxov z%rY=VDc}2`HW@11(2lbCJqs_5Bi>&cj=GbxxBD#~UXeXJ1~)y+fOyVmf)}f7v?k5ZSnJ^5Byo$ALYNE=n7 zRLo(7Nn^kAbmD{K>;e1$g^dN9g1m9O_iH{t`BS_;5gm|);gvNy-f9@RV1Y-e^md>J zE0YNtF8$1Eacs6-J%Vt|FwX+Ac8{B|C z9Y;zRJ~4YNgDyo;tQTLuNcHPtsI~F7JGeG~Ttz(jDC$caa#g_CTdzz!d;fSnwBC=s zA2hr45m2Z8@I{;O&CXDN&lU%8?W|SvfRDfLZ?j9@l>|reR5)JYqhLeyr{*ArO~o(>jSbm zw`UPc!aatdzxE_B8Lko;7Jq&$l7H7dHA}kN@0Qj}RvEuI$CY}cs5zP67ZQIW zxNK`gYJSX@T~Q3|+(5{&7zw~p&xkU(MB0m0<>2h|7?*oS!Uf4(GIG@Y0(-`DwQdp= zdT31JjLo$|Z^!gw1)>NGj7B#UX4Jr*PBIr{%ahVfx8vDRj_YnG8uH_ed#y8{Q&>`V zzzuJ*pRKr#d#6f?ed_MOG_jA0WE)(`+~qQHN(@^h(cK#17k|mw*<;vSj6#MsCR9c* zMOh*jFzPi>&DT2J9?0g>q%k!-wulu{;FJU0_YZ!`K#{6Rbk}L$7Dr0M3c%~$XlWBa zw=2$$R_&h_K{>-~`iCINMs+Bmf&J34+O0s{HQ3$j9#u==>qoNk1A~1LjWE2%l#@z~ z=C8HCYwAVs9x-ANyEnn(ECDWi%zlfi;)Zp|R+B0JJ+u=k3-n>{wlRNWZ21GjfOBak zN^Ki}D>@*P2(*Kjg%I5pX2_Cb7CoGs@krj4wmE&rUhKXbp^r6NI+5@SH&?0L0kGT# zA6hITj24&!)BkAj@v?1=IEb+ELl8atdWX`GuCW z^vNDu37*k&qFsIADxB54I1r-NHbwhDe!vlGY8RaJzyR+kXU7};JF^5T;Z$T6MESk% z$Zl3It#IF`yXFVQ@zK(SC$gmIQD0Vbd;&xa$%$oTsZXZtvk~+4^rt}#H_po~{pu`I zZz}b1IA^H`uqErKjJdgE`;h<0olKuq;n#W+421!CIqyCxeBSX5g+Q_mhHB3Q~HlF4N!G$tTG{UMcqA@+9}s16*Y}LF3g(C zw{`IebUY(d>20n&4XX$q@(WZbQofIy9fGVmNZ_vL1?jFcjz1CUj{Nm2d??6y64)Ev z_)&sCedjxh`nFis3+zDTR{P4D?}0oI#wEHtoVWncL;^WjKCHodEld&rjPoCRttm*qEc~Cg% zB1`;+LVbJ`upx_54P{QYS#|f42pucZCHgvScbK0|p{@9yshE*ttd0t0a=rUO66 z+6dda8y4e%_yZr#PPjzqO9Lu=3B1B!$(}tpxcC|RAIhhJn|=rd^vs{^&HgWJ#ljB8 zbr_zI_T$4?n-1A#*15WAABBn;C~33QbB6RF!+#rnNF5w2D&T)*RJ*)Y2Fe#?_Yd4>XA2@chEQZaj~tqkro$r z1nr7$nlHpbLcOc4JS67tPyGlfGAkNBD4!95T1_oC!SMK$eOwo2_LxIsnBLX|g%DlH z7v8k8XQu@~R1ROBAIXd08ca-(>5^^;Ly-Nfz6&-8p7JFW2-oZXx;!~BLXF#I>5-~i zu2Io~4w@-G$?Oe8q}n6Tp2=PaMpJE;W=m>xLJV>ewD&`*L_KD~*Z%~oa3S+9a@7V7^yDKy5#F1Bph4sfwa)ioNykvbrJtuEq19J_1+NQK z3S*nxk9o}uoCc7=RBDI%`HVN-ZzXSjDe9WSRu5d(f3n{g{L|?);t2}6wkhZ^ zdkoDjeeV?*WrR+Ju4Vl{0`Z!FnEiY4XFvyBg^1b4ZLNK>qbOE=Y`G7fFry7vI>PJ-e-jqp zH#-u2|4?1RqUsx>A<6z!&biHb>rl0I-3i&$RPDLCj~k^YiUW21gJDy+UODd-dhSb! z_Z8}f>##MZTV6tpG@f=>qsG0dq3fWaoe**KAl6{Z_{cL@-yrF9G^bPy4i63jrR7Fp z#zRpeTvFPPP*m_PV|BVgx1vv9<4nHZ_uL*ZaBN90$|%LsOxTwF1F<&GReSw;Zse>i z4Zp%UEHkvdb$4J~V!l6AlF=^gb zM5)4hR6VHqu_ zfRpP=-n1~IM~-%t?Z)w&pjt!dxH zjwb!m3jh3ww+L>1>{<_DtQVr+{uaFn5^fKeM1v1B-Ae-2#i!P{U`TsA!GEUm`#LD+ zDM0|NpBk5NK<%zsp(sLq4&540wFJmB1SHfncqfvIaJw))I0#c+H>4`po%SZn6wgf# z;@oma=Jmz6^+BtB(oEY z3-vIX!J^*v8L$4~gA0{K61=8zMOKNDM_lVPik_rXIALg`t_Qdazx9UvP^8hA-L)C& zA%;x(4)lDS^_t(kBOk`s3}H zRqp%fyx(@zw*bCpw7g&z&2Kj)gV#eWq&KY4T_*w>c!aJQqDis3;3OJ~WC!sl8~`hB zg4AhtR& zsYlTRc=W>KGESV!!7MHY@kvIs^4VQ)a#j^b_w;2QH}ND0{Zxckq2MZQ$!*;CNr97a z+_k2yF!I_7RRN$44shNhhO}uuEP0nUowh&Bu`>J96&*b{^PIS`b`7_MykJuAy>WI^ ze+~BxY|)_lS@BlP)!HMy2hoFMiJJ3I-MC&SRy@8(?zjkCLDH8|LY)6#aTzKab3=h_ z0?^IAWrrIU0rd#O(?fvMlKKMmE{&0ej z`WO&WR;uZgRQbW#IV(fy)@E^1FDqmKc_05LhU5O=e*bF`$X|-AGhQ)LpDocKM0Utg znH#{rN5=3kfXP;1_lj-%q!#Or`e&`CJy!+b8Z8UZMn44YVn^eG4!a$E?OWS1*L=Y7 z0B{=)X^yg0_%S+d{=G4t|H(({C$rGzNlSCP76*A)`8a6RqH&__YXH2Vr8N^I9fboK zn>mMCI6;WKV1r>T!|8Vo|5qQ%1Fp&d=@mhAccN{u zVGaJp@}oQ@Z^~wtTzj-rzM|snffL19T~k5=<64IIS4>|K9Y2&bfSj36l7~&^qQasI z4f%h4<#f1ed0{@!oy4n696j^MFz}swlrqA;*N{~=3rG0D`>D2GkZ#A8UM^2DT7wIz z!hYG20(D5vA;L#r{DnYd{|FI>i-z^Q;nv2vsE{YT}OprW5gJcZ?$dn&Glb@gVj_=<)WUiy;gFKWhXL5e3ud$OojV7X*|}Viz*P!7)U8LDhgD_y?()Ls{vFv^mD(*5|d)3nZvH7zWzbWj`B4MdyT_ zHP2u+L7va%g&;z5M;zbrz#FGXn%DhSLgxa}eDlq#G;kFIub(3EBjHlomEJWXo#D0@ zAvR^MYIE&}MEPb94?bGi)lr*%u)N0V7#Hydz604D@!u=OY8*eg4zjK=_r;0|?C6>b z>^o5%x$jj9@fWfR@*V(eei*HxbBwzgQ(-n75Y27Zpbs~wk{M-O{cI3O*Q0S ztguUcgI?b#hl~%;a4?kWz)`_GWESDZ4k;~3(FqO;6pQF;D5se~>3+_yS*vOHraH=H zE!%fMp5i=^_=z?EdU{s^6sMq@o`}G)mN064>foER*96n2=Q}bkEHU6Vb4pS;^K7a88E7i|~JPn?>k9UM;SF@)@czSCB_`o)*cRW{MfcOMHU)hFD zmYUVN$?K2+Z@j@!t;&U~3f3L+Dzp*i=7yUo;@0R@hrWQEre^TJ0>V#HAmfGt(-976 z)XT#X)<_!jP4BNY0J1!Gx(^bDF0>YsK2_s4-UD;TZ-H`_toGlakmv9|&_{7bTvyo~~XNziL2ZjDW@AQU52J))2$ zLTl#9yfbh5wRoc1PLN4M38SGfAqJzi+XnE($v*`_@=*JC3j!d~WT&uoh~0qAT}t`W z8+KV&Zorj1ui7+pQUtSu_VvCQL&@W|)8eD-s~f!2HW%zO(0@{P5AZ*=2JdtrHsLq0rK`e=}8ejebHqns88O2l*WPn}q{WHCjNz{95wBnr+avbriZ%7&{zGHZV=-~<*1z$+Ag#O`-EGUaD(@j&K66W=)x)nztX9#Bb?h9?u)h&f7=8V2Le-GGo%n;hcf+GGGwg_ahU5jXXUdG zye7h_V~7YODSBnAfq!gwpSMCJ%y&%GV$jmq!lYJ!C%z^~{A-U8WH$rH*ix@|A}JnQt!^9KrjoA^^jN$&lj7TJWtQcISN5!era zAWnG*ElvAF(ETgn*dQK`P(BcXh6>|K3s!S^G$K(_hpkPizNSllnhL^v8&Vc6VwZg8 zN_|_Q7R4)(;qX*o{Sqv}yB3G}iHDBMA(0;cfMiO-< zwBBnxl6w|pBCyrNovRBPaMpCzWGOL~=1wY2m*b(hCPgL-W8|}7{_Q#M1-Twhy8G8C z?YsmiEN>@$Hy6sOB8o1~!X@@#ei!z-8S})u2$bcRz)!qxAg%{4$KUH|*iOr0C5wy*Wj9xwBOH|+L!SUlv{jms63rrKvhzbb$< zmZU9?z#!LD5+zSmA+~QubH=Ta{>U-7s-A2BBpuS=N2x{xOzT=%oyD=Y75gh3niK-( zpQRlS8Vq57H)Q(B;r7)fhf5JDArVo=$VfzvOLfJ9fEV>VswdBx%wz9EE}8%L7=7q> z?z`!tW?p7lLxV?uynQAAqSd z${nnVM@IAW@S_F#|9wvW1bzRT84v$G^ZMUN$EdR^&9PX)Y;d6cZ^3}B9yiS4aLh=m z4cWEsZz(7^VGS=Q;3L%1#uOcOqW&&P4i19SBK)V8hoh^r`QBy7F1Gr?nYR zKLu#kv*6$iNGBOjEZpWf&dz}A;BPF)?f>2_alh4rHNG2}GAk)}@546?(OPi$db?$V z#u$V9ssdOt1S;9oU6(J7K7^HDk)#pT)|?(iz2WJC%DN;Tc%Pu|GNv66xf(I&(~J8P9JBXVNR= z2iz$PTm0_xAUV;w$S=VL8~oZRH@r84%mqyOw(I~nKB&vVhTCkaN9*dTY`A>Px)uEX zI=GhwC_uKT+byG0Z*lwrq{DR_4wO8elFd!xvf1J0VzGqxPaIc+VQ`?F>ipmTNL&o- z1I)I=5=a+LxyL$%OFE40y7>#eIR!h?1j92*zD{~|DgcO$7!HhDX=;YGZF4S`J`x=$ zPKGP>vAJ}>BMZ$VTXy{+V`6S`F%f}n*JSzGNL!uxjG$x72PdF-bIO(AbpH@aDT#_2 zqcE+4xc^t%Z7+$hiaz{TrF7TtV3WAT)v9;lO>93F)jWE5&dMcSbU`2K_k{^v5g z{#$x3PkgSIwHy>?kjXPL@g1Qa9*Np>+Nye>=j(TFs5XvZD^1s?zv)+wBZhg;!5ItB z)hDXbWtg9*6w(*_dqcVv-J6^!?Z@wGs&`itiVZA63$XSw9nN(BLL&nQT{}CrlO}TI zs!O_Es@;}%{krR++`c+~zPn?27Duy!@8-lR;&0)*@_UaIb$u;OUMeCua0^sDE*(6u zUHrqwHrT`hi_Zu&i5XC)-4XxZ&J>ZyF!=7=JT0^{%ES6EP zHg4%iz0u5WI2dn?S1!)x^@cuJGG&@R-r#dn!3*A8 z!00tw!l0QGVViNVCEV`q zN*0UlN+G!|7uWZ>B1(~Xg;I$6(jyHi|DncoD#29aIh-+M&JRyl`VjL4`JuDrg8^Ga z<;d!*!wA15o)L)Vx%S4btXkHgh|cO>`dQ4^D`!+R$Jl$UEw}&JW4aJ3{mJNoOW+g7#;!y^xFywhYXfCz5pI~qgnHODjUda~W5=5=PEWtY* z&Y$O_(jtJs_#zhGELlfr1bxn~Dz@NiQqqjBpvUfi*+~A?au2fCgJr7Ox6PLV*iiLU zB$_04PvaxJ+}v2(2v1^Bn}yqJfTU-tM>_RYhqLT!vu41t?t8O1yxns!3a%h7CDJnD z;#l3tzRoK_Mww=u$Wvw>tf&kz;j-!S!J!*UKO=sKWXrPTF4$)bhBL=cE58Ul2kUtk6=`#DV4GD9o@+f z1jd{Vf$!sJsGukkA=XS#bcubX3~G<8Pm%AI;Z!d0-AWWHs?3%UUkh%LQS|61kir)H zMxvY@({PN%>sjx{rd8UA3-$?}GW|lE(p~NDyRb@QVB#0A6P3{xy?hHr4nep4l%-nw^)AqlmkN=!7X2;BEpE$RAvdUBY zV+E+{5#x2GI6T>07AVoic+D+oQ9t?%$DQ*OMEdKC+3nrz&rHj-&otWm^_kc`8vJcJ zT%{u3lzCx5FrVqJk)-qyjmWZO~*0{D%+A{4TP? z8gf_O=(MIR{f8(w6;UY6O9^QA`U2Re%#bq?3X)8+y&UD zu04_VEI`RV!yXKP#$f++JQyt4nQ(5wFbR=>{rp%b~;LG#A$u)*PfYr^4Y8>NMv^U#j6VUI!Bg{ z^S)0$DpGHfpDDGC?w!jSD=x!SkNcgwj!fo|@?W^xBl*TY%FeV#JH2cabDKnDPhsWZk?&7n8HI`nijYBI(vgk4vcPpUR1?xB6C%QSU& zRpFNVXH~`ZXusP(Pz@@Q`6tb?j5vJho?q)+Ow$EURFV7Bn{F*}!ZDNinZOSIlt9~K zCam|ie_*&6JrMNt2(OJ&sjj_#N?%`x-Rmp59z|-BxdLt=oNG0jwerUO`G$*1Ir8;e1SdGw*oA=B&)U_1%XyJJHrg zlAPt>uweEW6oa5Q67t|BJYQ<$gMCQ~Z32ZZ$Y47JJ2MRkhD>E#(=gLe$W( zak=`IB>G>DVSW-E8`!D1TOmjBw^HcwODS+HsMr-4zM>~J78ME{?bi80+P(f0N2$f+ zKLpzG%0e{6E+u7q6P#jGr}V}_!U|8yBX9d!sdc&e%9}a4AQlAvm_cto1?n5HMgF77 zpxjMbP=)9dICgRt=gJD+!rU>TNU#|%(lU`BYn9KSv)}}{ai}XHi9x4X0?FClKZQn@ z!2IPi(XUR5`|kq>+s#if8EB5#d`VuyhF!p zWZ;zp5&S8sECn8-(3EpBBrcs?2`I}}duZrd3u&sE^O-Jt`()qouDjWJ6dv&-N_45SE?kApL)#W{w-@j9vD~JH%88w_YYPP ztZdDfU-+RcX4cR!=VrRqrv810{tkk(51d$8Ri$b9=CAOo0_t4DaErj@9_J7z?Gv?s zWf%EC?_PfqV}V1ZwBh3AvN58@!>%~~ft>n4EnQf@Ja#BaFqy0EfNe&RdepWQNk;=? zP$uDekmjTbezo;LP7Bd|{!*p@rExa>UE#E-oyof2harNhG)>CpMjazjFfKDdWy0dP zyteEL)ZpvPgCn|op`h+mh_yaL_G}eAe{>^$6lFS~?{;+XLf!xd|6i#!7ya@d zsKT7jDR&MvL2>5lXZFPx4kj;}F6xjC#g=nAY7G3VJs$5-Lq_&_Px4}mI2pF5X@S-M zx_9htkU3ZN@`2JEsXL^qGkgIli*R!>3-TK2Aggi90fO9-omI@1N#&g!#!!MTqw5JX z2%BRoer~NAc)&Ag(>7z~zqSgLIu|Cxa4td85T0rlg0ALY6M!>H)(nILpZ9`NCC}-N z3UHD<5Djrp|I1On+ydaW&vuA{Hc*^7Y@s6e<@5Sx{s;ZP2N}y$t=1AT z;f7WCU0qO+F|9f_&{hn#T;NfI{0DD^Z&%-vUdSCoGcMt#YXqI@^diU-rXLPP*gM9_r$~;2L<2Q%2~G~OUAf9l)uQ_~76-BBNOmhBw&7G&>In^0 zZFXOqp-$T~8^|tz64@S0*X>saba4Mbz;BrEeDHoH?;c>w3;Om>jty-M3%oj)lUAV*-wrYKHh4@#Ofl;NsndYFP(_nCOkXJ`I<0psr`u)YE6wI zbuADR)s;s$k7~z~(CTB{L)HymV5(E8oMi;hu5ruCRBuvRbCWVS^GLnQ^1Sz{#4pwU z))UQZKDOoH+hr>~ev(?jOZo{$u0OuMG)k&>Az9=r7Z8=|fJNg)UEEPX6K%ZmnxnK< zmH2~X{jVi(jUTceKa~FVh5xV42B=;{(b$T&_(2SlmiNkuu(3)IC@CSByzdonn+*zz z=zfa@+ThG8`S+2a@NUa?MN03(R|Ee=vJObL6TF!^^t*f(Bffpb@+ znsLV(f@U7Gex(ZLuUI7&Sz@5`4!2pZpux>o4K9@+LCULTA9Q}#z#?lGViVyigOY}9 z8w0CQ&NuO1{WfBSJl~%A?1`WO3i3Ee2ZtetKnkEvXyN@-ca8;a;2*ClCDGM1(DUp~q>NSaZ>83er-F0e zAK(eovBvEbWiL_Ie)DR+dALy0=qK7YN@p18SM!Z8=KWFL>~7r9OW#Wswn@D8{G+27 zQ?+~m1;3T}5R}=9HjTZA^iG)lJ=5X}l#crIs}ts@Dc={x&TEfFN+md+o@dW2Qu|p8 zGFf}C1N48WSf3u~anOK<)(u2&vu7DvsSckj~ zlzu8)A#R<@Z?j}9ecj2Vb`hzbrCe4o+5!qoS?kbPB`}jTb<=EY|2}cC!j^%uAZ%WL zV}^WV>N=96t0Tj3f^oam_uS)&`eo%Y?K>evR* zbV(mLwP9JRC2gT2#OA3%9_jQ^i}N?Ho+&EcXjn%=^eb1Gg7;MWT+v>OuuAq>n7^<2 z-U$r}Yd}5)gGptyBJEy1vvNu2mE`>A_}Tr+(4w@@%9hKmeY&^=VsAwLW1f9Xw{ZpZ>>*!I<|$t`O}TaC$H}= zxo}1MTdK7Z+{I`}vC2e#U8e1&KC6@B0P4Y<-2A!eLJZ)Pr z9^+ej6gs?Yg4SIB33>Ze<~VnFcJemocgCAQpH6bN84n{uZ<|AJXXdRCycL4CngE)dc@WbMREHfWzxvYzTU!;ajol%CE!zS^U+upZ*sI&t4P& diff --git a/anylink/doc/screenshot/system.jpg b/anylink/doc/screenshot/system.jpg deleted file mode 100644 index 70274f27976f7249d10a109a196e1cb5d9b4285b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50378 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

  • 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μtsNWP1YA>=Km5`sLi&1B$9bBaY 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 diff --git a/anylink/doc/screenshot/wxpay.png b/anylink/doc/screenshot/wxpay.png deleted file mode 100644 index f473173320edf66995582c9a1db6292053a92c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138423 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 aorh}Pf2G|Il}sZ6E=@H()jDOni2nh1*qG1& diff --git a/anylink/docker/Dockerfile b/anylink/docker/Dockerfile deleted file mode 100644 index b240e3c..0000000 --- a/anylink/docker/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM ubuntu:18.04 -WORKDIR / -COPY docker_entrypoint.sh docker_entrypoint.sh -RUN mkdir /anylink && apt update && apt install -y wget iptables tar iproute2 -ENTRYPOINT ["/docker_entrypoint.sh"] -#CMD ["/anylink/anylink","-conf=/anylink/conf/server.toml"] diff --git a/anylink/docker/docker_entrypoint.sh b/anylink/docker/docker_entrypoint.sh deleted file mode 100644 index 1ddfe54..0000000 --- a/anylink/docker/docker_entrypoint.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -USER="admin" -MM=$(pwgen -1s) -CREATE_USER=1 -CONFIG_FILE='/app/conf/server.toml' - -if [ $CREATE_USER -eq 1 ]; then - if [ ! -e $CREATE_USER ]; then - MM=$(pwgen -1s) - touch $CREATE_USER - bash /app/generate-certs.sh - cd /app/conf/ && cp *.crt /usr/local/share/ca-certificates/ - update-ca-certificates --fresh - userpass=$(/app/anylink -passwd "${MM}"| cut -d : -f2) - echo "${userpass}" - jwttoken=$(/app/anylink -secret | cut -d : -f2) - echo "-- First container startup --user:${USER} pwd:${MM}" - sed -i "s/admin/${USER}/g" /app/server-example.toml - sed -i "s/123456/${MM}/g" /app/server-example.toml - sed -i "s#usertoken#${userpass}#g" /app/server-example.toml - sed -i "s/jwttoken/${jwttoken}/g" /app/server-example.toml - else - echo "-- Not first container startup --" - fi - -else - echo "user switch not create" - -fi - -if [ ! -f $CONFIG_FILE ]; then -echo "#####Generating configuration file#####" -cp /app/server-example.toml /app/conf/server.toml -else - echo "#####Configuration file already exists#####" -fi - -rtaddr=$(grep "cidr" /app/conf/server.toml |awk -F \" '{print $2}') -sysctl -w net.ipv4.ip_forward=1 -iptables -t nat -A POSTROUTING -s "${rtaddr}" -o eth0+ -j MASQUERADE -/app/anylink -conf="/app/conf/server.toml" diff --git a/anylink/docker/docker_entrypoint_fix.sh b/anylink/docker/docker_entrypoint_fix.sh deleted file mode 100644 index 7ddf805..0000000 --- a/anylink/docker/docker_entrypoint_fix.sh +++ /dev/null @@ -1,37 +0,0 @@ -#! /bin/bash -version=(`wget -qO- -t1 -T2 "https://api.github.com/repos/bjdgyc/anylink/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g'`) -count=(`ls anylink | wc -w `) -wget https://github.com/bjdgyc/anylink/releases/download/${version}/anylink-deploy.tar.gz -tar xf anylink-deploy.tar.gz -rm -rf anylink-deploy.tar.gz -if [ ${count} -eq 0 ]; then - echo "init anylink" - mv anylink-deploy/* anylink/ -else - if [ ! -d "/anylink/log" ]; then - mv anylink-deploy/log anylink/ - fi - if [ ! -d "/anylink/conf" ]; then - mv anylink-deploy/conf anylink/ - fi - echo "update anylink" - rm -rf anylink/ui anylink/anylink anylink/files - mv anylink-deploy/ui anylink/ - mv anylink-deploy/anylink anylink/ - mv anylink-deploy/files anylink/ -fi -rm -rf anylink-deploy -sysctl -w net.ipv4.ip_forward=1 -if [[ ${mode} == pro ]];then - iptables -t nat -A POSTROUTING -s ${iproute} -o eth0 -j MASQUERADE - iptables -L -n -t nat - /anylink/anylink -conf=/anylink/conf/server.toml -elif [[ ${mode} == password ]];then - if [ -z ${password} ];then - echo "invalid password" - else - /anylink/anylink -passwd ${password} - fi -elif [[ ${mode} -eq jwt ]];then - /anylink/anylink -secret -fi \ No newline at end of file diff --git a/anylink/docker/generate-certs.sh b/anylink/docker/generate-certs.sh deleted file mode 100644 index 24ed85d..0000000 --- a/anylink/docker/generate-certs.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -mkdir -p /ssl - -OUTPUT_FILENAME="vpn.xx.com" - -printf "[req] -prompt = no -default_bits = 4096 -default_md = sha256 -encrypt_key = no -string_mask = utf8only - -distinguished_name = cert_distinguished_name -req_extensions = req_x509v3_extensions -x509_extensions = req_x509v3_extensions - -[ cert_distinguished_name ] -C = CN -ST = BJ -L = BJ -O = xx.com -OU = xx.com -CN = xx.com - -[req_x509v3_extensions] -basicConstraints = critical,CA:true -subjectKeyIdentifier = hash -keyUsage = critical,digitalSignature,keyCertSign,cRLSign #,keyEncipherment -extendedKeyUsage = critical,serverAuth #, clientAuth -subjectAltName = @alt_names - -[alt_names] -DNS.1 = xx.com -DNS.2 = *.xx.com - -">/ssl/${OUTPUT_FILENAME}.conf - -openssl req -x509 -newkey rsa:2048 -keyout /ssl/test_vpn_key.pem -out /ssl/test_vpn_cert.pem \ --days 3600 -nodes -config /ssl/${OUTPUT_FILENAME}.conf - diff --git a/anylink/docker_entrypoint.sh b/anylink/docker_entrypoint.sh index ea23118..3a7c5b3 100644 --- a/anylink/docker_entrypoint.sh +++ b/anylink/docker_entrypoint.sh @@ -15,8 +15,8 @@ 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 -t nat -A POSTROUTING -s "${IPV4_CIDR}" -o eth0+ -j MASQUERADE + #iptables -nL -t nat exec /app/anylink "$@" ;; diff --git a/anylink/server/admin/api_cert.go b/anylink/server/admin/api_cert.go new file mode 100644 index 0000000..664bbfd --- /dev/null +++ b/anylink/server/admin/api_cert.go @@ -0,0 +1,99 @@ +package admin + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "os" + + "github.com/bjdgyc/anylink/base" + "github.com/bjdgyc/anylink/dbdata" +) + +func CustomCert(w http.ResponseWriter, r *http.Request) { + cert, _, err := r.FormFile("cert") + if err != nil { + RespError(w, RespInternalErr, err) + return + } + key, _, err := r.FormFile("key") + if err != nil { + RespError(w, RespInternalErr, err) + return + } + certFile, err := os.OpenFile(base.Cfg.CertFile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600) + if err != nil { + RespError(w, RespInternalErr, err) + return + } + defer certFile.Close() + if _, err := io.Copy(certFile, cert); err != nil { + RespError(w, RespInternalErr, err) + return + } + keyFile, err := os.OpenFile(base.Cfg.CertKey, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600) + if err != nil { + RespError(w, RespInternalErr, err) + return + } + defer keyFile.Close() + if _, err := io.Copy(keyFile, key); err != nil { + RespError(w, RespInternalErr, err) + return + } + if tlscert, _, err := dbdata.ParseCert(); err != nil { + RespError(w, RespInternalErr, fmt.Sprintf("证书不合法,请重新上传:%v", err)) + return + } else { + dbdata.LoadCertificate(tlscert) + } + RespSucess(w, "上传成功") +} +func GetCertSetting(w http.ResponseWriter, r *http.Request) { + sess := dbdata.GetXdb().NewSession() + defer sess.Close() + data := &dbdata.SettingLetsEncrypt{} + if err := dbdata.SettingGet(data); err != nil { + dbdata.SettingSessAdd(sess, data) + RespError(w, RespInternalErr, err) + } + userData := &dbdata.LegoUserData{} + if err := dbdata.SettingGet(userData); err != nil { + dbdata.SettingSessAdd(sess, userData) + } + RespSucess(w, data) +} +func CreatCert(w http.ResponseWriter, r *http.Request) { + if err := r.ParseForm(); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + body, err := io.ReadAll(r.Body) + if err != nil { + RespError(w, RespInternalErr, err) + return + } + defer r.Body.Close() + config := &dbdata.SettingLetsEncrypt{} + if err := json.Unmarshal(body, config); err != nil { + RespError(w, RespInternalErr, err) + return + } + if err := dbdata.SettingSet(config); err != nil { + RespError(w, RespInternalErr, err) + return + } + client := dbdata.LeGoClient{} + if err := client.NewClient(config); err != nil { + base.Error(err) + RespError(w, RespInternalErr, fmt.Sprintf("获取证书失败:%v", err)) + return + } + if err := client.GetCert(config.Domain); err != nil { + base.Error(err) + RespError(w, RespInternalErr, fmt.Sprintf("获取证书失败:%v", err)) + return + } + RespSucess(w, "生成证书成功") +} diff --git a/anylink/server/admin/api_group.go b/anylink/server/admin/api_group.go index f5975c1..44522a9 100644 --- a/anylink/server/admin/api_group.go +++ b/anylink/server/admin/api_group.go @@ -2,7 +2,7 @@ package admin import ( "encoding/json" - "io/ioutil" + "io" "net/http" "strconv" @@ -79,7 +79,7 @@ func GroupDetail(w http.ResponseWriter, r *http.Request) { } func GroupSet(w http.ResponseWriter, r *http.Request) { - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { RespError(w, RespInternalErr, err) return @@ -118,3 +118,30 @@ func GroupDel(w http.ResponseWriter, r *http.Request) { } RespSucess(w, nil) } + +func GroupAuthLogin(w http.ResponseWriter, r *http.Request) { + type AuthLoginData struct { + Name string `json:"name"` + Pwd string `json:"pwd"` + Auth map[string]interface{} `json:"auth"` + } + + body, err := io.ReadAll(r.Body) + if err != nil { + RespError(w, RespInternalErr, err) + return + } + defer r.Body.Close() + v := &AuthLoginData{} + err = json.Unmarshal(body, &v) + if err != nil { + RespError(w, RespInternalErr, err) + return + } + err = dbdata.GroupAuthLogin(v.Name, v.Pwd, v.Auth) + if err != nil { + RespError(w, RespInternalErr, err) + return + } + RespSucess(w, "ok") +} diff --git a/anylink/server/admin/api_ip_map.go b/anylink/server/admin/api_ip_map.go index 49aeb85..a7a9aba 100644 --- a/anylink/server/admin/api_ip_map.go +++ b/anylink/server/admin/api_ip_map.go @@ -2,7 +2,7 @@ package admin import ( "encoding/json" - "io/ioutil" + "io" "net/http" "strconv" @@ -59,7 +59,7 @@ func UserIpMapDetail(w http.ResponseWriter, r *http.Request) { func UserIpMapSet(w http.ResponseWriter, r *http.Request) { _ = r.ParseForm() - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { RespError(w, RespInternalErr, err) return @@ -80,6 +80,8 @@ func UserIpMapSet(w http.ResponseWriter, r *http.Request) { return } + // sessdata.IpAllSet(v) + RespSucess(w, nil) } @@ -93,11 +95,20 @@ func UserIpMapDel(w http.ResponseWriter, r *http.Request) { return } - data := dbdata.IpMap{Id: id} - err := dbdata.Del(&data) + var data dbdata.IpMap + err := dbdata.One("Id", id, &data) if err != nil { RespError(w, RespInternalErr, err) return } + + err = dbdata.Del(&data) + if err != nil { + RespError(w, RespInternalErr, err) + return + } + + // sessdata.IpAllDel(&data) + RespSucess(w, nil) } diff --git a/anylink/server/admin/api_other.go b/anylink/server/admin/api_other.go index 557b27a..6f12da2 100644 --- a/anylink/server/admin/api_other.go +++ b/anylink/server/admin/api_other.go @@ -3,10 +3,11 @@ package admin import ( "encoding/json" "errors" - "io/ioutil" + "io" "net/http" "regexp" + "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/dbdata" ) @@ -25,7 +26,7 @@ func setOtherGet(data interface{}, w http.ResponseWriter) { } func setOtherEdit(data interface{}, w http.ResponseWriter, r *http.Request) { - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { RespError(w, RespInternalErr, err) return @@ -82,11 +83,12 @@ func SetOtherAuditLog(w http.ResponseWriter, r *http.Request) { RespError(w, RespInternalErr, err) return } + data.AuditInterval = base.Cfg.AuditInterval RespSucess(w, data) } func SetOtherAuditLogEdit(w http.ResponseWriter, r *http.Request) { - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { RespError(w, RespInternalErr, err) return diff --git a/anylink/server/admin/api_policy.go b/anylink/server/admin/api_policy.go index a4934c9..2adc512 100644 --- a/anylink/server/admin/api_policy.go +++ b/anylink/server/admin/api_policy.go @@ -2,7 +2,7 @@ package admin import ( "encoding/json" - "io/ioutil" + "io" "net/http" "strconv" @@ -57,7 +57,7 @@ func PolicyDetail(w http.ResponseWriter, r *http.Request) { } func PolicySet(w http.ResponseWriter, r *http.Request) { - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { RespError(w, RespInternalErr, err) return diff --git a/anylink/server/admin/api_set_audit.go b/anylink/server/admin/api_set_audit.go index 872c7a6..1b423e8 100644 --- a/anylink/server/admin/api_set_audit.go +++ b/anylink/server/admin/api_set_audit.go @@ -51,3 +51,29 @@ func SetAuditExport(w http.ResponseWriter, r *http.Request) { gocsv.Marshal(datas, w) } + +func UserActLogList(w http.ResponseWriter, r *http.Request) { + _ = r.ParseForm() + pageS := r.FormValue("page") + page, _ := strconv.Atoi(pageS) + if page < 1 { + page = 1 + } + var datas []dbdata.UserActLog + session := dbdata.UserActLogIns.GetSession(r.Form) + count, err := dbdata.FindAndCount(session, &datas, dbdata.PageSize, page) + if err != nil && !dbdata.CheckErrNotFound(err) { + RespError(w, RespInternalErr, err) + return + } + data := map[string]interface{}{ + "count": count, + "page_size": dbdata.PageSize, + "datas": datas, + "statusOps": dbdata.UserActLogIns.GetStatusOpsWithTag(), + "osOps": dbdata.UserActLogIns.OsOps, + "clientOps": dbdata.UserActLogIns.ClientOps, + } + + RespSucess(w, data) +} diff --git a/anylink/server/admin/api_uploaduser.go b/anylink/server/admin/api_uploaduser.go new file mode 100644 index 0000000..43b4650 --- /dev/null +++ b/anylink/server/admin/api_uploaduser.go @@ -0,0 +1,114 @@ +package admin + +import ( + "fmt" + "io" + "net/http" + "os" + "strconv" + "strings" + "time" + + "github.com/bjdgyc/anylink/base" + "github.com/bjdgyc/anylink/dbdata" + "github.com/bjdgyc/anylink/pkg/utils" + mapset "github.com/deckarep/golang-set" + "github.com/spf13/cast" + "github.com/xuri/excelize/v2" +) + +func UserUpload(w http.ResponseWriter, r *http.Request) { + r.ParseMultipartForm(8 << 20) + file, header, err := r.FormFile("file") + if err != nil || !strings.Contains(header.Filename, ".xlsx") || !strings.Contains(header.Filename, ".xls") { + RespError(w, RespInternalErr, "文件解析失败:仅支持xlsx或xls文件") + return + } + defer file.Close() + newFile, err := os.Create(base.Cfg.FilesPath + header.Filename) + if err != nil { + RespError(w, RespInternalErr, "创建文件失败:", err) + return + } + defer newFile.Close() + io.Copy(newFile, file) + if err = UploadUser(newFile.Name()); err != nil { + RespError(w, RespInternalErr, err) + os.Remove(base.Cfg.FilesPath + header.Filename) + return + } + os.Remove(base.Cfg.FilesPath + header.Filename) + RespSucess(w, "批量添加成功") +} +func UploadUser(file string) error { + f, err := excelize.OpenFile(file) + if err != nil { + return err + } + defer func() { + if err := f.Close(); err != nil { + return + } + }() + rows, err := f.GetRows("Sheet1") + if err != nil { + return err + } + if rows[0][0] != "id" || rows[0][1] != "username" || rows[0][2] != "nickname" || rows[0][3] != "email" || rows[0][4] != "pin_code" || rows[0][5] != "limittime" || rows[0][6] != "otp_secret" || rows[0][7] != "disable_otp" || rows[0][8] != "groups" || rows[0][9] != "status" || rows[0][10] != "send_email" { + return fmt.Errorf("批量添加失败,表格格式不正确") + } + var k []interface{} + for _, v := range dbdata.GetGroupNames() { + k = append(k, v) + } + for index, row := range rows { + if index == 0 { + continue + } + id, _ := strconv.Atoi(row[0]) + if len(row[4]) < 6 { + row[4] = utils.RandomRunes(8) + } + limittime, _ := time.ParseInLocation("2006-01-02 15:04:05", row[5], time.Local) + disableOtp, _ := strconv.ParseBool(row[7]) + var group []string + if row[8] == "" { + return fmt.Errorf("第%d行数据错误,用户组不允许为空", index) + } + for _, v := range strings.Split(row[8], ",") { + if s := mapset.NewSetFromSlice(k); s.Contains(v) { + group = append(group, v) + } else { + return fmt.Errorf("用户组【%s】不存在,请检查第%d行数据", v, index) + } + } + status := cast.ToInt8(row[9]) + sendmail, _ := strconv.ParseBool(row[10]) + // createdAt, _ := time.ParseInLocation("2006-01-02 15:04:05", row[11], time.Local) + // updatedAt, _ := time.ParseInLocation("2006-01-02 15:04:05", row[12], time.Local) + user := &dbdata.User{ + Id: id, + Username: row[1], + Nickname: row[2], + Email: row[3], + PinCode: row[4], + LimitTime: &limittime, + OtpSecret: row[6], + DisableOtp: disableOtp, + Groups: group, + Status: status, + SendEmail: sendmail, + // CreatedAt: createdAt, + // UpdatedAt: updatedAt, + } + if err := dbdata.AddBatch(user); err != nil { + return fmt.Errorf("请检查第%d行数据是否导入有重复用户", index) + } + if user.SendEmail { + if err := userAccountMail(user); err != nil { + return err + } + } + } + return nil +} diff --git a/anylink/server/admin/api_user.go b/anylink/server/admin/api_user.go index 516d3ae..b93ea5d 100644 --- a/anylink/server/admin/api_user.go +++ b/anylink/server/admin/api_user.go @@ -5,7 +5,7 @@ import ( "encoding/base64" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/url" "strconv" @@ -80,7 +80,7 @@ func UserDetail(w http.ResponseWriter, r *http.Request) { func UserSet(w http.ResponseWriter, r *http.Request) { _ = r.ParseForm() - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { RespError(w, RespInternalErr, err) return @@ -107,7 +107,8 @@ func UserSet(w http.ResponseWriter, r *http.Request) { return } } - + //修改用户资料后执行过期用户检测 + sessdata.CloseUserLimittimeSession() RespSucess(w, nil) } @@ -132,33 +133,44 @@ func UserDel(w http.ResponseWriter, r *http.Request) { func UserOtpQr(w http.ResponseWriter, r *http.Request) { _ = r.ParseForm() - b64 := r.FormValue("b64") + b64S := r.FormValue("b64") idS := r.FormValue("id") id, _ := strconv.Atoi(idS) - var user dbdata.User - err := dbdata.One("Id", id, &user) + + var b64 bool + if b64S == "1" { + b64 = true + } + data, err := userOtpQr(id, b64) if err != nil { - RespError(w, RespInternalErr, err) - return + base.Error(err) + } + io.WriteString(w, data) +} + +func userOtpQr(uid int, b64 bool) (string, error) { + var user dbdata.User + err := dbdata.One("Id", uid, &user) + if err != nil { + return "", err } issuer := url.QueryEscape(base.Cfg.Issuer) qrstr := fmt.Sprintf("otpauth://totp/%s:%s?issuer=%s&secret=%s", issuer, user.Email, issuer, user.OtpSecret) qr, _ := qrcode.New(qrstr, qrcode.High) - if b64 == "1" { - data, _ := qr.PNG(300) - s := base64.StdEncoding.EncodeToString(data) - _, err = fmt.Fprint(w, s) + if b64 { + data, err := qr.PNG(300) if err != nil { - base.Error(err) + return "", err } - return - } - err = qr.Write(300, w) - if err != nil { - base.Error(err) + s := base64.StdEncoding.EncodeToString(data) + return s, nil } + + buf := bytes.NewBuffer(nil) + err = qr.Write(300, buf) + return buf.String(), err } // 在线用户 @@ -177,7 +189,7 @@ func UserOnline(w http.ResponseWriter, r *http.Request) { func UserOffline(w http.ResponseWriter, r *http.Request) { _ = r.ParseForm() token := r.FormValue("token") - sessdata.CloseSess(token) + sessdata.CloseSess(token, dbdata.UserLogoutAdmin) RespSucess(w, nil) } @@ -189,12 +201,13 @@ func UserReline(w http.ResponseWriter, r *http.Request) { } type userAccountMailData struct { - Issuer string - LinkAddr string - Group string - Username string - PinCode string - OtpImg string + Issuer string + LinkAddr string + Group string + Username string + PinCode string + OtpImg string + OtpImgBase64 string } func userAccountMail(user *dbdata.User) error { @@ -235,12 +248,15 @@ func userAccountMail(user *dbdata.User) error { return err } + otpData, _ := userOtpQr(user.Id, true) + data := userAccountMailData{ - LinkAddr: setting.LinkAddr, - Group: strings.Join(user.Groups, ","), - Username: user.Username, - PinCode: user.PinCode, - OtpImg: fmt.Sprintf("https://%s/otp_qr?id=%d&jwt=%s", setting.LinkAddr, user.Id, tokenString), + LinkAddr: setting.LinkAddr, + Group: strings.Join(user.Groups, ","), + Username: user.Username, + PinCode: user.PinCode, + OtpImg: fmt.Sprintf("https://%s/otp_qr?id=%d&jwt=%s", setting.LinkAddr, user.Id, tokenString), + OtpImgBase64: "data:image/png;base64," + otpData, } w := bytes.NewBufferString("") t, _ := template.New("auth_complete").Parse(htmlBody) diff --git a/anylink/server/admin/resp_test.go b/anylink/server/admin/resp_test.go index 4d3dd60..b4dbd53 100644 --- a/anylink/server/admin/resp_test.go +++ b/anylink/server/admin/resp_test.go @@ -2,7 +2,7 @@ package admin import ( "encoding/json" - "io/ioutil" + "io" "net/http/httptest" "testing" @@ -15,7 +15,7 @@ func TestRespSucess(t *testing.T) { RespSucess(w, "data") // fmt.Println(w) assert.Equal(w.Code, 200) - body, _ := ioutil.ReadAll(w.Body) + body, _ := io.ReadAll(w.Body) res := Resp{} err := json.Unmarshal(body, &res) assert.Nil(err) @@ -30,7 +30,7 @@ func TestRespError(t *testing.T) { RespError(w, 10, "err-msg") // fmt.Println(w) assert.Equal(w.Code, 200) - body, _ := ioutil.ReadAll(w.Body) + body, _ := io.ReadAll(w.Body) res := Resp{} err := json.Unmarshal(body, &res) assert.Nil(err) diff --git a/anylink/server/admin/server.go b/anylink/server/admin/server.go index d4939e0..3cabb99 100644 --- a/anylink/server/admin/server.go +++ b/anylink/server/admin/server.go @@ -9,6 +9,7 @@ import ( "github.com/arl/statsviz" "github.com/bjdgyc/anylink/base" + "github.com/bjdgyc/anylink/dbdata" "github.com/gorilla/handlers" "github.com/gorilla/mux" ) @@ -45,10 +46,15 @@ func StartAdmin() { r.HandleFunc("/set/other/audit_log/edit", SetOtherAuditLogEdit) r.HandleFunc("/set/audit/list", SetAuditList) r.HandleFunc("/set/audit/export", SetAuditExport) + r.HandleFunc("/set/audit/act_log_list", UserActLogList) + r.HandleFunc("/set/other/createcert", CreatCert) + r.HandleFunc("/set/other/getcertset", GetCertSetting) + r.HandleFunc("/set/other/customcert", CustomCert) r.HandleFunc("/user/list", UserList) r.HandleFunc("/user/detail", UserDetail) r.HandleFunc("/user/set", UserSet) + r.HandleFunc("/user/uploaduser", UserUpload).Methods(http.MethodPost) r.HandleFunc("/user/del", UserDel) r.HandleFunc("/user/online", UserOnline) r.HandleFunc("/user/offline", UserOffline) @@ -69,6 +75,7 @@ func StartAdmin() { r.HandleFunc("/group/detail", GroupDetail) r.HandleFunc("/group/set", GroupSet) r.HandleFunc("/group/del", GroupDel) + r.HandleFunc("/group/auth_login", GroupAuthLogin) r.HandleFunc("/statsinfo/list", StatsInfoList) @@ -93,18 +100,28 @@ func StartAdmin() { for _, s := range cipherSuites { selectedCipherSuites = append(selectedCipherSuites, s.ID) } + + if tlscert, _, err := dbdata.ParseCert(); err != nil { + base.Fatal("证书加载失败", err) + } else { + dbdata.LoadCertificate(tlscert) + } + // 设置tls信息 tlsConfig := &tls.Config{ NextProtos: []string{"http/1.1"}, MinVersion: tls.VersionTLS12, CipherSuites: selectedCipherSuites, + GetCertificate: func(chi *tls.ClientHelloInfo) (*tls.Certificate, error) { + return dbdata.GetCertificateBySNI(chi.ServerName) + }, } srv := &http.Server{ Addr: base.Cfg.AdminAddr, Handler: r, TLSConfig: tlsConfig, } - err := srv.ListenAndServeTLS(base.Cfg.CertFile, base.Cfg.CertKey) + err := srv.ListenAndServeTLS("", "") if err != nil { base.Fatal(err) } diff --git a/anylink/server/base/app_ver.go b/anylink/server/base/app_ver.go index 2666b77..93599e2 100644 --- a/anylink/server/base/app_ver.go +++ b/anylink/server/base/app_ver.go @@ -3,5 +3,5 @@ package base const ( APP_NAME = "AnyLink" // app版本号 - APP_VER = "0.9.1-beta1" + APP_VER = "0.9.3" ) diff --git a/anylink/server/base/cfg.go b/anylink/server/base/cfg.go index 3df1113..48d2de8 100644 --- a/anylink/server/base/cfg.go +++ b/anylink/server/base/cfg.go @@ -73,7 +73,12 @@ type ServerConfig struct { // AuthTimeout int `json:"auth_timeout"` // in seconds AuditInterval int `json:"audit_interval"` // in seconds - ShowSQL bool `json:"show_sql"` // bool + ShowSQL bool `json:"show_sql"` // bool + IptablesNat bool `json:"iptables_nat"` + Compression bool `json:"compression"` // bool + NoCompressLimit int `json:"no_compress_limit"` // int + + DisplayError bool `json:"display_error"` } func initServerCfg() { diff --git a/anylink/server/base/cmd.go b/anylink/server/base/cmd.go index 75d5f25..ca4d095 100644 --- a/anylink/server/base/cmd.go +++ b/anylink/server/base/cmd.go @@ -69,6 +69,11 @@ func initCmd() { Run: func(cmd *cobra.Command, args []string) { // fmt.Println("cmd:", cmd.Use, args) runSrv = true + + if rev { + printVersion() + os.Exit(0) + } }, } @@ -92,6 +97,7 @@ func initCmd() { // viper.SetDefault(v.Name, v.Value) } + rootCmd.Flags().BoolVarP(&rev, "version", "v", false, "display version info") rootCmd.AddCommand(initToolCmd()) cobra.OnInitialize(func() { @@ -127,8 +133,7 @@ func initToolCmd() *cobra.Command { toolCmd.Run = func(cmd *cobra.Command, args []string) { switch { case rev: - 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) + printVersion() case secret: s, _ := utils.RandSecret(40, 60) s = strings.Trim(s, "=") @@ -145,3 +150,8 @@ func initToolCmd() *cobra.Command { return toolCmd } + +func printVersion() { + 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) +} diff --git a/anylink/server/base/config.go b/anylink/server/base/config.go index 50f9e28..f237b18 100644 --- a/anylink/server/base/config.go +++ b/anylink/server/base/config.go @@ -24,7 +24,7 @@ var configs = []config{ {Typ: cfgStr, Name: "profile", Usage: "profile.xml file", ValStr: "./conf/profile.xml"}, {Typ: cfgStr, Name: "server_addr", Usage: "服务监听地址", ValStr: ":443"}, {Typ: cfgBool, Name: "server_dtls", Usage: "开启DTLS", ValBool: false}, - {Typ: cfgStr, Name: "server_dtls_addr", Usage: "DTLS监听地址", ValStr: ":4433"}, + {Typ: cfgStr, Name: "server_dtls_addr", Usage: "DTLS监听地址", ValStr: ":443"}, {Typ: cfgStr, Name: "admin_addr", Usage: "后台服务监听地址", ValStr: ":8800"}, {Typ: cfgBool, Name: "proxy_protocol", Usage: "TCP代理协议", ValBool: false}, {Typ: cfgStr, Name: "db_type", Usage: "数据库类型 [sqlite3 mysql postgres]", ValStr: "sqlite3"}, @@ -33,7 +33,7 @@ var configs = []config{ {Typ: cfgStr, Name: "cert_key", Usage: "证书密钥", ValStr: "./conf/vpn_cert.key"}, {Typ: cfgStr, Name: "files_path", Usage: "外部下载文件路径", ValStr: "./conf/files"}, {Typ: cfgStr, Name: "log_path", Usage: "日志文件路径,默认标准输出", ValStr: ""}, - {Typ: cfgStr, Name: "log_level", Usage: "日志等级 [debug info warn error]", ValStr: "info"}, + {Typ: cfgStr, Name: "log_level", Usage: "日志等级 [debug info warn error]", ValStr: "debug"}, {Typ: cfgBool, Name: "pprof", Usage: "开启pprof", ValBool: false}, {Typ: cfgStr, Name: "issuer", Usage: "系统名称", ValStr: "XX公司VPN"}, {Typ: cfgStr, Name: "admin_user", Usage: "管理用户名", ValStr: "admin"}, @@ -41,26 +41,31 @@ var configs = []config{ {Typ: cfgStr, Name: "jwt_secret", Usage: "JWT密钥", ValStr: defaultJwt}, {Typ: cfgStr, Name: "link_mode", Usage: "虚拟网络类型[tun tap macvtap ipvtap]", ValStr: "tun"}, {Typ: cfgStr, Name: "ipv4_master", Usage: "ipv4主网卡名称", ValStr: "eth0"}, - {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"}, - {Typ: cfgStr, Name: "ipv4_start", Usage: "IPV4开始地址", ValStr: "192.168.10.100"}, - {Typ: cfgStr, Name: "ipv4_end", Usage: "IPV4结束", ValStr: "192.168.10.200"}, + {Typ: cfgStr, Name: "ipv4_cidr", Usage: "ip地址网段", ValStr: "192.168.90.0/24"}, + {Typ: cfgStr, Name: "ipv4_gateway", Usage: "ipv4_gateway", ValStr: "192.168.90.1"}, + {Typ: cfgStr, Name: "ipv4_start", Usage: "IPV4开始地址", ValStr: "192.168.90.100"}, + {Typ: cfgStr, Name: "ipv4_end", Usage: "IPV4结束", ValStr: "192.168.90.200"}, {Typ: cfgStr, Name: "default_group", Usage: "默认用户组", ValStr: "one"}, {Typ: cfgStr, Name: "default_domain", Usage: "要发布的默认域", ValStr: ""}, - {Typ: cfgInt, Name: "ip_lease", Usage: "IP租期(秒)", ValInt: 1209600}, - {Typ: cfgInt, Name: "max_client", Usage: "最大用户连接", ValInt: 100}, + {Typ: cfgInt, Name: "ip_lease", Usage: "IP租期(秒)", ValInt: 86400}, + {Typ: cfgInt, Name: "max_client", Usage: "最大用户连接", ValInt: 200}, {Typ: cfgInt, Name: "max_user_client", Usage: "最大单用户连接", ValInt: 3}, - {Typ: cfgInt, Name: "cstp_keepalive", Usage: "keepalive时间(秒)", ValInt: 20}, - {Typ: cfgInt, Name: "cstp_dpd", Usage: "死链接检测时间(秒)", ValInt: 30}, - {Typ: cfgInt, Name: "mobile_keepalive", Usage: "移动端keepalive接检测时间(秒)", ValInt: 50}, - {Typ: cfgInt, Name: "mobile_dpd", Usage: "移动端死链接检测时间(秒)", ValInt: 60}, + {Typ: cfgInt, Name: "cstp_keepalive", Usage: "keepalive时间(秒)", ValInt: 4}, + {Typ: cfgInt, Name: "cstp_dpd", Usage: "死链接检测时间(秒)", ValInt: 10}, + {Typ: cfgInt, Name: "mobile_keepalive", Usage: "移动端keepalive接检测时间(秒)", ValInt: 7}, + {Typ: cfgInt, Name: "mobile_dpd", Usage: "移动端死链接检测时间(秒)", ValInt: 15}, {Typ: cfgInt, Name: "mtu", Usage: "最大传输单元MTU", ValInt: 1460}, - {Typ: cfgInt, Name: "session_timeout", Usage: "session过期时间(秒)", ValInt: 3600}, + {Typ: cfgInt, Name: "session_timeout", Usage: "session过期时间(秒)-用于断线重连,0永不过期", ValInt: 3600}, // {Typ: cfgInt, Name: "auth_timeout", Usage: "auth_timeout", ValInt: 0}, {Typ: cfgInt, Name: "audit_interval", Usage: "审计去重间隔(秒),-1关闭", ValInt: -1}, {Typ: cfgBool, Name: "show_sql", Usage: "显示sql语句,用于调试", ValBool: false}, + {Typ: cfgBool, Name: "iptables_nat", Usage: "是否自动添加NAT", ValBool: true}, + {Typ: cfgBool, Name: "compression", Usage: "启用压缩", ValBool: false}, + {Typ: cfgInt, Name: "no_compress_limit", Usage: "低于及等于多少字节不压缩", ValInt: 256}, + + {Typ: cfgBool, Name: "display_error", Usage: "客户端显示详细错误信息(线上环境慎开启)", ValBool: false}, } var envs = map[string]string{} diff --git a/anylink/server/base/log.go b/anylink/server/base/log.go index 36bb927..debb283 100644 --- a/anylink/server/base/log.go +++ b/anylink/server/base/log.go @@ -10,11 +10,12 @@ import ( ) const ( - _Debug = iota - _Info - _Warn - _Error - _Fatal + LogLevelTrace = iota + LogLevelDebug + LogLevelInfo + LogLevelWarn + LogLevelError + LogLevelFatal ) var ( @@ -87,15 +88,20 @@ func GetBaseLog() *log.Logger { return baseLog } +func GetLogLevel() int { + return baseLevel +} + func logLevel2Int(l string) int { levels = map[int]string{ - _Debug: "Debug", - _Info: "Info", - _Warn: "Warn", - _Error: "Error", - _Fatal: "Fatal", + LogLevelTrace: "Trace", + LogLevelDebug: "Debug", + LogLevelInfo: "Info", + LogLevelWarn: "Warn", + LogLevelError: "Error", + LogLevelFatal: "Fatal", } - lvl := _Info + lvl := LogLevelInfo for k, v := range levels { if strings.EqualFold(strings.ToLower(l), strings.ToLower(v)) { lvl = k @@ -109,8 +115,16 @@ func output(l int, s ...interface{}) { _ = baseLog.Output(3, lvl+fmt.Sprintln(s...)) } +func Trace(v ...interface{}) { + l := LogLevelTrace + if baseLevel > l { + return + } + output(l, v...) +} + func Debug(v ...interface{}) { - l := _Debug + l := LogLevelDebug if baseLevel > l { return } @@ -118,7 +132,7 @@ func Debug(v ...interface{}) { } func Info(v ...interface{}) { - l := _Info + l := LogLevelInfo if baseLevel > l { return } @@ -126,7 +140,7 @@ func Info(v ...interface{}) { } func Warn(v ...interface{}) { - l := _Warn + l := LogLevelWarn if baseLevel > l { return } @@ -134,7 +148,7 @@ func Warn(v ...interface{}) { } func Error(v ...interface{}) { - l := _Error + l := LogLevelError if baseLevel > l { return } @@ -142,7 +156,7 @@ func Error(v ...interface{}) { } func Fatal(v ...interface{}) { - l := _Fatal + l := LogLevelFatal if baseLevel > l { return } diff --git a/anylink/server/conf/server-sample.toml b/anylink/server/conf/server-sample.toml index 785e901..d83bf5a 100644 --- a/anylink/server/conf/server-sample.toml +++ b/anylink/server/conf/server-sample.toml @@ -30,7 +30,7 @@ jwt_secret = "abcdef.0123456789.abcdef" server_addr = ":443" #开启 DTLS, 默认关闭 server_dtls = false -server_dtls_addr = ":4433" +server_dtls_addr = ":443" #后台服务监听地址 admin_addr = ":8800" #开启tcp proxy protocol协议 @@ -40,26 +40,26 @@ link_mode = "tun" #客户端分配的ip地址池 ipv4_master = "eth0" -ipv4_cidr = "192.168.10.0/24" -ipv4_gateway = "192.168.10.1" -ipv4_start = "192.168.10.100" -ipv4_end = "192.168.10.200" +ipv4_cidr = "192.168.90.0/24" +ipv4_gateway = "192.168.90.1" +ipv4_start = "192.168.90.100" +ipv4_end = "192.168.90.200" #最大客户端数量 max_client = 100 #单个用户同时在线数量 max_user_client = 3 #IP租期(秒) -ip_lease = 1209600 +ip_lease = 86400 #默认选择的组 default_group = "one" #客户端失效检测时间(秒) dpd > keepalive -cstp_keepalive = 20 -cstp_dpd = 30 -mobile_keepalive = 40 -mobile_dpd = 50 +cstp_keepalive = 6 +cstp_dpd = 10 +mobile_keepalive = 15 +mobile_dpd = 20 #设置最大传输单元 mtu = 1460 @@ -75,5 +75,15 @@ audit_interval = -1 show_sql = false +#是否自动添加nat +iptables_nat = true + +#启用压缩 +compression = false +#低于及等于多少字节不压缩 +no_compress_limit = 256 + +#客户端显示详细错误信息(线上环境慎开启) +display_error = false diff --git a/anylink/server/conf/server.toml b/anylink/server/conf/server.toml index e246b10..b46aa1a 100644 --- a/anylink/server/conf/server.toml +++ b/anylink/server/conf/server.toml @@ -26,5 +26,18 @@ server_addr = ":443" admin_addr = ":8800" +#客户端分配的ip地址池 +ipv4_master = "eth0" +ipv4_cidr = "192.168.90.0/24" +ipv4_gateway = "192.168.90.1" +ipv4_start = "192.168.90.100" +ipv4_end = "192.168.90.200" + +#是否自动添加nat +iptables_nat = true + + +#客户端显示详细错误信息(线上环境慎开启) +display_error = false diff --git a/anylink/server/conf/vpn_cert.crt b/anylink/server/conf/vpn_cert.crt index e2e701b..04f451e 100644 --- a/anylink/server/conf/vpn_cert.crt +++ b/anylink/server/conf/vpn_cert.crt @@ -1,36 +1,36 @@ -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh diff --git a/anylink/server/conf/vpn_cert.key b/anylink/server/conf/vpn_cert.key index 6026ff9..8f5e285 100644 --- a/anylink/server/conf/vpn_cert.key +++ b/anylink/server/conf/vpn_cert.key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/anylink/server/cron/clear_statsinfo.go b/anylink/server/cron/clear_statsinfo.go index 11ecbd3..75a7b0b 100644 --- a/anylink/server/cron/clear_statsinfo.go +++ b/anylink/server/cron/clear_statsinfo.go @@ -43,10 +43,5 @@ func getTimeAgo(days int) string { ts := time.Now().AddDate(0, 0, -days) tsZero := time.Date(ts.Year(), ts.Month(), ts.Day(), 0, 0, 0, 0, time.Local) timeS = tsZero.Format(dbdata.LayoutTimeFormat) - // UTC - switch base.Cfg.DbType { - case "sqlite3", "postgres": - timeS = tsZero.UTC().Format(dbdata.LayoutTimeFormat) - } return timeS } diff --git a/anylink/server/cron/clear_user_act_log.go b/anylink/server/cron/clear_user_act_log.go new file mode 100644 index 0000000..b407d8c --- /dev/null +++ b/anylink/server/cron/clear_user_act_log.go @@ -0,0 +1,20 @@ +package cron + +import ( + "github.com/bjdgyc/anylink/base" + "github.com/bjdgyc/anylink/dbdata" +) + +// 清除用户活动日志 +func ClearUserActLog() { + lifeDay, timesUp := isClearTime() + if !timesUp { + return + } + // 当审计日志永久保存时,则退出 + if lifeDay <= 0 { + return + } + affected, err := dbdata.UserActLogIns.ClearUserActLog(getTimeAgo(lifeDay)) + base.Info("Cron ClearUserActLog: ", affected, err) +} diff --git a/anylink/server/cron/start.go b/anylink/server/cron/start.go index 2692cfe..a2ff4c2 100644 --- a/anylink/server/cron/start.go +++ b/anylink/server/cron/start.go @@ -3,6 +3,8 @@ package cron import ( "time" + "github.com/bjdgyc/anylink/dbdata" + "github.com/bjdgyc/anylink/sessdata" "github.com/go-co-op/gocron" ) @@ -10,5 +12,8 @@ func Start() { s := gocron.NewScheduler(time.Local) s.Cron("0 * * * *").Do(ClearAudit) s.Cron("0 * * * *").Do(ClearStatsInfo) + s.Cron("0 * * * *").Do(ClearUserActLog) + s.Every(1).Day().At("00:00").Do(sessdata.CloseUserLimittimeSession) + s.Every(1).Day().At("00:00").Do(dbdata.ReNewCert) s.StartAsync() } diff --git a/anylink/server/dbdata/audit.go b/anylink/server/dbdata/audit.go index d54f315..603b061 100644 --- a/anylink/server/dbdata/audit.go +++ b/anylink/server/dbdata/audit.go @@ -14,6 +14,7 @@ type SearchCon struct { AccessProto string `json:"access_proto"` Date []string `json:"date"` Info string `json:"info"` + Sort int `json:"sort"` } func GetAuditSession(search string) *xorm.Session { @@ -47,6 +48,11 @@ func GetAuditSession(search string) *xorm.Session { if searchData.Info != "" { session.And("info LIKE ?", "%"+searchData.Info+"%") } + if searchData.Sort == 1 { + session.OrderBy("id desc") + } else { + session.OrderBy("id asc") + } return session } diff --git a/anylink/server/dbdata/audit_test.go b/anylink/server/dbdata/audit_test.go index a2ca9aa..02a3b6b 100644 --- a/anylink/server/dbdata/audit_test.go +++ b/anylink/server/dbdata/audit_test.go @@ -15,7 +15,7 @@ func TestSearchAudit(t *testing.T) { defer closeIpdata() currDateVal := "2022-07-24 00:00:00" - CreatedAt, _ := time.Parse("2006-01-02 15:04:05", currDateVal) + CreatedAt, _ := time.ParseInLocation("2006-01-02 15:04:05", currDateVal, time.Local) dataTest := AccessAudit{ Username: "Test", diff --git a/anylink/server/dbdata/cert.go b/anylink/server/dbdata/cert.go new file mode 100644 index 0000000..b9e93af --- /dev/null +++ b/anylink/server/dbdata/cert.go @@ -0,0 +1,412 @@ +package dbdata + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "errors" + "fmt" + "math/big" + "net" + "os" + "strings" + "sync" + "time" + + "github.com/pion/dtls/v2/pkg/crypto/selfsign" + + "github.com/bjdgyc/anylink/base" + "github.com/go-acme/lego/v4/certcrypto" + "github.com/go-acme/lego/v4/certificate" + "github.com/go-acme/lego/v4/challenge" + "github.com/go-acme/lego/v4/challenge/dns01" + "github.com/go-acme/lego/v4/lego" + "github.com/go-acme/lego/v4/providers/dns/alidns" + "github.com/go-acme/lego/v4/providers/dns/cloudflare" + "github.com/go-acme/lego/v4/providers/dns/tencentcloud" + "github.com/go-acme/lego/v4/registration" +) + +var ( + // nameToCertificate mutex + ntcMux sync.RWMutex + nameToCertificate = make(map[string]*tls.Certificate) + tempCert *tls.Certificate +) + +func init() { + c, _ := selfsign.GenerateSelfSignedWithDNS("localhost") + tempCert = &c +} + +type SettingLetsEncrypt struct { + Domain string `json:"domain"` + Legomail string `json:"legomail"` + Name string `json:"name"` + Renew bool `json:"renew"` + DNSProvider +} + +type DNSProvider struct { + AliYun struct { + APIKey string `json:"apiKey"` + SecretKey string `json:"secretKey"` + } `json:"aliyun"` + + TXCloud struct { + SecretID string `json:"secretId"` + SecretKey string `json:"secretKey"` + } `json:"txcloud"` + CfCloud struct { + AuthEmail string `json:"authEmail"` + AuthKey string `json:"authKey"` + } `json:"cfcloud"` +} +type LegoUserData struct { + Email string `json:"email"` + Registration *registration.Resource `json:"registration"` + Key []byte `json:"key"` +} +type LegoUser struct { + Email string + Registration *registration.Resource + Key *ecdsa.PrivateKey +} + +type LeGoClient struct { + mutex sync.Mutex + Client *lego.Client + Cert *certificate.Resource + LegoUserData +} + +func GetDNSProvider(l *SettingLetsEncrypt) (Provider challenge.Provider, err error) { + switch l.Name { + case "aliyun": + if Provider, err = alidns.NewDNSProviderConfig(&alidns.Config{APIKey: l.DNSProvider.AliYun.APIKey, SecretKey: l.DNSProvider.AliYun.SecretKey, TTL: 600}); err != nil { + return + } + case "txcloud": + if Provider, err = tencentcloud.NewDNSProviderConfig(&tencentcloud.Config{SecretID: l.DNSProvider.TXCloud.SecretID, SecretKey: l.DNSProvider.TXCloud.SecretKey, TTL: 600}); err != nil { + return + } + case "cloudflare": + if Provider, err = cloudflare.NewDNSProviderConfig(&cloudflare.Config{AuthEmail: l.DNSProvider.CfCloud.AuthEmail, AuthKey: l.DNSProvider.CfCloud.AuthKey, TTL: 600}); err != nil { + return + } + } + return +} +func (u *LegoUser) GetEmail() string { + return u.Email +} +func (u LegoUser) GetRegistration() *registration.Resource { + return u.Registration +} +func (u *LegoUser) GetPrivateKey() crypto.PrivateKey { + return u.Key +} + +func (l *LegoUserData) SaveUserData(u *LegoUser) error { + key, err := x509.MarshalECPrivateKey(u.Key) + if err != nil { + return err + } + l.Email = u.Email + l.Registration = u.Registration + l.Key = key + if err := SettingSet(l); err != nil { + return err + } + return nil +} + +func (l *LegoUserData) GetUserData(d *SettingLetsEncrypt) (*LegoUser, error) { + if err := SettingGet(l); err != nil { + return nil, err + } + if l.Email != "" { + key, err := x509.ParseECPrivateKey(l.Key) + if err != nil { + return nil, err + } + return &LegoUser{ + Email: l.Email, + Registration: l.Registration, + Key: key, + }, nil + } + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return nil, err + } + return &LegoUser{ + Email: d.Legomail, + Key: privateKey, + }, nil +} +func ReNewCert() { + _, certtime, err := ParseCert() + if err != nil { + base.Error(err) + return + } + if certtime.AddDate(0, 0, -7).Before(time.Now()) { + config := &SettingLetsEncrypt{} + if err := SettingGet(config); err != nil { + base.Error(err) + return + } + if config.Renew { + client := &LeGoClient{} + if err := client.NewClient(config); err != nil { + base.Error(err) + return + } + if err := client.RenewCert(base.Cfg.CertFile, base.Cfg.CertKey); err != nil { + base.Error(err) + return + } + base.Info("证书续期成功") + } + } else { + base.Info(fmt.Sprintf("证书过期时间:%s", certtime.Local().Format("2006-1-2 15:04:05"))) + } +} + +func (c *LeGoClient) NewClient(l *SettingLetsEncrypt) error { + c.mutex.Lock() + defer c.mutex.Unlock() + legouser, err := c.GetUserData(l) + if err != nil { + return err + } + config := lego.NewConfig(legouser) + config.CADirURL = lego.LEDirectoryProduction + config.Certificate.KeyType = certcrypto.RSA2048 + + client, err := lego.NewClient(config) + if err != nil { + return err + } + Provider, err := GetDNSProvider(l) + if err != nil { + return err + } + if err := client.Challenge.SetDNS01Provider(Provider, dns01.AddRecursiveNameservers([]string{"114.114.114.114", "114.114.115.115"})); err != nil { + return err + } + if legouser.Registration == nil { + reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true}) + if err != nil { + return err + } + legouser.Registration = reg + c.SaveUserData(legouser) + } + c.Client = client + return nil +} + +func (c *LeGoClient) GetCert(domain string) error { + // 申请证书 + certificates, err := c.Client.Certificate.Obtain( + certificate.ObtainRequest{ + Domains: []string{domain}, + Bundle: true, + }) + if err != nil { + return err + } + c.Cert = certificates + // 保存证书 + if err := c.SaveCert(); err != nil { + return err + } + return nil +} + +func (c *LeGoClient) RenewCert(certFile, keyFile string) error { + cert, err := os.ReadFile(certFile) + if err != nil { + return err + } + key, err := os.ReadFile(keyFile) + if err != nil { + return err + } + // 续期证书 + renewcert, err := c.Client.Certificate.Renew(certificate.Resource{ + Certificate: cert, + PrivateKey: key, + }, true, false, "") + if err != nil { + return err + } + c.Cert = renewcert + // 保存更新证书 + if err := c.SaveCert(); err != nil { + return err + } + return nil +} + +func (c *LeGoClient) SaveCert() error { + err := os.WriteFile(base.Cfg.CertFile, c.Cert.Certificate, 0600) + if err != nil { + return err + } + err = os.WriteFile(base.Cfg.CertKey, c.Cert.PrivateKey, 0600) + if err != nil { + return err + } + if tlscert, _, err := ParseCert(); err != nil { + return err + } else { + LoadCertificate(tlscert) + } + return nil +} + +func ParseCert() (*tls.Certificate, *time.Time, error) { + _, errCert := os.Stat(base.Cfg.CertFile) + _, errKey := os.Stat(base.Cfg.CertKey) + if os.IsNotExist(errCert) || os.IsNotExist(errKey) { + err := PrivateCert() + if err != nil { + return nil, nil, err + } + } + cert, err := tls.LoadX509KeyPair(base.Cfg.CertFile, base.Cfg.CertKey) + if err != nil || errors.Is(err, os.ErrNotExist) { + PrivateCert() + return nil, nil, err + } + parseCert, err := x509.ParseCertificate(cert.Certificate[0]) + if err != nil { + return nil, nil, err + } + return &cert, &parseCert.NotAfter, nil +} + +func PrivateCert() error { + // 创建一个RSA密钥对 + priv, _ := rsa.GenerateKey(rand.Reader, 2048) + pub := &priv.PublicKey + + // 生成一个自签名证书 + template := x509.Certificate{ + SerialNumber: big.NewInt(1658), + Subject: pkix.Name{CommonName: "localhost"}, + NotBefore: time.Now(), + NotAfter: time.Now().Add(time.Hour * 24 * 365), + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + IPAddresses: []net.IP{}, + } + + derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, pub, priv) + if err != nil { + return err + } + + // 将证书编码为PEM格式并将其写入文件 + certOut, _ := os.OpenFile(base.Cfg.CertFile, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600) + pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}) + certOut.Close() + + // 将私钥编码为PEM格式并将其写入文件 + keyOut, _ := os.OpenFile(base.Cfg.CertKey, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) + pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}) + keyOut.Close() + cert, err := tls.LoadX509KeyPair(base.Cfg.CertFile, base.Cfg.CertKey) + if err != nil { + return err + } + LoadCertificate(&cert) + return nil +} + +func getTempCertificate() (*tls.Certificate, error) { + var err error + var cert tls.Certificate + if tempCert == nil { + cert, err = selfsign.GenerateSelfSignedWithDNS("localhost") + tempCert = &cert + } + return tempCert, err +} + +func GetCertificateBySNI(commonName string) (*tls.Certificate, error) { + ntcMux.RLock() + defer ntcMux.RUnlock() + + // Copy from tls.Config getCertificate() + name := strings.ToLower(commonName) + if cert, ok := nameToCertificate[name]; ok { + return cert, nil + } + if len(name) > 0 { + labels := strings.Split(name, ".") + labels[0] = "*" + wildcardName := strings.Join(labels, ".") + if cert, ok := nameToCertificate[wildcardName]; ok { + return cert, nil + } + } + // TODO 默认证书 兼容不支持 SNI 的客户端 + if cert, ok := nameToCertificate["default"]; ok { + return cert, nil + } + + return getTempCertificate() +} + +func LoadCertificate(cert *tls.Certificate) { + buildNameToCertificate(cert) +} + +// Copy from tls.Config BuildNameToCertificate() +func buildNameToCertificate(cert *tls.Certificate) { + ntcMux.Lock() + defer ntcMux.Unlock() + + // TODO 设置默认证书 + nameToCertificate["default"] = cert + + x509Cert, err := x509.ParseCertificate(cert.Certificate[0]) + if err != nil { + return + } + startTime := x509Cert.NotBefore.String() + expiredTime := x509Cert.NotAfter.String() + if x509Cert.Subject.CommonName != "" && len(x509Cert.DNSNames) == 0 { + commonName := x509Cert.Subject.CommonName + fmt.Printf("┏ Load Certificate: %s\n", commonName) + fmt.Printf("┠╌╌ Start Time: %s\n", startTime) + fmt.Printf("┖╌╌ Expired Time: %s\n", expiredTime) + nameToCertificate[commonName] = cert + } + for _, san := range x509Cert.DNSNames { + fmt.Printf("┏ Load Certificate: %s\n", san) + fmt.Printf("┠╌╌ Start Time: %s\n", startTime) + fmt.Printf("┖╌╌ Expired Time: %s\n", expiredTime) + nameToCertificate[san] = cert + } +} + +// func Scrypt(passwd string) string { +// salt := []byte{0xc8, 0x28, 0xf2, 0x58, 0xa7, 0x6a, 0xad, 0x7b} +// hashPasswd, err := scrypt.Key([]byte(passwd), salt, 1<<15, 8, 1, 32) +// if err != nil { +// return err.Error() +// } +// return base64.StdEncoding.EncodeToString(hashPasswd) +// } diff --git a/anylink/server/dbdata/db.go b/anylink/server/dbdata/db.go index 64f1ecc..293e9b8 100644 --- a/anylink/server/dbdata/db.go +++ b/anylink/server/dbdata/db.go @@ -1,6 +1,8 @@ package dbdata import ( + "time" + "github.com/bjdgyc/anylink/base" _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" @@ -19,6 +21,9 @@ func GetXdb() *xorm.Engine { func initDb() { var err error xdb, err = xorm.NewEngine(base.Cfg.DbType, base.Cfg.DbSource) + // 初始化xorm时区 + xdb.DatabaseTZ = time.Local + xdb.TZLocation = time.Local if err != nil { base.Fatal(err) } @@ -28,7 +33,7 @@ func initDb() { } // 初始化数据库 - err = xdb.Sync2(&User{}, &Setting{}, &Group{}, &IpMap{}, &AccessAudit{}, &Policy{}, &StatsNetwork{}, &StatsCpu{}, &StatsMem{}, &StatsOnline{}) + err = xdb.Sync2(&User{}, &Setting{}, &Group{}, &IpMap{}, &AccessAudit{}, &Policy{}, &StatsNetwork{}, &StatsCpu{}, &StatsMem{}, &StatsOnline{}, &UserActLog{}) if err != nil { base.Fatal(err) } @@ -94,6 +99,36 @@ func addInitData() error { return err } + // SettingDnsProvider + provider := &SettingLetsEncrypt{ + Domain: "vpn.xxx.com", + Legomail: "legomail", + Name: "aliyun", + Renew: false, + DNSProvider: DNSProvider{ + AliYun: struct { + APIKey string `json:"apiKey"` + SecretKey string `json:"secretKey"` + }{APIKey: "", SecretKey: ""}, + TXCloud: struct { + SecretID string `json:"secretId"` + SecretKey string `json:"secretKey"` + }{SecretID: "", SecretKey: ""}, + CfCloud: struct { + AuthEmail string `json:"authEmail"` + AuthKey string `json:"authKey"` + }{AuthEmail: "", AuthKey: ""}}, + } + err = SettingSessAdd(sess, provider) + if err != nil { + return err + } + // LegoUser + legouser := &LegoUserData{} + err = SettingSessAdd(sess, legouser) + if err != nil { + return err + } // SettingOther other := &SettingOther{ LinkAddr: "vpn.xx.com", @@ -123,6 +158,7 @@ func addInitData() error { AllowLan: true, ClientDns: []ValData{{Val: "114.114.114.114"}}, RouteInclude: []ValData{{Val: All}}, + Status: 1, } err = SetGroup(&g1) if err != nil { @@ -143,8 +179,12 @@ const accountMail = `

    您好:

    用户组: {{.Group}}
    用户名: {{.Username}}
    用户PIN码: {{.PinCode}}
    + + 用户动态码(请妥善保存):
    +

    使用说明: diff --git a/anylink/server/dbdata/group.go b/anylink/server/dbdata/group.go index ee66ac0..e664aeb 100644 --- a/anylink/server/dbdata/group.go +++ b/anylink/server/dbdata/group.go @@ -74,6 +74,20 @@ func GetGroupNames() []string { return names } +func GetGroupNamesNormal() []string { + var datas []Group + err := FindWhere(&datas, 0, 0, "status=1") + if err != nil { + base.Error(err) + return nil + } + var names []string + for _, v := range datas { + names = append(names, v.Name) + } + return names +} + func GetGroupNamesIds() []GroupNameId { var datas []Group err := Find(&datas, 0, 0) @@ -211,6 +225,21 @@ func SetGroup(g *Group) error { return err } +func GroupAuthLogin(name, pwd string, authData map[string]interface{}) error { + g := &Group{Auth: authData} + authType := g.Auth["type"].(string) + if _, ok := authRegistry[authType]; !ok { + return errors.New("未知的认证方式: " + authType) + } + auth := makeInstance(authType).(IUserAuth) + err := auth.checkData(g.Auth) + if err != nil { + return err + } + err = auth.checkUser(name, pwd, g) + return err +} + func parseIpNet(s string) (string, *net.IPNet, error) { ip, ipNet, err := net.ParseCIDR(s) if err != nil { diff --git a/anylink/server/dbdata/group_test.go b/anylink/server/dbdata/group_test.go index b4b26f9..0d64c86 100644 --- a/anylink/server/dbdata/group_test.go +++ b/anylink/server/dbdata/group_test.go @@ -46,13 +46,14 @@ func TestGetGroupNames(t *testing.T) { authData = map[string]interface{}{ "type": "ldap", "ldap": map[string]interface{}{ - "addr": "192.168.8.12:389", - "tls": true, - "bind_name": "userfind@abc.com", - "bind_pwd": "afdbfdsafds", - "base_dn": "dc=abc,dc=com", - "search_attr": "sAMAccountName", - "member_of": "cn=vpn,cn=user,dc=abc,dc=com", + "addr": "192.168.8.12:389", + "tls": true, + "bind_name": "userfind@abc.com", + "bind_pwd": "afdbfdsafds", + "base_dn": "dc=abc,dc=com", + "object_class": "person", + "search_attr": "sAMAccountName", + "member_of": "cn=vpn,cn=user,dc=abc,dc=com", }, } g7 := Group{Name: "g7", ClientDns: []ValData{{Val: "114.114.114.114"}}, Auth: authData} diff --git a/anylink/server/dbdata/ip_map.go b/anylink/server/dbdata/ip_map.go index 98c955a..e9474dc 100644 --- a/anylink/server/dbdata/ip_map.go +++ b/anylink/server/dbdata/ip_map.go @@ -2,20 +2,22 @@ package dbdata import ( "errors" + "net" "time" ) -// type IpMap struct { -// Id int `json:"id" xorm:"pk autoincr not null"` -// IpAddr string `json:"ip_addr" xorm:"not null unique"` -// MacAddr string `json:"mac_addr" xorm:"not null unique"` -// Username string `json:"username"` -// Keep bool `json:"keep"` // 保留 ip-mac 绑定 -// KeepTime time.Time `json:"keep_time"` -// Note string `json:"note"` // 备注 -// LastLogin time.Time `json:"last_login"` -// UpdatedAt time.Time `json:"updated_at"` -// } +type IpMap struct { + Id int `json:"id" xorm:"pk autoincr not null"` + IpAddr string `json:"ip_addr" xorm:"varchar(32) not null unique"` + MacAddr string `json:"mac_addr" xorm:"varchar(32) not null unique"` + UniqueMac bool `json:"unique_mac" xorm:"Bool index"` + Username string `json:"username" xorm:"varchar(60)"` + Keep bool `json:"keep" xorm:"Bool"` // 保留 ip-mac 绑定 + KeepTime time.Time `json:"keep_time" xorm:"DateTime"` + Note string `json:"note" xorm:"varchar(255)"` // 备注 + LastLogin time.Time `json:"last_login" xorm:"DateTime"` + UpdatedAt time.Time `json:"updated_at" xorm:"DateTime updated"` +} func SetIpMap(v *IpMap) error { var err error @@ -24,6 +26,13 @@ func SetIpMap(v *IpMap) error { return errors.New("IP或MAC错误") } + macHw, err := net.ParseMAC(v.MacAddr) + if err != nil { + return errors.New("MAC错误") + } + // 统一macAddr的格式 + v.MacAddr = macHw.String() + v.UpdatedAt = time.Now() if v.Id > 0 { err = Set(v) diff --git a/anylink/server/dbdata/setting.go b/anylink/server/dbdata/setting.go index 964cb72..c7e0a36 100644 --- a/anylink/server/dbdata/setting.go +++ b/anylink/server/dbdata/setting.go @@ -21,8 +21,9 @@ type SettingSmtp struct { } type SettingAuditLog struct { - LifeDay int `json:"life_day"` - ClearTime string `json:"clear_time"` + AuditInterval int `json:"audit_interval"` + LifeDay int `json:"life_day"` + ClearTime string `json:"clear_time"` } type SettingOther struct { @@ -48,7 +49,6 @@ func SettingSessAdd(sess *xorm.Session, data interface{}) error { v, _ := json.Marshal(data) s := &Setting{Name: name, Data: v} _, err := sess.InsertOne(s) - return err } diff --git a/anylink/server/dbdata/statsinfo.go b/anylink/server/dbdata/statsinfo.go index cef60be..0ec53e4 100644 --- a/anylink/server/dbdata/statsinfo.go +++ b/anylink/server/dbdata/statsinfo.go @@ -199,12 +199,6 @@ func (s *StatsInfo) getScopeDetail(scope string) (sd *ScopeDetail) { } sd.fsTime = sd.sTime.Format(LayoutTimeFormat) sd.feTime = sd.eTime.Format(LayoutTimeFormat) - // UTC - switch base.Cfg.DbType { - case "sqlite3", "postgres": - sd.fsTime = sd.sTime.UTC().Format(LayoutTimeFormat) - sd.feTime = sd.eTime.UTC().Format(LayoutTimeFormat) - } return } diff --git a/anylink/server/dbdata/tables.go b/anylink/server/dbdata/tables.go index e0da7e0..b70e45a 100644 --- a/anylink/server/dbdata/tables.go +++ b/anylink/server/dbdata/tables.go @@ -29,26 +29,31 @@ type User struct { Nickname string `json:"nickname" xorm:"varchar(255)"` Email string `json:"email" xorm:"varchar(255)"` // Password string `json:"password"` - PinCode string `json:"pin_code" xorm:"varchar(32)"` - OtpSecret string `json:"otp_secret" xorm:"varchar(255)"` - DisableOtp bool `json:"disable_otp" xorm:"Bool"` // 禁用otp - Groups []string `json:"groups" xorm:"Text"` - Status int8 `json:"status" xorm:"Int"` // 1正常 - SendEmail bool `json:"send_email" xorm:"Bool"` - CreatedAt time.Time `json:"created_at" xorm:"DateTime created"` - UpdatedAt time.Time `json:"updated_at" xorm:"DateTime updated"` + PinCode string `json:"pin_code" xorm:"varchar(32)"` + LimitTime *time.Time `json:"limittime,omitempty" xorm:"Datetime limittime"` // 值为null时,前端不显示 + OtpSecret string `json:"otp_secret" xorm:"varchar(255)"` + DisableOtp bool `json:"disable_otp" xorm:"Bool"` // 禁用otp + Groups []string `json:"groups" xorm:"Text"` + Status int8 `json:"status" xorm:"Int"` // 1正常 + SendEmail bool `json:"send_email" xorm:"Bool"` + CreatedAt time.Time `json:"created_at" xorm:"DateTime created"` + UpdatedAt time.Time `json:"updated_at" xorm:"DateTime updated"` } -type IpMap struct { - Id int `json:"id" xorm:"pk autoincr not null"` - IpAddr string `json:"ip_addr" xorm:"varchar(32) not null unique"` - MacAddr string `json:"mac_addr" xorm:"varchar(32) not null unique"` - Username string `json:"username" xorm:"varchar(60)"` - Keep bool `json:"keep" xorm:"Bool"` // 保留 ip-mac 绑定 - KeepTime time.Time `json:"keep_time" xorm:"DateTime"` - Note string `json:"note" xorm:"varchar(255)"` // 备注 - LastLogin time.Time `json:"last_login" xorm:"DateTime"` - UpdatedAt time.Time `json:"updated_at" xorm:"DateTime updated"` +type UserActLog struct { + Id int `json:"id" xorm:"pk autoincr not null"` + Username string `json:"username" xorm:"varchar(60)"` + GroupName string `json:"group_name" xorm:"varchar(60)"` + IpAddr string `json:"ip_addr" xorm:"varchar(32)"` + RemoteAddr string `json:"remote_addr" xorm:"varchar(32)"` + Os uint8 `json:"os" xorm:"not null default 0 Int"` + Client uint8 `json:"client" xorm:"not null default 0 Int"` + Version string `json:"version" xorm:"varchar(15)"` + DeviceType string `json:"device_type" xorm:"varchar(128) not null default ''"` + PlatformVersion string `json:"platform_version" xorm:"varchar(128) not null default ''"` + Status uint8 `json:"status" xorm:"not null default 0 Int"` + Info string `json:"info" xorm:"varchar(255) not null default ''"` // 详情 + CreatedAt time.Time `json:"created_at" xorm:"DateTime created"` } type Setting struct { diff --git a/anylink/server/dbdata/user.go b/anylink/server/dbdata/user.go index 7834013..e05ab4d 100644 --- a/anylink/server/dbdata/user.go +++ b/anylink/server/dbdata/user.go @@ -104,7 +104,12 @@ func checkLocalUser(name, pwd, group string) error { v := &User{} err := One("Username", name, v) if err != nil || v.Status != 1 { - return fmt.Errorf("%s %s", name, "用户名错误") + switch v.Status { + case 0: + return fmt.Errorf("%s %s", name, "用户不存在或用户已停用") + case 2: + return fmt.Errorf("%s %s", name, "用户已过期") + } } // 判断用户组信息 if !utils.InArrStr(v.Groups, group) { @@ -128,6 +133,21 @@ func checkLocalUser(name, pwd, group string) error { return nil } +// 用户过期时间到达后,更新用户状态,并返回一个状态为过期的用户切片 +func CheckUserlimittime() (limitUser []interface{}) { + if _, err := xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(&User{Status: 2}); err != nil { + return + } + user := make(map[int64]User) + if err := xdb.Where("status != ?", 1).Find(user); err != nil { + return + } + for _, v := range user { + limitUser = append(limitUser, v.Username) + } + return +} + var ( userOtpMux = sync.Mutex{} userOtp = map[string]time.Time{} diff --git a/anylink/server/dbdata/user_act_log.go b/anylink/server/dbdata/user_act_log.go new file mode 100644 index 0000000..ac9c506 --- /dev/null +++ b/anylink/server/dbdata/user_act_log.go @@ -0,0 +1,210 @@ +package dbdata + +import ( + "net/url" + "regexp" + "strings" + + "github.com/bjdgyc/anylink/base" + "github.com/ivpusic/grpool" + "github.com/spf13/cast" + "xorm.io/xorm" +) + +const ( + UserAuthFail = 0 // 认证失败 + UserAuthSuccess = 1 // 认证成功 + UserConnected = 2 // 连线成功 + UserLogout = 3 // 用户登出 + UserLogoutLose = 0 // 用户掉线 + UserLogoutBanner = 1 // 用户banner弹窗取消 + UserLogoutClient = 2 // 用户主动登出 + UserLogoutTimeout = 3 // 用户超时登出 + UserLogoutAdmin = 4 // 账号被管理员踢下线 + UserLogoutExpire = 5 // 账号过期被踢下线 +) + +type UserActLogProcess struct { + Pool *grpool.Pool + StatusOps []string + OsOps []string + ClientOps []string + InfoOps []string +} + +var ( + UserActLogIns = &UserActLogProcess{ + Pool: grpool.NewPool(1, 100), + StatusOps: []string{ // 操作类型 + UserAuthFail: "认证失败", + UserAuthSuccess: "认证成功", + UserConnected: "连接成功", + UserLogout: "用户登出", + }, + OsOps: []string{ // 操作系统 + 0: "Unknown", + 1: "Windows", + 2: "macOS", + 3: "Linux", + 4: "Android", + 5: "iOS", + }, + ClientOps: []string{ // 客户端 + 0: "Unknown", + 1: "AnyConnect", + 2: "OpenConnect", + 3: "AnyLink", + }, + InfoOps: []string{ // 信息 + UserLogoutLose: "用户掉线", + UserLogoutBanner: "用户取消弹窗/客户端发起的logout", + UserLogoutClient: "用户/客户端主动断开", + UserLogoutTimeout: "Session过期被踢下线", + UserLogoutAdmin: "账号被管理员踢下线", + UserLogoutExpire: "账号过期被踢下线", + }, + } +) + +// 异步写入用户操作日志 +func (ua *UserActLogProcess) Add(u UserActLog, userAgent string) { + // os, client, ver + os_idx, client_idx, ver := ua.ParseUserAgent(userAgent) + u.Os = os_idx + u.Client = client_idx + u.Version = ver + u.RemoteAddr = strings.Split(u.RemoteAddr, ":")[0] + // remove extra characters + infoSlice := strings.Split(u.Info, " ") + infoLen := len(infoSlice) + if infoLen > 1 { + if u.Username == infoSlice[0] { + u.Info = strings.Join(infoSlice[1:], " ") + } + // delete - char + if infoLen > 2 && infoSlice[1] == "-" { + u.Info = u.Info[2:] + } + } + // limit the max length of char + u.Version = substr(u.Version, 0, 15) + u.DeviceType = substr(u.DeviceType, 0, 128) + u.PlatformVersion = substr(u.PlatformVersion, 0, 128) + u.Info = substr(u.Info, 0, 255) + + UserActLogIns.Pool.JobQueue <- func() { + err := Add(u) + if err != nil { + base.Error("Add UserActLog error: ", err) + } + } +} + +// 转义操作类型, 方便vue显示 +func (ua *UserActLogProcess) GetStatusOpsWithTag() interface{} { + type StatusTag struct { + Key int `json:"key"` + Value string `json:"value"` + Tag string `json:"tag"` + } + var res []StatusTag + for k, v := range ua.StatusOps { + tag := "info" + switch k { + case UserAuthFail: + tag = "danger" + case UserAuthSuccess: + tag = "success" + case UserConnected: + tag = "" + } + res = append(res, StatusTag{k, v, tag}) + } + return res +} + +func (ua *UserActLogProcess) GetInfoOpsById(id uint8) string { + return ua.InfoOps[id] +} + +// 解析user agent +func (ua *UserActLogProcess) ParseUserAgent(userAgent string) (os_idx, client_idx uint8, ver string) { + // Unknown + if len(userAgent) == 0 { + return 0, 0, "" + } + // OS + os_idx = 0 + if strings.Contains(userAgent, "windows") { + os_idx = 1 + } else if strings.Contains(userAgent, "mac os") || strings.Contains(userAgent, "darwin_i386") { + os_idx = 2 + } else if strings.Contains(userAgent, "darwin_arm") || strings.Contains(userAgent, "apple") { + os_idx = 5 + } else if strings.Contains(userAgent, "android") { + os_idx = 4 + } else if strings.Contains(userAgent, "linux") { + os_idx = 3 + } + // Client + client_idx = 0 + if strings.Contains(userAgent, "anyconnect") { + client_idx = 1 + } else if strings.Contains(userAgent, "openconnect") { + client_idx = 2 + } else if strings.Contains(userAgent, "anylink") { + client_idx = 3 + } + // Version + uaSlice := strings.Split(userAgent, " ") + ver = uaSlice[len(uaSlice)-1] + if ver[0] == 'v' { + ver = ver[1:] + } + if !regexp.MustCompile(`^(\d+\.?)+$`).MatchString(ver) { + ver = "" + } + return +} + +// 清除用户操作日志 +func (ua *UserActLogProcess) ClearUserActLog(ts string) (int64, error) { + affected, err := xdb.Where("created_at < '" + ts + "'").Delete(&UserActLog{}) + return affected, err +} + +// 后台筛选用户操作日志 +func (ua *UserActLogProcess) GetSession(values url.Values) *xorm.Session { + session := xdb.Where("1=1") + if values.Get("username") != "" { + session.And("username = ?", values.Get("username")) + } + if values.Get("sdate") != "" { + session.And("created_at >= ?", values.Get("sdate")+" 00:00:00'") + } + if values.Get("edate") != "" { + session.And("created_at <= ?", values.Get("edate")+" 23:59:59'") + } + if values.Get("status") != "" { + session.And("status = ?", cast.ToUint8(values.Get("status"))-1) + } + if values.Get("os") != "" { + session.And("os = ?", cast.ToUint8(values.Get("os"))-1) + } + if values.Get("sort") == "1" { + session.OrderBy("id desc") + } else { + session.OrderBy("id asc") + } + return session +} + +// 截取字符串 +func substr(s string, pos, length int) string { + runes := []rune(s) + l := pos + length + if l > len(runes) { + l = len(runes) + } + return string(runes[pos:l]) +} diff --git a/anylink/server/dbdata/user_act_log_test.go b/anylink/server/dbdata/user_act_log_test.go new file mode 100644 index 0000000..1e2b25f --- /dev/null +++ b/anylink/server/dbdata/user_act_log_test.go @@ -0,0 +1,82 @@ +package dbdata + +import "testing" + +func TestParseUserAgent(t *testing.T) { + type args struct { + userAgent string + } + type res struct { + os_idx uint8 + client_idx uint8 + ver string + } + tests := []struct { + name string + args args + want res + }{ + { + name: "mac os 1", + args: args{userAgent: "cisco anyconnect vpn agent for mac os x 4.10.05085"}, + want: res{os_idx: 2, client_idx: 1, ver: "4.10.05085"}, + }, + { + name: "mac os 2", + args: args{userAgent: "anyconnect darwin_i386 4.10.05085"}, + want: res{os_idx: 2, client_idx: 1, ver: "4.10.05085"}, + }, + { + name: "windows", + args: args{userAgent: "cisco anyconnect vpn agent for windows 4.8.02042"}, + want: res{os_idx: 1, client_idx: 1, ver: "4.8.02042"}, + }, + { + name: "iPad", + args: args{userAgent: "anyconnect applesslvpn_darwin_arm (ipad) 4.10.04060"}, + want: res{os_idx: 5, client_idx: 1, ver: "4.10.04060"}, + }, + { + name: "iPhone", + args: args{userAgent: "cisco anyconnect vpn agent for apple iphone 4.10.04060"}, + want: res{os_idx: 5, client_idx: 1, ver: "4.10.04060"}, + }, + { + name: "android", + args: args{userAgent: "anyconnect android 4.10.05096"}, + want: res{os_idx: 4, client_idx: 1, ver: "4.10.05096"}, + }, + { + name: "linux", + args: args{userAgent: "cisco anyconnect vpn agent for linux v7.08"}, + want: res{os_idx: 3, client_idx: 1, ver: "7.08"}, + }, + { + name: "openconnect", + args: args{userAgent: "openconnect-gui 1.5.3 v7.08"}, + want: res{os_idx: 0, client_idx: 2, ver: "7.08"}, + }, + { + name: "unknown", + args: args{userAgent: "unknown 1.4.3 aabcd"}, + want: res{os_idx: 0, client_idx: 0, ver: ""}, + }, + { + name: "unknown 2", + args: args{userAgent: ""}, + want: res{os_idx: 0, client_idx: 0, ver: ""}, + }, + { + name: "anylink", + args: args{userAgent: "anylink vpn agent for linux v1.0"}, + want: res{os_idx: 3, client_idx: 3, ver: "1.0"}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if os_idx, client_idx, ver := UserActLogIns.ParseUserAgent(tt.args.userAgent); os_idx != tt.want.os_idx || client_idx != tt.want.client_idx || ver != tt.want.ver { + t.Errorf("ParseUserAgent() = %v, %v, %v, want %v, %v, %v", os_idx, client_idx, ver, tt.want.os_idx, tt.want.client_idx, tt.want.ver) + } + }) + } +} diff --git a/anylink/server/dbdata/user_test.go b/anylink/server/dbdata/user_test.go index d9f3a69..fea4735 100644 --- a/anylink/server/dbdata/user_test.go +++ b/anylink/server/dbdata/user_test.go @@ -70,13 +70,14 @@ func TestCheckUser(t *testing.T) { authData = map[string]interface{}{ "type": "ldap", "ldap": map[string]interface{}{ - "addr": "192.168.8.12:389", - "tls": true, - "bind_name": "userfind@abc.com", - "bind_pwd": "afdbfdsafds", - "base_dn": "dc=abc,dc=com", - "search_attr": "sAMAccountName", - "member_of": "cn=vpn,cn=user,dc=abc,dc=com", + "addr": "192.168.8.12:389", + "tls": true, + "bind_name": "userfind@abc.com", + "bind_pwd": "afdbfdsafds", + "base_dn": "dc=abc,dc=com", + "object_class": "person", + "search_attr": "sAMAccountName", + "member_of": "cn=vpn,cn=user,dc=abc,dc=com", }, } g3 := Group{Name: group3, Status: 1, ClientDns: dns, RouteInclude: route, Auth: authData} diff --git a/anylink/server/dbdata/userauth_ldap.go b/anylink/server/dbdata/userauth_ldap.go index 1ade05f..e7a5f1a 100644 --- a/anylink/server/dbdata/userauth_ldap.go +++ b/anylink/server/dbdata/userauth_ldap.go @@ -8,19 +8,21 @@ import ( "net" "reflect" "regexp" + "strconv" "time" "github.com/go-ldap/ldap" ) type AuthLdap struct { - Addr string `json:"addr"` - Tls bool `json:"tls"` - BindName string `json:"bind_name"` - BindPwd string `json:"bind_pwd"` - BaseDn string `json:"base_dn"` - SearchAttr string `json:"search_attr"` - MemberOf string `json:"member_of"` + Addr string `json:"addr"` + Tls bool `json:"tls"` + BindName string `json:"bind_name"` + BindPwd string `json:"bind_pwd"` + BaseDn string `json:"base_dn"` + ObjectClass string `json:"object_class"` + SearchAttr string `json:"search_attr"` + MemberOf string `json:"member_of"` } func init() { @@ -39,7 +41,7 @@ func (auth AuthLdap) checkData(authData map[string]interface{}) error { return errors.New("LDAP的服务器地址(含端口)填写有误") } if auth.BindName == "" { - return errors.New("LDAP的管理员账号不能为空") + return errors.New("LDAP的管理员 DN不能为空") } if auth.BindPwd == "" { return errors.New("LDAP的管理员密码不能为空") @@ -47,6 +49,9 @@ func (auth AuthLdap) checkData(authData map[string]interface{}) error { if auth.BaseDn == "" || !ValidateDN(auth.BaseDn) { return errors.New("LDAP的Base DN填写有误") } + if auth.ObjectClass == "" { + return errors.New("LDAP的用户对象类填写有误") + } if auth.SearchAttr == "" { return errors.New("LDAP的用户唯一ID不能为空") } @@ -93,9 +98,12 @@ func (auth AuthLdap) checkUser(name, pwd string, g *Group) error { } err = l.Bind(auth.BindName, auth.BindPwd) if err != nil { - return fmt.Errorf("%s LDAP 管理员账号或密码填写有误 %s", name, err.Error()) + return fmt.Errorf("%s LDAP 管理员 DN或密码填写有误 %s", name, err.Error()) } - filterAttr := "(objectClass=person)" + if auth.ObjectClass == "" { + auth.ObjectClass = "person" + } + filterAttr := "(objectClass=" + auth.ObjectClass + ")" filterAttr += "(" + auth.SearchAttr + "=" + name + ")" if auth.MemberOf != "" { filterAttr += "(memberOf:=" + auth.MemberOf + ")" @@ -117,6 +125,10 @@ func (auth AuthLdap) checkUser(name, pwd string, g *Group) error { } return fmt.Errorf("LDAP发现 %s 用户,存在多个账号", name) } + err = parseEntries(sr) + if err != nil { + return fmt.Errorf("LDAP %s 用户 %s", name, err.Error()) + } userDN := sr.Entries[0].DN err = l.Bind(userDN, pwd) if err != nil { @@ -125,6 +137,32 @@ func (auth AuthLdap) checkUser(name, pwd string, g *Group) error { return nil } +func parseEntries(sr *ldap.SearchResult) error { + for _, attr := range sr.Entries[0].Attributes { + switch attr.Name { + case "shadowExpire": + // -1 启用, 1 停用, >1 从1970-01-01至到期日的天数 + val, _ := strconv.ParseInt(attr.Values[0], 10, 64) + if val == -1 { + return nil + } + if val == 1 { + return fmt.Errorf("账号已停用") + } + if val > 1 { + expireTime := time.Unix(val*86400, 0) + t := time.Date(expireTime.Year(), expireTime.Month(), expireTime.Day(), 23, 59, 59, 0, time.Local) + if t.Before(time.Now()) { + return fmt.Errorf("账号已过期(过期日期: %s)", t.Format("2006-01-02")) + } + return nil + } + return fmt.Errorf("账号shadowExpire值异常: %d", val) + } + } + return nil +} + func ValidateDomainPort(addr string) bool { re := regexp.MustCompile(`^([a-zA-Z0-9][-a-zA-Z0-9]{0,62}\.)+[A-Za-z]{2,18}\:([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5])$`) return re.MatchString(addr) diff --git a/anylink/server/go.mod b/anylink/server/go.mod index acc9e92..ac5cd6c 100644 --- a/anylink/server/go.mod +++ b/anylink/server/go.mod @@ -1,75 +1,104 @@ module github.com/bjdgyc/anylink -go 1.18 +go 1.19 require ( github.com/arl/statsviz v0.5.1 + github.com/deckarep/golang-set v1.8.0 + github.com/go-acme/lego/v4 v4.10.2 github.com/go-co-op/gocron v1.17.0 github.com/go-ldap/ldap v3.0.3+incompatible github.com/go-sql-driver/mysql v1.6.0 github.com/gocarina/gocsv v0.0.0-20220712153207-8b2118da4570 - github.com/golang-jwt/jwt/v4 v4.0.0 + github.com/golang-jwt/jwt/v4 v4.2.0 github.com/google/gopacket v1.1.19 github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 github.com/ivpusic/grpool v1.0.0 + github.com/lanrenwo/lzsgo v0.0.2 github.com/lib/pq v1.10.2 - github.com/mattn/go-sqlite3 v1.14.8 + github.com/mattn/go-sqlite3 v1.14.9 github.com/orcaman/concurrent-map v1.0.0 - github.com/pion/dtls/v2 v2.1.5 + github.com/pion/dtls/v2 v2.2.6 github.com/pion/logging v0.2.2 + github.com/pires/go-proxyproto v0.6.2 github.com/shirou/gopsutil v3.21.7+incompatible github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/songgao/packets v0.0.0-20160404182456-549a10cd4091 github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 + github.com/spf13/cast v1.3.1 github.com/spf13/cobra v1.2.1 github.com/spf13/viper v1.8.1 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.1 github.com/xhit/go-simple-mail/v2 v2.10.0 github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119 + github.com/xuri/excelize/v2 v2.6.1 go.uber.org/atomic v1.10.0 - golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f - golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 - golang.org/x/text v0.3.7 - golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac + golang.org/x/crypto v0.5.0 + golang.org/x/net v0.7.0 + golang.org/x/text v0.7.0 + golang.org/x/time v0.3.0 layeh.com/radius v0.0.0-20210819152912-ad72663a72ab - xorm.io/xorm v1.2.2 + xorm.io/xorm v1.3.2 +) + +require ( + github.com/aliyun/alibaba-cloud-sdk-go v1.61.1755 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/cloudflare/cloudflare-go v0.49.0 // indirect + github.com/felixge/httpsnoop v1.0.1 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.1 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/miekg/dns v1.1.50 // indirect + github.com/pion/transport/v2 v2.0.2 // indirect + github.com/pion/udp/v2 v2.0.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.490 // indirect + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.490 // indirect + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/tools v0.1.12 // indirect ) require ( github.com/StackExchange/wmi v1.2.1 // indirect + github.com/coreos/go-iptables v0.6.0 github.com/davecgh/go-spew v1.1.1 // indirect - github.com/felixge/httpsnoop v1.0.1 // indirect - github.com/fsnotify/fsnotify v1.4.9 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-ole/go-ole v1.2.5 // indirect - github.com/goccy/go-json v0.7.4 // indirect - github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db // indirect + github.com/goccy/go-json v0.8.1 // indirect + github.com/golang/snappy v0.0.4 // indirect github.com/gorilla/websocket v1.4.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect - github.com/json-iterator/go v1.1.11 // indirect + github.com/json-iterator/go v1.1.12 // indirect github.com/magiconair/properties v1.8.5 // indirect - github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/pelletier/go-toml v1.9.3 // indirect - github.com/pion/transport v0.13.0 // indirect - github.com/pion/udp v0.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.3 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/spf13/afero v1.6.0 // indirect - github.com/spf13/cast v1.3.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.2.0 // indirect github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tklauser/go-sysconf v0.3.7 // indirect github.com/tklauser/numcpus v0.2.3 // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect + github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect + github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect + golang.org/x/sys v0.5.0 // indirect gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect - gopkg.in/ini.v1 v1.62.0 // indirect + gopkg.in/ini.v1 v1.66.6 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - xorm.io/builder v0.3.9 // indirect + xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect ) diff --git a/anylink/server/go.sum b/anylink/server/go.sum index aa2f83a..89e6dfb 100644 --- a/anylink/server/go.sum +++ b/anylink/server/go.sum @@ -39,6 +39,7 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= +gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -53,6 +54,8 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.1755 h1:J45/QHgrzUdqe/Vco/Vxk0wRvdS2nKUxmf/zLgvfass= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.1755/go.mod h1:RcDobYh8k5VP6TNybz9m++gL3ijVI5wueVr0EM10VsU= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -72,6 +75,8 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -79,12 +84,16 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.49.0 h1:KqJYk/YQ5ZhmyYz1oa4kGDskfF1gVuZfqesaJ/XDLto= +github.com/cloudflare/cloudflare-go v0.49.0/go.mod h1:h0QgcIZ3qEXwFiwfBO8sQxjVdYsLX+PfD7NFEnANaKg= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/go-iptables v0.6.0 h1:is9qnZMPYjLd8LYqmm/qlE+wwEgJIkTYdhV3rfZo4jk= +github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -95,9 +104,12 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -115,19 +127,25 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-acme/lego/v4 v4.10.2 h1:5eW3qmda5v/LP21v1Hj70edKY1jeFZQwO617tdkwp6Q= +github.com/go-acme/lego/v4 v4.10.2/go.mod h1:EMbf0Jmqwv94nJ5WL9qWnSXIBZnvsS9gNypansHGc6U= github.com/go-co-op/gocron v1.17.0 h1:IixLXsti+Qo0wMvmn6Kmjp2csk2ykpkcL+EmHmST18w= github.com/go-co-op/gocron v1.17.0/go.mod h1:IpDBSaJOVfFw7hXZuTag3SCSkqazXBBUkbQ1m1aesBs= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= @@ -144,8 +162,8 @@ github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LB github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gocarina/gocsv v0.0.0-20220712153207-8b2118da4570 h1:n4E8KiBgNvYdtjgJbAqKov2IFv7tDkULV/2Ld3wj5Hg= github.com/gocarina/gocsv v0.0.0-20220712153207-8b2118da4570/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI= -github.com/goccy/go-json v0.7.4 h1:B44qRUFwz/vxPKPISQ1KhvzRi9kZ28RAf6YtjriBZ5k= -github.com/goccy/go-json v0.7.4/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.8.1 h1:4/Wjm0JIJaTDm8K1KcGrLHJoa8EsJ13YWeX+6Kfq6uI= +github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -154,8 +172,9 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.0.0 h1:RAqyYixv1p7uEnocuy8P1nru5wprCh/MH2BIlW5z5/o= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -187,8 +206,10 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -202,6 +223,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= @@ -222,9 +246,10 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= @@ -246,9 +271,15 @@ github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= +github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= @@ -322,15 +353,20 @@ github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dv github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= @@ -342,12 +378,15 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lanrenwo/lzsgo v0.0.2 h1:FA30LAaJFYLoaM17b+H32gA+5H+abjoomNLSA9HCbrI= +github.com/lanrenwo/lzsgo v0.0.2/go.mod h1:oxDZy2vgi6VBGIdvL80ayRMtIyXV+TbjavVuINXZY2k= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -363,20 +402,22 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU= -github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -384,14 +425,18 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= @@ -427,17 +472,20 @@ github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pion/dtls/v2 v2.1.5 h1:jlh2vtIyUBShchoTDqpCCqiYCyRFJ/lvf/gQ8TALs+c= -github.com/pion/dtls/v2 v2.1.5/go.mod h1:BqCE7xPZbPSubGasRoDFJeTsyJtdD1FanJYL0JGheqY= +github.com/pion/dtls/v2 v2.2.6 h1:yXMxKr0Skd+Ub6A8UqXTRLSywskx93ooMRHsQUtd+Z4= +github.com/pion/dtls/v2 v2.2.6/go.mod h1:t8fWJCIquY5rlQZwA2yWxUS1+OCrAdXrhVKXB5oD/wY= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/transport v0.12.2/go.mod h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q= -github.com/pion/transport v0.13.0 h1:KWTA5ZrQogizzYwPEciGtHPLwpAjE91FgXnyu+Hv2uY= -github.com/pion/transport v0.13.0/go.mod h1:yxm9uXpK9bpBBWkITk13cLo1y5/ur5VQpG22ny6EP7g= -github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o= -github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M= +github.com/pion/transport/v2 v2.0.2 h1:St+8o+1PEzPT51O9bv+tH/KYYLMNR5Vwm5Z3Qkjsywg= +github.com/pion/transport/v2 v2.0.2/go.mod h1:vrz6bUbFr/cjdwbnxq8OdDDzHf7JJfGsIRkxfpZoTA0= +github.com/pion/udp/v2 v2.0.1 h1:xP0z6WNux1zWEjhC7onRA3EwwSliXqu1ElUZAQhUP54= +github.com/pion/udp/v2 v2.0.1/go.mod h1:B7uvTMP00lzWdyMr/1PVZXtV3wpPIxBRd4Wl6AksXn8= +github.com/pires/go-proxyproto v0.6.2 h1:KAZ7UteSOt6urjme6ZldyFm4wDe/z0ZUP0Yv0Dos0d8= +github.com/pires/go-proxyproto v0.6.2/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -462,11 +510,17 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= +github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= +github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM= +github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= @@ -486,9 +540,7 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/songgao/packets v0.0.0-20160404182456-549a10cd4091 h1:1zN6ImoqhSJhN8hGXFaJlSC8msLmIbX8bFqOfWLKw0w= @@ -517,6 +569,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -524,12 +577,17 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.490 h1:mmz27tVi2r70JYnm5y0Zk8w0Qzsx+vfUw3oqSyrEfP8= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.490/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.490 h1:g9SWTaTy/rEuhMErC2jWq9Qt5ci+jBYSvXnJsLq4adg= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.490/go.mod h1:l9q4vc1QiawUB1m3RU+87yLvrrxe54jc0w/kEl4DbSQ= github.com/tklauser/go-sysconf v0.3.7 h1:HT7h4+536gjqeq1ZIJPgOl1rg1XFatQGVZWp7Py53eg= github.com/tklauser/go-sysconf v0.3.7/go.mod h1:JZIdXh4RmBvZDBZ41ld2bGxRV3n4daiiqA3skYhAoQ4= github.com/tklauser/numcpus v0.2.3 h1:nQ0QYpiritP6ViFhrKYsiv6VVxOpum2Gks5GhnJbS/8= @@ -542,11 +600,18 @@ github.com/xhit/go-simple-mail/v2 v2.10.0/go.mod h1:kA1XbQfCI4JxQ9ccSN6VFyIEkkug github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119 h1:YyPWX3jLOtYKulBR6AScGIs74lLrJcgeKRwcbAuQOG4= github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119/go.mod h1:/nuTSlK+okRfR/vnIPqR89fFKonnWPiZymN5ydRJkX8= +github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 h1:6932x8ltq1w4utjmfMPVj09jdMlkY0aiA6+Skbtl3/c= +github.com/xuri/efp v0.0.0-20220603152613-6918739fd470/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= +github.com/xuri/excelize/v2 v2.6.1 h1:ICBdtw803rmhLN3zfvyEGH3cwSmZv+kde7LhTDT659k= +github.com/xuri/excelize/v2 v2.6.1/go.mod h1:tL+0m6DNwSXj/sILHbQTYsLi9IF4TW59H2EF3Yrx1AU= +github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 h1:OAmKAfT06//esDdpi/DZ8Qsdt4+M5+ltca05dA5bG2M= +github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -596,8 +661,10 @@ golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -610,6 +677,8 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 h1:LRtI4W37N+KFebI/qV0OFiLUv4GLOWeEW5hn/KEJvxE= +golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -632,8 +701,9 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -671,16 +741,18 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201201195509-5d6afe98e0b7/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -703,8 +775,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -754,7 +827,6 @@ golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -765,11 +837,20 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -778,14 +859,16 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -844,14 +927,15 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2 h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -967,16 +1051,18 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -990,6 +1076,7 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1004,37 +1091,119 @@ layeh.com/radius v0.0.0-20210819152912-ad72663a72ab h1:05KeMI4s7jEdIfHb7QCjUr5X2 layeh.com/radius v0.0.0-20210819152912-ad72663a72ab/go.mod h1:pFWM9De99EY9TPVyHIyA56QmoRViVck/x41WFkUlc9A= lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.33.6 h1:r63dgSzVzRxUpAJFPQWHy1QeZeY1ydNENUDaBx1GqYc= modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= -modernc.org/ccgo/v3 v3.9.5 h1:dEuUSf8WN51rDkprFuAqjfchKEzN0WttP/Py3enBwjk= +modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.18 h1:rMZhRcWrba0y3nVmdiQ7kxAgOOSq2m2f2VzjHLgEs6U= +modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60= +modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw= +modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI= +modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag= +modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw= +modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ= +modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c= +modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo= +modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg= +modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I= +modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs= +modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8= +modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE= +modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk= +modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w= +modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE= +modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8= +modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc= +modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU= +modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE= +modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk= +modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI= +modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE= +modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg= +modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74= +modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU= +modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU= +modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc= +modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM= +modernc.org/ccgo/v3 v3.12.65/go.mod h1:D6hQtKxPNZiY6wDBtehSGKFKmyXn53F8nGTpH+POmS4= +modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ= +modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84= +modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ= +modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY= +modernc.org/ccgo/v3 v3.12.82 h1:wudcnJyjLj1aQQCXF3IM9Gz2X6UNjw+afIghzdtn0v8= +modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w= +modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v1.7.13-0.20210308123627-12f642a52bb8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= -modernc.org/libc v1.9.11 h1:QUxZMs48Ahg2F7SN41aERvMfGLY2HU/ADnB9DC4Yts8= modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q= +modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg= +modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M= +modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= +modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE= +modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso= +modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8= +modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8= +modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I= +modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk= +modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY= +modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE= +modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg= +modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM= +modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg= +modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo= +modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8= +modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ= +modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA= +modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM= +modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg= +modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE= +modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM= +modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU= +modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw= +modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M= +modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18= +modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8= +modernc.org/libc v1.11.70/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= +modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= +modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0= +modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI= +modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE= +modernc.org/libc v1.11.87 h1:PzIzOqtlzMDDcCzJ5cUP6h/Ku6Fa9iyflP2ccTY64aE= +modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY= modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.0 h1:GCjoRaBew8ECCKINQA2nYjzvufFW9YiEuuB+rQ9bn2E= modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.0.4 h1:utMBrFcpnQDdNsmM6asmyH/FM9TqLPS7XF7otpJmrwM= +modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= +modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14= +modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM= modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.11.2 h1:ShWQpeD3ag/bmx6TqidBlIWonWmQaSQKls3aenCbt+w= -modernc.org/sqlite v1.11.2/go.mod h1:+mhs/P1ONd+6G7hcAs6irwDi/bjTQ7nLW6LHRBsEa3A= +modernc.org/sqlite v1.14.2 h1:ohsW2+e+Qe2To1W6GNezzKGwjXwSax6R+CrhRxVaFbE= +modernc.org/sqlite v1.14.2/go.mod h1:yqfn85u8wVOE6ub5UT8VI9JjhrwBUUCNyTACN0h6Sx8= modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/tcl v1.5.5/go.mod h1:ADkaTUuwukkrlhqwERyq0SM8OvyXo7+TjFz7yAF56EI= +modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY= modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA= +modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -xorm.io/builder v0.3.9 h1:Sd65/LdWyO7LR8+Cbd+e7mm3sK/7U9k0jS3999IDHMc= -xorm.io/builder v0.3.9/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= -xorm.io/xorm v1.2.2 h1:FFBOEvJ++8fYBA9cywf2sxDVmFktl1SpJzTAG1ab06Y= -xorm.io/xorm v1.2.2/go.mod h1:fTG8tSjk6O1BYxwuohZUK+S1glnRycsCF05L1qQyEU0= +xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 h1:bvLlAPW1ZMTWA32LuZMBEGHAUOcATZjzHcotf3SWweM= +xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= +xorm.io/xorm v1.3.2 h1:uTRRKF2jYzbZ5nsofXVUx6ncMaek+SHjWYtCXyZo1oM= +xorm.io/xorm v1.3.2/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw= diff --git a/anylink/server/handler/dtls.go b/anylink/server/handler/dtls.go index 7501246..56e54a9 100644 --- a/anylink/server/handler/dtls.go +++ b/anylink/server/handler/dtls.go @@ -66,9 +66,13 @@ func startDtls() { go func() { // time.Sleep(1 * time.Second) cc := conn.(*dtls.Conn) - sessid := hex.EncodeToString(cc.ConnectionState().SessionID) - sess := sessdata.Dtls2Sess(sessid) - LinkDtls(conn, sess.CSess) + did := hex.EncodeToString(cc.ConnectionState().SessionID) + cSess := sessdata.Dtls2CSess(did) + if cSess == nil { + conn.Close() + return + } + LinkDtls(conn, cSess) }() } } diff --git a/anylink/server/handler/link_auth.go b/anylink/server/handler/link_auth.go index 5a8138d..2e9bf8f 100644 --- a/anylink/server/handler/link_auth.go +++ b/anylink/server/handler/link_auth.go @@ -7,6 +7,7 @@ import ( "io" "net" "net/http" + "net/http/httputil" "strings" "text/template" @@ -18,11 +19,16 @@ import ( var profileHash = "" func LinkAuth(w http.ResponseWriter, r *http.Request) { + // TODO 调试信息输出 + if base.GetLogLevel() == base.LogLevelTrace { + hd, _ := httputil.DumpRequest(r, true) + base.Trace("LinkAuth: ", string(hd)) + } // 判断anyconnect客户端 userAgent := strings.ToLower(r.UserAgent()) xAggregateAuth := r.Header.Get("X-Aggregate-Auth") xTranscendVersion := r.Header.Get("X-Transcend-Version") - if !((strings.Contains(userAgent, "anyconnect") || strings.Contains(userAgent, "openconnect")) && + if !((strings.Contains(userAgent, "anyconnect") || strings.Contains(userAgent, "openconnect") || strings.Contains(userAgent, "anylink")) && xAggregateAuth == "1" && xTranscendVersion == "1") { w.WriteHeader(http.StatusForbidden) fmt.Fprintf(w, "error request") @@ -43,7 +49,6 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) { return } // fmt.Printf("%+v \n", cr) - setCommonHeader(w) if cr.Type == "logout" { // 退出删除session信息 @@ -56,7 +61,7 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) { if cr.Type == "init" { w.WriteHeader(http.StatusOK) - data := RequestData{Group: cr.GroupSelect, Groups: dbdata.GetGroupNames()} + data := RequestData{Group: cr.GroupSelect, Groups: dbdata.GetGroupNamesNormal()} tplRequest(tpl_request, w, data) return } @@ -66,16 +71,32 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusBadRequest) return } - + // 用户活动日志 + ua := dbdata.UserActLog{ + Username: cr.Auth.Username, + GroupName: cr.GroupSelect, + RemoteAddr: r.RemoteAddr, + Status: dbdata.UserAuthSuccess, + DeviceType: cr.DeviceId.DeviceType, + PlatformVersion: cr.DeviceId.PlatformVersion, + } // TODO 用户密码校验 err = dbdata.CheckUser(cr.Auth.Username, cr.Auth.Password, cr.GroupSelect) if err != nil { base.Warn(err) + ua.Info = err.Error() + ua.Status = dbdata.UserAuthFail + dbdata.UserActLogIns.Add(ua, userAgent) + w.WriteHeader(http.StatusOK) - data := RequestData{Group: cr.GroupSelect, Groups: dbdata.GetGroupNames(), Error: "用户名或密码错误"} + data := RequestData{Group: cr.GroupSelect, Groups: dbdata.GetGroupNamesNormal(), Error: "用户名或密码错误"} + if base.Cfg.DisplayError { + data.Error = err.Error() + } tplRequest(tpl_request, w, data) return } + dbdata.UserActLogIns.Add(ua, userAgent) // if !ok { // w.WriteHeader(http.StatusOK) // data := RequestData{Group: cr.GroupSelect, Groups: base.Cfg.UserGroups, Error: "请先激活用户"} @@ -87,29 +108,38 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) { sess := sessdata.NewSession("") sess.Username = cr.Auth.Username sess.Group = cr.GroupSelect - sess.MacAddr = strings.ToLower(cr.MacAddressList.MacAddress) + oriMac := cr.MacAddressList.MacAddress sess.UniqueIdGlobal = cr.DeviceId.UniqueIdGlobal + sess.UserAgent = userAgent + sess.DeviceType = ua.DeviceType + sess.PlatformVersion = ua.PlatformVersion + sess.RemoteAddr = r.RemoteAddr // 获取客户端mac地址 - macHw, err := net.ParseMAC(sess.MacAddr) + sess.UniqueMac = true + macHw, err := net.ParseMAC(oriMac) if err != nil { var sum [16]byte if sess.UniqueIdGlobal != "" { sum = md5.Sum([]byte(sess.UniqueIdGlobal)) } else { sum = md5.Sum([]byte(sess.Token)) + sess.UniqueMac = false } macHw = sum[0:5] // 5个byte macHw = append([]byte{0x02}, macHw...) sess.MacAddr = macHw.String() } sess.MacHw = macHw + // 统一macAddr的格式 + sess.MacAddr = macHw.String() + other := &dbdata.SettingOther{} _ = dbdata.SettingGet(other) rd := RequestData{SessionId: sess.Sid, SessionToken: sess.Sid + "@" + sess.Token, Banner: other.Banner, ProfileHash: profileHash} w.WriteHeader(http.StatusOK) tplRequest(tpl_complete, w, rd) - base.Debug("login", cr.Auth.Username) + base.Debug("login", cr.Auth.Username, userAgent) } const ( diff --git a/anylink/server/handler/link_base.go b/anylink/server/handler/link_base.go index 17efbb3..1afcc92 100644 --- a/anylink/server/handler/link_base.go +++ b/anylink/server/handler/link_base.go @@ -44,6 +44,7 @@ type macAddressList struct { func setCommonHeader(w http.ResponseWriter) { // Content-Length Date 默认已经存在 + w.Header().Set("Server", "AnyLink") w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Header().Set("Cache-Control", "no-store,no-cache") w.Header().Set("Pragma", "no-cache") diff --git a/anylink/server/handler/link_cstp.go b/anylink/server/handler/link_cstp.go index 97a9fb3..ba947e7 100644 --- a/anylink/server/handler/link_cstp.go +++ b/anylink/server/handler/link_cstp.go @@ -7,6 +7,7 @@ import ( "time" "github.com/bjdgyc/anylink/base" + "github.com/bjdgyc/anylink/dbdata" "github.com/bjdgyc/anylink/pkg/utils" "github.com/bjdgyc/anylink/sessdata" ) @@ -14,7 +15,7 @@ import ( func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSession) { base.Debug("LinkCstp connect ip:", cSess.IpAddr, "user:", cSess.Username, "rip:", conn.RemoteAddr()) defer func() { - base.Debug("LinkCstp return", cSess.IpAddr) + base.Debug("LinkCstp return", cSess.Username, cSess.IpAddr) _ = conn.Close() cSess.Close() }() @@ -33,14 +34,14 @@ func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessio // 设置超时限制 err = conn.SetReadDeadline(utils.NowSec().Add(dead)) if err != nil { - base.Error("SetDeadline: ", err) + base.Error("SetDeadline: ", cSess.Username, err) return } // hdata := make([]byte, BufferSize) pl := getPayload() n, err = bufRW.Read(pl.Data) if err != nil { - base.Error("read hdata: ", err) + base.Error("read hdata: ", cSess.Username, err) return } @@ -55,7 +56,8 @@ func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessio // do nothing // base.Debug("recv keepalive", cSess.IpAddr) case 0x05: // DISCONNECT - base.Debug("DISCONNECT", cSess.IpAddr) + cSess.UserLogoutCode = dbdata.UserLogoutClient + base.Debug("DISCONNECT", cSess.Username, cSess.IpAddr) return case 0x03: // DPD-REQ // base.Debug("recv DPD-REQ", cSess.IpAddr) @@ -64,13 +66,28 @@ func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessio return } case 0x04: - // log.Println("recv DPD-RESP") + // log.Println("recv DPD-RESP") + case 0x08: // decompress + if cSess.CstpPickCmp == nil { + continue + } + dst := getByteFull() + nn, err := cSess.CstpPickCmp.Uncompress(pl.Data[8:], *dst) + if err != nil { + putByte(dst) + base.Error("cstp decompress error", err, nn) + continue + } + binary.BigEndian.PutUint16(pl.Data[4:6], uint16(nn)) + pl.Data = append(pl.Data[:8], (*dst)[:nn]...) + putByte(dst) + fallthrough case 0x00: // DATA // 获取数据长度 dataLen = binary.BigEndian.Uint16(pl.Data[4:6]) // 4,5 // 修复 cstp 数据长度溢出报错 if 8+dataLen > BufferSize { - base.Error("recv error dataLen", dataLen) + base.Error("recv error dataLen", cSess.Username, dataLen) continue } // 去除数据头 @@ -87,7 +104,7 @@ func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessio func cstpWrite(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSession) { defer func() { - base.Debug("cstpWrite return", cSess.IpAddr) + base.Debug("cstpWrite return", cSess.Username, cSess.IpAddr) _ = conn.Close() cSess.Close() }() @@ -110,16 +127,31 @@ func cstpWrite(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessi } if pl.PType == 0x00 { - // 获取数据长度 - l := len(pl.Data) - // 先扩容 +8 - pl.Data = pl.Data[:l+8] - // 数据后移 - copy(pl.Data[8:], pl.Data) - // 添加头信息 - copy(pl.Data[:8], plHeader) - // 更新头长度 - binary.BigEndian.PutUint16(pl.Data[4:6], uint16(l)) + isCompress := false + if cSess.CstpPickCmp != nil && len(pl.Data) > base.Cfg.NoCompressLimit { + dst := getByteFull() + size, err := cSess.CstpPickCmp.Compress(pl.Data, (*dst)[8:]) + if err == nil && size < len(pl.Data) { + copy((*dst)[:8], plHeader) + binary.BigEndian.PutUint16((*dst)[4:6], uint16(size)) + (*dst)[6] = 0x08 + pl.Data = append(pl.Data[:0], (*dst)[:size+8]...) + isCompress = true + } + putByte(dst) + } + if !isCompress { + // 获取数据长度 + l := len(pl.Data) + // 先扩容 +8 + pl.Data = pl.Data[:l+8] + // 数据后移 + copy(pl.Data[8:], pl.Data) + // 添加头信息 + copy(pl.Data[:8], plHeader) + // 更新头长度 + binary.BigEndian.PutUint16(pl.Data[4:6], uint16(l)) + } } else { pl.Data = append(pl.Data[:0], plHeader...) // 设置头类型 @@ -128,7 +160,7 @@ func cstpWrite(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessi n, err = conn.Write(pl.Data) if err != nil { - base.Error("write err", err) + base.Error("write err", cSess.Username, err) return } diff --git a/anylink/server/handler/link_dtls.go b/anylink/server/handler/link_dtls.go index 23c6e86..34fe578 100644 --- a/anylink/server/handler/link_dtls.go +++ b/anylink/server/handler/link_dtls.go @@ -5,6 +5,7 @@ import ( "time" "github.com/bjdgyc/anylink/base" + "github.com/bjdgyc/anylink/dbdata" "github.com/bjdgyc/anylink/pkg/utils" "github.com/bjdgyc/anylink/sessdata" ) @@ -19,7 +20,7 @@ func LinkDtls(conn net.Conn, cSess *sessdata.ConnSession) { } defer func() { - base.Debug("LinkDtls return", cSess.IpAddr) + base.Debug("LinkDtls return", cSess.Username, cSess.IpAddr) _ = conn.Close() dSess.Close() }() @@ -35,14 +36,14 @@ func LinkDtls(conn net.Conn, cSess *sessdata.ConnSession) { for { err = conn.SetReadDeadline(utils.NowSec().Add(dead)) if err != nil { - base.Error("SetDeadline: ", err) + base.Error("SetDeadline: ", cSess.Username, err) return } pl := getPayload() n, err = conn.Read(pl.Data) if err != nil { - base.Error("read hdata: ", err) + base.Error("read hdata: ", cSess.Username, err) return } @@ -57,7 +58,8 @@ func LinkDtls(conn net.Conn, cSess *sessdata.ConnSession) { // do nothing // base.Debug("recv keepalive", cSess.IpAddr) case 0x05: // DISCONNECT - base.Debug("DISCONNECT DTLS", cSess.IpAddr) + cSess.UserLogoutCode = dbdata.UserLogoutClient + base.Debug("DISCONNECT DTLS", cSess.Username, cSess.IpAddr) return case 0x03: // DPD-REQ // base.Debug("recv DPD-REQ", cSess.IpAddr) @@ -66,7 +68,22 @@ func LinkDtls(conn net.Conn, cSess *sessdata.ConnSession) { return } case 0x04: - // base.Debug("recv DPD-RESP", cSess.IpAddr) + // base.Debug("recv DPD-RESP", cSess.IpAddr) + case 0x08: // decompress + if cSess.DtlsPickCmp == nil { + continue + } + dst := getByteFull() + nn, err := cSess.DtlsPickCmp.Uncompress(pl.Data[1:], *dst) + if err != nil { + putByte(dst) + base.Error("dtls decompress error", err, n) + continue + } + pl.Data = append(pl.Data[:1], (*dst)[:nn]...) + putByte(dst) + n = nn + 1 + fallthrough case 0x00: // DATA // 去除数据头 // copy(pl.Data, pl.Data[1:n]) @@ -83,7 +100,7 @@ func LinkDtls(conn net.Conn, cSess *sessdata.ConnSession) { func dtlsWrite(conn net.Conn, dSess *sessdata.DtlsSession, cSess *sessdata.ConnSession) { defer func() { - base.Debug("dtlsWrite return", cSess.IpAddr) + base.Debug("dtlsWrite return", cSess.Username, cSess.IpAddr) _ = conn.Close() dSess.Close() }() @@ -106,21 +123,35 @@ func dtlsWrite(conn net.Conn, dSess *sessdata.DtlsSession, cSess *sessdata.ConnS // header = []byte{payload.PType} if pl.PType == 0x00 { // data - // 获取数据长度 - l := len(pl.Data) - // 先扩容 +1 - pl.Data = pl.Data[:l+1] - // 数据后移 - copy(pl.Data[1:], pl.Data) - // 添加头信息 - pl.Data[0] = pl.PType + isCompress := false + if cSess.DtlsPickCmp != nil && len(pl.Data) > base.Cfg.NoCompressLimit { + dst := getByteFull() + size, err := cSess.DtlsPickCmp.Compress(pl.Data, (*dst)[1:]) + if err == nil && size < len(pl.Data) { + (*dst)[0] = 0x08 + pl.Data = append(pl.Data[:0], (*dst)[:size+1]...) + isCompress = true + } + putByte(dst) + } + // 未压缩 + if !isCompress { + // 获取数据长度 + l := len(pl.Data) + // 先扩容 +1 + pl.Data = pl.Data[:l+1] + // 数据后移 + copy(pl.Data[1:], pl.Data) + // 添加头信息 + pl.Data[0] = pl.PType + } } else { // 设置头类型 pl.Data = append(pl.Data[:0], pl.PType) } n, err := conn.Write(pl.Data) if err != nil { - base.Error("write err", err) + base.Error("write err", cSess.Username, err) return } diff --git a/anylink/server/handler/link_home.go b/anylink/server/handler/link_home.go index 9669d26..a2dc30b 100644 --- a/anylink/server/handler/link_home.go +++ b/anylink/server/handler/link_home.go @@ -13,6 +13,7 @@ func LinkHome(w http.ResponseWriter, r *http.Request) { // fmt.Println(r.RemoteAddr) // hu, _ := httputil.DumpRequest(r, true) // fmt.Println("DumpHome: ", string(hu)) + w.Header().Set("Server", "AnyLinkOpenSource") connection := strings.ToLower(r.Header.Get("Connection")) userAgent := strings.ToLower(r.UserAgent()) if connection == "close" && (strings.Contains(userAgent, "anyconnect") || strings.Contains(userAgent, "openconnect")) { @@ -21,11 +22,13 @@ func LinkHome(w http.ResponseWriter, r *http.Request) { return } index := &dbdata.SettingOther{} - dbdata.SettingGet(index) + if err := dbdata.SettingGet(index); err != nil { + return + } w.WriteHeader(http.StatusOK) if index.Homeindex == "" { index.Homeindex = "AnyLink 是一个企业级远程办公 SSL VPN 软件,可以支持多人同时在线使用。" - } + } fmt.Fprintln(w, index.Homeindex) } diff --git a/anylink/server/handler/link_tap.go b/anylink/server/handler/link_tap.go index 2e3062b..67972ff 100644 --- a/anylink/server/handler/link_tap.go +++ b/anylink/server/handler/link_tap.go @@ -175,7 +175,7 @@ func allTapWrite(ifce LinkDriver, cSess *sessdata.ConnSession) { return } - putPayload(pl) + putPayloadInBefore(cSess, pl) } } diff --git a/anylink/server/handler/link_tun.go b/anylink/server/handler/link_tun.go index 2f0045c..0ba7c76 100644 --- a/anylink/server/handler/link_tun.go +++ b/anylink/server/handler/link_tun.go @@ -5,6 +5,7 @@ import ( "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/sessdata" + "github.com/coreos/go-iptables/iptables" "github.com/songgao/water" ) @@ -26,6 +27,28 @@ func checkTun() { if err != nil { base.Fatal("testTun err: ", err) } + //开启服务器转发 + if err := execCmd([]string{"sysctl -w net.ipv4.ip_forward=1"}); err != nil { + base.Error(err) + } + if base.Cfg.IptablesNat { + //添加NAT转发规则 + ipt, err := iptables.New() + if err != nil { + base.Error(err) + return + } + natRule := []string{"-s", base.Cfg.Ipv4CIDR, "-o", base.Cfg.Ipv4Master, "-j", "MASQUERADE"} + forwardRule := []string{"-j", "ACCEPT"} + if natExists, _ := ipt.Exists("nat", "POSTROUTING", natRule...); !natExists { + ipt.Insert("nat", "POSTROUTING", 1, natRule...) + } + if forwardExists, _ := ipt.Exists("filter", "FORWARD", forwardRule...); !forwardExists { + ipt.Insert("filter", "FORWARD", 1, forwardRule...) + } + base.Info(ipt.List("nat", "POSTROUTING")) + base.Info(ipt.List("filter", "FORWARD")) + } } // 创建tun网卡 @@ -85,7 +108,7 @@ func tunWrite(ifce *water.Interface, cSess *sessdata.ConnSession) { return } - putPayload(pl) + putPayloadInBefore(cSess, pl) } } diff --git a/anylink/server/handler/link_tunnel.go b/anylink/server/handler/link_tunnel.go index 16373b2..4550854 100644 --- a/anylink/server/handler/link_tunnel.go +++ b/anylink/server/handler/link_tunnel.go @@ -6,6 +6,7 @@ import ( "log" "net" "net/http" + "net/http/httputil" "os" "strings" "text/template" @@ -34,9 +35,10 @@ func HttpAddHeader(w http.ResponseWriter, key string, value string) { func LinkTunnel(w http.ResponseWriter, r *http.Request) { // TODO 调试信息输出 - // hd, _ := httputil.DumpRequest(r, true) - // fmt.Println("DumpRequest: ", string(hd)) - // fmt.Println("LinkTunnel", r.RemoteAddr) + if base.GetLogLevel() == base.LogLevelTrace { + hd, _ := httputil.DumpRequest(r, true) + base.Trace("LinkTunnel: ", string(hd)) + } // 判断session-token的值 cookie, err := r.Cookie("webvpn") @@ -69,6 +71,7 @@ func LinkTunnel(w http.ResponseWriter, r *http.Request) { cSess.SetMtu(cstpMtu) cSess.MasterSecret = masterSecret cSess.RemoteAddr = r.RemoteAddr + cSess.UserAgent = strings.ToLower(r.UserAgent()) cSess.LocalIp = net.ParseIP(localIp) cstpKeepalive := base.Cfg.CstpKeepalive cstpDpd := base.Cfg.CstpDpd @@ -89,6 +92,14 @@ func LinkTunnel(w http.ResponseWriter, r *http.Request) { base.Debug(cSess.IpAddr, cSess.MacHw, sess.Username, mobile) + // 压缩 + if cmpName, ok := cSess.SetPickCmp("cstp", r.Header.Get("X-Cstp-Accept-Encoding")); ok { + HttpSetHeader(w, "X-CSTP-Content-Encoding", cmpName) + } + if cmpName, ok := cSess.SetPickCmp("dtls", r.Header.Get("X-Dtls-Accept-Encoding")); ok { + HttpSetHeader(w, "X-DTLS-Content-Encoding", cmpName) + } + // 返回客户端数据 HttpSetHeader(w, "Server", fmt.Sprintf("%s %s", base.APP_NAME, base.APP_VER)) HttpSetHeader(w, "X-CSTP-Version", "1") @@ -125,7 +136,8 @@ func LinkTunnel(w http.ResponseWriter, r *http.Request) { for _, v := range cSess.Group.RouteExclude { HttpAddHeader(w, "X-CSTP-Split-Exclude", v.IpMask) } - HttpSetHeader(w, "X-CSTP-Lease-Duration", fmt.Sprintf("%d", base.Cfg.IpLease)) // ip地址租期 + + HttpSetHeader(w, "X-CSTP-Lease-Duration", "1209600") // ip地址租期 HttpSetHeader(w, "X-CSTP-Session-Timeout", "none") HttpSetHeader(w, "X-CSTP-Session-Timeout-Alert-Interval", "60") HttpSetHeader(w, "X-CSTP-Session-Timeout-Remaining", "none") @@ -134,8 +146,10 @@ func LinkTunnel(w http.ResponseWriter, r *http.Request) { HttpSetHeader(w, "X-CSTP-Keep", "true") HttpSetHeader(w, "X-CSTP-Tunnel-All-DNS", "false") - HttpSetHeader(w, "X-CSTP-Rekey-Time", "172800") + HttpSetHeader(w, "X-CSTP-Rekey-Time", "43200") // 172800 HttpSetHeader(w, "X-CSTP-Rekey-Method", "new-tunnel") + HttpSetHeader(w, "X-DTLS-Rekey-Time", "43200") + HttpSetHeader(w, "X-DTLS-Rekey-Method", "new-tunnel") HttpSetHeader(w, "X-CSTP-DPD", fmt.Sprintf("%d", cstpDpd)) HttpSetHeader(w, "X-CSTP-Keepalive", fmt.Sprintf("%d", cstpKeepalive)) @@ -150,7 +164,6 @@ func LinkTunnel(w http.ResponseWriter, r *http.Request) { HttpSetHeader(w, "X-DTLS-Port", dtlsPort) HttpSetHeader(w, "X-DTLS-DPD", fmt.Sprintf("%d", cstpDpd)) HttpSetHeader(w, "X-DTLS-Keepalive", fmt.Sprintf("%d", cstpKeepalive)) - HttpSetHeader(w, "X-DTLS-Rekey-Time", "5400") HttpSetHeader(w, "X-DTLS12-CipherSuite", "ECDHE-ECDSA-AES128-GCM-SHA256") HttpSetHeader(w, "X-CSTP-License", "accept") @@ -194,6 +207,15 @@ func LinkTunnel(w http.ResponseWriter, r *http.Request) { base.Error(err) return } + dbdata.UserActLogIns.Add(dbdata.UserActLog{ + Username: sess.Username, + GroupName: sess.Group, + IpAddr: cSess.IpAddr.String(), + RemoteAddr: cSess.RemoteAddr, + DeviceType: sess.DeviceType, + PlatformVersion: sess.PlatformVersion, + Status: dbdata.UserConnected, + }, cSess.UserAgent) go LinkCstp(conn, bufRW, cSess) } diff --git a/anylink/server/handler/payload.go b/anylink/server/handler/payload.go index 626ae6e..e5ed545 100644 --- a/anylink/server/handler/payload.go +++ b/anylink/server/handler/payload.go @@ -15,11 +15,6 @@ func payloadIn(cSess *sessdata.ConnSession, pl *sessdata.Payload) bool { // 校验不通过直接丢弃 return false } - if base.Cfg.AuditInterval >= 0 { - cSess.IpAuditPool.JobQueue <- func() { - logAudit(cSess, pl) - } - } } closed := false @@ -32,6 +27,15 @@ func payloadIn(cSess *sessdata.ConnSession, pl *sessdata.Payload) bool { return closed } +func putPayloadInBefore(cSess *sessdata.ConnSession, pl *sessdata.Payload) { + // 异步审计日志 + if base.Cfg.AuditInterval >= 0 { + auditPayload.Add(cSess.Username, pl) + return + } + putPayload(pl) +} + func payloadOut(cSess *sessdata.ConnSession, pl *sessdata.Payload) bool { dSess := cSess.GetDtlsSession() if dSess == nil { diff --git a/anylink/server/handler/payload_access_audit.go b/anylink/server/handler/payload_access_audit.go index 0ad9ea4..4384352 100644 --- a/anylink/server/handler/payload_access_audit.go +++ b/anylink/server/handler/payload_access_audit.go @@ -3,13 +3,13 @@ package handler import ( "crypto/md5" "encoding/binary" - "encoding/hex" "time" "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/dbdata" "github.com/bjdgyc/anylink/pkg/utils" "github.com/bjdgyc/anylink/sessdata" + "github.com/ivpusic/grpool" "github.com/songgao/water/waterutil" ) @@ -20,73 +20,92 @@ const ( acc_proto_http ) -// 保存批量的审计日志 +var ( + auditPayload *AuditPayload + logBatch *LogBatch +) + +// 分析审计日志 +type AuditPayload struct { + Pool *grpool.Pool + IpAuditMap utils.IMaps +} + +// 保存审计日志 type LogBatch struct { - Logs []dbdata.AccessAudit + Logs []dbdata.AccessAudit + LogChan chan dbdata.AccessAudit } -// 日志池 -type LogSink struct { - logChan chan dbdata.AccessAudit - autoCommitChan chan *LogBatch // 超时通知 +// 异步写入pool +func (p *AuditPayload) Add(userName string, pl *sessdata.Payload) { + select { + case p.Pool.JobQueue <- func() { + logAudit(userName, pl) + }: + default: + putPayload(pl) + base.Error("AccessAudit: AuditPayload channel is full") + } } -var logAuditSink *LogSink - -// 写入日志通道 -func logAuditWrite(aa dbdata.AccessAudit) { - logAuditSink.logChan <- aa +// 数据落盘 +func (l *LogBatch) Write() { + if len(l.Logs) == 0 { + return + } + _ = dbdata.AddBatch(l.Logs) + l.Reset() } -// 批量写入数据表 +// 清空数据 +func (l *LogBatch) Reset() { + l.Logs = []dbdata.AccessAudit{} +} + +// 开启批量写入数据功能 func logAuditBatch() { if base.Cfg.AuditInterval < 0 { return } - logAuditSink = &LogSink{ - logChan: make(chan dbdata.AccessAudit, 1000), - autoCommitChan: make(chan *LogBatch, 10), + auditPayload = &AuditPayload{ + Pool: grpool.NewPool(10, 10240), + IpAuditMap: utils.NewMap("cmap", 0), + } + logBatch = &LogBatch{ + LogChan: make(chan dbdata.AccessAudit, 10240), } var ( - limit = 100 // 超过上限批量写入数据表 - logAudit dbdata.AccessAudit - logBatch *LogBatch - commitTimer *time.Timer // 超时自动提交 - timeOutBatch *LogBatch + limit = 100 // 超过上限批量写入数据表 + outTime = time.NewTimer(time.Second) + accessAudit = dbdata.AccessAudit{} ) + for { + // 重置超时 时间 + outTime.Reset(time.Second * 1) select { - case logAudit = <-logAuditSink.logChan: - if logBatch == nil { - logBatch = &LogBatch{} - commitTimer = time.AfterFunc( - 1*time.Second, func(logBatch *LogBatch) func() { - return func() { - logAuditSink.autoCommitChan <- logBatch - } - }(logBatch), - ) - } - logBatch.Logs = append(logBatch.Logs, logAudit) + case accessAudit = <-logBatch.LogChan: + logBatch.Logs = append(logBatch.Logs, accessAudit) if len(logBatch.Logs) >= limit { - commitTimer.Stop() - _ = dbdata.AddBatch(logBatch.Logs) - logBatch = nil + if !outTime.Stop() { + <-outTime.C + } + logBatch.Write() } - case timeOutBatch = <-logAuditSink.autoCommitChan: - if timeOutBatch != logBatch { - continue - } - if logBatch != nil { - _ = dbdata.AddBatch(logBatch.Logs) - } - logBatch = nil + case <-outTime.C: + logBatch.Write() } } } // 解析IP包的数据 -func logAudit(cSess *sessdata.ConnSession, pl *sessdata.Payload) { +func logAudit(userName string, pl *sessdata.Payload) { + defer putPayload(pl) + + if !(pl.LType == sessdata.LTypeIPData && pl.PType == 0x00) { + return + } ipProto := waterutil.IPv4Protocol(pl.Data) // 访问协议 var accessProto uint8 @@ -109,79 +128,48 @@ func logAudit(cSess *sessdata.ConnSession, pl *sessdata.Payload) { copy(key[:16], ipSrc) copy(key[16:32], ipDst) binary.BigEndian.PutUint16(key[32:34], ipPort) + key[34] = byte(accessProto) + copy(key[35:51], []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}) info := "" nu := utils.NowSec().Unix() if ipProto == waterutil.TCP { - plData := waterutil.IPv4Payload(pl.Data) - if len(plData) < 14 { + tcpPlData := waterutil.IPv4Payload(pl.Data) + // 24 (ACK PSH) + if len(tcpPlData) < 14 || tcpPlData[13] != 24 { return } - flags := plData[13] - switch flags { - case flags & 0x20: - // URG - return - case flags & 0x14: - // RST ACK - return - case flags & 0x12: - // SYN ACK - return - case flags & 0x11: - // Client FIN - return - case flags & 0x10: - // ACK - return - case flags & 0x08: - // PSH - return - case flags & 0x04: - // RST - return - case flags & 0x02: - // SYN - return - case flags & 0x01: - // FIN - return - case flags & 0x18: - // PSH ACK - accessProto, info = onTCP(plData) + accessProto, info = onTCP(tcpPlData) + // HTTPS or HTTP + if accessProto != acc_proto_tcp { + // 提前存储只含ip数据的key, 避免即记录域名又记录一笔IP数据的记录 + ipKey := make([]byte, 51) + copy(ipKey, key) + ipS := utils.BytesToString(ipKey) + auditPayload.IpAuditMap.Set(ipS, nu) + + key[34] = byte(accessProto) + // 存储含域名的key if info != "" { - // 提前存储只含ip数据的key, 避免即记录域名又记录一笔IP数据的记录 - ipKey := make([]byte, 51) - copy(ipKey, key) - ipS := utils.BytesToString(ipKey) - cSess.IpAuditMap.Set(ipS, nu) - // 存储含域名的key - key[34] = byte(accessProto) md5Sum := md5.Sum([]byte(info)) - copy(key[35:51], hex.EncodeToString(md5Sum[:])) + copy(key[35:51], md5Sum[:]) } - case flags & 0x19: - // URG - return - case flags & 0xC2: - // SYN-ECE-CWR - return } } s := utils.BytesToString(key) // 判断已经存在,并且没有过期 - v, ok := cSess.IpAuditMap.Get(s) + v, ok := auditPayload.IpAuditMap.Get(s) if ok && nu-v.(int64) < int64(base.Cfg.AuditInterval) { // 回收byte对象 putByte51(b) return } - cSess.IpAuditMap.Set(s, nu) + auditPayload.IpAuditMap.Set(s, nu) audit := dbdata.AccessAudit{ - Username: cSess.Username, + Username: userName, Protocol: uint8(ipProto), Src: ipSrc.String(), Dst: ipDst.String(), @@ -190,5 +178,11 @@ func logAudit(cSess *sessdata.ConnSession, pl *sessdata.Payload) { AccessProto: accessProto, Info: info, } - logAuditWrite(audit) + + select { + case logBatch.LogChan <- audit: + default: + base.Error("AccessAudit: LogChan channel is full") + return + } } diff --git a/anylink/server/handler/payload_tcp_parser.go b/anylink/server/handler/payload_tcp_parser.go index bece94d..6d3c4cc 100644 --- a/anylink/server/handler/payload_tcp_parser.go +++ b/anylink/server/handler/payload_tcp_parser.go @@ -21,7 +21,7 @@ func onTCP(payload []byte) (uint8, string) { } data := payload[ihl:] for _, parser := range tcpParsers { - if proto, info := parser(data); info != "" { + if proto, info := parser(data); proto != acc_proto_tcp { return proto, info } } @@ -29,8 +29,7 @@ func onTCP(payload []byte) (uint8, string) { } func sniNewParser(b []byte) (uint8, string) { - dataSize := len(b) - if dataSize < 2 || b[0] != 0x16 || b[1] != 0x03 { + if len(b) < 2 || b[0] != 0x16 || b[1] != 0x03 { return acc_proto_tcp, "" } rest := b[5:] @@ -51,27 +50,27 @@ func sniNewParser(b []byte) (uint8, string) { // Skip over random number current += 4 + 28 if current >= restLen { - return acc_proto_tcp, "" + return acc_proto_https, "" } // Skip over session ID sessionIDLength := int(rest[current]) current += 1 current += sessionIDLength - if current >= restLen { - return acc_proto_tcp, "" + if current+1 >= restLen { + return acc_proto_https, "" } cipherSuiteLength := (int(rest[current]) << 8) + int(rest[current+1]) current += 2 current += cipherSuiteLength if current >= restLen { - return acc_proto_tcp, "" + return acc_proto_https, "" } compressionMethodLength := int(rest[current]) current += 1 current += compressionMethodLength if current >= restLen { - return acc_proto_tcp, "" + return acc_proto_https, "" } current += 2 hostname := "" @@ -84,27 +83,30 @@ func sniNewParser(b []byte) (uint8, string) { // Skip over number of names as we're assuming there's just one current += 2 if current >= restLen { - return acc_proto_tcp, "" + return acc_proto_https, "" } nameType := rest[current] current += 1 if nameType != 0 { - return acc_proto_tcp, "" + return acc_proto_https, "" } if current+1 >= restLen { - return acc_proto_tcp, "" + return acc_proto_https, "" } nameLen := (int(rest[current]) << 8) + int(rest[current+1]) current += 2 if current+nameLen >= restLen { - return acc_proto_tcp, "" + return acc_proto_https, "" } hostname = string(rest[current : current+nameLen]) } current += extensionDataLength } if hostname == "" { - return acc_proto_tcp, "" + return acc_proto_https, "" + } + if !validDomainChar(hostname) { + return acc_proto_https, "" } return acc_proto_https, hostname } @@ -150,8 +152,7 @@ func httpNewParser(data []byte) (uint8, string) { } func sniParser(data []byte) (uint8, string) { - dataSize := len(data) - if dataSize < 2 || data[0] != 0x16 || data[1] != 0x03 { + if len(data) < 2 || data[0] != 0x16 || data[1] != 0x03 { return acc_proto_tcp, "" } sniRe := regexp.MustCompile("\x00\x00.{4}\x00.{2}([a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,6})\x00") @@ -169,3 +170,15 @@ func httpParser(data []byte) (uint8, string) { } return acc_proto_tcp, "" } + +// 校验域名的合法字符, 处理乱码问题 +func validDomainChar(addr string) bool { + // Allow a-z A-Z . - 0-9 + for i := 0; i < len(addr); i++ { + c := addr[i] + if !((c >= 97 && c <= 122) || (c >= 65 && c <= 90) || (c >= 45 && c <= 46) || (c >= 48 && c <= 57)) { + return false + } + } + return true +} diff --git a/anylink/server/handler/payload_test.go b/anylink/server/handler/payload_test.go index f36a08c..fc5358b 100644 --- a/anylink/server/handler/payload_test.go +++ b/anylink/server/handler/payload_test.go @@ -51,22 +51,26 @@ func BenchmarkNewHttpParser(b *testing.B) { func TestNewSniParser(t *testing.T) { ast := assert.New(t) data := handlerTcpPayload(httpsPacket) - _, sni := sniNewParser(data) + proto, sni := sniNewParser(data) ast.Equal(sni, httpsSni) + ast.Equal(int(proto), acc_proto_https) } func TestNewHttpParser(t *testing.T) { ast := assert.New(t) // Host data := handlerTcpPayload(httpPacket) - _, hostname := httpNewParser(data) + proto, hostname := httpNewParser(data) ast.Equal(hostname, httpHost) + ast.Equal(int(proto), acc_proto_http) // HOST data = handlerTcpPayload(httpPacket2) - _, hostname = httpNewParser(data) + proto, hostname = httpNewParser(data) ast.Equal(hostname, httpHost) + ast.Equal(int(proto), acc_proto_http) // GET http://www.google.com/index.html HTTP/1.1 data = handlerTcpPayload(httpPacket3) - _, hostname = httpNewParser(data) + proto, hostname = httpNewParser(data) ast.Equal(hostname, httpHost) + ast.Equal(int(proto), acc_proto_http) } diff --git a/anylink/server/handler/server.go b/anylink/server/handler/server.go index 6cfd4cc..34fd016 100644 --- a/anylink/server/handler/server.go +++ b/anylink/server/handler/server.go @@ -3,6 +3,7 @@ package handler import ( "crypto/tls" "fmt" + "io" "log" "net" "net/http" @@ -10,8 +11,9 @@ import ( "time" "github.com/bjdgyc/anylink/base" - "github.com/bjdgyc/anylink/pkg/proxyproto" + "github.com/bjdgyc/anylink/dbdata" "github.com/gorilla/mux" + "github.com/pires/go-proxyproto" ) func startTls() { @@ -47,13 +49,19 @@ func startTls() { NextProtos: []string{"http/1.1"}, MinVersion: tls.VersionTLS12, CipherSuites: selectedCipherSuites, + GetCertificate: func(chi *tls.ClientHelloInfo) (*tls.Certificate, error) { + base.Trace("GetCertificate", chi.ServerName) + return dbdata.GetCertificateBySNI(chi.ServerName) + }, // InsecureSkipVerify: true, } srv := &http.Server{ - Addr: addr, - Handler: initRoute(), - TLSConfig: tlsConfig, - ErrorLog: base.GetBaseLog(), + Addr: addr, + Handler: initRoute(), + TLSConfig: tlsConfig, + ErrorLog: base.GetBaseLog(), + ReadTimeout: 60 * time.Second, + WriteTimeout: 60 * time.Second, } ln, err = net.Listen("tcp", addr) @@ -63,11 +71,14 @@ func startTls() { defer ln.Close() if base.Cfg.ProxyProtocol { - ln = &proxyproto.Listener{Listener: ln, ProxyHeaderTimeout: time.Second * 5} + ln = &proxyproto.Listener{ + Listener: ln, + ReadHeaderTimeout: 30 * time.Second, + } } base.Info("listen server", addr) - err = srv.ServeTLS(ln, base.Cfg.CertFile, base.Cfg.CertKey) + err = srv.ServeTLS(ln, "", "") if err != nil { base.Fatal(err) } @@ -88,6 +99,10 @@ func initRoute() http.Handler { http.FileServer(http.Dir(base.Cfg.FilesPath)), ), ) + // 健康检测 + r.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, "ok") + }).Methods(http.MethodGet) r.NotFoundHandler = http.HandlerFunc(notFound) return r } diff --git a/anylink/server/main.go b/anylink/server/main.go index c52ddcf..a25efc5 100644 --- a/anylink/server/main.go +++ b/anylink/server/main.go @@ -1,5 +1,6 @@ // AnyLink 是一个企业级远程办公vpn软件,可以支持多人同时在线使用。 +//go:build !windows // +build !windows package main diff --git a/anylink/server/pkg/proxyproto/protocol.go b/anylink/server/pkg/proxyproto/protocol.go deleted file mode 100644 index f91f0b0..0000000 --- a/anylink/server/pkg/proxyproto/protocol.go +++ /dev/null @@ -1,290 +0,0 @@ -// copy from: https://github.com/armon/go-proxyproto/blob/master/protocol.go -// design: http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt - -// HAProxy proxy proto v1 -package proxyproto - -import ( - "bufio" - "bytes" - "errors" - "fmt" - "io" - "log" - "net" - "strconv" - "strings" - "sync" - "time" -) - -var ( - // prefix is the string we look for at the start of a connection - // to check if this connection is using the proxy protocol - prefix = []byte("PROXY ") - prefixLen = len(prefix) - - ErrInvalidUpstream = errors.New("upstream connection address not trusted for PROXY information") -) - -// SourceChecker can be used to decide whether to trust the PROXY info or pass -// the original connection address through. If set, the connecting address is -// passed in as an argument. If the function returns an error due to the source -// being disallowed, it should return ErrInvalidUpstream. -// -// If error is not nil, the call to Accept() will fail. If the reason for -// triggering this failure is due to a disallowed source, it should return -// ErrInvalidUpstream. -// -// If bool is true, the PROXY-set address is used. -// -// If bool is false, the connection's remote address is used, rather than the -// address claimed in the PROXY info. -type SourceChecker func(net.Addr) (bool, error) - -// Listener is used to wrap an underlying listener, -// whose connections may be using the HAProxy Proxy Protocol (version 1). -// If the connection is using the protocol, the RemoteAddr() will return -// the correct client address. -// -// Optionally define ProxyHeaderTimeout to set a maximum time to -// receive the Proxy Protocol Header. Zero means no timeout. -type Listener struct { - Listener net.Listener - ProxyHeaderTimeout time.Duration - SourceCheck SourceChecker - UnknownOK bool // allow PROXY UNKNOWN -} - -// Conn is used to wrap and underlying connection which -// may be speaking the Proxy Protocol. If it is, the RemoteAddr() will -// return the address of the client instead of the proxy address. -type Conn struct { - bufReader *bufio.Reader - conn net.Conn - dstAddr *net.TCPAddr - srcAddr *net.TCPAddr - useConnAddr bool - once sync.Once - proxyHeaderTimeout time.Duration - unknownOK bool -} - -// Accept waits for and returns the next connection to the listener. -func (p *Listener) Accept() (net.Conn, error) { - // Get the underlying connection - conn, err := p.Listener.Accept() - if err != nil { - return nil, err - } - var useConnAddr bool - if p.SourceCheck != nil { - allowed, err := p.SourceCheck(conn.RemoteAddr()) - if err != nil { - return nil, err - } - if !allowed { - useConnAddr = true - } - } - newConn := NewConn(conn, p.ProxyHeaderTimeout) - newConn.useConnAddr = useConnAddr - newConn.unknownOK = p.UnknownOK - return newConn, nil -} - -// Close closes the underlying listener. -func (p *Listener) Close() error { - return p.Listener.Close() -} - -// Addr returns the underlying listener's network address. -func (p *Listener) Addr() net.Addr { - return p.Listener.Addr() -} - -// NewConn is used to wrap a net.Conn that may be speaking -// the proxy protocol into a proxyproto.Conn -func NewConn(conn net.Conn, timeout time.Duration) *Conn { - pConn := &Conn{ - bufReader: bufio.NewReader(conn), - conn: conn, - proxyHeaderTimeout: timeout, - } - return pConn -} - -// Read is check for the proxy protocol header when doing -// the initial scan. If there is an error parsing the header, -// it is returned and the socket is closed. -func (p *Conn) Read(b []byte) (int, error) { - var err error - p.once.Do(func() { err = p.checkPrefix() }) - if err != nil { - return 0, err - } - return p.bufReader.Read(b) -} - -func (p *Conn) ReadFrom(r io.Reader) (int64, error) { - if rf, ok := p.conn.(io.ReaderFrom); ok { - return rf.ReadFrom(r) - } - return io.Copy(p.conn, r) -} - -func (p *Conn) WriteTo(w io.Writer) (int64, error) { - var err error - p.once.Do(func() { err = p.checkPrefix() }) - if err != nil { - return 0, err - } - return p.bufReader.WriteTo(w) -} - -func (p *Conn) Write(b []byte) (int, error) { - return p.conn.Write(b) -} - -func (p *Conn) Close() error { - return p.conn.Close() -} - -func (p *Conn) LocalAddr() net.Addr { - p.checkPrefixOnce() - if p.dstAddr != nil && !p.useConnAddr { - return p.dstAddr - } - return p.conn.LocalAddr() -} - -// RemoteAddr returns the address of the client if the proxy -// protocol is being used, otherwise just returns the address of -// the socket peer. If there is an error parsing the header, the -// address of the client is not returned, and the socket is closed. -// Once implication of this is that the call could block if the -// client is slow. Using a Deadline is recommended if this is called -// before Read() -func (p *Conn) RemoteAddr() net.Addr { - p.checkPrefixOnce() - if p.srcAddr != nil && !p.useConnAddr { - return p.srcAddr - } - return p.conn.RemoteAddr() -} - -func (p *Conn) SetDeadline(t time.Time) error { - return p.conn.SetDeadline(t) -} - -func (p *Conn) SetReadDeadline(t time.Time) error { - return p.conn.SetReadDeadline(t) -} - -func (p *Conn) SetWriteDeadline(t time.Time) error { - return p.conn.SetWriteDeadline(t) -} - -func (p *Conn) checkPrefixOnce() { - p.once.Do(func() { - if err := p.checkPrefix(); err != nil && err != io.EOF { - log.Printf("[ERR] Failed to read proxy prefix: %v", err) - p.Close() - p.bufReader = bufio.NewReader(p.conn) - } - }) -} - -func (p *Conn) checkPrefix() error { - if p.proxyHeaderTimeout != 0 { - readDeadLine := time.Now().Add(p.proxyHeaderTimeout) - _ = p.conn.SetReadDeadline(readDeadLine) - defer func() { - _ = p.conn.SetReadDeadline(time.Time{}) - }() - } - - // Incrementally check each byte of the prefix - for i := 1; i <= prefixLen; i++ { - inp, err := p.bufReader.Peek(i) - - if err != nil { - if neterr, ok := err.(net.Error); ok && neterr.Timeout() { - return nil - } else { - return err - } - } - - // Check for a prefix mis-match, quit early - if !bytes.Equal(inp, prefix[:i]) { - return nil - } - } - - // Read the header line - header, err := p.bufReader.ReadString('\n') - if err != nil { - p.conn.Close() - return err - } - - // Strip the carriage return and new line - header = header[:len(header)-2] - - // Split on spaces, should be (PROXY ) - parts := strings.Split(header, " ") - if len(parts) < 2 { - p.conn.Close() - return fmt.Errorf("Invalid header line: %s", header) - } - - // Verify the type is known - switch parts[1] { - case "UNKNOWN": - if !p.unknownOK || len(parts) != 2 { - p.conn.Close() - return fmt.Errorf("Invalid UNKNOWN header line: %s", header) - } - p.useConnAddr = true - return nil - case "TCP4": - case "TCP6": - default: - p.conn.Close() - return fmt.Errorf("Unhandled address type: %s", parts[1]) - } - - if len(parts) != 6 { - p.conn.Close() - return fmt.Errorf("Invalid header line: %s", header) - } - - // Parse out the source address - ip := net.ParseIP(parts[2]) - if ip == nil { - p.conn.Close() - return fmt.Errorf("Invalid source ip: %s", parts[2]) - } - port, err := strconv.Atoi(parts[4]) - if err != nil { - p.conn.Close() - return fmt.Errorf("Invalid source port: %s", parts[4]) - } - p.srcAddr = &net.TCPAddr{IP: ip, Port: port} - - // Parse out the destination address - ip = net.ParseIP(parts[3]) - if ip == nil { - p.conn.Close() - return fmt.Errorf("Invalid destination ip: %s", parts[3]) - } - port, err = strconv.Atoi(parts[5]) - if err != nil { - p.conn.Close() - return fmt.Errorf("Invalid destination port: %s", parts[5]) - } - p.dstAddr = &net.TCPAddr{IP: ip, Port: port} - - return nil -} diff --git a/anylink/server/pkg/proxyproto/protocol_test.go b/anylink/server/pkg/proxyproto/protocol_test.go deleted file mode 100644 index 1ad37aa..0000000 --- a/anylink/server/pkg/proxyproto/protocol_test.go +++ /dev/null @@ -1,486 +0,0 @@ -// copy from: https://github.com/armon/go-proxyproto/blob/master/protocol_test.go -package proxyproto - -import ( - "bytes" - "io" - "net" - "testing" - "time" -) - -const ( - goodAddr = "127.0.0.1" - badAddr = "127.0.0.2" - errAddr = "9999.0.0.2" -) - -var ( - checkAddr string -) - -func TestPassthrough(t *testing.T) { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - - pl := &Listener{Listener: l} - - go func() { - conn, err := net.Dial("tcp", pl.Addr().String()) - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - conn.Write([]byte("ping")) - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("pong")) { - t.Fatalf("bad: %v", recv) - } - }() - - conn, err := pl.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("ping")) { - t.Fatalf("bad: %v", recv) - } - - if _, err := conn.Write([]byte("pong")); err != nil { - t.Fatalf("err: %v", err) - } -} - -func TestTimeout(t *testing.T) { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - - clientWriteDelay := 200 * time.Millisecond - proxyHeaderTimeout := 50 * time.Millisecond - pl := &Listener{Listener: l, ProxyHeaderTimeout: proxyHeaderTimeout} - - go func() { - conn, err := net.Dial("tcp", pl.Addr().String()) - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - // Do not send data for a while - time.Sleep(clientWriteDelay) - - conn.Write([]byte("ping")) - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("pong")) { - t.Fatalf("bad: %v", recv) - } - }() - - conn, err := pl.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - // Check the remote addr is the original 127.0.0.1 - remoteAddrStartTime := time.Now() - addr := conn.RemoteAddr().(*net.TCPAddr) - if addr.IP.String() != "127.0.0.1" { - t.Fatalf("bad: %v", addr) - } - remoteAddrDuration := time.Since(remoteAddrStartTime) - - // Check RemoteAddr() call did timeout - if remoteAddrDuration >= clientWriteDelay { - t.Fatalf("RemoteAddr() took longer than the specified timeout: %v < %v", proxyHeaderTimeout, remoteAddrDuration) - } - - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("ping")) { - t.Fatalf("bad: %v", recv) - } - - if _, err := conn.Write([]byte("pong")); err != nil { - t.Fatalf("err: %v", err) - } -} - -func TestParse_ipv4(t *testing.T) { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - - pl := &Listener{Listener: l} - - go func() { - conn, err := net.Dial("tcp", pl.Addr().String()) - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - // Write out the header! - header := "PROXY TCP4 10.1.1.1 20.2.2.2 1000 2000\r\n" - conn.Write([]byte(header)) - - conn.Write([]byte("ping")) - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("pong")) { - t.Fatalf("bad: %v", recv) - } - }() - - conn, err := pl.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("ping")) { - t.Fatalf("bad: %v", recv) - } - - if _, err := conn.Write([]byte("pong")); err != nil { - t.Fatalf("err: %v", err) - } - - // Check the remote addr - addr := conn.RemoteAddr().(*net.TCPAddr) - if addr.IP.String() != "10.1.1.1" { - t.Fatalf("bad: %v", addr) - } - if addr.Port != 1000 { - t.Fatalf("bad: %v", addr) - } -} - -func TestParse_ipv6(t *testing.T) { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - - pl := &Listener{Listener: l} - - go func() { - conn, err := net.Dial("tcp", pl.Addr().String()) - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - // Write out the header! - header := "PROXY TCP6 ffff::ffff ffff::ffff 1000 2000\r\n" - conn.Write([]byte(header)) - - conn.Write([]byte("ping")) - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("pong")) { - t.Fatalf("bad: %v", recv) - } - }() - - conn, err := pl.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("ping")) { - t.Fatalf("bad: %v", recv) - } - - if _, err := conn.Write([]byte("pong")); err != nil { - t.Fatalf("err: %v", err) - } - - // Check the remote addr - addr := conn.RemoteAddr().(*net.TCPAddr) - if addr.IP.String() != "ffff::ffff" { - t.Fatalf("bad: %v", addr) - } - if addr.Port != 1000 { - t.Fatalf("bad: %v", addr) - } -} - -func TestParse_Unknown(t *testing.T) { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - - pl := &Listener{Listener: l, UnknownOK: true} - - go func() { - conn, err := net.Dial("tcp", pl.Addr().String()) - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - // Write out the header! - header := "PROXY UNKNOWN\r\n" - conn.Write([]byte(header)) - - conn.Write([]byte("ping")) - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("pong")) { - t.Fatalf("bad: %v", recv) - } - }() - - conn, err := pl.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("ping")) { - t.Fatalf("bad: %v", recv) - } - - if _, err := conn.Write([]byte("pong")); err != nil { - t.Fatalf("err: %v", err) - } - -} - -func TestParse_BadHeader(t *testing.T) { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - - pl := &Listener{Listener: l} - - go func() { - conn, err := net.Dial("tcp", pl.Addr().String()) - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - // Write out the header! - header := "PROXY TCP4 what 127.0.0.1 1000 2000\r\n" - conn.Write([]byte(header)) - - conn.Write([]byte("ping")) - - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err == nil { - t.Fatalf("err: %v", err) - } - }() - - conn, err := pl.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - // Check the remote addr, should be the local addr - addr := conn.RemoteAddr().(*net.TCPAddr) - if addr.IP.String() != "127.0.0.1" { - t.Fatalf("bad: %v", addr) - } - - // Read should fail - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err == nil { - t.Fatalf("err: %v", err) - } -} - -func TestParse_ipv4_checkfunc(t *testing.T) { - checkAddr = goodAddr - testParse_ipv4_checkfunc(t) - checkAddr = badAddr - testParse_ipv4_checkfunc(t) - checkAddr = errAddr - testParse_ipv4_checkfunc(t) -} - -func testParse_ipv4_checkfunc(t *testing.T) { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - - checkFunc := func(addr net.Addr) (bool, error) { - tcpAddr := addr.(*net.TCPAddr) - if tcpAddr.IP.String() == checkAddr { - return true, nil - } - return false, nil - } - - pl := &Listener{Listener: l, SourceCheck: checkFunc} - - go func() { - conn, err := net.Dial("tcp", pl.Addr().String()) - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - // Write out the header! - header := "PROXY TCP4 10.1.1.1 20.2.2.2 1000 2000\r\n" - conn.Write([]byte(header)) - - conn.Write([]byte("ping")) - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("pong")) { - t.Fatalf("bad: %v", recv) - } - }() - - conn, err := pl.Accept() - if err != nil { - if checkAddr == badAddr { - return - } - t.Fatalf("err: %v", err) - } - defer conn.Close() - - recv := make([]byte, 4) - _, err = conn.Read(recv) - if err != nil { - t.Fatalf("err: %v", err) - } - if !bytes.Equal(recv, []byte("ping")) { - t.Fatalf("bad: %v", recv) - } - - if _, err := conn.Write([]byte("pong")); err != nil { - t.Fatalf("err: %v", err) - } - - // Check the remote addr - addr := conn.RemoteAddr().(*net.TCPAddr) - switch checkAddr { - case goodAddr: - if addr.IP.String() != "10.1.1.1" { - t.Fatalf("bad: %v", addr) - } - if addr.Port != 1000 { - t.Fatalf("bad: %v", addr) - } - case badAddr: - if addr.IP.String() != "127.0.0.1" { - t.Fatalf("bad: %v", addr) - } - if addr.Port == 1000 { - t.Fatalf("bad: %v", addr) - } - } -} - -type testConn struct { - readFromCalledWith io.Reader - net.Conn // nil; crash on any unexpected use -} - -func (c *testConn) ReadFrom(r io.Reader) (int64, error) { - c.readFromCalledWith = r - return 0, nil -} -func (c *testConn) Write(p []byte) (int, error) { - return len(p), nil -} -func (c *testConn) Read(p []byte) (int, error) { - return 1, nil -} - -func TestCopyToWrappedConnection(t *testing.T) { - innerConn := &testConn{} - wrappedConn := NewConn(innerConn, 0) - dummySrc := &testConn{} - - io.Copy(wrappedConn, dummySrc) - if innerConn.readFromCalledWith != dummySrc { - t.Error("Expected io.Copy to delegate to ReadFrom function of inner destination connection") - } -} - -func TestCopyFromWrappedConnection(t *testing.T) { - wrappedConn := NewConn(&testConn{}, 0) - dummyDst := &testConn{} - - io.Copy(dummyDst, wrappedConn) - if dummyDst.readFromCalledWith != wrappedConn.conn { - t.Errorf("Expected io.Copy to pass inner source connection to ReadFrom method of destination") - } -} - -func TestCopyFromWrappedConnectionToWrappedConnection(t *testing.T) { - innerConn1 := &testConn{} - wrappedConn1 := NewConn(innerConn1, 0) - innerConn2 := &testConn{} - wrappedConn2 := NewConn(innerConn2, 0) - - io.Copy(wrappedConn1, wrappedConn2) - if innerConn1.readFromCalledWith != innerConn2 { - t.Errorf("Expected io.Copy to pass inner source connection to ReadFrom of inner destination connection") - } - -} diff --git a/anylink/server/sessdata/compress.go b/anylink/server/sessdata/compress.go new file mode 100644 index 0000000..7156f89 --- /dev/null +++ b/anylink/server/sessdata/compress.go @@ -0,0 +1,35 @@ +package sessdata + +import ( + "github.com/lanrenwo/lzsgo" +) + +type CmpEncoding interface { + Compress(src []byte, dst []byte) (int, error) + Uncompress(src []byte, dst []byte) (int, error) +} + +type LzsgoCmp struct { +} + +func (l LzsgoCmp) Compress(src []byte, dst []byte) (int, error) { + n, err := lzsgo.Compress(src, dst) + return n, err +} + +func (l LzsgoCmp) Uncompress(src []byte, dst []byte) (int, error) { + n, err := lzsgo.Uncompress(src, dst) + return n, err +} + +// type Lz4Cmp struct { +// c lz4.Compressor +// } + +// func (l Lz4Cmp) Compress(src []byte, dst []byte) (int, error) { +// return l.c.CompressBlock(src, dst) +// } + +// func (l Lz4Cmp) Uncompress(src []byte, dst []byte) (int, error) { +// return lz4.UncompressBlock(src, dst) +// } diff --git a/anylink/server/sessdata/compress_test.go b/anylink/server/sessdata/compress_test.go new file mode 100644 index 0000000..ce3a317 --- /dev/null +++ b/anylink/server/sessdata/compress_test.go @@ -0,0 +1,28 @@ +package sessdata + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLzsCompress(t *testing.T) { + var ( + n int + err error + ) + assert := assert.New(t) + c := LzsgoCmp{} + s := "hello anylink, you are best!" + src := []byte(strings.Repeat(s, 50)) + + comprBuf := make([]byte, 2048) + n, err = c.Compress(src, comprBuf) + assert.Nil(err) + + unprBuf := make([]byte, 2048) + n, err = c.Uncompress(comprBuf[:n], unprBuf) + assert.Nil(err) + assert.Equal(src, unprBuf[:n]) +} diff --git a/anylink/server/sessdata/ip_pool.go b/anylink/server/sessdata/ip_pool.go index 1ab5ae2..41dc773 100644 --- a/anylink/server/sessdata/ip_pool.go +++ b/anylink/server/sessdata/ip_pool.go @@ -14,8 +14,10 @@ var ( IpPool = &ipPoolConfig{} ipActive = map[string]bool{} // ipKeep and ipLease ipAddr => type - ipLease = map[string]bool{} + // ipLease = map[string]bool{} ipPoolMux sync.Mutex + // 记录循环点 + loopCurIp uint32 ) type ipPoolConfig struct { @@ -36,7 +38,19 @@ func initIpPool() { } IpPool.Ipv4IPNet = ipNet IpPool.Ipv4Mask = net.IP(ipNet.Mask) - IpPool.Ipv4Gateway = net.ParseIP(base.Cfg.Ipv4Gateway) + + ipv4Gateway := net.ParseIP(base.Cfg.Ipv4Gateway) + ipStart := net.ParseIP(base.Cfg.Ipv4Start) + ipEnd := net.ParseIP(base.Cfg.Ipv4End) + if !ipNet.Contains(ipv4Gateway) || !ipNet.Contains(ipStart) || !ipNet.Contains(ipEnd) { + panic("ip段 设置错误") + } + // ip地址池 + IpPool.Ipv4Gateway = ipv4Gateway + IpPool.IpLongMin = utils.Ip2long(ipStart) + IpPool.IpLongMax = utils.Ip2long(ipEnd) + + loopCurIp = IpPool.IpLongMin // 网络地址零值 // zero := binary.BigEndian.Uint32(ip.Mask(mask)) @@ -44,71 +58,160 @@ func initIpPool() { // one, _ := ipNet.Mask.Size() // max := min | uint32(math.Pow(2, float64(32-one))-1) - // ip地址池 - IpPool.IpLongMin = utils.Ip2long(net.ParseIP(base.Cfg.Ipv4Start)) - IpPool.IpLongMax = utils.Ip2long(net.ParseIP(base.Cfg.Ipv4End)) - // 获取IpLease数据 - go cronIpLease() + // go cronIpLease() } -func cronIpLease() { - getIpLease() - tick := time.NewTicker(time.Minute * 30) - for range tick.C { - getIpLease() - } -} - -func getIpLease() { - xdb := dbdata.GetXdb() - keepIpMaps := []dbdata.IpMap{} - sNow := time.Now().Add(-1 * time.Duration(base.Cfg.IpLease) * time.Second) - err := xdb.Cols("ip_addr").Where("keep=?", true).Or("last_login>?", sNow).Find(&keepIpMaps) - if err != nil { - base.Error(err) - } - // fmt.Println(keepIpMaps) - ipPoolMux.Lock() - ipLease = map[string]bool{} - for _, v := range keepIpMaps { - ipLease[v.IpAddr] = true - } - ipPoolMux.Unlock() -} +// func cronIpLease() { +// getIpLease() +// tick := time.NewTicker(time.Minute * 30) +// for range tick.C { +// getIpLease() +// } +// } +// +// func getIpLease() { +// xdb := dbdata.GetXdb() +// keepIpMaps := []dbdata.IpMap{} +// sNow := time.Now().Add(-1 * time.Duration(base.Cfg.IpLease) * time.Second) +// err := xdb.Cols("ip_addr").Where("keep=?", true). +// Or("unique_mac=? and last_login>?", true, sNow).Find(&keepIpMaps) +// if err != nil { +// base.Error(err) +// } +// // fmt.Println(keepIpMaps) +// ipPoolMux.Lock() +// ipLease = map[string]bool{} +// for _, v := range keepIpMaps { +// ipLease[v.IpAddr] = true +// } +// ipPoolMux.Unlock() +// } // AcquireIp 获取动态ip -func AcquireIp(username, macAddr string) net.IP { +func AcquireIp(username, macAddr string, uniqueMac bool) net.IP { + base.Trace("AcquireIp:", username, macAddr, uniqueMac) ipPoolMux.Lock() defer ipPoolMux.Unlock() - tNow := time.Now() + var ( + err error + tNow = time.Now() + ) - // 判断是否已经分配过 - mi := &dbdata.IpMap{} - err := dbdata.One("mac_addr", macAddr, mi) - // 存在ip记录 - if err == nil { + if uniqueMac { + // 判断是否已经分配过 + mi := &dbdata.IpMap{} + err = dbdata.One("mac_addr", macAddr, mi) + if err != nil { + // 没有查询到数据 + if dbdata.CheckErrNotFound(err) { + return loopIp(username, macAddr, uniqueMac) + } + // 查询报错 + base.Error(err) + return nil + } + + // 存在ip记录 + base.Trace("uniqueMac:", username, mi) ipStr := mi.IpAddr ip := net.ParseIP(ipStr) // 跳过活跃连接 _, ok := ipActive[ipStr] // 检测原有ip是否在新的ip池内 - if IpPool.Ipv4IPNet.Contains(ip) && !ok && + // IpPool.Ipv4IPNet.Contains(ip) && + if !ok && utils.Ip2long(ip) >= IpPool.IpLongMin && utils.Ip2long(ip) <= IpPool.IpLongMax { mi.Username = username mi.LastLogin = tNow + mi.UniqueMac = uniqueMac // 回写db数据 _ = dbdata.Set(mi) ipActive[ipStr] = true return ip } + // 删除当前macAddr + mi = &dbdata.IpMap{MacAddr: macAddr} _ = dbdata.Del(mi) + + } else { + // 没有获取到mac的情况 + ipMaps := []dbdata.IpMap{} + err = dbdata.FindWhere(&ipMaps, 50, 1, "username=? and unique_mac=?", username, false) + if err != nil { + // 没有查询到数据 + if dbdata.CheckErrNotFound(err) { + return loopIp(username, macAddr, uniqueMac) + } + // 查询报错 + base.Error(err) + return nil + } + + // 遍历mac记录 + for _, mi := range ipMaps { + ipStr := mi.IpAddr + ip := net.ParseIP(ipStr) + + // 跳过活跃连接 + if _, ok := ipActive[ipStr]; ok { + continue + } + // 跳过保留ip + if mi.Keep { + continue + } + // 没有mac的 不需要验证租期 + // mi.LastLogin.Before(leaseTime) && + if utils.Ip2long(ip) >= IpPool.IpLongMin && + utils.Ip2long(ip) <= IpPool.IpLongMax { + mi.LastLogin = tNow + mi.MacAddr = macAddr + mi.UniqueMac = uniqueMac + // 回写db数据 + _ = dbdata.Set(mi) + ipActive[ipStr] = true + return ip + } + } } + return loopIp(username, macAddr, uniqueMac) +} + +func loopIp(username, macAddr string, uniqueMac bool) net.IP { + var ( + i uint32 + ip net.IP + ) + + i, ip = loopLong(loopCurIp, IpPool.IpLongMax, username, macAddr, uniqueMac) + if ip != nil { + loopCurIp = i + return ip + } + + i, ip = loopLong(IpPool.IpLongMin, loopCurIp, username, macAddr, uniqueMac) + if ip != nil { + loopCurIp = i + return ip + } + + base.Warn("no ip available, please see ip_map table row", username, macAddr) + return nil +} + +func loopLong(start, end uint32, username, macAddr string, uniqueMac bool) (uint32, net.IP) { + var ( + err error + tNow = time.Now() + leaseTime = time.Now().Add(-1 * time.Duration(base.Cfg.IpLease) * time.Second) + ) + // 全局遍历超过租期和未保留的ip - for i := IpPool.IpLongMin; i <= IpPool.IpLongMax; i++ { + for i := start; i <= end; i++ { ip := utils.Long2ip(i) ipStr := ip.String() @@ -116,32 +219,42 @@ func AcquireIp(username, macAddr string) net.IP { if _, ok := ipActive[ipStr]; ok { continue } - // 跳过ip租期内数据 - if _, ok := ipLease[ipStr]; ok { - continue + + mi := &dbdata.IpMap{} + err = dbdata.One("ip_addr", ipStr, mi) + if err != nil { + // 没有查询到数据 + if dbdata.CheckErrNotFound(err) { + // 该ip没有被使用 + mi = &dbdata.IpMap{IpAddr: ipStr, MacAddr: macAddr, UniqueMac: uniqueMac, Username: username, LastLogin: tNow} + _ = dbdata.Add(mi) + ipActive[ipStr] = true + return i, ip + } + // 查询报错 + base.Error(err) + return 0, nil } - v := &dbdata.IpMap{} - err = dbdata.One("ip_addr", ipStr, v) - if err == nil { - // 存在记录直接跳过 + // 查询到已经使用的ip + // 跳过保留ip + if mi.Keep { continue } - - if dbdata.CheckErrNotFound(err) { - // 该ip没有被使用 - mi = &dbdata.IpMap{IpAddr: ipStr, MacAddr: macAddr, Username: username, LastLogin: tNow} - _ = dbdata.Add(mi) + // 判断租期 + if mi.LastLogin.Before(leaseTime) { + // 存在记录,说明已经超过租期,可以直接使用 + mi.LastLogin = tNow + mi.MacAddr = macAddr + mi.UniqueMac = uniqueMac + // 回写db数据 + _ = dbdata.Set(mi) ipActive[ipStr] = true - return ip + return i, ip } - // 查询报错 - base.Error(err) - return nil } - base.Warn("no ip available, please see ip_map table row") - return nil + return 0, nil } // 回收ip diff --git a/anylink/server/sessdata/ip_pool_test.go b/anylink/server/sessdata/ip_pool_test.go index 5db01cd..d103112 100644 --- a/anylink/server/sessdata/ip_pool_test.go +++ b/anylink/server/sessdata/ip_pool_test.go @@ -6,6 +6,7 @@ import ( "os" "path" "testing" + "time" "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/dbdata" @@ -18,10 +19,12 @@ func preData(tmpDir string) { base.Cfg.DbType = "sqlite3" base.Cfg.DbSource = tmpDb base.Cfg.Ipv4CIDR = "192.168.3.0/24" - base.Cfg.Ipv4Start = "192.168.3.1" - base.Cfg.Ipv4End = "192.168.3.199" + base.Cfg.Ipv4Gateway = "192.168.3.1" + base.Cfg.Ipv4Start = "192.168.3.100" + base.Cfg.Ipv4End = "192.168.3.150" base.Cfg.MaxClient = 100 base.Cfg.MaxUserClient = 3 + base.Cfg.IpLease = 5 dbdata.Start() group := dbdata.Group{ @@ -46,22 +49,34 @@ func TestIpPool(t *testing.T) { var ip net.IP - for i := 1; i <= 100; i++ { - _ = AcquireIp("user", fmt.Sprintf("mac-%d", i)) + for i := 100; i <= 150; i++ { + _ = AcquireIp(getTestUser(i), getTestMacAddr(i), true) } - ip = AcquireIp("user", "mac-new") - assert.True(net.IPv4(192, 168, 3, 101).Equal(ip)) - for i := 102; i <= 199; i++ { - ip = AcquireIp("user", fmt.Sprintf("mac-%d", i)) - } - assert.True(net.IPv4(192, 168, 3, 199).Equal(ip)) - ip = AcquireIp("user", "mac-nil") - assert.Nil(ip) - ReleaseIp(net.IPv4(192, 168, 3, 88), "mac-88") - ReleaseIp(net.IPv4(192, 168, 3, 188), "mac-188") + // 回收 + ReleaseIp(net.IPv4(192, 168, 3, 140), getTestMacAddr(140)) + time.Sleep(time.Second * 6) + // 从头循环获取可用ip - ip = AcquireIp("user", "mac-188") - t.Log("mac-188", ip) - assert.True(net.IPv4(192, 168, 3, 188).Equal(ip)) + user_new := getTestUser(210) + mac_new := getTestMacAddr(210) + ip = AcquireIp(user_new, mac_new, true) + t.Log("mac_new", ip) + assert.NotNil(ip) + assert.True(net.IPv4(192, 168, 3, 140).Equal(ip)) + + // 回收全部 + for i := 100; i <= 150; i++ { + ReleaseIp(net.IPv4(192, 168, 3, byte(i)), getTestMacAddr(i)) + } +} + +func getTestUser(i int) string { + return fmt.Sprintf("user-%d", i) +} + +func getTestMacAddr(i int) string { + // 前缀mac + macAddr := "02:00:00:00:00" + return fmt.Sprintf("%s:%x", macAddr, i) } diff --git a/anylink/server/sessdata/online.go b/anylink/server/sessdata/online.go index e8dff7a..7ac526d 100644 --- a/anylink/server/sessdata/online.go +++ b/anylink/server/sessdata/online.go @@ -14,6 +14,7 @@ type Online struct { Username string `json:"username"` Group string `json:"group"` MacAddr string `json:"mac_addr"` + UniqueMac bool `json:"unique_mac"` Ip net.IP `json:"ip"` RemoteAddr string `json:"remote_addr"` TunName string `json:"tun_name"` @@ -52,6 +53,7 @@ func OnlineSess() []Online { Username: v.Username, Group: v.Group, MacAddr: v.MacAddr, + UniqueMac: v.UniqueMac, RemoteAddr: v.CSess.RemoteAddr, TunName: v.CSess.IfName, Mtu: v.CSess.Mtu, diff --git a/anylink/server/sessdata/session.go b/anylink/server/sessdata/session.go index 70f3e7e..fc38928 100644 --- a/anylink/server/sessdata/session.go +++ b/anylink/server/sessdata/session.go @@ -12,8 +12,7 @@ import ( "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/dbdata" - "github.com/bjdgyc/anylink/pkg/utils" - "github.com/ivpusic/grpool" + mapset "github.com/deckarep/golang-set" atomic2 "go.uber.org/atomic" ) @@ -37,6 +36,8 @@ type ConnSession struct { Mtu int IfName string Client string // 客户端 mobile pc + UserAgent string // 客户端信息 + UserLogoutCode uint8 // 用户/客户端主动登出 CstpDpd int Group *dbdata.Group Limit *LimitRater @@ -51,10 +52,11 @@ type ConnSession struct { PayloadIn chan *Payload PayloadOutCstp chan *Payload // Cstp的数据 PayloadOutDtls chan *Payload // Dtls的数据 - IpAuditMap utils.IMaps // 审计的ip数据 - IpAuditPool *grpool.Pool // 审计的IP包解析池 // dSess *DtlsSession dSess *atomic.Value + // compress + CstpPickCmp CmpEncoding + DtlsPickCmp CmpEncoding } type DtlsSession struct { @@ -65,17 +67,22 @@ type DtlsSession struct { } type Session struct { - mux sync.RWMutex - Sid string // auth返回的 session-id - Token string // session信息的唯一token - DtlsSid string // dtls协议的 session_id - MacAddr string // 客户端mac地址 - UniqueIdGlobal string // 客户端唯一标示 - MacHw net.HardwareAddr - Username string // 用户名 - Group string - AuthStep string - AuthPass string + mux sync.RWMutex + Sid string // auth返回的 session-id + Token string // session信息的唯一token + DtlsSid string // dtls协议的 session_id + MacAddr string // 客户端mac地址 + UniqueIdGlobal string // 客户端唯一标示 + MacHw net.HardwareAddr + UniqueMac bool // 客户端获取到真实设备mac + Username string // 用户名 + Group string + AuthStep string + AuthPass string + RemoteAddr string + UserAgent string + DeviceType string + PlatformVersion string LastLogin time.Time IsActive bool @@ -97,22 +104,46 @@ func checkSession() { timeout := time.Duration(base.Cfg.SessionTimeout) * time.Second tick := time.NewTicker(time.Second * 60) for range tick.C { - sessMux.Lock() + outToken := []string{} + sessMux.RLock() t := time.Now() for k, v := range sessions { - v.mux.Lock() + v.mux.RLock() if !v.IsActive { if t.Sub(v.LastLogin) > timeout { - delete(sessions, k) + outToken = append(outToken, k) } } - v.mux.Unlock() + v.mux.RUnlock() + } + sessMux.RUnlock() + + // 删除过期session + for _, v := range outToken { + CloseSess(v, dbdata.UserLogoutTimeout) } - sessMux.Unlock() } }() } +// 状态为过期的用户踢下线 +func CloseUserLimittimeSession() { + s := mapset.NewSetFromSlice(dbdata.CheckUserlimittime()) + limitTimeToken := []string{} + sessMux.RLock() + for _, v := range sessions { + v.mux.RLock() + if v.IsActive && s.Contains(v.Username) { + limitTimeToken = append(limitTimeToken, v.Token) + } + v.mux.RUnlock() + } + sessMux.RUnlock() + for _, v := range limitTimeToken { + CloseSess(v, dbdata.UserLogoutExpire) + } +} + func GenToken() string { // 生成32位的 token bToken := make([]byte, 32) @@ -151,6 +182,7 @@ func (s *Session) NewConn() *ConnSession { macAddr := s.MacAddr macHw := s.MacHw username := s.Username + uniqueMac := s.UniqueMac s.mux.RUnlock() if active { s.CSess.Close() @@ -158,9 +190,10 @@ func (s *Session) NewConn() *ConnSession { limit := LimitClient(username, false) if !limit { + base.Warn("limit is full", username) return nil } - ip := AcquireIp(username, macAddr) + ip := AcquireIp(username, macAddr, uniqueMac) if ip == nil { LimitClient(username, true) return nil @@ -187,12 +220,6 @@ func (s *Session) NewConn() *ConnSession { dSess: &atomic.Value{}, } - // ip 审计 - if base.Cfg.AuditInterval >= 0 { - cSess.IpAuditMap = utils.NewMap("cmap", 0) - cSess.IpAuditPool = grpool.NewPool(1, 600) - } - dSess := &DtlsSession{ isActive: -1, } @@ -232,6 +259,7 @@ func (cs *ConnSession) Close() { ReleaseIp(cs.IpAddr, cs.Sess.MacAddr) LimitClient(cs.Username, true) + AddUserActLog(cs) }) } @@ -335,6 +363,30 @@ func (cs *ConnSession) RateLimit(byt int, isUp bool) error { return cs.Limit.Wait(byt) } +func (cs *ConnSession) SetPickCmp(cate, encoding string) (string, bool) { + var cmpName string + if !base.Cfg.Compression { + return cmpName, false + } + var cmp CmpEncoding + switch { + // case strings.Contains(encoding, "oc-lz4"): + // cmpName = "oc-lz4" + // cmp = Lz4Cmp{} + case strings.Contains(encoding, "lzs"): + cmpName = "lzs" + cmp = LzsgoCmp{} + default: + return cmpName, false + } + if cate == "cstp" { + cs.CstpPickCmp = cmp + } else { + cs.DtlsPickCmp = cmp + } + return cmpName, true +} + func SToken2Sess(stoken string) *Session { stoken = strings.TrimSpace(stoken) sarr := strings.Split(stoken, "@") @@ -356,6 +408,20 @@ func Dtls2Sess(did string) *Session { return sessions[token] } +func Dtls2CSess(did string) *ConnSession { + sessMux.RLock() + defer sessMux.RUnlock() + token := dtlsIds[did] + sess := sessions[token] + if sess == nil { + return nil + } + + sess.mux.RLock() + defer sess.mux.RUnlock() + return sess.CSess +} + func Dtls2MasterSecret(did string) string { sessMux.RLock() token := dtlsIds[did] @@ -378,7 +444,7 @@ func DelSess(token string) { // sessions.Delete(token) } -func CloseSess(token string) { +func CloseSess(token string, code ...uint8) { sessMux.Lock() defer sessMux.Unlock() sess, ok := sessions[token] @@ -387,7 +453,16 @@ func CloseSess(token string) { } delete(sessions, token) - sess.CSess.Close() + delete(dtlsIds, sess.DtlsSid) + + if sess.CSess != nil { + if len(code) > 0 { + sess.CSess.UserLogoutCode = code[0] + } + sess.CSess.Close() + return + } + AddUserActLogBySess(sess) } func CloseCSess(token string) { @@ -398,14 +473,42 @@ func CloseCSess(token string) { return } - sess.CSess.Close() + if sess.CSess != nil { + sess.CSess.Close() + } } func DelSessByStoken(stoken string) { stoken = strings.TrimSpace(stoken) sarr := strings.Split(stoken, "@") token := sarr[1] - sessMux.Lock() - delete(sessions, token) - sessMux.Unlock() + CloseSess(token, dbdata.UserLogoutBanner) +} + +func AddUserActLog(cs *ConnSession) { + ua := dbdata.UserActLog{ + Username: cs.Sess.Username, + GroupName: cs.Sess.Group, + IpAddr: cs.IpAddr.String(), + RemoteAddr: cs.RemoteAddr, + DeviceType: cs.Sess.DeviceType, + PlatformVersion: cs.Sess.PlatformVersion, + Status: dbdata.UserLogout, + } + ua.Info = dbdata.UserActLogIns.GetInfoOpsById(cs.UserLogoutCode) + dbdata.UserActLogIns.Add(ua, cs.UserAgent) +} + +func AddUserActLogBySess(sess *Session) { + ua := dbdata.UserActLog{ + Username: sess.Username, + GroupName: sess.Group, + IpAddr: "", + RemoteAddr: sess.RemoteAddr, + DeviceType: sess.DeviceType, + PlatformVersion: sess.PlatformVersion, + Status: dbdata.UserLogout, + } + ua.Info = dbdata.UserActLogIns.GetInfoOpsById(dbdata.UserLogoutBanner) + dbdata.UserActLogIns.Add(ua, sess.UserAgent) } diff --git a/anylink/server/sessdata/session_test.go b/anylink/server/sessdata/session_test.go index c9219b2..6719f61 100644 --- a/anylink/server/sessdata/session_test.go +++ b/anylink/server/sessdata/session_test.go @@ -1,8 +1,11 @@ package sessdata import ( + "fmt" "testing" + "time" + "github.com/bjdgyc/anylink/base" "github.com/stretchr/testify/assert" ) @@ -22,11 +25,15 @@ func TestConnSession(t *testing.T) { preData(tmp) defer cleardata(tmp) + time.Sleep(time.Second * 10) + sess := NewSession("") + sess.Username = "user-test" sess.Group = "group1" sess.MacAddr = "00:15:5d:50:14:43" cSess := sess.NewConn() + base.Info("cSess", cSess) err := cSess.RateLimit(100, true) ast.Nil(err) @@ -34,5 +41,23 @@ func TestConnSession(t *testing.T) { err = cSess.RateLimit(200, false) ast.Nil(err) ast.Equal(cSess.BandwidthDown.Load(), uint32(200)) + + var ( + cmpName string + ok bool + ) + base.Cfg.Compression = true + + cmpName, ok = cSess.SetPickCmp("cstp", "oc-lz4,lzs") + fmt.Println(cmpName, ok) + ast.True(ok) + ast.Equal(cmpName, "lzs") + cmpName, ok = cSess.SetPickCmp("dtls", "lzs") + ast.True(ok) + ast.Equal(cmpName, "lzs") + cmpName, ok = cSess.SetPickCmp("dtls", "test") + ast.False(ok) + ast.Equal(cmpName, "") + cSess.Close() } diff --git a/anylink/server/sessdata/start.go b/anylink/server/sessdata/start.go index 1d4243c..7862574 100644 --- a/anylink/server/sessdata/start.go +++ b/anylink/server/sessdata/start.go @@ -4,4 +4,5 @@ func Start() { initIpPool() checkSession() saveStatsInfo() + CloseUserLimittimeSession() } diff --git a/anylink/systemd/anylink.service b/anylink/systemd/anylink.service index 9f1fe68..72c3297 100644 --- a/anylink/systemd/anylink.service +++ b/anylink/systemd/anylink.service @@ -11,5 +11,12 @@ Restart=on-failure RestartSec=5s ExecStart=/usr/local/anylink-deploy/anylink --conf=/usr/local/anylink-deploy/conf/server.toml +# systemd older than v236 +# ExecStart=/bin/bash -c 'exec /usr/local/anylink-deploy/anylink --conf=/usr/local/anylink-deploy/conf/server.toml >> /usr/local/anylink-deploy/log/anylink.log 2>&1' + + +StandardOutput=file:/usr/local/anylink-deploy/log/anylink.log +StandardError=file:/usr/local/anylink-deploy/log/anylink.log + [Install] WantedBy=multi-user.target diff --git a/anylink/web/package.json b/anylink/web/package.json index 11ad5f9..73983b4 100644 --- a/anylink/web/package.json +++ b/anylink/web/package.json @@ -12,6 +12,7 @@ "core-js": "^3.6.5", "echarts": "^4.9.0", "element-ui": "^2.4.5", + "qs": "^6.11.1", "vue": "^2.6.11", "vue-count-to": "^1.0.13", "vue-router": "^3.5.2" diff --git a/anylink/web/public/批量添加用户模版.xlsx b/anylink/web/public/批量添加用户模版.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5405de76801df05fcb1813700aa8c670e7acf534 GIT binary patch literal 14381 zcmeHuWmH|uvMvek65QQ_TOhc*ySux)Yl3TV4{pKT9fAgT4;I|*E|PtAvUB!6_r5#c zpEt(qAFRciRbO|1Rb4H!T1Ffg1PbW61WT>+Jb(VHKmxuPSnJE!S=-pt$^gWW0Y5-| z7fYz%ykUO<1Z4IS2ngXbuOvUrwZ>2ER<}aZ25O)3 zovwqpQ7GSQ)=ztRFa0f2iGyLLAxMKgWUPTrB~n?gSH>2L5=OOYSR8>+@9WFNONoOL z)+tkBM}zYt@6bkWckW>f7T9CwT|2N+Su)4ou3uQ1aOG{PxtY9@pBKsh*b%i@){`}9 zcsTyz0A>&9)n50eY zh_n>6$facajEumOh@kK5tf?k~H*u4M+YCBwynNW1yIlba`=K@Mzr~#8uG+C}ZB| zSzPyIKUOu;;txCJSCJ4;N>pW{D-67>Ebx|-)^S6}*9HuHqO0J(;vOGhNQrZGc|4yQ zahs>Kcg&%0-0s^1*1_&xJw<^LEMc98VDU_BE#egxH zH=-;S)g_>of`j!96@BeGzM>^?+qBnYvh37I$%mwt!>)!_)U;wW! z7T-h7-wVL~5OB7(Gq*P}G<5hqED2Hoee8h&0si;xpb#I)9|b~3;C%Q18gEXt+m}w-Xj_ma za(#YxX5@L2!-}okbSP;(*0!gKys-7ns^-CI@@__ZukNZPbi?#hi+YLk!g}6S73-zf z)BRPOr`tSED<0nabq7QSi^w-E!IP#>C#R?N9^@>c`rdW4wQKQrOS)C8fwb@|G?91w zpX!TIEvG+p6&LRheb%cvoWkJ3U5?Rr_HI){wX5@3L|%|j+mtCm%ddFo3!ZwMHE?fr zmv3$ATBrCjZvj6ipxS0P@&>)@(o$)t>sx&j_r-^%&xS3gDqF!r@Sp&Q7(Az?;6$0rMQdjQeY{iEYtJz^B*T4XSJ<1l%l|3mo-tzPFy$+S?p}p&bhpc zE_uA_@9%f5P#RUf-G=hpdQaZzAJezB?ggS1MR}LM&nLRMU$4HtHU31CkiSlY{kkRe z6#cq!!IKu)GP9V$6-6dbgG#y>FOYnCKP4R_qSN+#WlwW(v`bwheZ}8vxjCaKBIVx3 zR(X*YcZTef`jfGvvs?YH=U3*-(WO`lr4?K$UHx9e!7VGC>ENf9*^Bd><4;*Hd8h8sCo7kwW2R>#d3ar5vQ$yh` z2v{bcY?i+3rI)>)B~CsM-Z^x2≺CLJf?R%;xnzZhb&A^OBD&)6YJpC&i4o^RJ!h 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 b<$LOoj5z4`ScU?G0z?W51a!jiT>F0k=4&8R literal 0 HcmV?d00001 diff --git a/anylink/web/src/components/audit/Access.vue b/anylink/web/src/components/audit/Access.vue new file mode 100644 index 0000000..bdab61b --- /dev/null +++ b/anylink/web/src/components/audit/Access.vue @@ -0,0 +1,321 @@ + + + + + \ No newline at end of file diff --git a/anylink/web/src/components/audit/ActLog.vue b/anylink/web/src/components/audit/ActLog.vue new file mode 100644 index 0000000..ab0e79e --- /dev/null +++ b/anylink/web/src/components/audit/ActLog.vue @@ -0,0 +1,263 @@ + + + + + \ No newline at end of file diff --git a/anylink/web/src/layout/LayoutAside.vue b/anylink/web/src/layout/LayoutAside.vue index 332190a..cfbbc59 100644 --- a/anylink/web/src/layout/LayoutAside.vue +++ b/anylink/web/src/layout/LayoutAside.vue @@ -56,7 +56,7 @@ 用户组列表 - + @@ -399,6 +426,7 @@ export default { addr:"", tls:false, base_dn:"", + object_class:"person", search_attr:"sAMAccountName", member_of:"", bind_name:"", @@ -415,6 +443,21 @@ export default { link_acl: [], auth : {}, }, + authLoginDialog : false, + authLoginLoading : false, + authLoginForm : { + name : "", + pwd : "", + }, + authLoginRules: { + name: [ + {required: true, message: '请输入账号', trigger: 'blur'}, + ], + pwd: [ + {required: true, message: '请输入密码', trigger: 'blur'}, + {min: 6, message: '长度至少 6 个字符', trigger: 'blur'} + ], + }, rules: { name: [ {required: true, message: '请输入组名', trigger: 'blur'}, @@ -437,7 +480,7 @@ export default { {required: true, message: '请输入服务器地址(含端口)', trigger: 'blur'} ], "auth.ldap.bind_name": [ - {required: true, message: '请输入管理员账号', trigger: 'blur'} + {required: true, message: '请输入管理员 DN', trigger: 'blur'} ], "auth.ldap.bind_pwd": [ {required: true, message: '请输入管理员密码', trigger: 'blur'} @@ -445,6 +488,9 @@ export default { "auth.ldap.base_dn": [ {required: true, message: '请输入Base DN值', trigger: 'blur'} ], + "auth.ldap.object_class": [ + {required: true, message: '请输入用户对象类', trigger: 'blur'} + ], "auth.ldap.search_attr": [ {required: true, message: '请输入用户唯一ID', trigger: 'blur'} ], @@ -457,6 +503,9 @@ export default { this.ruleForm.auth = JSON.parse(JSON.stringify(this.defAuth)); return ; } + if (row.auth.type == "ldap" && ! row.auth.ldap.object_class) { + row.auth.ldap.object_class = this.defAuth.ldap.object_class; + } this.ruleForm.auth = Object.assign(JSON.parse(JSON.stringify(this.defAuth)), row.auth); }, handleDel(row) { @@ -549,6 +598,44 @@ export default { }); }); }, + testAuthLogin() { + this.$refs["authLoginForm"].validate((valid) => { + if (!valid) { + console.log('error submit!!'); + return false; + } + this.authLoginLoading = true; + axios.post('/group/auth_login', {name:this.authLoginForm.name, + pwd:this.authLoginForm.pwd, + auth:this.ruleForm.auth}).then(resp => { + const rdata = resp.data; + if (rdata.code === 0) { + this.$message.success("登录成功"); + } else { + this.$message.error(rdata.msg); + } + this.authLoginLoading = false; + console.log(rdata); + }).catch(error => { + this.$message.error('哦,请求出错'); + console.log(error); + this.authLoginLoading = false; + }); + }); + }, + openAuthLoginDialog() { + this.$refs["ruleForm"].validate((valid) => { + if (!valid) { + console.log('error submit!!'); + return false; + } + this.authLoginDialog = true; + // set authLoginFormName focus + this.$nextTick(() => { + this.$refs['authLoginFormName'].focus(); + }); + }); + }, resetForm(formName) { this.$refs[formName].resetFields(); }, @@ -598,4 +685,20 @@ export default { .el-select { width: 80px; } + +::v-deep .valgin-dialog{ + display: flex; + flex-direction: column; + margin:0 !important; + position:absolute; + top:50%; + left:50%; + transform:translate(-50%,-50%); + max-height:calc(100% - 30px); + max-width:calc(100% - 30px); +} +::v-deep .valgin-dialog .el-dialog__body{ + flex:1; + overflow: auto; +} diff --git a/anylink/web/src/pages/set/Audit.vue b/anylink/web/src/pages/set/Audit.vue index 4e3a19e..e85de33 100644 --- a/anylink/web/src/pages/set/Audit.vue +++ b/anylink/web/src/pages/set/Audit.vue @@ -1,300 +1,61 @@ - - diff --git a/anylink/web/src/pages/set/Other.vue b/anylink/web/src/pages/set/Other.vue index 43f96fa..04a0e9b 100644 --- a/anylink/web/src/pages/set/Other.vue +++ b/anylink/web/src/pages/set/Other.vue @@ -2,7 +2,13 @@ - + @@ -13,7 +19,11 @@ - + @@ -26,90 +36,252 @@ - 保存 + 保存 重置 - + + + + 秒 +

      + 请手动修改配置文件中的 audit_interval 参数后,再重启服务, + -1 代表关闭审计日志 +

      +
      - 天 -

      范围: 0 ~ 365天 , 0 代表永久保存

      + + 天 +

      + 范围: 0 ~ 365天 , + 0 代表永久保存 +

      - - + v-model="dataAuditLog.clear_time" + :picker-options="{ + start: '00:00', + step: '01:00', + end: '23:00', + }" + editable="false," + size="small" + placeholder="请选择" + style="width: 130px" + > + + - 保存 + 保存 重置 - +
      -
      + + + + + + + + 证书文件 + + + + + + + + 私钥文件 + + + + + + + 上传 + + + + + + + + + + + + + + 阿里云 + 腾讯云 + cloudflare + + + + + + + + + + + 申请 + 重置 + + + + + - - + - + + type="textarea" + :rows="5" + placeholder="请输入内容" + v-model="dataOther.banner" + > + type="textarea" + :rows="5" + placeholder="请输入内容" + v-model="dataOther.homeindex" + > + type="textarea" + :rows="10" + placeholder="请输入内容" + v-model="dataOther.account_mail" + > - 保存 + 保存 重置 -
      @@ -120,25 +292,130 @@ import axios from "axios"; export default { name: "Other", created() { - this.$emit('update:route_path', this.$route.path) - this.$emit('update:route_name', ['基础信息', '其他设置']) + this.$emit("update:route_path", this.$route.path); + this.$emit("update:route_name", ["基础信息", "其他设置"]); }, mounted() { - this.getSmtp() + this.getSmtp(); }, data() { return { - activeName: 'dataSmtp', + activeName: "dataSmtp", + datacertManage: "customCert", dataSmtp: {}, dataAuditLog: {}, + letsCert: { + domain: ``, + legomail: ``, + name: "", + renew: "", + aliyun: { + apiKey: "", + secretKey: "", + }, + txcloud: { + secretId: "", + secretKey: "", + }, + cfcloud: { + authEmail: "", + authKey: "", + }, + }, + customCert: { cert: "", key: "" }, dataOther: {}, rules: { - host: {required: true, message: '请输入服务器地址', trigger: 'blur'}, + host: { required: true, message: "请输入服务器地址", trigger: "blur" }, port: [ - {required: true, message: '请输入服务器端口', trigger: 'blur'}, - {type: 'number', message: '请输入正确的服务器端口', trigger: ['blur', 'change']} + { required: true, message: "请输入服务器端口", trigger: "blur" }, + { + type: "number", + message: "请输入正确的服务器端口", + trigger: ["blur", "change"], + }, + ], + issuer: { required: true, message: "请输入系统名称", trigger: "blur" }, + domain: { + required: true, + message: "请输入需要申请证书的域名", + trigger: "blur", + }, + legomail: { + required: true, + message: "请输入申请证书的邮箱地址", + trigger: "blur", + }, + name: { required: true, message: "请选择域名服务商", trigger: "blur" }, + }, + certUpload: "/set/other/customcert", + dnsProvider: { + aliyun: [ + { + label: "APIKey", + prop: "apiKey", + component: "el-input", + type: "password", + rules: { + required: true, + message: "请输入正确的APIKey", + trigger: "blur", + }, + }, + { + label: "SecretKey", + prop: "secretKey", + component: "el-input", + type: "password", + rules: { + required: true, + message: "请输入正确的SecretKey", + trigger: "blur", + }, + }, + ], + txcloud: [ + { + label: "SecretID", + prop: "secretId", + component: "el-input", + type: "password", + rules: { + required: true, + message: "请输入正确的APIKey", + trigger: "blur", + }, + }, + { + label: "SecretKey", + prop: "secretKey", + component: "el-input", + type: "password", + rules: { + required: true, + message: "请输入正确的APIKey", + trigger: "blur", + }, + }, + ], + cfcloud: [ + { + label: "Email", + prop: "email", + component: "el-input", + type: "text", + }, + { + label: "AuthKey", + prop: "authKey", + component: "el-input", + type: "password", + rules: { + required: true, + message: "请输入正确的APIKey", + trigger: "blur", + }, + }, ], - issuer: {required: true, message: '请输入系统名称', trigger: 'blur'}, }, }; }, @@ -147,118 +424,185 @@ export default { window.console.log(tab.name, event); switch (tab.name) { case "dataSmtp": - this.getSmtp() - break + this.getSmtp(); + break; case "dataAuditLog": - this.getAuditLog() - break + this.getAuditLog(); + break; + case "letsCert": + this.getletsCert(); + break; case "dataOther": - this.getOther() - break + this.getOther(); + break; } }, + beforeCertUpload(file) { + // if (file.type !== 'application/x-pem-file') { + // this.$message.error('只能上传 .pem 格式的证书文件') + // return false + // } + this.customCert.cert = file; + }, + beforeKeyUpload(file) { + // if (file.type !== 'application/x-pem-file') { + // this.$message.error('只能上传 .pem 格式的私钥文件') + // return false + // } + this.customCert.key = file; + }, getSmtp() { - axios.get('/set/other/smtp').then(resp => { - let rdata = resp.data - console.log(rdata) - if (rdata.code !== 0) { - this.$message.error(rdata.msg); - return; - } - this.dataSmtp = rdata.data - }).catch(error => { - this.$message.error('哦,请求出错'); - console.log(error); - }); + axios + .get("/set/other/smtp") + .then((resp) => { + let rdata = resp.data; + console.log(rdata); + if (rdata.code !== 0) { + this.$message.error(rdata.msg); + return; + } + this.dataSmtp = rdata.data; + }) + .catch((error) => { + this.$message.error("哦,请求出错"); + console.log(error); + }); }, getAuditLog() { - axios.get('/set/other/audit_log').then(resp => { - let rdata = resp.data - console.log(rdata) - if (rdata.code !== 0) { - this.$message.error(rdata.msg); - return; - } - this.dataAuditLog = rdata.data - }).catch(error => { - this.$message.error('哦,请求出错'); - console.log(error); - }); - }, + axios + .get("/set/other/audit_log") + .then((resp) => { + let rdata = resp.data; + console.log(rdata); + if (rdata.code !== 0) { + this.$message.error(rdata.msg); + return; + } + this.dataAuditLog = rdata.data; + }) + .catch((error) => { + this.$message.error("哦,请求出错"); + console.log(error); + }); + }, + getletsCert() { + axios + .get("/set/other/getcertset") + .then((resp) => { + let rdata = resp.data; + console.log(rdata); + if (rdata.code !== 0) { + this.$message.error(rdata.msg); + return; + } + this.letsCert = Object.assign({}, this.letsCert, rdata.data); + }) + .catch((error) => { + this.$message.error("哦,请求出错"); + console.log(error); + }); + }, getOther() { - axios.get('/set/other').then(resp => { - let rdata = resp.data - console.log(rdata) - if (rdata.code !== 0) { - this.$message.error(rdata.msg); - return; - } - this.dataOther = rdata.data - }).catch(error => { - this.$message.error('哦,请求出错'); - console.log(error); - }); + axios + .get("/set/other") + .then((resp) => { + let rdata = resp.data; + console.log(rdata); + if (rdata.code !== 0) { + this.$message.error(rdata.msg); + return; + } + this.dataOther = rdata.data; + }) + .catch((error) => { + this.$message.error("哦,请求出错"); + console.log(error); + }); }, submitForm(formName) { this.$refs[formName].validate((valid) => { if (!valid) { - alert('error submit!'); + alert("error submit!"); } switch (formName) { case "dataSmtp": - axios.post('/set/other/smtp/edit', this.dataSmtp).then(resp => { - var rdata = resp.data + axios.post("/set/other/smtp/edit", this.dataSmtp).then((resp) => { + var rdata = resp.data; console.log(rdata); if (rdata.code === 0) { this.$message.success(rdata.msg); } else { this.$message.error(rdata.msg); } - - }) + }); break; case "dataAuditLog": - axios.post('/set/other/audit_log/edit', this.dataAuditLog).then(resp => { - var rdata = resp.data + axios + .post("/set/other/audit_log/edit", this.dataAuditLog) + .then((resp) => { + var rdata = resp.data; + console.log(rdata); + if (rdata.code === 0) { + this.$message.success(rdata.msg); + } else { + this.$message.error(rdata.msg); + } + }); + break; + case "letsCert": + axios.post("/set/other/createcert", this.letsCert).then((resp) => { + var rdata = resp.data; console.log(rdata); if (rdata.code === 0) { this.$message.success(rdata.msg); } else { this.$message.error(rdata.msg); } - }) + }); + break; + case "customCert": + var formData = new FormData(); + formData.append("cert", this.customCert.cert); + formData.append("key", this.customCert.key); + axios.post(this.certUpload, formData).then((resp) => { + var rdata = resp.data; + console.log(rdata); + if (rdata.code === 0) { + this.$message.success(rdata.msg); + } else { + this.$message.error(rdata.msg); + } + }); break; case "dataOther": - axios.post('/set/other/edit', this.dataOther).then(resp => { - var rdata = resp.data + axios.post("/set/other/edit", this.dataOther).then((resp) => { + var rdata = resp.data; console.log(rdata); if (rdata.code === 0) { this.$message.success(rdata.msg); } else { this.$message.error(rdata.msg); } - }) + }); break; } - }); }, resetForm(formName) { this.$refs[formName].resetFields(); - } + }, }, -} +}; diff --git a/anylink/web/src/pages/user/IpMap.vue b/anylink/web/src/pages/user/IpMap.vue index b6f6076..5b4755a 100644 --- a/anylink/web/src/pages/user/IpMap.vue +++ b/anylink/web/src/pages/user/IpMap.vue @@ -1,269 +1,285 @@ diff --git a/anylink/web/src/pages/user/List.vue b/anylink/web/src/pages/user/List.vue index 45b3805..303de1e 100644 --- a/anylink/web/src/pages/user/List.vue +++ b/anylink/web/src/pages/user/List.vue @@ -10,7 +10,24 @@ @click="handleEdit('')">添加 - + + + + 批量添加 + + + + 下载模版 + + + + @@ -87,7 +104,8 @@ width="70"> @@ -182,6 +200,18 @@ + + + + + @@ -208,6 +238,7 @@ 启用 停用 + 过期 @@ -245,6 +276,11 @@ export default { grouNames: [], tableData: [], count: 10, + pickerOptions: { + disabledDate(time) { + return time.getTime() < Date.now(); + } + }, searchData: '', otpImgData: {visible: false, username: '', nickname: '', base64Img: ''}, ruleForm: { @@ -264,7 +300,6 @@ export default { {required: true, message: '请输入用户邮箱', trigger: 'blur'}, {type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change']} ], - password: [ {min: 6, message: '长度大于 6 个字符', trigger: 'blur'} ], @@ -285,6 +320,24 @@ export default { }, methods: { + upLoadUser(item) { + const formData = new FormData(); + formData.append("file", item.file); + axios.post('/user/uploaduser', formData, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then(resp => { + if (resp.data.code === 0) { + this.$message.success(resp.data.data); + this.getData(1); + } else { + this.$message.error(resp.data.msg); + this.getData(1); + } + console.log(resp.data); + }) + }, getOtpImg(row) { // this.base64Img = Buffer.from(data).toString('base64'); this.otpImgData.visible = true diff --git a/anylink/web/src/pages/user/Online.vue b/anylink/web/src/pages/user/Online.vue index f9041cb..9b4f141 100644 --- a/anylink/web/src/pages/user/Online.vue +++ b/anylink/web/src/pages/user/Online.vue @@ -27,6 +27,15 @@ prop="mac_addr" label="MAC地址"> + + + + +