2022-06-27 15:51:02 +08:00
package data
2022-06-25 22:05:02 +08:00
import (
2025-07-29 21:36:27 +08:00
"fmt"
"time"
2022-10-19 20:06:06 +08:00
"os"
2025-07-01 09:54:50 +08:00
"github.com/OpenListTeam/OpenList/v4/cmd/flags"
"github.com/OpenListTeam/OpenList/v4/internal/db"
"github.com/OpenListTeam/OpenList/v4/internal/model"
"github.com/OpenListTeam/OpenList/v4/internal/op"
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
"github.com/OpenListTeam/OpenList/v4/pkg/utils/random"
2022-06-25 22:05:02 +08:00
"github.com/pkg/errors"
"gorm.io/gorm"
)
func initUser ( ) {
2022-12-18 19:51:20 +08:00
admin , err := op . GetAdmin ( )
2022-06-26 19:09:28 +08:00
adminPassword := random . String ( 8 )
2025-06-16 16:29:45 +08:00
envpass := os . Getenv ( "OPENLIST_ADMIN_PASSWORD" )
2022-08-07 13:09:59 +08:00
if flags . Dev {
2022-06-26 19:09:28 +08:00
adminPassword = "admin"
2022-10-19 20:06:06 +08:00
} else if len ( envpass ) > 0 {
adminPassword = envpass
2022-06-26 19:09:28 +08:00
}
2022-06-25 22:05:02 +08:00
if err != nil {
if errors . Is ( err , gorm . ErrRecordNotFound ) {
2023-08-07 15:46:19 +08:00
salt := random . String ( 16 )
2022-06-25 22:05:02 +08:00
admin = & model . User {
2025-01-18 23:28:12 +08:00
Username : "admin" ,
Salt : salt ,
PwdHash : model . TwoHashPwd ( adminPassword , salt ) ,
Role : model . ADMIN ,
BasePath : "/" ,
Authn : "[]" ,
// 0(can see hidden) - 7(can remove) & 12(can read archives) - 13(can decompress archives)
2025-07-24 10:19:49 +08:00
Permission : 0x31FF ,
2022-06-25 22:05:02 +08:00
}
2022-12-18 19:51:20 +08:00
if err := op . CreateUser ( admin ) ; err != nil {
2022-06-25 22:05:02 +08:00
panic ( err )
2022-08-07 13:09:59 +08:00
} else {
2023-08-06 22:09:17 +08:00
utils . Log . Infof ( "Successfully created the admin user and the initial password is: %s" , adminPassword )
2025-07-29 21:36:27 +08:00
fmt . Printf ( "\033[36mINFO\033[39m[%s] Successfully created the admin user and the initial password is: %s\n" , time . Now ( ) . Format ( "2006-01-02 15:04:05" ) , adminPassword )
2022-06-25 22:05:02 +08:00
}
} else {
2023-08-06 22:09:17 +08:00
utils . Log . Fatalf ( "[init user] Failed to get admin user: %v" , err )
2022-06-25 22:05:02 +08:00
}
}
2022-12-18 19:51:20 +08:00
guest , err := op . GetGuest ( )
2022-06-25 22:05:02 +08:00
if err != nil {
if errors . Is ( err , gorm . ErrRecordNotFound ) {
2023-08-07 15:46:19 +08:00
salt := random . String ( 16 )
2022-06-25 22:05:02 +08:00
guest = & model . User {
2022-06-29 18:03:12 +08:00
Username : "guest" ,
2023-08-07 15:46:19 +08:00
PwdHash : model . TwoHashPwd ( "guest" , salt ) ,
2024-01-17 14:15:34 +08:00
Salt : salt ,
2022-06-29 18:03:12 +08:00
Role : model . GUEST ,
BasePath : "/" ,
2022-07-27 21:53:21 +08:00
Permission : 0 ,
2023-02-04 11:44:17 +08:00
Disabled : true ,
2024-03-10 16:48:25 +08:00
Authn : "[]" ,
2022-06-25 22:05:02 +08:00
}
if err := db . CreateUser ( guest ) ; err != nil {
2023-08-06 22:09:17 +08:00
utils . Log . Fatalf ( "[init user] Failed to create guest user: %v" , err )
2022-06-25 22:05:02 +08:00
}
} else {
2023-08-06 22:09:17 +08:00
utils . Log . Fatalf ( "[init user] Failed to get guest user: %v" , err )
}
}
2024-03-10 16:48:25 +08:00
}