2022-09-15 10:44:43 +08:00
|
|
|
package v1
|
|
|
|
|
|
|
|
import (
|
2022-09-14 23:27:17 +08:00
|
|
|
"errors"
|
|
|
|
|
2022-10-17 16:32:31 +08:00
|
|
|
"github.com/1Panel-dev/1Panel/backend/app/api/v1/helper"
|
|
|
|
"github.com/1Panel-dev/1Panel/backend/app/dto"
|
|
|
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
|
|
|
"github.com/1Panel-dev/1Panel/backend/global"
|
|
|
|
"github.com/1Panel-dev/1Panel/backend/utils/mfa"
|
|
|
|
"github.com/1Panel-dev/1Panel/backend/utils/ntp"
|
2022-09-15 10:44:43 +08:00
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (b *BaseApi) GetSettingInfo(c *gin.Context) {
|
|
|
|
setting, err := settingService.GetSettingInfo()
|
|
|
|
if err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
helper.SuccessWithData(c, setting)
|
|
|
|
}
|
|
|
|
|
2022-09-09 17:17:02 +08:00
|
|
|
func (b *BaseApi) UpdateSetting(c *gin.Context) {
|
2022-09-15 10:44:43 +08:00
|
|
|
var req dto.SettingUpdate
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err := global.VALID.Struct(req); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2022-09-08 18:47:15 +08:00
|
|
|
if err := settingService.Update(c, req.Key, req.Value); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
helper.SuccessWithData(c, nil)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (b *BaseApi) UpdatePassword(c *gin.Context) {
|
|
|
|
var req dto.PasswordUpdate
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err := global.VALID.Struct(req); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := settingService.UpdatePassword(c, req.OldPassword, req.NewPassword); err != nil {
|
2022-09-15 10:44:43 +08:00
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
helper.SuccessWithData(c, nil)
|
|
|
|
}
|
2022-09-13 18:45:03 +08:00
|
|
|
|
2022-09-29 16:15:59 +08:00
|
|
|
func (b *BaseApi) HandlePasswordExpired(c *gin.Context) {
|
|
|
|
var req dto.PasswordUpdate
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err := global.VALID.Struct(req); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := settingService.HandlePasswordExpired(c, req.OldPassword, req.NewPassword); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
helper.SuccessWithData(c, nil)
|
|
|
|
}
|
|
|
|
|
2022-09-13 18:45:03 +08:00
|
|
|
func (b *BaseApi) SyncTime(c *gin.Context) {
|
|
|
|
var timeLayoutStr = "2006-01-02 15:04:05"
|
|
|
|
|
|
|
|
ntime, err := ntp.Getremotetime()
|
|
|
|
if err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
ts := ntime.Format(timeLayoutStr)
|
|
|
|
if err := ntp.UpdateSystemDate(ts); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
helper.SuccessWithData(c, ts)
|
|
|
|
}
|
2022-09-14 23:27:17 +08:00
|
|
|
|
|
|
|
func (b *BaseApi) CleanMonitor(c *gin.Context) {
|
|
|
|
if err := global.DB.Exec("DELETE FROM monitor_bases").Error; err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err := global.DB.Exec("DELETE FROM monitor_ios").Error; err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if err := global.DB.Exec("DELETE FROM monitor_networks").Error; err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
helper.SuccessWithData(c, nil)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (b *BaseApi) GetMFA(c *gin.Context) {
|
|
|
|
otp, err := mfa.GetOtp("admin")
|
|
|
|
if err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
helper.SuccessWithData(c, otp)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (b *BaseApi) MFABind(c *gin.Context) {
|
|
|
|
var req dto.MfaCredential
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
success := mfa.ValidCode(req.Code, req.Secret)
|
|
|
|
if !success {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, errors.New("code is not valid"))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := settingService.Update(c, "MFAStatus", "enable"); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := settingService.Update(c, "MFASecret", req.Secret); err != nil {
|
|
|
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
helper.SuccessWithData(c, nil)
|
|
|
|
}
|