33package mailru
44
55import (
6- "crypto/md5"
76 "encoding/json"
87 "fmt"
9- "io"
108 "io/ioutil"
119 "net/http"
1210
@@ -15,9 +13,9 @@ import (
1513)
1614
1715const (
18- authURL = "https://connect .mail.ru/oauth/authorize "
19- tokenURL = "https://connect .mail.ru/oauth /token"
20- endpointUser = "https://www.appsmail .ru/platform/api "
16+ authURL = "https://oauth .mail.ru/login "
17+ tokenURL = "https://oauth .mail.ru/token"
18+ endpointUser = "https://oauth.mail .ru/userinfo "
2119)
2220
2321// New creates a new MAILRU provider and sets up important connection details.
@@ -35,9 +33,7 @@ func New(clientID, clientSecret, redirectURL string, scopes ...string) *Provider
3533 Scopes : []string {},
3634 }
3735
38- for _ , scope := range scopes {
39- c .Scopes = append (c .Scopes , scope )
40- }
36+ c .Scopes = append (c .Scopes , scopes ... )
4137
4238 return & Provider {
4339 name : "mailru" ,
@@ -47,11 +43,9 @@ func New(clientID, clientSecret, redirectURL string, scopes ...string) *Provider
4743
4844// Provider is the implementation of `goth.Provider` for accessing MAILRU.
4945type Provider struct {
50- name string
51- clientID string
52- clientSecret string
53- httpClient * http.Client
54- oauthConfig * oauth2.Config
46+ name string
47+ httpClient * http.Client
48+ oauthConfig * oauth2.Config
5549}
5650
5751// Name is the name used to retrieve this provider later.
@@ -91,21 +85,9 @@ func (p *Provider) FetchUser(session goth.Session) (_ goth.User, err error) {
9185 return user , fmt .Errorf ("%s cannot get user information without access token" , p .name )
9286 }
9387
94- var (
95- sig = fmt .Sprintf (
96- "app_id=%smethod=users.getInfosecure=1session_key=%s%s" ,
97- p .oauthConfig .ClientID , sess .AccessToken , p .oauthConfig .ClientSecret ,
98- )
99- hasher = md5 .New ()
100- )
101-
102- if _ , err = io .WriteString (hasher , sig ); err != nil {
103- return user , err
104- }
105-
10688 var reqURL = fmt .Sprintf (
107- "%s?app_id =%s&method=users.getInfo&secure=1&session_key=%s&sig=%x " ,
108- endpointUser , p . oauthConfig . ClientID , sess .AccessToken , hasher . Sum ( nil ) ,
89+ "%s?access_token =%s" ,
90+ endpointUser , sess .AccessToken ,
10991 )
11092
11193 res , err := p .Client ().Get (reqURL )
@@ -124,26 +106,17 @@ func (p *Provider) FetchUser(session goth.Session) (_ goth.User, err error) {
124106 return user , err
125107 }
126108
127- var raw []json.RawMessage
128- if err = json .Unmarshal (buf , & raw ); err != nil {
129- return user , err
130- }
131-
132- if len (raw ) == 0 {
133- return user , fmt .Errorf ("%s cannot get user information" , p .name )
134- }
135-
136- if err = json .Unmarshal (raw [0 ], & user .RawData ); err != nil {
109+ if err = json .Unmarshal (buf , & user .RawData ); err != nil {
137110 return user , err
138111 }
139112
140113 // extract and ignore all errors
141- user .UserID , _ = user .RawData ["uid " ].(string )
114+ user .UserID , _ = user .RawData ["id " ].(string )
142115 user .FirstName , _ = user .RawData ["first_name" ].(string )
143116 user .LastName , _ = user .RawData ["last_name" ].(string )
144- user .NickName , _ = user .RawData ["nick " ].(string )
117+ user .NickName , _ = user .RawData ["nickname " ].(string )
145118 user .Email , _ = user .RawData ["email" ].(string )
146- user .AvatarURL , _ = user .RawData ["pic_big " ].(string )
119+ user .AvatarURL , _ = user .RawData ["image " ].(string )
147120
148121 return user , err
149122}
0 commit comments