initial commit

This commit is contained in:
m.zare
2026-04-10 18:25:21 +03:30
commit 77ca6c34a3
263 changed files with 34470 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
package google
import (
"context"
"encoding/json"
"io"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"base/internal/pkg/oauth/types"
)
type client struct {
oauthConfig *oauth2.Config
}
func New(config oauth2.Config) types.Oauth {
oauthConfig := &oauth2.Config{
ClientID: config.ClientID,
ClientSecret: config.ClientSecret,
Endpoint: google.Endpoint,
RedirectURL: config.RedirectURL,
Scopes: config.Scopes,
}
return &client{oauthConfig: oauthConfig}
}
func (g client) GetConsentAuthUrl(ctx context.Context, state string) string {
return g.oauthConfig.AuthCodeURL(state, oauth2.AccessTypeOffline)
}
func (g client) ExchangeCodeWithToken(ctx context.Context, code string) (*types.Token, error) {
exchange, err := g.oauthConfig.Exchange(ctx, code, oauth2.AccessTypeOffline)
if err != nil {
return nil, err
}
token, err := g.oauthConfig.TokenSource(ctx, exchange).Token()
if err != nil {
return nil, err
}
return &types.Token{
AccessToken: token.AccessToken,
TokenType: token.TokenType,
RefreshToken: token.RefreshToken,
ExpiresIn: token.ExpiresIn,
}, nil
}
func (g client) GetUserInfo(
ctx context.Context,
accessToken string,
refreshToken string,
) (types.UserInfo, error) {
resp, err := g.oauthConfig.Client(
ctx,
&oauth2.Token{
AccessToken: accessToken,
RefreshToken: refreshToken,
}).Get("https://www.googleapis.com/oauth2/v2/userinfo")
if err != nil {
return nil, err
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
var user UserInfo
if err = json.Unmarshal(data, &user); err != nil {
return nil, err
}
return &user, err
}

View File

@@ -0,0 +1,28 @@
package google
type UserInfo struct {
Id string `json:"id"`
GEmail string `json:"email"`
VerifiedEmail bool `json:"verified_email"`
Name string `json:"name"`
GivenName string `json:"given_name"`
FamilyName string `json:"family_name"`
Picture string `json:"picture"`
Locale string `json:"locale"`
}
func (u UserInfo) ID() string {
return u.Id
}
func (u UserInfo) Email() string {
return u.GEmail
}
func (u UserInfo) FirstName() string {
return u.Name
}
func (u UserInfo) LastName() string {
return u.Name
}