Skip to content

Commit 5350408

Browse files
committed
refactor: narrow current user SSH key contract
1 parent 3378b3e commit 5350408

11 files changed

Lines changed: 71 additions & 38 deletions

File tree

pkg/cmd/copy/copy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ type CopyStore interface {
3535
GetWorkspaces(organizationID string, options *store.GetWorkspacesOptions) ([]entity.Workspace, error)
3636
StartWorkspace(workspaceID string) (*entity.Workspace, error)
3737
GetWorkspace(workspaceID string) (*entity.Workspace, error)
38-
GetCurrentUserKeys() (*entity.UserKeys, error)
38+
GetCurrentUserSSHPrivateKey() (string, error)
3939
GetAccessToken() (string, error)
4040
}
4141

pkg/cmd/proxy/proxy.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type ProxyStore interface {
2424
huproxyclient.HubProxyStore
2525
GetWorkspace(workspaceID string) (*entity.Workspace, error)
2626
WritePrivateKey(pem string) error
27-
GetCurrentUserKeys() (*entity.UserKeys, error)
27+
GetCurrentUserSSHPrivateKey() (string, error)
2828
}
2929

3030
func NewCmdProxy(t *terminal.Terminal, store ProxyStore) *cobra.Command {
@@ -149,11 +149,11 @@ func checkWorkspaceInfraVersionOrErr(workspace *entity.Workspace) error {
149149
}
150150

151151
func WriteUserPrivateKey(store ProxyStore) error {
152-
keys, err := store.GetCurrentUserKeys()
152+
privateKey, err := store.GetCurrentUserSSHPrivateKey()
153153
if err != nil {
154154
return breverrors.WrapAndTrace(err)
155155
}
156-
err = store.WritePrivateKey(keys.PrivateKey)
156+
err = store.WritePrivateKey(privateKey)
157157
if err != nil {
158158
return breverrors.WrapAndTrace(err)
159159
}

pkg/cmd/proxy/proxy_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,44 @@ package proxy
33
import (
44
"testing"
55

6+
"github.com/brevdev/brev-cli/pkg/entity"
67
"github.com/hashicorp/go-version"
78
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/require"
810
)
911

12+
type privateKeyProxyStore struct {
13+
privateKey string
14+
writtenPrivateKey string
15+
}
16+
17+
func (s *privateKeyProxyStore) GetAuthTokens() (*entity.AuthTokens, error) {
18+
return nil, nil
19+
}
20+
21+
func (s *privateKeyProxyStore) GetWorkspace(string) (*entity.Workspace, error) {
22+
return nil, nil
23+
}
24+
25+
func (s *privateKeyProxyStore) GetCurrentUserSSHPrivateKey() (string, error) {
26+
return s.privateKey, nil
27+
}
28+
29+
func (s *privateKeyProxyStore) WritePrivateKey(privateKey string) error {
30+
s.writtenPrivateKey = privateKey
31+
return nil
32+
}
33+
1034
func TestVersionParsing(t *testing.T) {
1135
_, err := version.NewVersion("abadfjladsf")
1236
assert.NotNil(t, err)
1337
}
38+
39+
func TestWriteUserPrivateKeyWritesCurrentUsersPrivateKey(t *testing.T) {
40+
store := &privateKeyProxyStore{privateKey: "private"}
41+
42+
err := WriteUserPrivateKey(store)
43+
44+
require.NoError(t, err)
45+
require.Equal(t, "private", store.writtenPrivateKey)
46+
}

pkg/cmd/refresh/refresh.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type RefreshStore interface {
2929
ssh.ConfigUpdaterStore
3030
ssh.SSHConfigurerV2Store
3131
GetCurrentUser() (*entity.User, error)
32-
GetCurrentUserKeys() (*entity.UserKeys, error)
32+
GetCurrentUserSSHPrivateKey() (string, error)
3333
GetActiveOrganizationOrDefault() (*entity.Organization, error)
3434
GetAccessToken() (string, error)
3535
Chmod(string, fs.FileMode) error
@@ -155,12 +155,12 @@ func GetConfigUpdater(store RefreshStore) (*ssh.ConfigUpdater, error) {
155155
return nil, breverrors.WrapAndTrace(err)
156156
}
157157

158-
keys, err := store.GetCurrentUserKeys()
158+
privateKey, err := store.GetCurrentUserSSHPrivateKey()
159159
if err != nil {
160160
return nil, breverrors.WrapAndTrace(err)
161161
}
162162

163-
cu := ssh.NewConfigUpdater(store, configs, keys.PrivateKey)
163+
cu := ssh.NewConfigUpdater(store, configs, privateKey)
164164
cu.ExternalNodes = getExternalNodeSSHEntries(store)
165165

166166
return cu, nil

pkg/cmd/runtasks/runtasks.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ type RunTasksStore interface {
4848
ssh.SSHConfigurerV2Store
4949
tasks.RunTaskAsDaemonStore
5050
GetCurrentUser() (*entity.User, error)
51-
GetCurrentUserKeys() (*entity.UserKeys, error)
51+
GetCurrentUserSSHPrivateKey() (string, error)
5252
}
5353

5454
func RunTasks(_ *terminal.Terminal, store RunTasksStore, detached bool) error {
@@ -77,12 +77,12 @@ func getDefaultTasks(store RunTasksStore) ([]tasks.Task, error) {
7777
}
7878

7979
// get private key and set here
80-
keys, err := store.GetCurrentUserKeys()
80+
privateKey, err := store.GetCurrentUserSSHPrivateKey()
8181
if err != nil {
8282
return nil, breverrors.WrapAndTrace(err)
8383
}
8484

85-
cu := ssh.NewConfigUpdater(store, configs, keys.PrivateKey)
85+
cu := ssh.NewConfigUpdater(store, configs, privateKey)
8686

8787
return []tasks.Task{cu}, nil
8888
}

pkg/cmd/tasks/tasks.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type TaskMap map[string]tasks.Task
1919
var all bool // used for run command
2020

2121
type TaskStore interface {
22-
GetCurrentUserKeys() (*entity.UserKeys, error)
22+
GetCurrentUserSSHPrivateKey() (string, error)
2323
CopyBin(targetBin string) error
2424
WriteString(path, data string) error
2525
GetOrCreateFile(path string) (afero.File, error)

pkg/ssh/tasks.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ package ssh
22

33
import (
44
"github.com/brevdev/brev-cli/pkg/autostartconf"
5-
"github.com/brevdev/brev-cli/pkg/entity"
65
breverrors "github.com/brevdev/brev-cli/pkg/errors"
76
"github.com/brevdev/brev-cli/pkg/tasks"
87
)
98

109
type SSHConfigurerTaskStore interface {
1110
ConfigUpdaterStore
1211
SSHConfigurerV2Store
13-
GetCurrentUserKeys() (*entity.UserKeys, error)
12+
GetCurrentUserSSHPrivateKey() (string, error)
1413
}
1514

1615
type SSHConfigurerTask struct {
@@ -29,12 +28,12 @@ func (sct SSHConfigurerTask) Run() error {
2928
return breverrors.WrapAndTrace(err)
3029
}
3130

32-
keys, err := sct.Store.GetCurrentUserKeys()
31+
privateKey, err := sct.Store.GetCurrentUserSSHPrivateKey()
3332
if err != nil {
3433
return breverrors.WrapAndTrace(err)
3534
}
3635

37-
cu := NewConfigUpdater(sct.Store, configs, keys.PrivateKey)
36+
cu := NewConfigUpdater(sct.Store, configs, privateKey)
3837
err = tasks.RunTasks([]tasks.Task{cu})
3938
if err != nil {
4039
return breverrors.WrapAndTrace(err)

pkg/store/devplane.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717

1818
type devPlaneUserService interface {
1919
GetCurrentUser(context.Context) (*nodev1.User, string, error)
20-
GetCurrentUserKeys(context.Context) (*entity.UserKeys, error)
20+
GetCurrentUserSSHPrivateKey(context.Context) (string, error)
2121
GetUser(context.Context, string) (*nodev1.User, error)
2222
}
2323

@@ -88,8 +88,8 @@ func (s *generatedDevPlaneUserService) GetCurrentUser(ctx context.Context) (*nod
8888
return response.Msg.GetUser(), "", nil
8989
}
9090

91-
func (s *generatedDevPlaneUserService) GetCurrentUserKeys(context.Context) (*entity.UserKeys, error) {
92-
return nil, fmt.Errorf("GetCurrentUserSSHKeys requires the published Set 1 Buf revision")
91+
func (s *generatedDevPlaneUserService) GetCurrentUserSSHPrivateKey(context.Context) (string, error) {
92+
return "", fmt.Errorf("GetCurrentUserSSHPrivateKey requires the published Set 1 Buf revision")
9393
}
9494

9595
func (s *generatedDevPlaneUserService) GetUser(ctx context.Context, userID string) (*nodev1.User, error) {

pkg/store/devplane_migration_test.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
type mockDevPlaneUserService struct {
1414
currentUser *nodev1.User
1515
publicSSHKey string
16-
keys *entity.UserKeys
16+
privateKey string
1717
getUser *nodev1.User
1818
gotUserID string
1919
}
@@ -22,8 +22,8 @@ func (m *mockDevPlaneUserService) GetCurrentUser(context.Context) (*nodev1.User,
2222
return m.currentUser, m.publicSSHKey, nil
2323
}
2424

25-
func (m *mockDevPlaneUserService) GetCurrentUserKeys(context.Context) (*entity.UserKeys, error) {
26-
return m.keys, nil
25+
func (m *mockDevPlaneUserService) GetCurrentUserSSHPrivateKey(context.Context) (string, error) {
26+
return m.privateKey, nil
2727
}
2828

2929
func (m *mockDevPlaneUserService) GetUser(_ context.Context, userID string) (*nodev1.User, error) {
@@ -73,7 +73,7 @@ func TestIdentityStoresUseDevPlaneServices(t *testing.T) {
7373
users := &mockDevPlaneUserService{
7474
currentUser: apiUser,
7575
publicSSHKey: "ssh-rsa public",
76-
keys: &entity.UserKeys{PublicKey: "public", PrivateKey: "private"},
76+
privateKey: "private",
7777
getUser: apiUser,
7878
}
7979
store := MakeMockAuthHTTPStore().withDevPlaneServices(&devPlaneServices{user: users})
@@ -88,16 +88,23 @@ func TestIdentityStoresUseDevPlaneServices(t *testing.T) {
8888
require.Equal(t, entity.Admin, current.GlobalUserType)
8989
require.Equal(t, true, current.OnboardingData["usedCLI"])
9090

91-
keys, err := store.GetCurrentUserKeys()
91+
privateKey, err := store.GetCurrentUserSSHPrivateKey()
9292
require.NoError(t, err)
93-
require.Equal(t, "private", keys.PrivateKey)
93+
require.Equal(t, "private", privateKey)
9494

9595
target, err := store.GetUserByID("user-2")
9696
require.NoError(t, err)
9797
require.Equal(t, "user-1", target.ID)
9898
require.Equal(t, "user-2", users.gotUserID)
9999
}
100100

101+
func TestGeneratedDevPlaneUserServiceGetCurrentUserSSHPrivateKeyFailsClosedUntilBufUpdate(t *testing.T) {
102+
privateKey, err := (&generatedDevPlaneUserService{}).GetCurrentUserSSHPrivateKey(context.Background())
103+
104+
require.Empty(t, privateKey)
105+
require.EqualError(t, err, "GetCurrentUserSSHPrivateKey requires the published Set 1 Buf revision")
106+
}
107+
101108
func TestOrganizationStoresUseCurrentUserAccessesAndDevPlane(t *testing.T) {
102109
users := &mockDevPlaneUserService{currentUser: &nodev1.User{
103110
UserId: "user-1",

pkg/store/user.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ func (s AuthHTTPStore) GetCurrentUserID() (string, error) {
5959
return user.ID, nil
6060
}
6161

62-
func (s AuthHTTPStore) GetCurrentUserKeys() (*entity.UserKeys, error) {
63-
result, err := s.devPlaneServiceClients().user.GetCurrentUserKeys(context.Background())
62+
func (s AuthHTTPStore) GetCurrentUserSSHPrivateKey() (string, error) {
63+
result, err := s.devPlaneServiceClients().user.GetCurrentUserSSHPrivateKey(context.Background())
6464
if err != nil {
65-
return nil, breverrors.WrapAndTrace(err)
65+
return "", breverrors.WrapAndTrace(err)
6666
}
6767
return result, nil
6868
}

0 commit comments

Comments
 (0)