Home

gitpecker @main - refs - log -
-
https://git.jolheiser.com/gitpecker.git
Woodpecker addon for generic git forge and OIDC
tree log patch
oidc: get username and avatar from extra claims Signed-off-by: jolheiser <git@jolheiser.com>
Signature
-----BEGIN SSH SIGNATURE----- U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgBTEvCQk6VqUAdN2RuH6bj1dNkY oOpbPWj+jw4ua1B1cAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5 AAAAQNN6N6r6B0nCbb83vjvt7sQ/rRGpiC939Qte/k2vLyKfKRDLsKkaJ7ns+LPHPAZLbQ pJZ/c818xBYFzP3Z7gHgE= -----END SSH SIGNATURE-----
jolheiser <git@jolheiser.com>
5 hours ago
1 changed files, 21 additions(+), 5 deletions(-)
forge.go
M forge.go -> forge.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
diff --git a/forge.go b/forge.go
index 675a006e456380aa0a5427058c46fa9161674b10..89feb463f2b775181eabbb934a22269ad422f23a 100644
--- a/forge.go
+++ b/forge.go
@@ -87,9 +87,20 @@ 		slog.Error("could not get user info", slog.Any("err", err))
 		return nil, redirectURL, err
 	}
 
-	login := userInfo.Profile
+	var extraClaims struct {
+		Picture  string `json:"picture"`
+		Username string `json:"preferred_username"`
+	}
+	userInfo.Claims(&extraClaims)
+
+	picture := extraClaims.Picture
+	if picture == "" {
+		picture = fmt.Sprintf("https://www.libravatar.org/avatar/%x", md5.Sum([]byte(userInfo.Email)))
+	}
+
+	login := extraClaims.Username
 	if login == "" {
-		login = userInfo.Email
+		login = userInfo.Profile
 	}
 
 	return &model.User{
@@ -99,7 +110,7 @@ 		Expiry:        oauthToken.Expiry.Unix(),
 		Login:         login,
 		Email:         userInfo.Email,
 		ForgeRemoteID: model.ForgeRemoteID("gitpecker"),
-		Avatar:        fmt.Sprintf("https://www.libravatar.org/avatar/%x", md5.Sum([]byte(userInfo.Email))),
+		Avatar:        picture,
 	}, redirectURL, nil
 }
 
@@ -118,9 +129,14 @@ 		slog.Error("could not get user info", slog.Any("err", err))
 		return "", err
 	}
 
-	login := userInfo.Profile
+	var extraClaims struct {
+		Username string `json:"preferred_username"`
+	}
+	userInfo.Claims(&extraClaims)
+
+	login := extraClaims.Username
 	if login == "" {
-		login = userInfo.Email
+		login = userInfo.Profile
 	}
 
 	return login, nil