2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 09:13:49 +08:00

feat: 用户支持开启2FA

This commit is contained in:
2025-05-14 19:04:03 +08:00
parent 462d6c0789
commit 5fd00acd48
15 changed files with 476 additions and 88 deletions

View File

@@ -19,7 +19,7 @@ func NewSettingService(setting biz.SettingRepo) *SettingService {
}
func (s *SettingService) Get(w http.ResponseWriter, r *http.Request) {
setting, err := s.settingRepo.GetPanelSetting(r.Context())
setting, err := s.settingRepo.GetPanelSetting()
if err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
@@ -36,7 +36,7 @@ func (s *SettingService) Update(w http.ResponseWriter, r *http.Request) {
}
restart := false
if restart, err = s.settingRepo.UpdatePanelSetting(r.Context(), req); err != nil {
if restart, err = s.settingRepo.UpdatePanelSetting(req); err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}

View File

@@ -1,10 +1,13 @@
package service
import (
"bytes"
"crypto/rsa"
"crypto/sha256"
"encoding/base64"
"encoding/gob"
"fmt"
"image/png"
"net"
"net/http"
"strings"
@@ -217,3 +220,74 @@ func (s *UserService) UpdatePassword(w http.ResponseWriter, r *http.Request) {
Success(w, nil)
}
func (s *UserService) UpdateEmail(w http.ResponseWriter, r *http.Request) {
req, err := Bind[request.UserUpdateEmail](r)
if err != nil {
Error(w, http.StatusUnprocessableEntity, "%v", err)
return
}
if err = s.userRepo.UpdateEmail(req.ID, req.Email); err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}
Success(w, nil)
}
func (s *UserService) GenerateTwoFA(w http.ResponseWriter, r *http.Request) {
req, err := Bind[request.UserID](r)
if err != nil {
Error(w, http.StatusUnprocessableEntity, "%v", err)
return
}
img, url, secret, err := s.userRepo.GenerateTwoFA(req.ID)
if err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}
buf := new(bytes.Buffer)
if err = png.Encode(buf, img); err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}
Success(w, chix.M{
"img": base64.StdEncoding.EncodeToString(buf.Bytes()),
"url": url,
"secret": secret,
})
}
func (s *UserService) UpdateTwoFA(w http.ResponseWriter, r *http.Request) {
req, err := Bind[request.UserUpdateTwoFA](r)
if err != nil {
Error(w, http.StatusUnprocessableEntity, "%v", err)
return
}
if err = s.userRepo.UpdateTwoFA(req.ID, req.Code, req.Secret); err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}
Success(w, nil)
}
func (s *UserService) Delete(w http.ResponseWriter, r *http.Request) {
req, err := Bind[request.UserID](r)
if err != nil {
Error(w, http.StatusUnprocessableEntity, "%v", err)
return
}
if err = s.userRepo.Delete(req.ID); err != nil {
Error(w, http.StatusInternalServerError, "%v", err)
return
}
Success(w, nil)
}