From 416eab31ae506a8940a328ce5071afc51d9bf931 Mon Sep 17 00:00:00 2001 From: Costa Huang Date: Sun, 2 Dec 2018 10:45:32 -0500 Subject: [PATCH] API-6 # Allow the user to cancel backup setup --- web/scheduler/server/controller.go | 40 +++++++++++++++++++++++++++--- web/scheduler/server/model.go | 8 ++++++ web/scheduler/server/server.go | 1 + 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/web/scheduler/server/controller.go b/web/scheduler/server/controller.go index ac8d775..ddb8c57 100644 --- a/web/scheduler/server/controller.go +++ b/web/scheduler/server/controller.go @@ -16,6 +16,9 @@ const ( ErrGettingPortwardenUser = "error getting a portwarden user" ErrLoginWithBitwarden = "error logging in with Bitwarden" ErrSettingupBackup = "error setting up backup" + ErrBackupNotCancelled = "error cancelling back up" + + MsgSuccessfullyCancelledBackingUp = "successfully cancelled backup process" FrontEndBaseAddressTest = "http://localhost:8000/" FrontEndBaseAddressProd = "" @@ -28,8 +31,8 @@ func EncryptBackupHandler(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ErrBindingFromGin}) return } - if err := pu.LoginWithBitwarden(); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ErrLoginWithBitwarden}) + if !pu.BackupSetting.WillSetupBackup { + c.JSON(http.StatusBadRequest, gin.H{"message": MsgSuccessfullyCancelledBackingUp}) return } opu.Email = pu.Email @@ -37,9 +40,14 @@ func EncryptBackupHandler(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ErrGettingPortwardenUser}) return } + if err := pu.LoginWithBitwarden(); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ErrLoginWithBitwarden}) + return + } + opu.BackupSetting = pu.BackupSetting if err := opu.SetupAutomaticBackup(nil); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ErrSettingupBackup}) + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": MsgSuccessfullyCancelledBackingUp}) return } if err := opu.Set(); err != nil { @@ -48,11 +56,35 @@ func EncryptBackupHandler(c *gin.Context) { } } +func CancelEncryptBackupHandler(c *gin.Context) { + var pu PortwardenUser + var opu PortwardenUser + if err := c.ShouldBindJSON(&pu); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ErrBindingFromGin}) + return + } + if pu.BackupSetting.WillSetupBackup { + c.JSON(http.StatusBadRequest, gin.H{"error": "", "message": ErrBackupNotCancelled}) + return + } + opu.Email = pu.Email + if err := opu.Get(); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ErrGettingPortwardenUser}) + return + } + opu.BackupSetting = pu.BackupSetting + if err := opu.Set(); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ErrCreatingPortwardenUser}) + return + } + c.JSON(http.StatusOK, gin.H{"message": MsgSuccessfullyCancelledBackingUp}) +} + //TODO: GoogleDriveHandler() will return Json with the google login url // Not sure if it's supposed to call UploadFile() directly func (ps *PortwardenServer) GetGoogleDriveLoginURLHandler(c *gin.Context) { c.JSON(200, gin.H{ - "login_url": ps.GoogleDriveAppConfig.AuthCodeURL("state-token", oauth2.AccessTypeOffline, oauth2.ApprovalForce), + "login_url": web.GoogleDriveAppConfig.AuthCodeURL("state-token", oauth2.AccessTypeOffline, oauth2.ApprovalForce), }) return } diff --git a/web/scheduler/server/model.go b/web/scheduler/server/model.go index ec826e6..07a9c46 100644 --- a/web/scheduler/server/model.go +++ b/web/scheduler/server/model.go @@ -15,9 +15,14 @@ import ( "golang.org/x/oauth2" ) +const ( + ErrWillNotSetupBackupByUser = "err the user stopped backing up" +) + type BackupSetting struct { Passphrase string `json:"passphrase"` BackupFrequencySeconds int `json:"backup_frequency_seconds"` + WillSetupBackup bool `json:"will_setup_backup"` } type DecryptBackupInfo struct { @@ -117,6 +122,9 @@ func (pu *PortwardenUser) LoginWithBitwarden() error { } func (pu *PortwardenUser) SetupAutomaticBackup(eta *time.Time) error { + if !pu.BackupSetting.WillSetupBackup { + return errors.New(ErrWillNotSetupBackupByUser) + } signature := &tasks.Signature{ Name: "BackupToGoogleDrive", Args: []tasks.Arg{ diff --git a/web/scheduler/server/server.go b/web/scheduler/server/server.go index 735c280..388a72f 100644 --- a/web/scheduler/server/server.go +++ b/web/scheduler/server/server.go @@ -36,6 +36,7 @@ func (ps *PortwardenServer) Run() { c.JSON(200, "success") }) ps.Router.POST("/encrypt", EncryptBackupHandler) + ps.Router.POST("/encrypt/cancel", CancelEncryptBackupHandler) ps.Router.Run(":" + strconv.Itoa(ps.Port)) }