fix: reuse saved credential for connection test
This commit is contained in:
@@ -158,7 +158,11 @@ func (s *Service) TestConnection(ctx context.Context, req domain.SaveConfigReque
|
|||||||
if err := config.Validate(cfg); err != nil {
|
if err := config.Validate(cfg); err != nil {
|
||||||
return domain.TestConnectionResult{}, err
|
return domain.TestConnectionResult{}, err
|
||||||
}
|
}
|
||||||
client, err := s.remoteMaker(ctx, cfg, requestSecret(req))
|
secret, err := s.resolveSecret(req)
|
||||||
|
if err != nil {
|
||||||
|
return domain.TestConnectionResult{}, err
|
||||||
|
}
|
||||||
|
client, err := s.remoteMaker(ctx, cfg, secret)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return domain.TestConnectionResult{}, err
|
return domain.TestConnectionResult{}, err
|
||||||
}
|
}
|
||||||
@@ -471,6 +475,13 @@ func requestSecret(req domain.SaveConfigRequest) string {
|
|||||||
return req.Password
|
return req.Password
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Service) resolveSecret(req domain.SaveConfigRequest) (string, error) {
|
||||||
|
if secret := requestSecret(req); secret != "" {
|
||||||
|
return secret, nil
|
||||||
|
}
|
||||||
|
return s.secrets.Get(req.Config.Gitea.CredentialKey, credentialUser(req.Config))
|
||||||
|
}
|
||||||
|
|
||||||
func credentialUser(cfg domain.Config) string {
|
func credentialUser(cfg domain.Config) string {
|
||||||
if cfg.Gitea.AuthType == config.AuthToken {
|
if cfg.Gitea.AuthType == config.AuthToken {
|
||||||
return "token"
|
return "token"
|
||||||
|
|||||||
@@ -73,6 +73,24 @@ func TestListRemoteSkillsMergesDownloadedStatus(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTestConnectionFallsBackToSavedSecret(t *testing.T) {
|
||||||
|
svc, _, _, remote, _, _ := newTestService(t)
|
||||||
|
saveValidConfig(t, svc)
|
||||||
|
cfg, err := svc.LoadConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("LoadConfig returned error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = svc.TestConnection(context.Background(), domain.SaveConfigRequest{Config: cfg})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("TestConnection returned error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if remote.lastSecret != "secret" {
|
||||||
|
t.Fatalf("remote maker got secret %q, want saved secret", remote.lastSecret)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestInstallSkillUpdatesStateAfterTargetInstall(t *testing.T) {
|
func TestInstallSkillUpdatesStateAfterTargetInstall(t *testing.T) {
|
||||||
svc, _, _, _, _, target := newTestService(t)
|
svc, _, _, _, _, target := newTestService(t)
|
||||||
saveValidConfig(t, svc)
|
saveValidConfig(t, svc)
|
||||||
@@ -230,7 +248,10 @@ func newTestService(t *testing.T) (*Service, Paths, *fakeSecretStore, *fakeRemot
|
|||||||
Secrets: secrets,
|
Secrets: secrets,
|
||||||
Git: git,
|
Git: git,
|
||||||
Targets: target,
|
Targets: target,
|
||||||
RemoteMaker: func(context.Context, domain.Config, string) (RemoteClient, error) { return remote, nil },
|
RemoteMaker: func(_ context.Context, _ domain.Config, secret string) (RemoteClient, error) {
|
||||||
|
remote.lastSecret = secret
|
||||||
|
return remote, nil
|
||||||
|
},
|
||||||
Opener: fakeOpener{},
|
Opener: fakeOpener{},
|
||||||
})
|
})
|
||||||
return svc, paths, secrets, remote, git, target
|
return svc, paths, secrets, remote, git, target
|
||||||
@@ -280,6 +301,7 @@ func (f *fakeSecretStore) Delete(service, user string) error {
|
|||||||
|
|
||||||
type fakeRemoteClient struct {
|
type fakeRemoteClient struct {
|
||||||
skills []domain.RemoteSkill
|
skills []domain.RemoteSkill
|
||||||
|
lastSecret string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeRemoteClient) ListOrgSkills(context.Context, string) ([]domain.RemoteSkill, error) {
|
func (f *fakeRemoteClient) ListOrgSkills(context.Context, string) ([]domain.RemoteSkill, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user