1
0
mirror of https://github.com/vwxyzjn/portwarden synced 2026-01-05 16:43:13 +00:00

API-3 # Add endpoint to login to google drive

This commit is contained in:
Costa Huang
2018-11-26 09:55:16 -05:00
parent 211dce85cf
commit d47d5a5366
7 changed files with 72 additions and 40 deletions

64
Gopkg.lock generated
View File

@@ -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

View File

@@ -1,4 +1,4 @@
package models
package server
import (
"mime/multipart"

View File

@@ -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": ""})

View File

@@ -1,4 +1,4 @@
package utils
package server
import (
"crypto/rand"

View File

@@ -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))
}