93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package controller
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/skip2/go-qrcode"
|
|
"hy2xs-admin/model/dto"
|
|
"hy2xs-admin/model/entity"
|
|
"hy2xs-admin/model/vo"
|
|
"hy2xs-admin/service"
|
|
"time"
|
|
)
|
|
|
|
func Hysteria2Auth(c *gin.Context) {
|
|
var req dto.Hysteria2AuthDto
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
vo.Hysteria2AuthBadRequest(c)
|
|
return
|
|
}
|
|
if req.Addr == nil || req.Auth == nil || req.Tx == nil {
|
|
vo.Hysteria2AuthBadRequest(c)
|
|
return
|
|
}
|
|
id, username, err := service.Hysteria2Auth(*req.Auth)
|
|
if err != nil || username == "" {
|
|
vo.Hysteria2AuthFail("", c)
|
|
return
|
|
}
|
|
|
|
// Обновление времени последнего подключения
|
|
now := time.Now().UnixMilli()
|
|
if err = service.UpdateAccount(entity.Account{
|
|
BaseEntity: entity.BaseEntity{Id: &id},
|
|
ConAt: &now,
|
|
}); err != nil {
|
|
vo.Fail(err.Error(), c)
|
|
return
|
|
}
|
|
vo.Hysteria2AuthSuccess(username, c)
|
|
}
|
|
|
|
func Hysteria2Kick(c *gin.Context) {
|
|
hysteria2KickDto, err := validateField(c, dto.Hysteria2KickDto{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
err = service.Hysteria2Kick(hysteria2KickDto.Ids, *hysteria2KickDto.KickUtilTime)
|
|
if err != nil {
|
|
vo.Fail(err.Error(), c)
|
|
return
|
|
}
|
|
vo.Success(nil, c)
|
|
}
|
|
|
|
func Hysteria2ChangeVersion(c *gin.Context) {
|
|
vo.Fail("Смена версии Hysteria2 отключена: runtime управляется install-оркестратором HY2XS", c)
|
|
}
|
|
|
|
func ListRelease(c *gin.Context) {
|
|
vo.Success([]string{}, c)
|
|
}
|
|
|
|
func Hysteria2Url(c *gin.Context) {
|
|
hysteria2UrlDto, err := validateField(c, dto.Hysteria2UrlDto{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
url, err := service.Hysteria2Url(*hysteria2UrlDto.AccountId)
|
|
if err != nil {
|
|
vo.Fail(err.Error(), c)
|
|
return
|
|
}
|
|
// Генерация QR-кода
|
|
qrCode, err := qrcode.Encode(url, qrcode.Medium, 300)
|
|
if err != nil {
|
|
vo.Fail(err.Error(), c)
|
|
return
|
|
}
|
|
hysteria2UrlVo := vo.Hysteria2UrlVo{
|
|
Url: url,
|
|
QrCode: qrCode,
|
|
}
|
|
vo.Success(hysteria2UrlVo, c)
|
|
}
|
|
|
|
func Hysteria2SubscribeUrl(c *gin.Context) {
|
|
vo.Fail("subscription delivery is out of scope in HY2XS baseline", c)
|
|
}
|
|
|
|
func Hysteria2Subscribe(c *gin.Context) {
|
|
vo.Fail("subscription delivery is out of scope in HY2XS baseline", c)
|
|
}
|