| package utils | |
| import ( | |
| "encoding/json" | |
| "fmt" | |
| "io" | |
| "net/http" | |
| ) | |
| type GoogleTokenInfo struct { | |
| Email string `json:"email"` | |
| EmailVerified string `json:"email_verified"` | |
| Name string `json:"name"` | |
| Picture string `json:"picture"` | |
| Sub string `json:"sub"` | |
| } | |
| func VerifyGoogleToken(idToken string) (*GoogleTokenInfo, error) { | |
| resp, err := http.Get(fmt.Sprintf("https://oauth2.googleapis.com/tokeninfo?id_token=%s", idToken)) | |
| if err != nil { | |
| return nil, err | |
| } | |
| defer resp.Body.Close() | |
| if resp.StatusCode != http.StatusOK { | |
| return nil, fmt.Errorf("invalid token") | |
| } | |
| body, err := io.ReadAll(resp.Body) | |
| if err != nil { | |
| return nil, err | |
| } | |
| var tokenInfo GoogleTokenInfo | |
| if err := json.Unmarshal(body, &tokenInfo); err != nil { | |
| return nil, err | |
| } | |
| return &tokenInfo, nil | |
| } | |