Skip to content

Commit 8333bec

Browse files
Merge pull request #501 from sokolovstas/mailru-fix
Fix mail ru auth flow
2 parents 7a06394 + b2cb934 commit 8333bec

File tree

2 files changed

+14
-41
lines changed

2 files changed

+14
-41
lines changed

providers/mailru/mailru.go

+13-40
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
package mailru
44

55
import (
6-
"crypto/md5"
76
"encoding/json"
87
"fmt"
9-
"io"
108
"io/ioutil"
119
"net/http"
1210

@@ -15,9 +13,9 @@ import (
1513
)
1614

1715
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"
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.
4945
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
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
}

providers/mailru/mailru_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func Test_BeginAuth(t *testing.T) {
4242
session, err := provider.BeginAuth("test_state")
4343
s := session.(*mailru.Session)
4444
a.NoError(err)
45-
a.Contains(s.AuthURL, "connect.mail.ru/oauth/authorize")
45+
a.Contains(s.AuthURL, "oauth.mail.ru/login")
4646
a.Contains(s.AuthURL, fmt.Sprintf("client_id=%s", os.Getenv("MAILRU_KEY")))
4747
a.Contains(s.AuthURL, "state=test_state")
4848
a.Contains(s.AuthURL, "scope=photos")

0 commit comments

Comments
 (0)