mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-09-25 08:00:56 +00:00
66 lines
2.3 KiB
Go
66 lines
2.3 KiB
Go
package apikey_migration
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/1Panel-dev/1Panel/core/app/model"
|
|
"github.com/1Panel-dev/1Panel/core/init/session/psession"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const (
|
|
panelAdmin = "panel_admin"
|
|
enterpriseUser = "enterprise_user"
|
|
)
|
|
|
|
func ToEnterprise(tx *gorm.DB, superAdminID string) error {
|
|
if strings.TrimSpace(superAdminID) == "" {
|
|
return errors.New("missing enterprise super administrator identity")
|
|
}
|
|
return moveOwner(tx, panelAdmin, psession.SuperAdminSessionUserID, enterpriseUser, superAdminID)
|
|
}
|
|
|
|
func ToCommunity(tx *gorm.DB, superAdminID string) error {
|
|
if tx == nil {
|
|
return errors.New("missing Core database")
|
|
}
|
|
if strings.TrimSpace(superAdminID) == "" {
|
|
return errors.New("missing enterprise super administrator identity")
|
|
}
|
|
if tx.Migrator().HasTable(&model.APIKey{}) {
|
|
now := time.Now()
|
|
if err := tx.Model(&model.APIKey{}).
|
|
Where("owner_type = ? AND owner_id <> ? AND status <> ?", enterpriseUser, superAdminID, "Revoked").
|
|
Updates(map[string]interface{}{"status": "Revoked", "secret_ciphertext": "", "active_name": nil, "allow_app_binding": false, "revoked_at": now, "revision": gorm.Expr("revision + 1")}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if tx.Migrator().HasTable(&model.LegacyAPIKeyPolicy{}) {
|
|
if err := tx.Where("owner_type = ? AND owner_id <> ?", enterpriseUser, superAdminID).Delete(&model.LegacyAPIKeyPolicy{}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return moveOwner(tx, enterpriseUser, superAdminID, panelAdmin, psession.SuperAdminSessionUserID)
|
|
}
|
|
|
|
func moveOwner(tx *gorm.DB, fromType, fromID, toType, toID string) error {
|
|
if tx == nil {
|
|
return errors.New("missing Core database")
|
|
}
|
|
if tx.Migrator().HasTable(&model.APIKey{}) {
|
|
if err := tx.Model(&model.APIKey{}).Where("owner_type = ? AND owner_id = ?", fromType, fromID).
|
|
Updates(map[string]interface{}{"owner_type": toType, "owner_id": toID, "revision": gorm.Expr("revision + 1")}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if tx.Migrator().HasTable(&model.LegacyAPIKeyPolicy{}) {
|
|
if err := tx.Model(&model.LegacyAPIKeyPolicy{}).Where("owner_type = ? AND owner_id = ?", fromType, fromID).
|
|
Updates(map[string]interface{}{"owner_type": toType, "owner_id": toID, "revision": gorm.Expr("revision + 1")}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|