mirror of
https://github.com/filebrowser/filebrowser.git
synced 2024-06-07 23:00:43 +00:00
12b2c21522
Read https://github.com/filebrowser/filebrowser/pull/575.
Former-commit-id: 7aedcaaf72b863033e3f089d6df308d41a3fd00c [formerly bdbe4d49161b901c4adf9c245895a1be2d62e4a7] [formerly acfc1ec67c423e0b3e065a8c1f8897c5249af65b [formerly d309066def
]]
Former-commit-id: 0c7d925a38a68ccabdf2c4bbd8c302ee89b93509 [formerly a6173925a1382955d93b334ded93f70d6dddd694]
Former-commit-id: e032e0804dd051df86f42962de2b39caec5318b7
122 lines
2.9 KiB
Go
122 lines
2.9 KiB
Go
package importer
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/asdine/storm"
|
|
"github.com/filebrowser/filebrowser/v2/rules"
|
|
"github.com/filebrowser/filebrowser/v2/storage"
|
|
"github.com/filebrowser/filebrowser/v2/users"
|
|
"go.etcd.io/bbolt"
|
|
)
|
|
|
|
type oldUser struct {
|
|
ID int `storm:"id,increment"`
|
|
Admin bool `json:"admin"`
|
|
AllowCommands bool `json:"allowCommands"` // Execute commands
|
|
AllowEdit bool `json:"allowEdit"` // Edit/rename files
|
|
AllowNew bool `json:"allowNew"` // Create files and folders
|
|
AllowPublish bool `json:"allowPublish"` // Publish content (to use with static gen)
|
|
LockPassword bool `json:"lockPassword"`
|
|
Commands []string `json:"commands"`
|
|
Locale string `json:"locale"`
|
|
Password string `json:"password"`
|
|
Rules []*rules.Rule `json:"rules"`
|
|
Scope string `json:"filesystem"`
|
|
Username string `json:"username" storm:"index,unique"`
|
|
ViewMode string `json:"viewMode"`
|
|
}
|
|
|
|
func readOldUsers(db *storm.DB) ([]*oldUser, error) {
|
|
users := []*oldUser{}
|
|
err := db.Bolt.View(func(tx *bolt.Tx) error {
|
|
return tx.Bucket([]byte("User")).ForEach(func(k []byte, v []byte) error {
|
|
if len(v) > 0 && string(v)[0] == '{' {
|
|
user := &oldUser{}
|
|
err := json.Unmarshal(v, user)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
users = append(users, user)
|
|
}
|
|
|
|
return nil
|
|
})
|
|
})
|
|
|
|
return users, err
|
|
}
|
|
|
|
func convertUsersToNew(old []*oldUser) ([]*users.User, error) {
|
|
var err error
|
|
list := []*users.User{}
|
|
|
|
for _, oldUser := range old {
|
|
user := &users.User{
|
|
ID: uint(oldUser.ID),
|
|
Username: oldUser.Username,
|
|
Password: oldUser.Password,
|
|
Scope: oldUser.Scope,
|
|
Locale: oldUser.Locale,
|
|
LockPassword: oldUser.LockPassword,
|
|
ViewMode: users.ViewMode(oldUser.ViewMode),
|
|
Commands: oldUser.Commands,
|
|
Rules: []rules.Rule{},
|
|
Perm: users.Permissions{
|
|
Admin: oldUser.Admin,
|
|
Execute: oldUser.AllowCommands,
|
|
Create: oldUser.AllowNew,
|
|
Rename: oldUser.AllowEdit,
|
|
Modify: oldUser.AllowEdit,
|
|
Delete: oldUser.AllowEdit,
|
|
Share: true,
|
|
Download: true,
|
|
},
|
|
}
|
|
|
|
for _, rule := range oldUser.Rules {
|
|
user.Rules = append(user.Rules, *rule)
|
|
}
|
|
|
|
user.Scope, err = filepath.Abs(user.Scope)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = user.Clean()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
list = append(list, user)
|
|
}
|
|
|
|
return list, nil
|
|
}
|
|
|
|
func importUsers(old *storm.DB, sto *storage.Storage) error {
|
|
oldUsers, err := readOldUsers(old)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newUsers, err := convertUsersToNew(oldUsers)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, user := range newUsers {
|
|
err = sto.Users.Save(user)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
fmt.Printf("%d users successfully imported into the new DB.\n", len(newUsers))
|
|
return nil
|
|
}
|