MCPcopy Index your code
hub / github.com/CovenantSQL/CovenantSQL / githubAuthCallback

Function githubAuthCallback

cmd/cql-proxy/auth/user.go:328–399  ·  view source on GitHub ↗
(c *gin.Context, success UserSuccessCallback, fail UserFailCallback, cfg *oauth2.Config)

Source from the content-addressed store, hash-verified

326}
327
328func 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 == "" {

Callers 1

HandleUserCallbackFunction · 0.85

Calls 4

MarshalMethod · 0.80
UnmarshalMethod · 0.80
GetMethod · 0.65
NewMethod · 0.65

Tested by

no test coverage detected