1
0
mirror of https://github.com/vwxyzjn/portwarden synced 2025-12-23 19:03:14 +00:00

API-1 # Handle CORS and enable upload files from the front-end

This commit is contained in:
Costa Huang
2018-11-17 16:06:24 -05:00
parent c30f1ed31b
commit 5f89eabd8e
4 changed files with 66 additions and 23 deletions

54
Gopkg.lock generated
View File

@@ -1,12 +1,31 @@
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
name = "github.com/davecgh/go-spew"
packages = ["spew"]
revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73"
version = "v1.1.1"
[[projects]] [[projects]]
branch = "master" branch = "master"
name = "github.com/dsnet/compress" 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" revision = "cc9eb1d7ad760af14e8f918698f745e80377af4f"
[[projects]]
name = "github.com/gin-contrib/cors"
packages = ["."]
revision = "cf4846e6a636a76237a28d9286f163c132e841bc"
version = "v1.2"
[[projects]] [[projects]]
branch = "master" branch = "master"
name = "github.com/gin-contrib/sse" name = "github.com/gin-contrib/sse"
@@ -15,7 +34,12 @@
[[projects]] [[projects]]
name = "github.com/gin-gonic/gin" name = "github.com/gin-gonic/gin"
packages = [".","binding","json","render"] packages = [
".",
"binding",
"json",
"render"
]
revision = "b869fe1415e4b9eb52f247441830d502aece2d4d" revision = "b869fe1415e4b9eb52f247441830d502aece2d4d"
version = "v1.3.0" version = "v1.3.0"
@@ -31,12 +55,6 @@
packages = ["."] packages = ["."]
revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a"
[[projects]]
name = "github.com/gorilla/websocket"
packages = ["."]
revision = "66b9c49e59c6c48f0ffce28c2d8b8a5678502c6d"
version = "v1.4.0"
[[projects]] [[projects]]
name = "github.com/json-iterator/go" name = "github.com/json-iterator/go"
packages = ["."] packages = ["."]
@@ -75,7 +93,10 @@
[[projects]] [[projects]]
name = "github.com/pierrec/lz4" name = "github.com/pierrec/lz4"
packages = [".","internal/xxh32"] packages = [
".",
"internal/xxh32"
]
revision = "635575b42742856941dbc767b44905bb9ba083f6" revision = "635575b42742856941dbc767b44905bb9ba083f6"
version = "v2.0.7" version = "v2.0.7"
@@ -93,7 +114,12 @@
[[projects]] [[projects]]
name = "github.com/ulikunitz/xz" name = "github.com/ulikunitz/xz"
packages = [".","internal/hash","internal/xlog","lzma"] packages = [
".",
"internal/hash",
"internal/xlog",
"lzma"
]
revision = "0c6b41e72360850ca4f98dc341fd999726ea007f" revision = "0c6b41e72360850ca4f98dc341fd999726ea007f"
version = "v0.5.4" version = "v0.5.4"
@@ -115,12 +141,6 @@
revision = "5f1438d3fca68893a817e4a66806cea46a9e4ebf" revision = "5f1438d3fca68893a817e4a66806cea46a9e4ebf"
version = "v8.18.2" version = "v8.18.2"
[[projects]]
name = "gopkg.in/olahol/melody.v1"
packages = ["."]
revision = "d521390733761fe1db13de575c253afd5c743085"
version = "v1"
[[projects]] [[projects]]
name = "gopkg.in/urfave/cli.v1" name = "gopkg.in/urfave/cli.v1"
packages = ["."] packages = ["."]
@@ -136,6 +156,6 @@
[solve-meta] [solve-meta]
analyzer-name = "dep" analyzer-name = "dep"
analyzer-version = 1 analyzer-version = 1
inputs-digest = "092f1ac91200f0c9089d9a815804bb5b5f119dca0d41701511e3725507ebeac2" inputs-digest = "664bccbb10f1b918e1d07954f5a556ffe15816b29072c12d4f4ff2fac05d8ca6"
solver-name = "gps-cdcl" solver-name = "gps-cdcl"
solver-version = 1 solver-version = 1

View File

@@ -12,22 +12,35 @@ import (
) )
func EncryptBackupController(c *gin.Context) { func EncryptBackupController(c *gin.Context) {
var bi models.BackupInfo var ebi models.EncryptBackupInfo
if err := c.ShouldBindJSON(&bi); err != nil { if err := c.ShouldBindJSON(&ebi); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ""}) c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ""})
return return
} }
spew.Dump(&bi.BitwardenLoginCredentials) spew.Dump(&ebi.BitwardenLoginCredentials)
sessionKey, err := portwarden.BWLoginGetSessionKey(&bi.BitwardenLoginCredentials) sessionKey, err := portwarden.BWLoginGetSessionKey(&ebi.BitwardenLoginCredentials)
if err != nil { if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": sessionKey}) c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": sessionKey})
return return
} }
fmt.Println(sessionKey) fmt.Println(sessionKey)
err = portwarden.CreateBackupFile(bi.FileNamePrefix, bi.Passphrase, sessionKey, models.BackupDefaultSleepMilliseconds) err = portwarden.CreateBackupFile(ebi.FileNamePrefix, ebi.Passphrase, sessionKey, models.BackupDefaultSleepMilliseconds)
if err != nil { if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": sessionKey}) c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": sessionKey})
return return
} }
} }
func DecryptBackupController(c *gin.Context) {
var dbi models.DecryptBackupInfo
var err error
if err = c.ShouldBind(&dbi); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ""})
return
}
if dbi.File, err = c.FormFile("file"); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "message": ""})
spew.Dump(gin.H{"error": err.Error(), "message": ""})
}
}

View File

@@ -1,6 +1,8 @@
package models package models
import ( import (
"mime/multipart"
"github.com/vwxyzjn/portwarden" "github.com/vwxyzjn/portwarden"
) )
@@ -8,8 +10,13 @@ const (
BackupDefaultSleepMilliseconds = 300 BackupDefaultSleepMilliseconds = 300
) )
type BackupInfo struct { type EncryptBackupInfo struct {
FileNamePrefix string `json:"filename_prefix"` FileNamePrefix string `json:"filename_prefix"`
Passphrase string `json:"passphrase"` Passphrase string `json:"passphrase"`
BitwardenLoginCredentials portwarden.LoginCredentials `json:"bitwarden_login_credentials"` BitwardenLoginCredentials portwarden.LoginCredentials `json:"bitwarden_login_credentials"`
} }
type DecryptBackupInfo struct {
File *multipart.FileHeader `form:"file"`
Passphrase string `form:"passphrase"`
}

View File

@@ -3,18 +3,21 @@ package main
import ( import (
"net/http" "net/http"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/vwxyzjn/portwarden/web/controllers" "github.com/vwxyzjn/portwarden/web/controllers"
) )
func main() { func main() {
r := gin.Default() r := gin.Default()
r.Use(cors.Default())
r.GET("/", func(c *gin.Context) { r.GET("/", func(c *gin.Context) {
http.ServeFile(c.Writer, c.Request, "index.html") http.ServeFile(c.Writer, c.Request, "index.html")
}) })
r.POST("/encrypt", controllers.EncryptBackupController) r.POST("/encrypt", controllers.EncryptBackupController)
r.POST("/decrypt", controllers.DecryptBackupController)
r.Run(":5000") r.Run(":5000")
} }