-
Notifications
You must be signed in to change notification settings - Fork 378
/
0_to_1.go
111 lines (97 loc) · 3.41 KB
/
0_to_1.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package migrationsaccount
import (
"os"
"path/filepath"
"go.uber.org/zap"
"berty.tech/berty/v2/go/internal/accountutils"
"berty.tech/berty/v2/go/internal/encryptedrepo"
"berty.tech/berty/v2/go/internal/migrationutils"
"berty.tech/berty/v2/go/pkg/errcode"
)
var migration0To1 = migration{
From: "0",
To: "1",
Apply: apply0To1,
}
func apply0To1(opts Options) error {
// get secrets
var storageKey, appStorageSalt, ipfsSalt, messengerDBSalt, rootDatastoreSalt []byte
if opts.NativeKeystore != nil {
opts.Logger.Info("getting account secrets")
var err error
storageKey, err = accountutils.GetOrCreateStorageKeyForAccount(opts.NativeKeystore, opts.AccountID)
if err != nil {
return errcode.TODO.Wrap(err)
}
appStorageSalt, err = accountutils.GetOrCreateAppStorageSaltForAccount(opts.NativeKeystore, opts.AccountID)
if err != nil {
return errcode.TODO.Wrap(err)
}
ipfsSalt, err = accountutils.GetOrCreateIPFSDatastoreSaltForAccount(opts.NativeKeystore, opts.AccountID)
if err != nil {
return errcode.TODO.Wrap(err)
}
messengerDBSalt, err = accountutils.GetOrCreateMessengerDBSaltForAccount(opts.NativeKeystore, opts.AccountID)
if err != nil {
return errcode.TODO.Wrap(err)
}
rootDatastoreSalt, err = accountutils.GetOrCreateRootDatastoreSaltForAccount(opts.NativeKeystore, opts.AccountID)
if err != nil {
return errcode.TODO.Wrap(err)
}
}
// create root dirs
opts.Logger.Info("creating account root directories", zap.String("account-app-dir", opts.accountAppDir), zap.String("account-shared-dir", opts.accountSharedDir))
if err := os.MkdirAll(opts.accountAppDir, 0o700); err != nil {
return errcode.TODO.Wrap(err)
}
if err := os.MkdirAll(opts.accountSharedDir, 0o700); err != nil {
return errcode.TODO.Wrap(err)
}
// create account app storage db
opts.Logger.Info("creating account app storage")
appStorage, err := accountutils.GetAccountAppStorage(opts.AppDir, opts.AccountID, storageKey, appStorageSalt)
if err != nil {
return errcode.TODO.Wrap(err)
}
if err := appStorage.Close(); err != nil {
return errcode.TODO.Wrap(err)
}
// create account ipfs repo
opts.Logger.Info("creating account ipfs repo")
dbPath := filepath.Join(opts.accountAppDir, "ipfs.sqlite")
ipfsRepo, err := encryptedrepo.LoadEncryptedRepoFromPath(dbPath, storageKey, ipfsSalt)
if err != nil {
return errcode.ErrIPFSSetupRepo.Wrap(err)
}
if err := ipfsRepo.Close(); err != nil {
return errcode.TODO.Wrap(err)
}
// create messenger db
opts.Logger.Info("creating account messenger db")
_, closeMessengerDB, err := accountutils.GetMessengerDBForPath(opts.accountSharedDir, storageKey, messengerDBSalt, opts.Logger)
if err != nil {
return errcode.TODO.Wrap(err)
}
closeMessengerDB()
// create root datastore
opts.Logger.Info("creating account root datastore")
rootDS, err := accountutils.GetRootDatastoreForPath(opts.accountSharedDir, storageKey, rootDatastoreSalt, opts.Logger)
if err != nil {
return errcode.TODO.Wrap(err)
}
if err := rootDS.Close(); err != nil {
return errcode.TODO.Wrap(err)
}
// create logs directory
logsDir := filepath.Join(opts.accountAppDir, "logs")
opts.Logger.Info("creating account logs directory", zap.String("path", logsDir))
if err := os.MkdirAll(logsDir, 0o700); err != nil {
return errcode.TODO.Wrap(err)
}
// write new version
if err := migrationutils.WriteDataVersion(opts.accountAppDir, "1"); err != nil {
return errcode.TODO.Wrap(err)
}
return nil
}