@@ -2,7 +2,6 @@ package onepassword
22
33import (
44 "bytes"
5- "encoding/base64"
65 "encoding/json"
76 "fmt"
87 "io/ioutil"
@@ -14,7 +13,7 @@ import (
1413 "github.com/mitchellh/go-homedir"
1514)
1615
17- type OPClient interface {
16+ type OPCLI interface {
1817 IsV2 () bool
1918 CreateVault (name string ) error
2019 CreateItem (vault string , template * ItemTemplate , title string ) error
@@ -24,7 +23,7 @@ type OPClient interface {
2423 ExistsItemInVault (vault string , itemName string ) (bool , error )
2524}
2625
27- func GetOPClient () (OPClient , error ) {
26+ func GetOPClient () (OPCLI , error ) {
2827 out , err := execOP ("--version" )
2928 if err != nil {
3029 return nil , err
@@ -33,77 +32,17 @@ func GetOPClient() (OPClient, error) {
3332 version := strings .TrimSpace (string (out ))
3433
3534 if strings .HasPrefix (version , "2." ) {
36- return & OPV2Client {
35+ return & OPV2CLI {
3736 version : version ,
3837 isV2 : true ,
3938 }, nil
4039 }
41- return & OPV1Client {
40+ return & OPV1CLI {
4241 version : version ,
4342 isV2 : false ,
4443 }, nil
4544}
4645
47- type OPV1Client struct {
48- version string
49- isV2 bool
50- }
51-
52- func (op * OPV1Client ) IsV2 () bool {
53- return op .isV2
54- }
55-
56- func (op * OPV1Client ) CreateVault (name string ) error {
57- _ , err := execOP ("create" , "vault" , name )
58- if err != nil {
59- return fmt .Errorf ("could not create vault '%s': %s" , name , err )
60- }
61- return nil
62- }
63-
64- func (op * OPV1Client ) CreateItem (vault string , template * ItemTemplate , title string ) error {
65- jsonTemplate , err := json .Marshal (template )
66- if err != nil {
67- return err
68- }
69-
70- encodedTemplate := base64 .RawURLEncoding .EncodeToString (jsonTemplate )
71-
72- _ , err = execOP ("create" , "item" , "apicredential" , "--vault=" + vault , encodedTemplate , "title=" + title )
73- return err
74- }
75-
76- func (op * OPV1Client ) SetField (vault , item , field , value string ) error {
77- _ , err := execOP ("edit" , "item" , item , fmt .Sprintf (`%s=%s` , field , value ), "--vault=" + vault )
78- if err != nil {
79- return fmt .Errorf ("could not set field '%s'.'%s'.'%s'" , vault , item , field )
80- }
81- return nil
82- }
83-
84- // GetFields returns a title-to-value map of the fields from the first section of the given 1Password item.
85- // The rest of the fields are ignored as the migration tool only stores information in the first
86- // section of each item.
87- func (op * OPV1Client ) GetFields (vault , item string ) (map [string ]string , error ) {
88- opItem := struct {
89- Details ItemTemplate `json:"details"`
90- }{}
91- opItemJSON , err := execOP ("get" , "item" , item , "--vault=" + vault )
92- if err != nil {
93- return nil , fmt .Errorf ("could not get item '%s'.'%s' from 1Password: %s" , vault , item , err )
94- }
95- err = json .Unmarshal (opItemJSON , & opItem )
96- if err != nil {
97- return nil , fmt .Errorf ("unexpected format of 1Password item in `op get item` command output: %s" , err )
98- }
99-
100- fields := make (map [string ]string , len (opItem .Details .Sections [0 ].Fields ))
101- for _ , field := range opItem .Details .Sections [0 ].Fields {
102- fields [field .Title ] = field .Value
103- }
104- return fields , nil
105- }
106-
10746func NewItemTemplate () * ItemTemplate {
10847 return & ItemTemplate {
10948 Sections : []sectionTemplate {
@@ -241,54 +180,3 @@ func GetSignInAddress() (string, error) {
241180
242181 return "" , fmt .Errorf ("unexpected format of 1password config file at %s: missing account entry for latest used account" , path )
243182}
244-
245- func (op * OPV1Client ) ExistsVault (vaultName string ) (bool , error ) {
246- vaultsBytes , err := execOP ("list" , "vaults" )
247- if err != nil {
248- return false , fmt .Errorf ("could not list vaults: %s" , err )
249- }
250-
251- vaultsJSON := make ([]struct {
252- UUID string `json:"uuid"`
253- Name string `json:"name"`
254- }, 0 )
255-
256- err = json .Unmarshal (vaultsBytes , & vaultsJSON )
257- if err != nil {
258- return false , fmt .Errorf ("unexpected format of `op list vaults`: %s" , vaultsBytes )
259- }
260-
261- for _ , vault := range vaultsJSON {
262- if vault .Name == vaultName {
263- return true , nil
264- }
265- }
266-
267- return false , nil
268- }
269-
270- func (op * OPV1Client ) ExistsItemInVault (vault string , itemName string ) (bool , error ) {
271- itemsBytes , err := execOP ("list" , "items" , "--vault" , vault )
272- if err != nil {
273- return false , fmt .Errorf ("could not list items in vault %s: %s" , vault , err )
274- }
275-
276- itemsJSON := make ([]struct {
277- Overview struct {
278- Title string `json:"title"`
279- } `json:"overview"`
280- }, 0 )
281-
282- err = json .Unmarshal (itemsBytes , & itemsJSON )
283- if err != nil {
284- return false , fmt .Errorf ("unexpected format of `op list items`: %s" , itemsBytes )
285- }
286-
287- for _ , item := range itemsJSON {
288- if item .Overview .Title == itemName {
289- return true , nil
290- }
291- }
292-
293- return false , nil
294- }
0 commit comments