mirror of https://github.com/cbeuw/Cloak
User can now specify the path of db file and backups
This commit is contained in:
parent
652261af81
commit
deb5271cef
|
|
@ -242,7 +242,7 @@ func main() {
|
|||
localPort = strings.Split(*localAddr, ":")[1]
|
||||
log.Printf("Starting standalone mode, listening on %v:%v to ss at %v:%v\n", remoteHost, remotePort, localHost, localPort)
|
||||
}
|
||||
sta, _ := server.InitState(localHost, localPort, remoteHost, remotePort, time.Now, "userinfo.db")
|
||||
sta, _ := server.InitState(localHost, localPort, remoteHost, remotePort, time.Now)
|
||||
|
||||
err := sta.ParseConfig(pluginOpts)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
{
|
||||
"WebServerAddr":"204.79.197.200:443",
|
||||
"PrivateKey":"EN5aPEpNBO+vw+BtFQY2OnK9bQU7rvEj5qmnmgwEtUc=",
|
||||
"AdminUID":"ugDmcEmxWf0pKxfkZ/8EoP35Ht+wQnqf3L0xYgyQFlQ="
|
||||
"AdminUID":"ugDmcEmxWf0pKxfkZ/8EoP35Ht+wQnqf3L0xYgyQFlQ=",
|
||||
"DatabasePath":"userinfo.db",
|
||||
"BackupDirPath":""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ type rawConfig struct {
|
|||
WebServerAddr string
|
||||
PrivateKey string
|
||||
AdminUID string
|
||||
DatabasePath string
|
||||
BackupDirPath string
|
||||
}
|
||||
type stateManager interface {
|
||||
ParseConfig(string) error
|
||||
|
|
@ -41,18 +43,13 @@ type State struct {
|
|||
WebServerAddr string
|
||||
}
|
||||
|
||||
func InitState(localHost, localPort, remoteHost, remotePort string, nowFunc func() time.Time, dbPath string) (*State, error) {
|
||||
up, err := usermanager.MakeUserpanel(dbPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
func InitState(localHost, localPort, remoteHost, remotePort string, nowFunc func() time.Time) (*State, error) {
|
||||
ret := &State{
|
||||
SS_LOCAL_HOST: localHost,
|
||||
SS_LOCAL_PORT: localPort,
|
||||
SS_REMOTE_HOST: remoteHost,
|
||||
SS_REMOTE_PORT: remotePort,
|
||||
Now: nowFunc,
|
||||
Userpanel: up,
|
||||
}
|
||||
ret.usedRandom = make(map[[32]byte]int)
|
||||
return ret, nil
|
||||
|
|
@ -101,6 +98,12 @@ func (sta *State) ParseConfig(conf string) (err error) {
|
|||
return errors.New("Failed to unmarshal: " + err.Error())
|
||||
}
|
||||
|
||||
up, err := usermanager.MakeUserpanel(preParse.DatabasePath, preParse.BackupDirPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sta.Userpanel = up
|
||||
|
||||
sta.WebServerAddr = preParse.WebServerAddr
|
||||
|
||||
pvBytes, err := base64.StdEncoding.DecodeString(preParse.PrivateKey)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
package usermanager
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/binary"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
|
|
@ -19,19 +20,26 @@ var PutUint32 = binary.BigEndian.PutUint32
|
|||
var PutUint64 = binary.BigEndian.PutUint64
|
||||
|
||||
type Userpanel struct {
|
||||
db *bolt.DB
|
||||
db *bolt.DB
|
||||
bakRoot string
|
||||
|
||||
activeUsersM sync.RWMutex
|
||||
activeUsers map[[32]byte]*User
|
||||
}
|
||||
|
||||
func MakeUserpanel(dbPath string) (*Userpanel, error) {
|
||||
func MakeUserpanel(dbPath, bakRoot string) (*Userpanel, error) {
|
||||
db, err := bolt.Open(dbPath, 0600, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if bakRoot == "" {
|
||||
os.Mkdir("db-backup", 0777)
|
||||
bakRoot = "db-backup"
|
||||
}
|
||||
bakRoot = path.Clean(bakRoot)
|
||||
up := &Userpanel{
|
||||
db: db,
|
||||
bakRoot: bakRoot,
|
||||
activeUsers: make(map[[32]byte]*User),
|
||||
}
|
||||
go func() {
|
||||
|
|
@ -66,8 +74,8 @@ func (up *Userpanel) updateCredits() {
|
|||
|
||||
}
|
||||
|
||||
// TODO: prefixed backup path
|
||||
func (up *Userpanel) backupDB(bakPath string) error {
|
||||
func (up *Userpanel) backupDB(bakFileName string) error {
|
||||
bakPath := up.bakRoot + "/" + bakFileName
|
||||
_, err := os.Stat(bakPath)
|
||||
if err == nil {
|
||||
return errors.New("Attempting to overwrite a file during backup!")
|
||||
|
|
@ -300,7 +308,7 @@ func (up *Userpanel) addNewUser(uinfo UserInfo) error {
|
|||
}
|
||||
|
||||
func (up *Userpanel) delUser(UID []byte) error {
|
||||
err := up.backupDB(strconv.FormatInt(time.Now().Unix(), 10) + "_pre_del_" + hex.EncodeToString(UID) + ".bak")
|
||||
err := up.backupDB(strconv.FormatInt(time.Now().Unix(), 10) + "_pre_del_" + base64.StdEncoding.EncodeToString(UID) + ".bak")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue