Skip to content

Commit afe7430

Browse files
author
Rachel Dowavic
committed
Fix Forgejo clone authentication and SSH URL support
- Add Forgejo case to getUsername() in helpers.go so credentials are embedded in HTTPS clone URLs for private repos - Set gitHostToken in newForgejoClient() so the token is available for HTTPS cloning - Use getCloneURL() in forgejo.go instead of hardcoding repo.CloneURL, so SSH URLs are used when -use-https-clone is not set - Fix test mock data to include both clone_url and ssh_url fields Fixes #193
1 parent 15e3a70 commit afe7430

4 files changed

Lines changed: 13 additions & 3 deletions

File tree

‎client.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ func newForgejoClient(gitHostURLParsed *url.URL) *forgejo.Client {
205205
url = gitHostURLParsed.String()
206206
}
207207

208+
gitHostToken = forgejoToken
208209
log.Println("Creating forgejo client", url)
209210
client, err := forgejo.NewClient(url, forgejo.SetToken(forgejoToken), forgejo.SetForgejoVersion(""))
210211
if err != nil {

‎forgejo.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func paginateForgejoRepositories(fetch func(page int) ([]*forgejo.Repository, *f
6767

6868
for _, repo := range results {
6969
repositories = append(repositories, &Repository{
70-
CloneURL: repo.CloneURL,
70+
CloneURL: getCloneURL(repo.CloneURL, repo.SSHURL),
7171
Name: repo.Name,
7272
Namespace: repo.Owner.UserName,
7373
Private: repo.Private,

‎helpers.go‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"log"
66

7+
forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
78
"github.com/google/go-github/v34/github"
89
"github.com/ktrysmt/go-bitbucket"
910
gitlab "github.com/xanzy/go-gitlab"
@@ -41,6 +42,14 @@ func getUsername(client interface{}, service string) string {
4142
return user.Username
4243
}
4344

45+
if service == "forgejo" {
46+
user, _, err := client.(*forgejo.Client).GetMyUserInfo()
47+
if err != nil {
48+
log.Fatal("Error retrieving username", err.Error())
49+
}
50+
return user.UserName
51+
}
52+
4453
return ""
4554
}
4655

‎repositories_test.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ func TestGetForgejoRepositories(t *testing.T) {
260260
defer teardownRepositoryTests()
261261

262262
mux.HandleFunc("/api/v1/user/repos", func(w http.ResponseWriter, r *http.Request) {
263-
fmt.Fprint(w, `[{"clone_url":"git@codeberg.org:abc/def.git","name":"def","owner":{"login":"abc"},"private":true}]`)
263+
fmt.Fprint(w, `[{"clone_url":"https://codeberg.org/abc/def.git","ssh_url":"git@codeberg.org:abc/def.git","name":"def","owner":{"login":"abc"},"private":true}]`)
264264
})
265265

266266
repos, err := getRepositories(ForgejoClient, "forgejo", "", []string{}, "", "", false, "")
@@ -285,7 +285,7 @@ func TestGetForgejoStarredRepositories(t *testing.T) {
285285
})
286286

287287
mux.HandleFunc("/api/v1/repos/search", func(w http.ResponseWriter, r *http.Request) {
288-
fmt.Fprint(w, `{"data":[{"clone_url":"git@codeberg.org:abc/def.git","name":"def","owner":{"login":"abc"},"private":true}]}`)
288+
fmt.Fprint(w, `{"data":[{"clone_url":"https://codeberg.org/abc/def.git","ssh_url":"git@codeberg.org:abc/def.git","name":"def","owner":{"login":"abc"},"private":true}]}`)
289289
})
290290

291291
repos, err := getRepositories(ForgejoClient, "forgejo", "", []string{}, "", "", false, "starred")

0 commit comments

Comments
 (0)