3
3
package mailru
4
4
5
5
import (
6
- "crypto/md5"
7
6
"encoding/json"
8
7
"fmt"
9
- "io"
10
8
"io/ioutil"
11
9
"net/http"
12
10
@@ -15,9 +13,9 @@ import (
15
13
)
16
14
17
15
const (
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 "
21
19
)
22
20
23
21
// 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
35
33
Scopes : []string {},
36
34
}
37
35
38
- for _ , scope := range scopes {
39
- c .Scopes = append (c .Scopes , scope )
40
- }
36
+ c .Scopes = append (c .Scopes , scopes ... )
41
37
42
38
return & Provider {
43
39
name : "mailru" ,
@@ -47,11 +43,9 @@ func New(clientID, clientSecret, redirectURL string, scopes ...string) *Provider
47
43
48
44
// Provider is the implementation of `goth.Provider` for accessing MAILRU.
49
45
type 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
55
49
}
56
50
57
51
// 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) {
91
85
return user , fmt .Errorf ("%s cannot get user information without access token" , p .name )
92
86
}
93
87
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
-
106
88
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 ,
109
91
)
110
92
111
93
res , err := p .Client ().Get (reqURL )
@@ -124,26 +106,17 @@ func (p *Provider) FetchUser(session goth.Session) (_ goth.User, err error) {
124
106
return user , err
125
107
}
126
108
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 {
137
110
return user , err
138
111
}
139
112
140
113
// extract and ignore all errors
141
- user .UserID , _ = user .RawData ["uid " ].(string )
114
+ user .UserID , _ = user .RawData ["id " ].(string )
142
115
user .FirstName , _ = user .RawData ["first_name" ].(string )
143
116
user .LastName , _ = user .RawData ["last_name" ].(string )
144
- user .NickName , _ = user .RawData ["nick " ].(string )
117
+ user .NickName , _ = user .RawData ["nickname " ].(string )
145
118
user .Email , _ = user .RawData ["email" ].(string )
146
- user .AvatarURL , _ = user .RawData ["pic_big " ].(string )
119
+ user .AvatarURL , _ = user .RawData ["image " ].(string )
147
120
148
121
return user , err
149
122
}
0 commit comments