(c *gin.Context, success UserSuccessCallback, fail UserFailCallback, cfg *oauth2.Config)
| 326 | } |
| 327 | |
| 328 | func githubAuthCallback(c *gin.Context, success UserSuccessCallback, fail UserFailCallback, cfg *oauth2.Config) http.Handler { |
| 329 | return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { |
| 330 | tokenInfo, err := oauth2Login.TokenFromContext(r.Context()) |
| 331 | if err != nil { |
| 332 | fail(err) |
| 333 | return |
| 334 | } |
| 335 | |
| 336 | rpc := githubRPC.NewClient(cfg.Client(r.Context(), tokenInfo)) |
| 337 | |
| 338 | userInfo, _, err := rpc.Users.Get(r.Context(), "") |
| 339 | if err != nil { |
| 340 | err = errors.Wrapf(err, "get github user info failed") |
| 341 | fail(err) |
| 342 | return |
| 343 | } |
| 344 | |
| 345 | if success != nil { |
| 346 | var extraInfo gin.H |
| 347 | |
| 348 | userInfoJSON, err := json.Marshal(userInfo) |
| 349 | if err != nil { |
| 350 | err = errors.Wrapf(err, "marshal user info failed") |
| 351 | fail(err) |
| 352 | return |
| 353 | } |
| 354 | |
| 355 | err = json.Unmarshal(userInfoJSON, &extraInfo) |
| 356 | if err != nil { |
| 357 | err = errors.Wrapf(err, "unmarshal extra user info failed") |
| 358 | fail(err) |
| 359 | return |
| 360 | } |
| 361 | |
| 362 | if userInfo.GetID() == 0 { |
| 363 | err = errors.New("could not get user id") |
| 364 | fail(err) |
| 365 | return |
| 366 | } |
| 367 | |
| 368 | // get primary email instead of public email |
| 369 | // userInfo.GetEmail returns the public email, may not be primary email |
| 370 | emails, _, err := rpc.Users.ListEmails(r.Context(), nil) |
| 371 | if err != nil { |
| 372 | err = errors.Wrapf(err, "get github user primary email failed") |
| 373 | fail(err) |
| 374 | return |
| 375 | } |
| 376 | |
| 377 | var primaryEmail string |
| 378 | |
| 379 | for _, email := range emails { |
| 380 | if email.GetPrimary() && email.GetVerified() { |
| 381 | primaryEmail = email.GetEmail() |
| 382 | } |
| 383 | } |
| 384 | |
| 385 | if primaryEmail == "" { |
no test coverage detected