Skip to content

Commit

Permalink
fix(patch): turn two functions into patches
Browse files Browse the repository at this point in the history
  • Loading branch information
KirCute committed Dec 29, 2024
1 parent cea7334 commit 922b610
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 62 deletions.
5 changes: 5 additions & 0 deletions internal/bootstrap/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ func InitConfig() {
log.Fatalf("failed to create config file: %+v", err)
}
conf.Conf = conf.DefaultConfig()
LastLaunchedVersion = conf.Version
conf.Conf.LastLaunchedVersion = conf.Version
if !utils.WriteJsonToFile(configPath, conf.Conf) {
log.Fatalf("failed to create default config file")
Expand All @@ -48,6 +49,10 @@ func InitConfig() {
if err != nil {
log.Fatalf("load config error: %+v", err)
}
LastLaunchedVersion = conf.Conf.LastLaunchedVersion
if conf.Version != "dev" || LastLaunchedVersion == "" {
conf.Conf.LastLaunchedVersion = conf.Version
}
// update config.json struct
confBody, err := utils.Json.MarshalIndent(conf.Conf, "", " ")
if err != nil {
Expand Down
35 changes: 0 additions & 35 deletions internal/bootstrap/data/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,39 +64,4 @@ func initUser() {
utils.Log.Fatalf("[init user] Failed to get guest user: %v", err)
}
}
hashPwdForOldVersion()
updateAuthnForOldVersion()
}

func hashPwdForOldVersion() {
users, _, err := op.GetUsers(1, -1)
if err != nil {
utils.Log.Fatalf("[hash pwd for old version] failed get users: %v", err)
}
for i := range users {
user := users[i]
if user.PwdHash == "" {
user.SetPassword(user.Password)
user.Password = ""
if err := db.UpdateUser(&user); err != nil {
utils.Log.Fatalf("[hash pwd for old version] failed update user: %v", err)
}
}
}
}

func updateAuthnForOldVersion() {
users, _, err := op.GetUsers(1, -1)
if err != nil {
utils.Log.Fatalf("[update authn for old version] failed get users: %v", err)
}
for i := range users {
user := users[i]
if user.Authn == "" {
user.Authn = "[]"
if err := db.UpdateUser(&user); err != nil {
utils.Log.Fatalf("[update authn for old version] failed update user: %v", err)
}
}
}
}
45 changes: 19 additions & 26 deletions internal/bootstrap/patch.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ package bootstrap

import (
"fmt"
"github.com/alist-org/alist/v3/cmd/flags"
"github.com/alist-org/alist/v3/internal/bootstrap/patch"
"github.com/alist-org/alist/v3/internal/conf"
"github.com/alist-org/alist/v3/pkg/utils"
log "github.com/sirupsen/logrus"
"path/filepath"
)

var LastLaunchedVersion = ""

func safeCall(v string, i int, f func()) {
defer func() {
if r := recover(); r != nil {
Expand Down Expand Up @@ -42,33 +41,27 @@ func InitUpgradePatch() {
if conf.Version == "dev" {
return
}
lastLaunchedVersion := conf.Conf.LastLaunchedVersion
if lastLaunchedVersion == "" {
lastLaunchedVersion = "v3.41.0"
if LastLaunchedVersion == conf.Version {
return
}
if LastLaunchedVersion == "" {
LastLaunchedVersion = "v0.0.0"
}
if lastLaunchedVersion == conf.Version {
major, minor, patchNum, err := getVersion(LastLaunchedVersion)
if err != nil {
utils.Log.Warnf("Failed to parse last launched version %s: %v, skipping all patches and rewrite last launched version", LastLaunchedVersion, err)
return
}
major, minor, patchNum, err := getVersion(lastLaunchedVersion)
if err == nil {
for _, vp := range patch.UpgradePatches {
ma, mi, pn, err := getVersion(vp.Version)
if err != nil {
utils.Log.Errorf("Skip invalid version %s patches: %v", vp.Version, err)
continue
}
if compareVersion(ma, mi, pn, major, minor, patchNum) {
for i, p := range vp.Patches {
safeCall(vp.Version, i, p)
}
for _, vp := range patch.UpgradePatches {
ma, mi, pn, err := getVersion(vp.Version)
if err != nil {
utils.Log.Errorf("Skip invalid version %s patches: %v", vp.Version, err)
continue
}
if compareVersion(ma, mi, pn, major, minor, patchNum) {
for i, p := range vp.Patches {
safeCall(vp.Version, i, p)
}
}
} else {
utils.Log.Warnf("Failed to parse last launched version %s: %v, skipping all patches and rewrite last launched version", lastLaunchedVersion, err)
}
conf.Conf.LastLaunchedVersion = conf.Version
configPath := filepath.Join(flags.DataDir, "config.json")
if !utils.WriteJsonToFile(configPath, conf.Conf) {
log.Fatalf("failed to create default config file")
}
}
20 changes: 19 additions & 1 deletion internal/bootstrap/patch/all.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,31 @@
package patch

import "github.com/alist-org/alist/v3/internal/bootstrap/patch/v3_41_0"
import (
"github.com/alist-org/alist/v3/internal/bootstrap/patch/v3_24_0"
"github.com/alist-org/alist/v3/internal/bootstrap/patch/v3_32_0"
"github.com/alist-org/alist/v3/internal/bootstrap/patch/v3_41_0"
)

type VersionPatches struct {
// Version means if the system is upgraded from Version or an earlier one
// to the current version, all patches in Patches will be executed.
Version string
Patches []func()
}

var UpgradePatches = []VersionPatches{
{
Version: "v3.24.0",
Patches: []func(){
v3_24_0.HashPwdForOldVersion,
},
},
{
Version: "v3.32.0",
Patches: []func(){
v3_32_0.UpdateAuthnForOldVersion,
},
},
{
Version: "v3.41.0",
Patches: []func(){
Expand Down
26 changes: 26 additions & 0 deletions internal/bootstrap/patch/v3_24_0/hash_password.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package v3_24_0

import (
"github.com/alist-org/alist/v3/internal/db"
"github.com/alist-org/alist/v3/internal/op"
"github.com/alist-org/alist/v3/pkg/utils"
)

// HashPwdForOldVersion encode passwords using SHA256
// First published: 75acbcc perf: sha256 for user's password (close #3552) by Andy Hsu
func HashPwdForOldVersion() {
users, _, err := op.GetUsers(1, -1)
if err != nil {
utils.Log.Fatalf("[hash pwd for old version] failed get users: %v", err)
}
for i := range users {
user := users[i]
if user.PwdHash == "" {
user.SetPassword(user.Password)
user.Password = ""
if err := db.UpdateUser(&user); err != nil {
utils.Log.Fatalf("[hash pwd for old version] failed update user: %v", err)
}
}
}
}
25 changes: 25 additions & 0 deletions internal/bootstrap/patch/v3_32_0/update_authn.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package v3_32_0

import (
"github.com/alist-org/alist/v3/internal/db"
"github.com/alist-org/alist/v3/internal/op"
"github.com/alist-org/alist/v3/pkg/utils"
)

// UpdateAuthnForOldVersion updates users' authn
// First published: bdfc159 fix: webauthn logspam (#6181) by itsHenry
func UpdateAuthnForOldVersion() {
users, _, err := op.GetUsers(1, -1)
if err != nil {
utils.Log.Fatalf("[update authn for old version] failed get users: %v", err)
}
for i := range users {
user := users[i]
if user.Authn == "" {
user.Authn = "[]"
if err := db.UpdateUser(&user); err != nil {
utils.Log.Fatalf("[update authn for old version] failed update user: %v", err)
}
}
}
}

0 comments on commit 922b610

Please sign in to comment.