Skip to content
This repository was archived by the owner on Feb 7, 2024. It is now read-only.

Commit 1d27996

Browse files
thedmdimhacdias
andauthored
feat: add key/import command
Co-authored-by: Henrique Dias <[email protected]>
1 parent de88005 commit 1d27996

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

key.go

+48-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package shell
22

3-
import "context"
3+
import (
4+
"context"
5+
"io"
6+
7+
files "github.com/ipfs/go-ipfs-files"
8+
)
49

510
type Key struct {
611
Id string
@@ -82,3 +87,45 @@ func (s *Shell) KeyRm(ctx context.Context, name string) ([]*Key, error) {
8287
}
8388
return out.Keys, nil
8489
}
90+
91+
type KeyImportOpt func(*RequestBuilder) error
92+
type keyImportOpt struct{}
93+
94+
var KeyImportGen keyImportOpt
95+
96+
func (keyImportOpt) IpnsBase(enc string) KeyImportOpt {
97+
return func(rb *RequestBuilder) error {
98+
rb.Option("ipns-base", enc)
99+
return nil
100+
}
101+
}
102+
103+
func (keyImportOpt) Format(format string) KeyImportOpt {
104+
return func(rb *RequestBuilder) error {
105+
rb.Option("format", format)
106+
return nil
107+
}
108+
}
109+
110+
func (keyImportOpt) AllowAnyKeyType(allow bool) KeyImportOpt {
111+
return func(rb *RequestBuilder) error {
112+
rb.Option("allow-any-key-type", allow)
113+
return nil
114+
}
115+
}
116+
117+
// KeyImport imports key as file.
118+
func (s *Shell) KeyImport(ctx context.Context, name string, key io.Reader, options ...KeyImportOpt) error {
119+
fr := files.NewReaderFile(key)
120+
slf := files.NewSliceDirectory([]files.DirEntry{files.FileEntry("", fr)})
121+
fileReader := files.NewMultiFileReader(slf, true)
122+
123+
rb := s.Request("key/import", name)
124+
for _, opt := range options {
125+
if err := opt(rb); err != nil {
126+
return err
127+
}
128+
}
129+
130+
return rb.Body(fileReader).Exec(ctx, nil)
131+
}

key_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package shell
22

33
import (
44
"context"
5+
"os"
56
"testing"
67

78
"github.com/cheekybits/is"
@@ -114,3 +115,19 @@ func TestKeyRm(t *testing.T) {
114115
is.NotNil(err)
115116
is.Equal(err.Error(), "key/rm: no key named testKey was found")
116117
}
118+
119+
func TestKeyImport(t *testing.T) {
120+
is := is.New(t)
121+
s := NewShell(shellUrl)
122+
123+
// Key generated as per: https://github.com/ipfs/kubo/blob/c9d51bbe0133968858aa9991b7f69ec269126599/test/sharness/t0165-keystore-data/README.md
124+
f, err := os.Open("./tests/key_test.pem")
125+
is.Nil(err)
126+
defer f.Close()
127+
128+
err = s.KeyImport(context.Background(), "testImportKey", f, KeyImportGen.Format("pem-pkcs8-cleartext"))
129+
is.Nil(err)
130+
131+
_, err = s.KeyRm(context.Background(), "testImportKey")
132+
is.Nil(err)
133+
}

tests/key_test.pem

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MC4CAQAwBQYDK2VwBCIEIJ2M1na2f3dRm4b1FcAQvsn7q08+XfBZcr4MgH4yiBdz
3+
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)