Compare commits
4 Commits
bbd0983e63
...
0.0.4a
| Author | SHA1 | Date | |
|---|---|---|---|
| 573fba708e | |||
| a7c85ea3c6 | |||
| ea6948dbe2 | |||
| da2ad068b4 |
@@ -21,6 +21,8 @@ e.g.:
|
|||||||
test:$2y$10$uULsuyROe3LVdTzFoBH7HO0zhvyKp6CX2FDNl7quXMFYqzitU0kc.
|
test:$2y$10$uULsuyROe3LVdTzFoBH7HO0zhvyKp6CX2FDNl7quXMFYqzitU0kc.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To generate bcrypt password, I recommand [hash_utils](https://git.thelilfrog.com/thelilfrog/hash_utils), which is offline and secure
|
||||||
|
|
||||||
The default path to this directory is `/var/lib/cloudsave`, this can be changed with the `-document-root` argument
|
The default path to this directory is `/var/lib/cloudsave`, this can be changed with the `-document-root` argument
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
@@ -45,7 +47,7 @@ Run this command to start the scan, if needed, the tool will create a new archiv
|
|||||||
```bash
|
```bash
|
||||||
cloudsave scan
|
cloudsave scan
|
||||||
```
|
```
|
||||||
#### Send everythings on the server
|
#### Send everything on the server
|
||||||
|
|
||||||
This will pull and push data to the server.
|
This will pull and push data to the server.
|
||||||
|
|
||||||
|
|||||||
2
build.sh
2
build.sh
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
MAKE_PACKAGE=false
|
MAKE_PACKAGE=false
|
||||||
VERSION=0.0.3
|
VERSION=0.0.4
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: $0 [OPTIONS]"
|
echo "Usage: $0 [OPTIONS]"
|
||||||
|
|||||||
@@ -11,24 +11,24 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
ListCmd struct {
|
ApplyCmd struct {
|
||||||
Service *data.Service
|
Service *data.Service
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (*ListCmd) Name() string { return "apply" }
|
func (*ApplyCmd) Name() string { return "apply" }
|
||||||
func (*ListCmd) Synopsis() string { return "apply a backup" }
|
func (*ApplyCmd) Synopsis() string { return "apply a backup" }
|
||||||
func (*ListCmd) Usage() string {
|
func (*ApplyCmd) Usage() string {
|
||||||
return `Usage: cloudsave apply <GAME_ID> [BACKUP_ID]
|
return `Usage: cloudsave apply <GAME_ID> [BACKUP_ID]
|
||||||
|
|
||||||
Apply a backup
|
Apply a backup
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ListCmd) SetFlags(f *flag.FlagSet) {
|
func (p *ApplyCmd) SetFlags(f *flag.FlagSet) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ListCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
|
func (p *ApplyCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
|
||||||
if f.NArg() < 1 {
|
if f.NArg() < 1 {
|
||||||
fmt.Fprintln(os.Stderr, "error: missing game ID and/or backup uuid")
|
fmt.Fprintln(os.Stderr, "error: missing game ID and/or backup uuid")
|
||||||
return subcommands.ExitUsageError
|
return subcommands.ExitUsageError
|
||||||
|
|||||||
@@ -71,7 +71,9 @@ func (p *ListCmd) local(includeBackup bool) error {
|
|||||||
for _, g := range games {
|
for _, g := range games {
|
||||||
fmt.Println("ID:", g.ID)
|
fmt.Println("ID:", g.ID)
|
||||||
fmt.Println("Name:", g.Name)
|
fmt.Println("Name:", g.Name)
|
||||||
fmt.Println("Last Version:", g.Date, "( Version Number", g.Version, ")")
|
fmt.Println("Last Version:", g.Date)
|
||||||
|
fmt.Println("Version:", g.Version)
|
||||||
|
fmt.Println("MD5:", g.MD5)
|
||||||
if includeBackup {
|
if includeBackup {
|
||||||
bk, err := p.Service.AllBackups(g.ID)
|
bk, err := p.Service.AllBackups(g.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -108,7 +110,9 @@ func (p *ListCmd) server(url, username, password string, includeBackup bool) err
|
|||||||
for _, g := range games {
|
for _, g := range games {
|
||||||
fmt.Println("ID:", g.ID)
|
fmt.Println("ID:", g.ID)
|
||||||
fmt.Println("Name:", g.Name)
|
fmt.Println("Name:", g.Name)
|
||||||
fmt.Println("Last Version:", g.Date, "( Version Number", g.Version, ")")
|
fmt.Println("Last Version:", g.Date)
|
||||||
|
fmt.Println("Version:", g.Version)
|
||||||
|
fmt.Println("MD5:", g.MD5)
|
||||||
if includeBackup {
|
if includeBackup {
|
||||||
bk, err := cli.ListArchives(g.ID)
|
bk, err := cli.ListArchives(g.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ func (p *RemoteCmd) print() error {
|
|||||||
for _, g := range games {
|
for _, g := range games {
|
||||||
r, err := remote.One(g.ID)
|
r, err := remote.One(g.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to load datastore: %w", err)
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
cli := client.New(r.URL, "", "")
|
cli := client.New(r.URL, "", "")
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ func main() {
|
|||||||
subcommands.Register(&remove.RemoveCmd{Service: s}, "management")
|
subcommands.Register(&remove.RemoveCmd{Service: s}, "management")
|
||||||
subcommands.Register(&show.ShowCmd{Service: s}, "management")
|
subcommands.Register(&show.ShowCmd{Service: s}, "management")
|
||||||
|
|
||||||
subcommands.Register(&apply.ListCmd{Service: s}, "restore")
|
subcommands.Register(&apply.ApplyCmd{Service: s}, "restore")
|
||||||
|
|
||||||
subcommands.Register(&remote.RemoteCmd{Service: s}, "remote")
|
subcommands.Register(&remote.RemoteCmd{Service: s}, "remote")
|
||||||
subcommands.Register(&sync.SyncCmd{Service: s}, "remote")
|
subcommands.Register(&sync.SyncCmd{Service: s}, "remote")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
package constants
|
package constants
|
||||||
|
|
||||||
const Version = "0.0.5"
|
const Version = "0.0.4a"
|
||||||
|
|
||||||
const ApiVersion = 1
|
const ApiVersion = 1
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ func (s *Service) Add(name, path, remote string) (string, error) {
|
|||||||
ID: gameID.Key(),
|
ID: gameID.Key(),
|
||||||
Name: name,
|
Name: name,
|
||||||
Path: path,
|
Path: path,
|
||||||
Version: 1,
|
Version: 0,
|
||||||
Date: time.Now(),
|
Date: time.Now(),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,6 +268,8 @@ func (l Service) PullBackup(gameID, backupID string, cli *client.Client) error {
|
|||||||
return fmt.Errorf("failed to pull backup: %w", err)
|
return fmt.Errorf("failed to pull backup: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -213,6 +213,13 @@ func (l *LazyRepository) Metadata(id GameIdentifier) (Metadata, error) {
|
|||||||
return Metadata{}, fmt.Errorf("corrupted datastore: failed to parse metadata: %w", err)
|
return Metadata{}, fmt.Errorf("corrupted datastore: failed to parse metadata: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, err := os.Stat(filepath.Join(path, "data.tar.gz")); err != nil {
|
||||||
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
return Metadata{}, fmt.Errorf("failed to open archive: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
m.MD5, err = hash.FileMD5(filepath.Join(path, "data.tar.gz"))
|
m.MD5, err = hash.FileMD5(filepath.Join(path, "data.tar.gz"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Metadata{}, fmt.Errorf("failed to calculate md5: %w", err)
|
return Metadata{}, fmt.Errorf("failed to calculate md5: %w", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user