diff --git a/Gopkg.lock b/Gopkg.lock index bbe6b86..f48ea6a 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -22,7 +22,14 @@ [[projects]] branch = "master" name = "github.com/dsnet/compress" - packages = [".","bzip2","bzip2/internal/sais","internal","internal/errors","internal/prefix"] + packages = [ + ".", + "bzip2", + "bzip2/internal/sais", + "internal", + "internal/errors", + "internal/prefix" + ] revision = "cc9eb1d7ad760af14e8f918698f745e80377af4f" [[projects]] @@ -39,7 +46,12 @@ [[projects]] name = "github.com/gin-gonic/gin" - packages = [".","binding","json","render"] + packages = [ + ".", + "binding", + "json", + "render" + ] revision = "b869fe1415e4b9eb52f247441830d502aece2d4d" version = "v1.3.0" @@ -93,7 +105,10 @@ [[projects]] name = "github.com/pierrec/lz4" - packages = [".","internal/xxh32"] + packages = [ + ".", + "internal/xxh32" + ] revision = "635575b42742856941dbc767b44905bb9ba083f6" version = "v2.0.7" @@ -111,7 +126,12 @@ [[projects]] name = "github.com/ulikunitz/xz" - packages = [".","internal/hash","internal/xlog","lzma"] + packages = [ + ".", + "internal/hash", + "internal/xlog", + "lzma" + ] revision = "0c6b41e72360850ca4f98dc341fd999726ea007f" version = "v0.5.4" @@ -124,13 +144,22 @@ [[projects]] branch = "master" name = "golang.org/x/net" - packages = ["context","context/ctxhttp"] + packages = [ + "context", + "context/ctxhttp" + ] revision = "adae6a3d119ae4890b46832a2e88a95adc62b8e7" [[projects]] branch = "master" name = "golang.org/x/oauth2" - packages = [".","google","internal","jws","jwt"] + packages = [ + ".", + "google", + "internal", + "jws", + "jwt" + ] revision = "f42d05182288abf10faef86d16c0d07b8d40ea2d" [[projects]] @@ -142,12 +171,29 @@ [[projects]] branch = "master" name = "google.golang.org/api" - packages = ["drive/v3","gensupport","googleapi","googleapi/internal/uritemplates"] + packages = [ + "drive/v2", + "drive/v3", + "gensupport", + "googleapi", + "googleapi/internal/uritemplates" + ] revision = "83a9d304b1e613fc253e1e2710778642fe81af53" [[projects]] name = "google.golang.org/appengine" - packages = [".","internal","internal/app_identity","internal/base","internal/datastore","internal/log","internal/modules","internal/remote_api","internal/urlfetch","urlfetch"] + packages = [ + ".", + "internal", + "internal/app_identity", + "internal/base", + "internal/datastore", + "internal/log", + "internal/modules", + "internal/remote_api", + "internal/urlfetch", + "urlfetch" + ] revision = "4a4468ece617fc8205e99368fa2200e9d1fad421" version = "v1.3.0" @@ -172,6 +218,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "4a6e5b98747278f2c2be95f489e7aed2710b82c99e7857087c6eb222917dba6c" + inputs-digest = "e94795c347f48a9ee90b68d79ae43762c0504d74ca19276f92b7c394faeab698" solver-name = "gps-cdcl" solver-version = 1 diff --git a/web/utils/credentials.json b/web/credentials.json similarity index 100% rename from web/utils/credentials.json rename to web/credentials.json diff --git a/web/models/backup.go b/web/server/backup.go similarity index 97% rename from web/models/backup.go rename to web/server/backup.go index d005234..44474d9 100644 --- a/web/models/backup.go +++ b/web/server/backup.go @@ -1,4 +1,4 @@ -package models +package server import ( "mime/multipart" diff --git a/web/controllers/backup_controller.go b/web/server/backup_controller.go similarity index 58% rename from web/controllers/backup_controller.go rename to web/server/backup_controller.go index a66acef..9559523 100644 --- a/web/controllers/backup_controller.go +++ b/web/server/backup_controller.go @@ -1,24 +1,18 @@ -package controllers +package server import ( - "context" "fmt" - "io/ioutil" - "log" "net/http" "github.com/davecgh/go-spew/spew" - "golang.org/x/oauth2/google" - drive "google.golang.org/api/drive/v3" + "golang.org/x/oauth2" "github.com/gin-gonic/gin" "github.com/vwxyzjn/portwarden" - "github.com/vwxyzjn/portwarden/web/models" - "github.com/vwxyzjn/portwarden/web/utils" ) func EncryptBackupHandler(c *gin.Context) { - var ebi models.EncryptBackupInfo + var ebi EncryptBackupInfo if err := c.ShouldBindJSON(&ebi); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ""}) return @@ -31,7 +25,7 @@ func EncryptBackupHandler(c *gin.Context) { return } fmt.Println(sessionKey) - err = portwarden.CreateBackupFile(ebi.FileNamePrefix, ebi.Passphrase, sessionKey, models.BackupDefaultSleepMilliseconds) + err = portwarden.CreateBackupFile(ebi.FileNamePrefix, ebi.Passphrase, sessionKey, BackupDefaultSleepMilliseconds) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": sessionKey}) return @@ -40,25 +34,15 @@ func EncryptBackupHandler(c *gin.Context) { //TODO: GoogleDriveHandler() will return Json with the google login url // Not sure if it's supposed to call UploadFile() directly -func GoogleDriveHandler(c *gin.Context) { - ctx := context.Background() - credential, err := ioutil.ReadFile("credentials.json") - if err != nil { - log.Fatalf("Unable to read client secret file: %v", err) - } - config, err := google.ConfigFromJSON(credential, drive.DriveScope) - if err != nil { - log.Fatalf("Unable to parse client secret file to config: %v", err) - } - client := utils.GetClient(ctx, config) - token := utils.GetTokenFromWeb(config) - // TODO: Assign encrypted data to fileBytes before uploadFile is called - //UploadFile(fileBytes, client, token) - +func (ps *PortwardenServer) GoogleDriveLoginHandler(c *gin.Context) { + c.JSON(200, gin.H{ + "login_url": ps.GoogleDriveAppConfig.AuthCodeURL("state-token", oauth2.AccessTypeOffline), + }) + return } func DecryptBackupHandler(c *gin.Context) { - var dbi models.DecryptBackupInfo + var dbi DecryptBackupInfo var err error if err = c.ShouldBind(&dbi); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ""}) diff --git a/web/utils/google_drive.go b/web/server/google_drive.go similarity index 99% rename from web/utils/google_drive.go rename to web/server/google_drive.go index 205058d..92a90c7 100644 --- a/web/utils/google_drive.go +++ b/web/server/google_drive.go @@ -1,4 +1,4 @@ -package utils +package server import ( "crypto/rand" diff --git a/web/server/server.go b/web/server/server.go index 3512e44..962c7d6 100644 --- a/web/server/server.go +++ b/web/server/server.go @@ -7,7 +7,6 @@ import ( "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" - "github.com/vwxyzjn/portwarden/web/controllers" "golang.org/x/net/context" "golang.org/x/oauth2" "golang.org/x/oauth2/google" @@ -20,6 +19,7 @@ type PortwardenServer struct { GoogleDriveContext context.Context GoogleDriveAppCredentials []byte GoogleDriveAppConfig *oauth2.Config + GoogleClient *http.Client } func (ps *PortwardenServer) Run() { @@ -29,6 +29,7 @@ func (ps *PortwardenServer) Run() { if err != nil { log.Fatalf("Unable to parse client secret file to config: %v", err) } + // ps.GoogleClient = GetClient(ps.GoogleDriveContext, ps.GoogleDriveAppConfig) ps.Router = gin.Default() ps.Router.Use(cors.Default()) @@ -37,8 +38,9 @@ func (ps *PortwardenServer) Run() { http.ServeFile(c.Writer, c.Request, "index.html") }) - ps.Router.POST("/encrypt", controllers.EncryptBackupHandler) - ps.Router.POST("/decrypt", controllers.DecryptBackupHandler) + ps.Router.POST("/encrypt", EncryptBackupHandler) + ps.Router.POST("/decrypt", DecryptBackupHandler) + ps.Router.GET("/gdrive/login", ps.GoogleDriveLoginHandler) ps.Router.Run(":" + strconv.Itoa(ps.Port)) } diff --git a/web/utils/token.json b/web/server/token.json similarity index 100% rename from web/utils/token.json rename to web/server/token.json