From 3c0e3cf4108e0d684ff77ef2ed0fd97f4abb54b4 Mon Sep 17 00:00:00 2001 From: pomidorry Date: Thu, 4 Jun 2026 13:46:36 +0300 Subject: [PATCH] removed duplication --- modules/ssh/managed.go | 43 ++++++----------------------- routers/api/v1/org/mirror.go | 2 +- routers/api/v1/user/mirror.go | 2 +- routers/web/org/setting_ssh_keys.go | 4 +-- routers/web/user/setting/keys.go | 2 +- 5 files changed, 14 insertions(+), 39 deletions(-) diff --git a/modules/ssh/managed.go b/modules/ssh/managed.go index 43d34796a8..bd9a21c472 100644 --- a/modules/ssh/managed.go +++ b/modules/ssh/managed.go @@ -20,48 +20,23 @@ func IsSSHURL(remote string) bool { return err == nil && u.Scheme == "ssh" } -// GetOrCreateSSHKeypairForUser gets or creates an SSH keypair for the given user -func GetOrCreateSSHKeypairForUser(ctx context.Context, userID int64) (*user_model.UserSSHKeypair, error) { - keypair, err := user_model.GetUserSSHKeypairByOwner(ctx, userID) +// GetOrCreateSSHKeypair gets or creates the managed SSH keypair for the given +// owner (user or organization — they share the same backing storage). +func GetOrCreateSSHKeypair(ctx context.Context, ownerID int64) (*user_model.UserSSHKeypair, error) { + keypair, err := user_model.GetUserSSHKeypairByOwner(ctx, ownerID) if err != nil { if db.IsErrNotExist(err) { - log.Debug("Creating new SSH keypair for user %d", userID) - return user_model.CreateUserSSHKeypair(ctx, userID) + log.Debug("Creating new SSH keypair for owner %d", ownerID) + return user_model.CreateUserSSHKeypair(ctx, ownerID) } - return nil, fmt.Errorf("failed to get SSH keypair for user %d: %w", userID, err) + return nil, fmt.Errorf("failed to get SSH keypair for owner %d: %w", ownerID, err) } return keypair, nil } -// GetOrCreateSSHKeypairForOrg gets or creates an SSH keypair for the given organization -func GetOrCreateSSHKeypairForOrg(ctx context.Context, orgID int64) (*user_model.UserSSHKeypair, error) { - keypair, err := user_model.GetUserSSHKeypairByOwner(ctx, orgID) - if err != nil { - if db.IsErrNotExist(err) { - log.Debug("Creating new SSH keypair for organization %d", orgID) - return user_model.CreateUserSSHKeypair(ctx, orgID) - } - return nil, fmt.Errorf("failed to get SSH keypair for organization %d: %w", orgID, err) - } - return keypair, nil -} - -// GetSSHKeypairForRepository gets the appropriate SSH keypair for a repository -// If the repository belongs to an organization, it uses the org's keypair, -// otherwise it uses the user's keypair +// GetSSHKeypairForRepository gets the managed SSH keypair for the repository's owner. func GetSSHKeypairForRepository(ctx context.Context, repo *repo_model.Repository) (*user_model.UserSSHKeypair, error) { - if repo.Owner == nil { - owner, err := user_model.GetUserByID(ctx, repo.OwnerID) - if err != nil { - return nil, fmt.Errorf("failed to get repository owner: %w", err) - } - repo.Owner = owner - } - - if repo.Owner.IsOrganization() { - return GetOrCreateSSHKeypairForOrg(ctx, repo.OwnerID) - } - return GetOrCreateSSHKeypairForUser(ctx, repo.OwnerID) + return GetOrCreateSSHKeypair(ctx, repo.OwnerID) } // SetupManagedSSHAgent prepares SSH key-based authentication for a mirror or diff --git a/routers/api/v1/org/mirror.go b/routers/api/v1/org/mirror.go index 2929d2ca2b..e2f48074b2 100644 --- a/routers/api/v1/org/mirror.go +++ b/routers/api/v1/org/mirror.go @@ -40,7 +40,7 @@ func GetManagedSSHKey(ctx *context.APIContext) { // "404": // "$ref": "#/responses/notFound" - keypair, err := ssh_module.GetOrCreateSSHKeypairForOrg(ctx, ctx.Org.Organization.ID) + keypair, err := ssh_module.GetOrCreateSSHKeypair(ctx, ctx.Org.Organization.ID) if err != nil { if db.IsErrNotExist(err) { ctx.APIError(http.StatusNotFound, "SSH keypair not found") diff --git a/routers/api/v1/user/mirror.go b/routers/api/v1/user/mirror.go index ab80a4f382..fcfb6ebc3a 100644 --- a/routers/api/v1/user/mirror.go +++ b/routers/api/v1/user/mirror.go @@ -32,7 +32,7 @@ func GetManagedSSHKey(ctx *context.APIContext) { // "404": // "$ref": "#/responses/notFound" - keypair, err := ssh_module.GetOrCreateSSHKeypairForUser(ctx, ctx.Doer.ID) + keypair, err := ssh_module.GetOrCreateSSHKeypair(ctx, ctx.Doer.ID) if err != nil { if db.IsErrNotExist(err) { ctx.APIError(http.StatusNotFound, "SSH keypair not found") diff --git a/routers/web/org/setting_ssh_keys.go b/routers/web/org/setting_ssh_keys.go index c71bd09769..b91ca55ea8 100644 --- a/routers/web/org/setting_ssh_keys.go +++ b/routers/web/org/setting_ssh_keys.go @@ -28,9 +28,9 @@ func SSHKeys(ctx *context.Context) { return } - keypair, err := ssh_module.GetOrCreateSSHKeypairForOrg(ctx, ctx.Org.Organization.ID) + keypair, err := ssh_module.GetOrCreateSSHKeypair(ctx, ctx.Org.Organization.ID) if err != nil { - ctx.ServerError("GetOrCreateSSHKeypairForOrg", err) + ctx.ServerError("GetOrCreateSSHKeypair", err) return } diff --git a/routers/web/user/setting/keys.go b/routers/web/user/setting/keys.go index 15744eaa70..c1cf82c3ae 100644 --- a/routers/web/user/setting/keys.go +++ b/routers/web/user/setting/keys.go @@ -343,7 +343,7 @@ func loadKeysData(ctx *context.Context) { ctx.Data["UserDisabledFeatures"] = user_model.DisabledFeaturesWithLoginType(ctx.Doer) // Load SSH mirror keypair if it exists - mirrorKeypair, err := ssh_module.GetOrCreateSSHKeypairForUser(ctx, ctx.Doer.ID) + mirrorKeypair, err := ssh_module.GetOrCreateSSHKeypair(ctx, ctx.Doer.ID) if err == nil { ctx.Data["HasManagedSSHKey"] = true