fix: reuse saved credential for connection test

This commit is contained in:
2026-05-13 17:33:08 +08:00
parent 142c611fcb
commit bd13c842a8
2 changed files with 36 additions and 3 deletions

View File

@@ -158,7 +158,11 @@ func (s *Service) TestConnection(ctx context.Context, req domain.SaveConfigReque
if err := config.Validate(cfg); err != nil {
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 {
return domain.TestConnectionResult{}, err
}
@@ -471,6 +475,13 @@ func requestSecret(req domain.SaveConfigRequest) string {
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 {
if cfg.Gitea.AuthType == config.AuthToken {
return "token"

View File

@@ -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) {
svc, _, _, _, _, target := newTestService(t)
saveValidConfig(t, svc)
@@ -230,7 +248,10 @@ func newTestService(t *testing.T) (*Service, Paths, *fakeSecretStore, *fakeRemot
Secrets: secrets,
Git: git,
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{},
})
return svc, paths, secrets, remote, git, target
@@ -279,7 +300,8 @@ func (f *fakeSecretStore) Delete(service, user string) error {
}
type fakeRemoteClient struct {
skills []domain.RemoteSkill
skills []domain.RemoteSkill
lastSecret string
}
func (f *fakeRemoteClient) ListOrgSkills(context.Context, string) ([]domain.RemoteSkill, error) {