:art:新增用户头像更换、客户端邮件通知
This commit is contained in:
@@ -202,49 +202,15 @@ func (clients) Download(c *gin.Context) {
|
||||
var keys template_data.Keys
|
||||
_ = json.Unmarshal([]byte(data.Keys), &keys)
|
||||
|
||||
setting, err := repository.System().GetServerSetting()
|
||||
serverSetting, err := repository.System().GetServerSetting()
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithMsg("获取设置失败")
|
||||
return
|
||||
}
|
||||
|
||||
var serverDNS []string
|
||||
if *data.UseServerDns == 1 {
|
||||
serverDNS = setting.DnsServer
|
||||
}
|
||||
|
||||
// 处理一下数据
|
||||
execData := template_data.ClientConfig{
|
||||
PrivateKey: keys.PrivateKey,
|
||||
IpAllocation: data.IpAllocation,
|
||||
MTU: setting.MTU,
|
||||
DNS: strings.Join(serverDNS, ","),
|
||||
PublicKey: data.Server.PublicKey,
|
||||
PresharedKey: keys.PresharedKey,
|
||||
AllowedIPS: data.AllowedIps,
|
||||
Endpoint: setting.EndpointAddress,
|
||||
ListenPort: data.Server.ListenPort,
|
||||
PersistentKeepalive: setting.PersistentKeepalive,
|
||||
}
|
||||
|
||||
// 不同环境下处理文件路径
|
||||
var outPath = "/tmp/" + fmt.Sprintf("%s.conf", data.Name)
|
||||
var templatePath = "./template/wg.client.conf"
|
||||
if os.Getenv("GIN_MODE") != "release" {
|
||||
outPath = "E:\\Workspace\\Go\\wireguard-dashboard\\template\\" + fmt.Sprintf("%s.conf", data.Name)
|
||||
templatePath = "E:\\Workspace\\Go\\wireguard-dashboard\\template\\wg.client.conf"
|
||||
}
|
||||
|
||||
// 渲染数据
|
||||
parseTemplate, err := utils.Template().Parse(templatePath)
|
||||
outPath, err := utils.Wireguard().GenerateClientFile(&data, serverSetting)
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithMsg("读取模板文件失败")
|
||||
return
|
||||
}
|
||||
|
||||
err = utils.Template().Execute(parseTemplate, execData, outPath)
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithMsg("文件渲染失败")
|
||||
utils.GinResponse(c).FailedWithErr("生成失败", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -279,49 +245,15 @@ func (clients) GenerateQrCode(c *gin.Context) {
|
||||
var keys template_data.Keys
|
||||
_ = json.Unmarshal([]byte(data.Keys), &keys)
|
||||
|
||||
setting, err := repository.System().GetServerSetting()
|
||||
serverSetting, err := repository.System().GetServerSetting()
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithMsg("获取设置失败")
|
||||
return
|
||||
}
|
||||
|
||||
var serverDNS []string
|
||||
if *data.UseServerDns == 1 {
|
||||
serverDNS = setting.DnsServer
|
||||
}
|
||||
|
||||
// 处理一下数据
|
||||
execData := template_data.ClientConfig{
|
||||
PrivateKey: keys.PrivateKey,
|
||||
IpAllocation: data.IpAllocation,
|
||||
MTU: setting.MTU,
|
||||
DNS: strings.Join(serverDNS, ","),
|
||||
PublicKey: data.Server.PublicKey,
|
||||
PresharedKey: keys.PresharedKey,
|
||||
AllowedIPS: data.AllowedIps,
|
||||
Endpoint: setting.EndpointAddress,
|
||||
ListenPort: data.Server.ListenPort,
|
||||
PersistentKeepalive: setting.PersistentKeepalive,
|
||||
}
|
||||
|
||||
// 不同环境下处理文件路径
|
||||
var outPath = "/tmp/" + fmt.Sprintf("%s.conf", data.Name)
|
||||
var templatePath = "./template/wg.client.conf"
|
||||
if os.Getenv("GIN_MODE") != "release" {
|
||||
outPath = "E:\\Workspace\\Go\\wireguard-dashboard\\template\\" + fmt.Sprintf("%s.conf", data.Name)
|
||||
templatePath = "E:\\Workspace\\Go\\wireguard-dashboard\\template\\wg.client.conf"
|
||||
}
|
||||
|
||||
// 渲染数据
|
||||
parseTemplate, err := utils.Template().Parse(templatePath)
|
||||
outPath, err := utils.Wireguard().GenerateClientFile(&data, serverSetting)
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithMsg("读取模板文件失败")
|
||||
return
|
||||
}
|
||||
|
||||
err = utils.Template().Execute(parseTemplate, execData, outPath)
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithMsg("文件渲染失败")
|
||||
utils.GinResponse(c).FailedWithErr("生成失败", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -347,6 +279,59 @@ func (clients) GenerateQrCode(c *gin.Context) {
|
||||
})
|
||||
}
|
||||
|
||||
// SendEmail
|
||||
// @description: 发送邮件
|
||||
// @receiver clients
|
||||
// @param c
|
||||
func (clients) SendEmail(c *gin.Context) {
|
||||
var id = c.Param("id")
|
||||
if id == "" || id == "undefined" {
|
||||
utils.GinResponse(c).FailedWithMsg("id不能为空")
|
||||
return
|
||||
}
|
||||
|
||||
// 先校验一下邮箱发送是否可用
|
||||
if err := utils.Mail().VerifyConfig(); err != nil {
|
||||
utils.GinResponse(c).FailedWithMsg(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 获取该客户端信息
|
||||
clientInfo, err := repository.Client().GetById(id)
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithErr("获取失败", err)
|
||||
return
|
||||
}
|
||||
|
||||
if clientInfo.Email == "" {
|
||||
utils.GinResponse(c).FailedWithMsg("当前客户端未配置联系邮箱!")
|
||||
return
|
||||
}
|
||||
|
||||
serverSetting, err := repository.System().GetServerSetting()
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithMsg("获取设置失败")
|
||||
return
|
||||
}
|
||||
|
||||
outPath, err := utils.Wireguard().GenerateClientFile(&clientInfo, serverSetting)
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithErr("生成失败", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = utils.Mail().SendMail(clientInfo.Email, fmt.Sprintf("客户端: %s", clientInfo.Name), "请查收附件", outPath)
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithErr("发送邮件失败", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err = os.Remove(outPath); err != nil {
|
||||
log.Errorf("删除临时文件失败: %s", err.Error())
|
||||
}
|
||||
utils.GinResponse(c).OK()
|
||||
}
|
||||
|
||||
// Status
|
||||
// @description: 获取客户端状态信息,链接状态等
|
||||
// @receiver clients
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"gitee.ltd/lxh/logger/log"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strings"
|
||||
"wireguard-dashboard/client"
|
||||
"wireguard-dashboard/component"
|
||||
"wireguard-dashboard/constant"
|
||||
@@ -157,6 +160,30 @@ func (user) Save(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
// 只有修改才有头像值
|
||||
if p.Avatar != "" && p.ID != "" {
|
||||
// 判断头像是base64开头的就需要重新上传更新
|
||||
if strings.HasPrefix(p.Avatar, "data:image/png;base64,") {
|
||||
avatar := strings.Replace(p.Avatar, "data:image/png;base64,", "", -1)
|
||||
avatarByte, err := base64.StdEncoding.DecodeString(avatar)
|
||||
if err != nil {
|
||||
log.Errorf("反解析头像失败: %v", err.Error())
|
||||
utils.GinResponse(c).FailedWithMsg("上传头像失败")
|
||||
return
|
||||
}
|
||||
|
||||
file, err := utils.FileSystem().UploadFile(avatarByte, ".png")
|
||||
if err != nil {
|
||||
log.Errorf("上传头像失败: %v", err.Error())
|
||||
utils.GinResponse(c).FailedWithMsg("上传头像失败")
|
||||
return
|
||||
}
|
||||
|
||||
p.Avatar = file
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if err := repository.User().Save(&entity.User{
|
||||
Base: entity.Base{
|
||||
Id: p.ID,
|
||||
@@ -250,3 +277,17 @@ func (user) DeleteUser(c *gin.Context) {
|
||||
|
||||
utils.GinResponse(c).OK()
|
||||
}
|
||||
|
||||
// ChangeAvatar
|
||||
// @description: 切换头像
|
||||
// @receiver user
|
||||
// @param c
|
||||
func (user) ChangeAvatar(c *gin.Context) {
|
||||
avatar, err := utils.Avatar().GenerateAvatar(false)
|
||||
if err != nil {
|
||||
utils.GinResponse(c).FailedWithErr("生成头像失败", err)
|
||||
return
|
||||
}
|
||||
|
||||
utils.GinResponse(c).OKWithData(fmt.Sprintf("data:image/png;base64,%s", base64.StdEncoding.EncodeToString([]byte(avatar))))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user