Spaces:
Running
Running
package data | |
import ( | |
"os" | |
"github.com/alist-org/alist/v3/cmd/flags" | |
"github.com/alist-org/alist/v3/internal/db" | |
"github.com/alist-org/alist/v3/internal/model" | |
"github.com/alist-org/alist/v3/internal/op" | |
"github.com/alist-org/alist/v3/pkg/utils" | |
"github.com/alist-org/alist/v3/pkg/utils/random" | |
"github.com/pkg/errors" | |
"gorm.io/gorm" | |
) | |
func initUser() { | |
admin, err := op.GetAdmin() | |
adminPassword := random.String(8) | |
envpass := os.Getenv("ALIST_ADMIN_PASSWORD") | |
if flags.Dev { | |
adminPassword = "admin" | |
} else if len(envpass) > 0 { | |
adminPassword = envpass | |
} | |
if err != nil { | |
if errors.Is(err, gorm.ErrRecordNotFound) { | |
salt := random.String(16) | |
admin = &model.User{ | |
Username: "admin", | |
Salt: salt, | |
PwdHash: model.TwoHashPwd(adminPassword, salt), | |
Role: model.ADMIN, | |
BasePath: "/", | |
Authn: "[]", | |
} | |
if err := op.CreateUser(admin); err != nil { | |
panic(err) | |
} else { | |
utils.Log.Infof("Successfully created the admin user and the initial password is: %s", adminPassword) | |
} | |
} else { | |
utils.Log.Fatalf("[init user] Failed to get admin user: %v", err) | |
} | |
} | |
guest, err := op.GetGuest() | |
if err != nil { | |
if errors.Is(err, gorm.ErrRecordNotFound) { | |
salt := random.String(16) | |
guest = &model.User{ | |
Username: "guest", | |
PwdHash: model.TwoHashPwd("guest", salt), | |
Salt: salt, | |
Role: model.GUEST, | |
BasePath: "/", | |
Permission: 0, | |
Disabled: true, | |
Authn: "[]", | |
} | |
if err := db.CreateUser(guest); err != nil { | |
utils.Log.Fatalf("[init user] Failed to create guest user: %v", err) | |
} | |
} else { | |
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) | |
} | |
} | |
} | |
} | |