Skip to content

Commit

Permalink
feat: add export action
Browse files Browse the repository at this point in the history
  • Loading branch information
doron-cohen committed Oct 5, 2020
1 parent 4c31e43 commit bf30c9c
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 0 deletions.
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ module github.com/doron-cohen/antidot
go 1.14

require (
github.com/adrg/xdg v0.2.1
github.com/google/go-cmp v0.5.2
github.com/joho/godotenv v1.3.0
github.com/mitchellh/mapstructure v1.3.3
github.com/spf13/cobra v1.0.0
github.com/wzshiming/ctc v1.2.3
Expand Down
9 changes: 9 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/adrg/xdg v0.2.1 h1:VSVdnH7cQ7V+B33qSJHTCRlNgra1607Q8PzEmnvb2Ic=
github.com/adrg/xdg v0.2.1/go.mod h1:ZuOshBmzV4Ta+s23hdfFZnBsdzmoR3US0d7ErpqSbTQ=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
Expand All @@ -14,6 +16,7 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
Expand All @@ -40,7 +43,10 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmg
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
Expand All @@ -62,6 +68,7 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
Expand All @@ -87,6 +94,7 @@ github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
Expand Down Expand Up @@ -125,6 +133,7 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
Expand Down
73 changes: 73 additions & 0 deletions internal/rules/export.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package rules

import (
"errors"
"fmt"
"log"
"os"

"github.com/joho/godotenv"

"github.com/doron-cohen/antidot/internal/tui"
"github.com/doron-cohen/antidot/internal/utils"
)

type Export struct {
Key string
Value string
}

func (e Export) Apply() error {
envFile, err := utils.AppDirs.GetDataFile("env.sh")
if err != nil {
return err
}

if !utils.FileExists(envFile) {
if _, err = os.Create(envFile); err != nil {
return err
}
}

envMap, err := godotenv.Read(envFile)
if err != nil {
return err
}

existingValue, isKeyContained := envMap[e.Key]
if isKeyContained {
log.Printf("Key %s already exists in env file %s", e.Key, envFile)
if existingValue != e.Value {
errMessage := fmt.Sprintf(
"Current value for key '%s' (%s) is different than the requested (%s)",
e.Key, existingValue, e.Value,
)
return errors.New(errMessage)
} else {
return nil
}
} else {
envMap[e.Key] = e.Value
}

log.Printf("Writing to %s", envFile)
if err = utils.WriteEnvToFile(envMap, envFile); err != nil {
return err
}

return nil
}

func (e Export) Pprint() {
log.Printf(
" %s %s%s\"%s\"",
tui.ApplyStyle(tui.Blue, "EXPORT"),
e.Key,
tui.ApplyStyle(tui.Gray, "="),
e.Value,
)
}

func init() {
registerAction("export", Export{})
}
1 change: 1 addition & 0 deletions internal/tui/colors.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const (

Red ctc.Color = ctc.ForegroundBrightRed
Cyan ctc.Color = ctc.ForegroundBrightCyan
Blue ctc.Color = ctc.ForegroundBrightBlue
Green ctc.Color = ctc.ForegroundBrightGreen
Gray ctc.Color = ctc.ForegroundBrightBlack
)
Expand Down
35 changes: 35 additions & 0 deletions internal/utils/appdirs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package utils

import (
"path/filepath"

"github.com/adrg/xdg"
)

type appDirs struct {
AppName string
}

func (a appDirs) ConfigHome() string {
return filepath.Join(xdg.ConfigHome, a.AppName)
}

func (a appDirs) CacheHome() string {
return filepath.Join(xdg.CacheHome, a.AppName)
}

func (a appDirs) DataHome() string {
return filepath.Join(xdg.DataHome, a.AppName)
}

func (a appDirs) GetDataFile(fileName string) (string, error) {
relPath := filepath.Join(a.AppName, fileName)
return xdg.DataFile(relPath)
}

var AppDirs appDirs

func init() {
// TODO: import this from somewhere
AppDirs = appDirs{AppName: "antidot"}
}
15 changes: 15 additions & 0 deletions internal/utils/env.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package utils

import (
"fmt"
"os"
"os/user"

"github.com/joho/godotenv"
)

func GetHomeDir() (string, error) {
Expand All @@ -17,3 +20,15 @@ func GetHomeDir() (string, error) {
func ExpandEnv(text string) string {
return os.ExpandEnv(text)
}

func WriteEnvToFile(envMap map[string]string, filePath string) error {
var newKey string
newMap := make(map[string]string, len(envMap))
for key, value := range envMap {
// TODO: remove this ugly but working hack
newKey = fmt.Sprintf("export %s", key)
newMap[newKey] = value
}

return godotenv.Write(newMap, filePath)
}

0 comments on commit bf30c9c

Please sign in to comment.