MCPcopy Create free account
hub / github.com/PaperDebugger/paperdebugger / LoginByGoogle

Method LoginByGoogle

internal/api/auth/login_by_google.go:18–62  ·  view source on GitHub ↗
(
	ctx context.Context,
	req *authv1.LoginByGoogleRequest,
)

Source from the content-addressed store, hash-verified

16)
17
18func (s *AuthServer) LoginByGoogle(
19 ctx context.Context,
20 req *authv1.LoginByGoogleRequest,
21) (*authv1.LoginByGoogleResponse, error) {
22 googleToken := req.GetGoogleToken()
23 if googleToken == "" {
24 return nil, shared.ErrInvalidCredential("google token is empty")
25 }
26
27 googleUserInfo, err := fetchGoogleUserInfo(ctx, googleToken)
28 if err != nil {
29 return nil, shared.ErrInvalidCredential(err)
30 }
31
32 if !googleUserInfo.VerifiedEmail {
33 return nil, shared.ErrInvalidCredential("email not verified")
34 }
35
36 // Create default user with Google info
37 user := &models.User{
38 Email: googleUserInfo.Email,
39 Name: googleUserInfo.Name,
40 Picture: googleUserInfo.Picture,
41 LastLogin: bson.NewDateTimeFromTime(time.Now()),
42 }
43
44 user, err = s.userService.UpsertUserByEmail(ctx, user)
45 if err != nil {
46 return nil, err
47 }
48
49 token, err := jwt.SignJwtToken(user.ID.Hex())
50 if err != nil {
51 return nil, err
52 }
53 refreshToken, err := s.tokenService.CreateRefreshToken(ctx, user.ID)
54 if err != nil {
55 return nil, err
56 }
57
58 return &authv1.LoginByGoogleResponse{
59 Token: token,
60 RefreshToken: refreshToken.Token,
61 }, nil
62}
63
64type GoogleUserInfo struct {
65 ID string `json:"id"`

Callers

nothing calls this directly

Calls 5

SignJwtTokenFunction · 0.92
fetchGoogleUserInfoFunction · 0.85
GetGoogleTokenMethod · 0.80
UpsertUserByEmailMethod · 0.80
CreateRefreshTokenMethod · 0.80

Tested by

no test coverage detected