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,74 @@
package linkedin
import (
"context"
"encoding/json"
"golang.org/x/oauth2"
"golang.org/x/oauth2/linkedin"
"io"
"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: linkedin.Endpoint,
RedirectURL: config.RedirectURL,
Scopes: config.Scopes,
}
return &client{oauthConfig: oauthConfig}
}
func (l client) GetConsentAuthUrl(ctx context.Context, state string) string {
return l.oauthConfig.AuthCodeURL(state, oauth2.AccessTypeOffline)
}
func (l client) ExchangeCodeWithToken(ctx context.Context, code string) (*types.Token, error) {
exchange, err := l.oauthConfig.Exchange(ctx, code, oauth2.AccessTypeOffline)
if err != nil {
return nil, err
}
token, err := l.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 (l client) GetUserInfo(
ctx context.Context,
accessToken string,
refreshToken string,
) (types.UserInfo, error) {
resp, err := l.oauthConfig.Client(ctx, &oauth2.Token{
AccessToken: accessToken,
RefreshToken: refreshToken,
}).Get("https://api.linkedin.com/v2/me")
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, nil
}