Files
1Panel/core/app/auth/api_key_panel.go

46 lines
1.8 KiB
Go

package auth
import (
"github.com/1Panel-dev/1Panel/core/app/dto"
"github.com/1Panel-dev/1Panel/core/app/repo"
"github.com/1Panel-dev/1Panel/core/buserr"
"github.com/1Panel-dev/1Panel/core/init/session/psession"
"github.com/gin-gonic/gin"
)
type PanelAPIKeyOwnerProvider struct{}
func (p PanelAPIKeyOwnerProvider) CurrentAPIKeyOwner(c *gin.Context) (APIKeyOwner, error) {
value, ok := c.Get(psession.GinContextSessionUserKey)
u, valid := value.(psession.SessionUser)
if !ok || !valid || u.ID != psession.SuperAdminSessionUserID {
return APIKeyOwner{}, buserr.New("ErrNotLogin")
}
return p.ResolveAPIKeyOwner(c, APIKeyOwnerPanelAdmin, u.ID)
}
func (PanelAPIKeyOwnerProvider) ResolveAPIKeyOwner(_ *gin.Context, ownerType, ownerID string) (APIKeyOwner, error) {
if ownerType != APIKeyOwnerPanelAdmin || ownerID != psession.SuperAdminSessionUserID {
return APIKeyOwner{}, buserr.New("ErrApiConfigStatusInvalid")
}
name, err := repo.NewISettingRepo().GetValueByKey("UserName")
if err != nil || name == "" {
return APIKeyOwner{}, buserr.New("ErrApiConfigStatusInvalid")
}
return APIKeyOwner{Type: ownerType, ID: ownerID, Name: name, IsSuperAdmin: true}, nil
}
func (p PanelAPIKeyOwnerProvider) LoadLegacyAPIKey(owner APIKeyOwner) (APIAuthConfig, error) {
if _, err := p.ResolveAPIKeyOwner(nil, owner.Type, owner.ID); err != nil {
return APIAuthConfig{}, err
}
return LoadAPIAuthConfig(nil)
}
func (p PanelAPIKeyOwnerProvider) SaveLegacyAPIKey(owner APIKeyOwner, config APIAuthConfig) error {
if _, err := p.ResolveAPIKeyOwner(nil, owner.Type, owner.ID); err != nil {
return err
}
return StoreLegacyAPIConfig(dto.ApiInterfaceConfig{ApiInterfaceStatus: config.ApiInterfaceStatus, ApiKey: config.ApiKey, IpWhiteList: config.IpWhiteList, ApiTrustedProxies: config.ApiTrustedProxies, ApiKeyValidityTime: config.ApiKeyValidityTime})
}