mirror of
https://github.com/drakkan/sftpgo.git
synced 2025-12-07 06:40:54 +03:00
loaddata: improve shares restore
usage and timestamps are now preserved
This commit is contained in:
@@ -93,9 +93,23 @@ func sqlCommonAddShare(share *Share, dbHandle *sql.DB) error {
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
usedTokens := 0
|
||||
createdAt := util.GetTimeAsMsSinceEpoch(time.Now())
|
||||
updatedAt := createdAt
|
||||
lastUseAt := int64(0)
|
||||
if share.IsRestore {
|
||||
usedTokens = share.UsedTokens
|
||||
if share.CreatedAt > 0 {
|
||||
createdAt = share.CreatedAt
|
||||
}
|
||||
if share.UpdatedAt > 0 {
|
||||
updatedAt = share.UpdatedAt
|
||||
}
|
||||
lastUseAt = share.LastUseAt
|
||||
}
|
||||
_, err = stmt.ExecContext(ctx, share.ShareID, share.Name, share.Description, share.Scope,
|
||||
string(paths), util.GetTimeAsMsSinceEpoch(time.Now()), util.GetTimeAsMsSinceEpoch(time.Now()),
|
||||
share.LastUseAt, share.ExpiresAt, share.Password, share.MaxTokens, allowFrom, user.ID)
|
||||
string(paths), createdAt, updatedAt, lastUseAt, share.ExpiresAt, share.Password,
|
||||
share.MaxTokens, usedTokens, allowFrom, user.ID)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -125,7 +139,12 @@ func sqlCommonUpdateShare(share *Share, dbHandle *sql.DB) error {
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), defaultSQLQueryTimeout)
|
||||
defer cancel()
|
||||
q := getUpdateShareQuery()
|
||||
var q string
|
||||
if share.IsRestore {
|
||||
q = getUpdateShareRestoreQuery()
|
||||
} else {
|
||||
q = getUpdateShareQuery()
|
||||
}
|
||||
stmt, err := dbHandle.PrepareContext(ctx, q)
|
||||
if err != nil {
|
||||
providerLog(logger.LevelWarn, "error preparing database query %#v: %v", q, err)
|
||||
@@ -133,9 +152,21 @@ func sqlCommonUpdateShare(share *Share, dbHandle *sql.DB) error {
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
_, err = stmt.ExecContext(ctx, share.Name, share.Description, share.Scope, string(paths),
|
||||
util.GetTimeAsMsSinceEpoch(time.Now()), share.ExpiresAt, share.Password, share.MaxTokens,
|
||||
allowFrom, user.ID, share.ShareID)
|
||||
if share.IsRestore {
|
||||
if share.CreatedAt == 0 {
|
||||
share.CreatedAt = util.GetTimeAsMsSinceEpoch(time.Now())
|
||||
}
|
||||
if share.UpdatedAt == 0 {
|
||||
share.UpdatedAt = share.CreatedAt
|
||||
}
|
||||
_, err = stmt.ExecContext(ctx, share.Name, share.Description, share.Scope, string(paths),
|
||||
share.CreatedAt, share.UpdatedAt, share.LastUseAt, share.ExpiresAt, share.Password, share.MaxTokens,
|
||||
share.UsedTokens, allowFrom, user.ID, share.ShareID)
|
||||
} else {
|
||||
_, err = stmt.ExecContext(ctx, share.Name, share.Description, share.Scope, string(paths),
|
||||
util.GetTimeAsMsSinceEpoch(time.Now()), share.ExpiresAt, share.Password, share.MaxTokens,
|
||||
allowFrom, user.ID, share.ShareID)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user