diff --git a/cmd/backup.go b/cmd/backup.go new file mode 100644 index 0000000000000000000000000000000000000000..5a2091a49c97a891eff87a6b6b959b4eb8d600eb --- /dev/null +++ b/cmd/backup.go @@ -0,0 +1,124 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright © 2022 Privategrity Corporation / +// / +// All rights reserved. / +//////////////////////////////////////////////////////////////////////////////// + +package cmd + +import ( + "encoding/json" + "github.com/pkg/errors" + jww "github.com/spf13/jwalterweatherman" + "github.com/spf13/viper" + "gitlab.com/elixxir/client/backup" + "gitlab.com/elixxir/client/xxdk" + backupCrypto "gitlab.com/elixxir/crypto/backup" + "gitlab.com/xx_network/primitives/utils" + "io/fs" + "io/ioutil" + "os" +) + +// loadOrInitBackup will build a new xxdk.E2e from existing storage +// or from a new storage that it will create if none already exists +func loadOrInitBackup(backupPath string, backupPass string, password []byte, storeDir string, + cmixParams xxdk.CMIXParams, e2eParams xxdk.E2EParams) *xxdk.E2e { + + // create a new client if none exist + var baseClient *xxdk.Cmix + var identity xxdk.ReceptionIdentity + if _, err := os.Stat(storeDir); errors.Is(err, fs.ErrNotExist) { + // Initialize from scratch + ndfJson, err := ioutil.ReadFile(viper.GetString("ndf")) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + b, backupFile := loadBackup(backupPath, backupPass) + + // Marshal the backup object in JSON + backupJson, err := json.Marshal(b) + if err != nil { + jww.FATAL.Panicf("Failed to JSON Marshal backup: %+v", err) + } + + // Write the backup JSON to file + err = utils.WriteFileDef(viper.GetString("backupJsonOut"), backupJson) + if err != nil { + jww.FATAL.Panicf("Failed to write backup to file: %+v", err) + } + + // Construct client from backup data + backupIdList, _, err := backup.NewClientFromBackup(string(ndfJson), storeDir, + password, []byte(backupPass), backupFile) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + backupIdListPath := viper.GetString("backupIdList") + if backupIdListPath != "" { + // Marshal backed up ID list to JSON + backedUpIdListJson, err := json.Marshal(backupIdList) + if err != nil { + jww.FATAL.Panicf("Failed to JSON Marshal backed up IDs: %+v", err) + } + + // Write backed up ID list to file + err = utils.WriteFileDef(backupIdListPath, backedUpIdListJson) + if err != nil { + jww.FATAL.Panicf("Failed to write backed up IDs to file %q: %+v", + backupIdListPath, err) + } + } + + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + // TODO: Get proper identity + identity, err = xxdk.MakeReceptionIdentity(baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.StoreReceptionIdentity(identityStorageKey, identity, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } else { + // Initialize from storage + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + identity, err = xxdk.LoadReceptionIdentity(identityStorageKey, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } + + jww.INFO.Printf("Using LoginLegacy for precan sender") + client, err := xxdk.LoginLegacy(baseClient, e2eParams, authCbs) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + return client +} + +func loadBackup(backupPath, backupPass string) (backupCrypto.Backup, []byte) { + jww.INFO.Printf("Loading backup from path %q", backupPath) + backupFile, err := utils.ReadFile(backupPath) + if err != nil { + jww.FATAL.Panicf("%v", err) + } + + var b backupCrypto.Backup + err = b.Decrypt(backupPass, backupFile) + if err != nil { + jww.FATAL.Panicf("Failed to decrypt backup: %+v", err) + } + + return b, backupFile +} diff --git a/cmd/init.go b/cmd/init.go index 75ea00e6c75bee432de3164d6f721291028ef97b..9028bcff711a7c77738e42b39022b0ea122af0a8 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -9,9 +9,14 @@ package cmd import ( + "github.com/pkg/errors" "github.com/spf13/cobra" jww "github.com/spf13/jwalterweatherman" "github.com/spf13/viper" + "gitlab.com/elixxir/client/xxdk" + "io/fs" + "io/ioutil" + "os" ) // initCmd creates a new user object with the given NDF @@ -20,10 +25,35 @@ var initCmd = &cobra.Command{ Short: "Initialize a user ID but do not connect to the network", Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { - _, receptionIdentity := initCmix() + // TODO: Handle userid-prefix argument + storePassword := parsePassword(viper.GetString("password")) + storeDir := viper.GetString("session") + regCode := viper.GetString("regcode") - jww.INFO.Printf("User: %s", receptionIdentity.ID) - writeContact(receptionIdentity.GetContact()) + // Initialize from scratch + ndfJson, err := ioutil.ReadFile(viper.GetString("ndf")) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.NewCmix(string(ndfJson), storeDir, storePassword, regCode) + baseClient, err := xxdk.OpenCmix(storeDir, storePassword) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + identity, err := xxdk.MakeReceptionIdentity(baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.StoreReceptionIdentity(identityStorageKey, identity, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + jww.INFO.Printf("User: %s", identity.ID) + writeContact(identity.GetContact()) }, } @@ -34,3 +64,105 @@ func init() { rootCmd.AddCommand(initCmd) } + +// loadOrInitClient will build a new xxdk.E2e from existing storage +// or from a new storage that it will create if none already exists +func loadOrInitClient(password []byte, storeDir, regCode string, + cmixParams xxdk.CMIXParams, e2eParams xxdk.E2EParams) *xxdk.E2e { + + // create a new client if none exist + var baseClient *xxdk.Cmix + var identity xxdk.ReceptionIdentity + if _, err := os.Stat(storeDir); errors.Is(err, fs.ErrNotExist) { + // Initialize from scratch + ndfJson, err := ioutil.ReadFile(viper.GetString("ndf")) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.NewCmix(string(ndfJson), storeDir, password, regCode) + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + identity, err = xxdk.MakeReceptionIdentity(baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.StoreReceptionIdentity(identityStorageKey, identity, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } else { + // Initialize from storage + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + identity, err = xxdk.LoadReceptionIdentity(identityStorageKey, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } + + jww.INFO.Printf("Using Login for normal sender") + client, err := xxdk.Login(baseClient, authCbs, identity, e2eParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + return client +} + +// loadOrInitVanity will build a new xxdk.E2e from existing storage +// or from a new storage that it will create if none already exists +func loadOrInitVanity(password []byte, storeDir, regCode, userIdPrefix string, + cmixParams xxdk.CMIXParams, e2eParams xxdk.E2EParams) *xxdk.E2e { + + // create a new client if none exist + var baseClient *xxdk.Cmix + var identity xxdk.ReceptionIdentity + if _, err := os.Stat(storeDir); errors.Is(err, fs.ErrNotExist) { + // Initialize precan from scratch + ndfJson, err := ioutil.ReadFile(viper.GetString("ndf")) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.NewVanityClient(string(ndfJson), storeDir, + password, regCode, userIdPrefix) + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + // TODO: Get proper identity + identity, err = xxdk.MakeReceptionIdentity(baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.StoreReceptionIdentity(identityStorageKey, identity, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } else { + // Initialize precan from storage + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + identity, err = xxdk.LoadReceptionIdentity(identityStorageKey, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } + + jww.INFO.Printf("Using LoginLegacy for vanity sender") + client, err := xxdk.LoginLegacy(baseClient, e2eParams, authCbs) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + return client +} diff --git a/cmd/precan.go b/cmd/precan.go index 64a558ee167f0d3ad9bdb5e1e04326947f510d3d..6de39a2c1dee9f59351033c32590878e916d0056 100644 --- a/cmd/precan.go +++ b/cmd/precan.go @@ -10,15 +10,63 @@ package cmd import ( - "encoding/binary" - "gitlab.com/elixxir/client/xxdk" - "strconv" - + "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" + "github.com/spf13/viper" + "gitlab.com/elixxir/client/xxdk" "gitlab.com/elixxir/crypto/contact" "gitlab.com/xx_network/primitives/id" + "io/fs" + "io/ioutil" + "os" ) +// loadOrInitPrecan will build a new xxdk.E2e from existing storage +// or from a new storage that it will create if none already exists +func loadOrInitPrecan(precanId uint, password []byte, storeDir string, + cmixParams xxdk.CMIXParams, e2eParams xxdk.E2EParams) *xxdk.E2e { + + // create a new client if none exist + var baseClient *xxdk.Cmix + var identity xxdk.ReceptionIdentity + if _, err := os.Stat(storeDir); errors.Is(err, fs.ErrNotExist) { + // Initialize from scratch + ndfJson, err := ioutil.ReadFile(viper.GetString("ndf")) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + // TODO: Separate identity from this call + identity, err = xxdk.NewPrecannedClient(precanId, string(ndfJson), storeDir, password) + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.StoreReceptionIdentity(identityStorageKey, identity, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } else { + // Initialize from storage + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + identity, err = xxdk.LoadReceptionIdentity(identityStorageKey, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } + + jww.INFO.Printf("Using Login for precan sender") + client, err := xxdk.Login(baseClient, authCbs, identity, e2eParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + return client +} + func isPrecanID(id *id.ID) bool { // check if precanned rBytes := id.Bytes() @@ -33,36 +81,6 @@ func isPrecanID(id *id.ID) bool { return false } -// returns a simple numerical id if the user is a precanned user, otherwise -// returns the normal string of the userID -func printIDNice(uid *id.ID) string { - - for index, puid := range precannedIDList { - if uid.Cmp(puid) { - return strconv.Itoa(index + 1) - } - } - - return uid.String() -} - -// build a list of precanned ids to use for comparision for nicer user id output -var precannedIDList = buildPrecannedIDList() - -func buildPrecannedIDList() []*id.ID { - - idList := make([]*id.ID, 40) - - for i := 0; i < 40; i++ { - uid := new(id.ID) - binary.BigEndian.PutUint64(uid[:], uint64(i+1)) - uid.SetType(id.User) - idList[i] = uid - } - - return idList -} - func getPrecanID(recipientID *id.ID) uint { return uint(recipientID.Bytes()[7]) } diff --git a/cmd/proto.go b/cmd/proto.go new file mode 100644 index 0000000000000000000000000000000000000000..0f1f949be60124a741d8f31c2f47fa74847efbb6 --- /dev/null +++ b/cmd/proto.go @@ -0,0 +1,78 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright © 2022 Privategrity Corporation / +// / +// All rights reserved. / +//////////////////////////////////////////////////////////////////////////////// + +package cmd + +import ( + "encoding/json" + "github.com/pkg/errors" + jww "github.com/spf13/jwalterweatherman" + "github.com/spf13/viper" + "gitlab.com/elixxir/client/storage/user" + "gitlab.com/elixxir/client/xxdk" + "gitlab.com/xx_network/primitives/utils" + "io/fs" + "io/ioutil" + "os" +) + +// loadOrInitProto will build a new xxdk.E2e from existing storage +// or from a new storage that it will create if none already exists +func loadOrInitProto(protoUserPath string, password []byte, storeDir string, + cmixParams xxdk.CMIXParams, e2eParams xxdk.E2EParams) *xxdk.E2e { + + // create a new client if none exist + var baseClient *xxdk.Cmix + var identity xxdk.ReceptionIdentity + if _, err := os.Stat(storeDir); errors.Is(err, fs.ErrNotExist) { + // Initialize from scratch + ndfJson, err := ioutil.ReadFile(viper.GetString("ndf")) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + protoUserJson, err := utils.ReadFile(protoUserPath) + if err != nil { + jww.FATAL.Panicf("%v", err) + } + + protoUser := &user.Proto{} + err = json.Unmarshal(protoUserJson, protoUser) + if err != nil { + jww.FATAL.Panicf("%v", err) + } + + // TODO: Separate identity from this call + identity, err = xxdk.NewProtoClient_Unsafe(string(ndfJson), storeDir, + password, protoUser) + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + + err = xxdk.StoreReceptionIdentity(identityStorageKey, identity, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } else { + // Initialize from storage + baseClient, err = xxdk.LoadCmix(storeDir, password, cmixParams) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + identity, err = xxdk.LoadReceptionIdentity(identityStorageKey, baseClient) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + } + + jww.INFO.Printf("Using LoginLegacy for proto sender") + client, err := xxdk.LoginLegacy(baseClient, e2eParams, authCbs) + if err != nil { + jww.FATAL.Panicf("%+v", err) + } + return client +} diff --git a/cmd/root.go b/cmd/root.go index 22d48e8392d3ce8735ef549898d38c855ab00901..59c83e81871ab52418cd8d5703830df926768d03 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -13,9 +13,7 @@ import ( "encoding/binary" "encoding/hex" "encoding/json" - "errors" "fmt" - "io/fs" "io/ioutil" "log" "os" @@ -25,8 +23,6 @@ import ( "sync" "time" - "gitlab.com/elixxir/client/storage/user" - "gitlab.com/elixxir/client/backup" "gitlab.com/elixxir/client/xxdk" @@ -510,10 +506,10 @@ var rootCmd = &cobra.Command{ // wait an extra 5 seconds to make sure no messages were missed done = false - waitTime := time.Duration(5 * time.Second) + waitTime := 5 * time.Second if expectedCnt == 0 { // Wait longer if we didn't expect to receive anything - waitTime = time.Duration(15 * time.Second) + waitTime = 15 * time.Second } timer := time.NewTimer(waitTime) for !done { @@ -548,130 +544,6 @@ var rootCmd = &cobra.Command{ }, } -// initCmix returns a newly-initialized xxdk.Cmix object and its stored xxdk.ReceptionIdentity -func initCmix() (*xxdk.Cmix, xxdk.ReceptionIdentity) { - logLevel := viper.GetUint("logLevel") - initLog(logLevel, viper.GetString("log")) - jww.INFO.Printf(Version()) - - pass := parsePassword(viper.GetString("password")) - storeDir := viper.GetString("session") - regCode := viper.GetString("regcode") - precannedID := viper.GetUint("sendid") - userIDprefix := viper.GetString("userid-prefix") - protoUserPath := viper.GetString("protoUserPath") - backupPath := viper.GetString("backupIn") - backupPass := []byte(viper.GetString("backupPass")) - - // FIXME: All branches of the upcoming path - var knownReception xxdk.ReceptionIdentity - - // create a new client if none exist - if _, err := os.Stat(storeDir); errors.Is(err, fs.ErrNotExist) { - // Load NDF - ndfJSON, err := ioutil.ReadFile(viper.GetString("ndf")) - if err != nil { - jww.FATAL.Panicf(err.Error()) - } - - if precannedID != 0 { - knownReception, err = xxdk.NewPrecannedClient(precannedID, - string(ndfJSON), storeDir, pass) - } else if protoUserPath != "" { - protoUserJson, err := utils.ReadFile(protoUserPath) - if err != nil { - jww.FATAL.Panicf("%v", err) - } - - protoUser := &user.Proto{} - err = json.Unmarshal(protoUserJson, protoUser) - if err != nil { - jww.FATAL.Panicf("%v", err) - } - - knownReception, err = xxdk.NewProtoClient_Unsafe(string(ndfJSON), storeDir, - pass, protoUser) - } else if userIDprefix != "" { - err = xxdk.NewVanityClient(string(ndfJSON), storeDir, - pass, regCode, userIDprefix) - } else if backupPath != "" { - - b, backupFile := loadBackup(backupPath, string(backupPass)) - - // Marshal the backup object in JSON - backupJson, err := json.Marshal(b) - if err != nil { - jww.ERROR.Printf("Failed to JSON Marshal backup: %+v", err) - } - - // Write the backup JSON to file - err = utils.WriteFileDef(viper.GetString("backupJsonOut"), backupJson) - if err != nil { - jww.FATAL.Panicf("Failed to write backup to file: %+v", err) - } - - // Construct client from backup data - backupIdList, _, err := backup.NewClientFromBackup(string(ndfJSON), storeDir, - pass, backupPass, backupFile) - if err != nil { - jww.FATAL.Panicf("%+v", err) - } - - backupIdListPath := viper.GetString("backupIdList") - if backupIdListPath != "" { - // Marshal backed up ID list to JSON - backedUpIdListJson, err := json.Marshal(backupIdList) - if err != nil { - jww.ERROR.Printf("Failed to JSON Marshal backed up IDs: %+v", err) - } - - // Write backed up ID list to file - err = utils.WriteFileDef(backupIdListPath, backedUpIdListJson) - if err != nil { - jww.FATAL.Panicf("Failed to write backed up IDs to file %q: %+v", - backupIdListPath, err) - } - } - - } else { - err = xxdk.NewCmix(string(ndfJSON), storeDir, - pass, regCode) - } - - if err != nil { - jww.FATAL.Panicf("%+v", err) - } - } - - client, err := xxdk.OpenCmix(storeDir, pass) - if err != nil { - jww.FATAL.Panicf("%+v", err) - } - - // If there is a known xxdk.ReceptionIdentity, store it now - if knownReception.ID != nil { - err = xxdk.StoreReceptionIdentity(identityStorageKey, knownReception, client) - if err != nil { - jww.FATAL.Panicf("%+v", err) - } - } - - // Attempt to load extant xxdk.ReceptionIdentity - identity, err := xxdk.LoadReceptionIdentity(identityStorageKey, client) - if err != nil { - // If no extant xxdk.ReceptionIdentity, generate and store a new one - identity, err = xxdk.MakeReceptionIdentity(client) - if err != nil { - jww.FATAL.Panicf("%+v", err) - } - err = xxdk.StoreReceptionIdentity(identityStorageKey, identity, client) - if err != nil { - jww.FATAL.Panicf("%+v", err) - } - } - return client, identity -} - func initParams() (xxdk.CMIXParams, xxdk.E2EParams) { e2eParams := xxdk.GetDefaultE2EParams() e2eParams.Session.MinKeys = uint16(viper.GetUint("e2eMinKeys")) @@ -701,40 +573,40 @@ func initParams() (xxdk.CMIXParams, xxdk.E2EParams) { // initE2e returns a fully-formed xxdk.E2e object func initE2e(cmixParams xxdk.CMIXParams, e2eParams xxdk.E2EParams) *xxdk.E2e { - _, receptionIdentity := initCmix() + initLog(viper.GetUint("logLevel"), viper.GetString("log")) + jww.INFO.Printf(Version()) - pass := parsePassword(viper.GetString("password")) + // Intake parameters for client initialization + precanId := viper.GetUint("sendid") + protoUserPath := viper.GetString("protoUserPath") + userIdPrefix := viper.GetString("userid-prefix") + backupPath := viper.GetString("backupIn") + backupPass := viper.GetString("backupPass") + storePassword := parsePassword(viper.GetString("password")) storeDir := viper.GetString("session") - jww.DEBUG.Printf("sessionDur: %v", storeDir) - - // load the client - baseClient, err := xxdk.LoadCmix(storeDir, pass, cmixParams) - if err != nil { - jww.FATAL.Panicf("%+v", err) - } + regCode := viper.GetString("regcode") + jww.DEBUG.Printf("sessionDir: %v", storeDir) + // TODO: This probably shouldn't be initialized globally. authCbs = makeAuthCallbacks( viper.GetBool("unsafe-channel-creation"), e2eParams) - // Force LoginLegacy for precanned senderID + // Initialize the client of the proper type var client *xxdk.E2e - if isPrecanID(receptionIdentity.ID) { - jww.INFO.Printf("Using LoginLegacy for precan sender") - client, err = xxdk.LoginLegacy(baseClient, e2eParams, authCbs) - if err != nil { - jww.FATAL.Panicf("%+v", err) - } + if precanId != 0 { + client = loadOrInitPrecan(precanId, storePassword, storeDir, cmixParams, e2eParams) + } else if protoUserPath != "" { + client = loadOrInitProto(protoUserPath, storePassword, storeDir, cmixParams, e2eParams) + } else if userIdPrefix != "" { + client = loadOrInitVanity(storePassword, storeDir, regCode, userIdPrefix, cmixParams, e2eParams) + } else if backupPath != "" { + client = loadOrInitBackup(backupPath, backupPass, storePassword, storeDir, cmixParams, e2eParams) } else { - jww.INFO.Printf("Using Login for non-precan sender") - client, err = xxdk.Login(baseClient, authCbs, receptionIdentity, - e2eParams) - if err != nil { - jww.FATAL.Panicf("%+v", err) - } + client = loadOrInitClient(storePassword, storeDir, regCode, cmixParams, e2eParams) } + // Handle protoUser output if protoUser := viper.GetString("protoUserOut"); protoUser != "" { - jsonBytes, err := client.ConstructProtoUserFile() if err != nil { jww.FATAL.Panicf("cannot construct proto user file: %v", @@ -746,16 +618,15 @@ func initE2e(cmixParams xxdk.CMIXParams, e2eParams xxdk.E2EParams) *xxdk.E2e { jww.FATAL.Panicf("cannot write proto user to file: %v", err) } - } + // Handle backup output if backupOut := viper.GetString("backupOut"); backupOut != "" { - backupPass := viper.GetString("backupPass") updateBackupCb := func(encryptedBackup []byte) { jww.INFO.Printf("Backup update received, size %d", len(encryptedBackup)) fmt.Println("Backup update received.") - err = utils.WriteFileDef(backupOut, encryptedBackup) + err := utils.WriteFileDef(backupOut, encryptedBackup) if err != nil { jww.FATAL.Panicf("cannot write backup: %+v", err) @@ -781,7 +652,7 @@ func initE2e(cmixParams xxdk.CMIXParams, e2eParams xxdk.E2EParams) *xxdk.E2e { } } } - _, err = backup.InitializeBackup(backupPass, updateBackupCb, + _, err := backup.InitializeBackup(backupPass, updateBackupCb, client.GetBackupContainer(), client.GetE2E(), client.GetStorage(), nil, client.GetStorage().GetKV(), client.GetRng()) if err != nil { @@ -1055,16 +926,6 @@ func waitUntilConnected(connected chan bool) { }() } -func parsePassword(pwStr string) []byte { - if strings.HasPrefix(pwStr, "0x") { - return getPWFromHexString(pwStr[2:]) - } else if strings.HasPrefix(pwStr, "b64:") { - return getPWFromb64String(pwStr[4:]) - } else { - return []byte(pwStr) - } -} - func parseRecipient(idStr string) *id.ID { if idStr == "0" { jww.FATAL.Panicf("No recipient specified") diff --git a/cmd/utils.go b/cmd/utils.go index 12c01738e45ecae13c9a4fef3fdb4140f3284a42..aa634f69e6495a050a24d7d904a9b79e10a2edd3 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -8,28 +8,20 @@ import ( jww "github.com/spf13/jwalterweatherman" "github.com/spf13/viper" "gitlab.com/elixxir/client/cmix" - backupCrypto "gitlab.com/elixxir/crypto/backup" "gitlab.com/elixxir/crypto/contact" "gitlab.com/xx_network/primitives/id" - "gitlab.com/xx_network/primitives/utils" ) // todo: go through cmd package and organize utility functions -func loadBackup(backupPath, backupPass string) (backupCrypto.Backup, []byte) { - jww.INFO.Printf("Loading backup from path %q with password %q", backupPath, backupPass) - backupFile, err := utils.ReadFile(backupPath) - if err != nil { - jww.FATAL.Panicf("%v", err) +func parsePassword(pwStr string) []byte { + if strings.HasPrefix(pwStr, "0x") { + return getPWFromHexString(pwStr[2:]) + } else if strings.HasPrefix(pwStr, "b64:") { + return getPWFromb64String(pwStr[4:]) + } else { + return []byte(pwStr) } - - var b backupCrypto.Backup - err = b.Decrypt(backupPass, backupFile) - if err != nil { - jww.ERROR.Printf("Failed to decrypt backup: %+v", err) - } - - return b, backupFile } /////////////////////////////////////////////////////////////////