MCPcopy Create free account
hub / github.com/GoogleChrome/webstatus.dev / PingUser

Method PingUser

backend/pkg/httpserver/ping_user.go:27–112  ·  view source on GitHub ↗

PingUser implements backend.StrictServerInterface. nolint: ireturn // Name generated from openapi

(
	ctx context.Context,
	req backend.PingUserRequestObject,
)

Source from the content-addressed store, hash-verified

25// PingUser implements backend.StrictServerInterface.
26// nolint: ireturn // Name generated from openapi
27func (s *Server) PingUser(
28 ctx context.Context,
29 req backend.PingUserRequestObject,
30) (backend.PingUserResponseObject, error) {
31 userCheckResult := CheckAuthenticatedUser(ctx, "PingUser",
32 func(code int, message string) backend.PingUser500JSONResponse {
33 return backend.PingUser500JSONResponse{
34 Code: code,
35 Message: message,
36 }
37 })
38 if userCheckResult.User == nil {
39 return userCheckResult.Response, nil
40 }
41
42 user := userCheckResult.User
43 if req.Body.GithubToken == nil {
44 // Nothing to do.
45
46 return backend.PingUser204Response{}, nil
47 }
48
49 if user.GitHubUserID == nil {
50 slog.ErrorContext(ctx, "token is missing github user id", "user", user.ID)
51
52 return backend.PingUser500JSONResponse{
53 Code: 500,
54 Message: "token is missing github user id",
55 }, nil
56 }
57
58 githubClient := s.userGitHubClientFactory(*req.Body.GithubToken)
59 githubUser, err := githubClient.GetCurrentUser(ctx)
60 if err != nil {
61 slog.ErrorContext(ctx, "failed to get GitHub user", "error", err, "user", user.ID)
62
63 return backend.PingUser500JSONResponse{
64 Code: 500,
65 Message: "failed to get GitHub user",
66 }, nil
67 }
68
69 if !user.HasGitHubUserID(githubUser.ID) {
70 slog.WarnContext(ctx, "user does not have specified GitHub User ID", "user", user.ID,
71 "github_username", githubUser.Username, "github_id_from_api", githubUser.ID,
72 "github_id_in_gcip_token", *user.GitHubUserID)
73
74 return backend.PingUser403JSONResponse{
75 Code: 403,
76 Message: "user does not match specified GitHub User ID",
77 }, nil
78 }
79
80 emails, err := githubClient.ListEmails(ctx)
81 if err != nil {
82 slog.ErrorContext(ctx, "failed to list GitHub emails", "error", err, "user", user.ID,
83 "github ID", githubUser.ID)
84

Callers

nothing calls this directly

Calls 5

CheckAuthenticatedUserFunction · 0.85
HasGitHubUserIDMethod · 0.80
GetCurrentUserMethod · 0.65
ListEmailsMethod · 0.65
SyncUserProfileInfoMethod · 0.65

Tested by

no test coverage detected