mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
73 lines
1.9 KiB
// Copyright 2014 The Gogs Authors. All rights reserved. |
|
// Use of this source code is governed by a MIT-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package user |
|
|
|
import ( |
|
"encoding/json" |
|
"net/http" |
|
"net/url" |
|
"strconv" |
|
"strings" |
|
|
|
"code.google.com/p/goauth2/oauth" |
|
"github.com/gogits/gogs/models" |
|
"github.com/gogits/gogs/modules/base" |
|
) |
|
|
|
type SocialGithub struct { |
|
Token *oauth.Token |
|
*oauth.Transport |
|
} |
|
|
|
func (s *SocialGithub) Type() int { |
|
return models.OT_GITHUB |
|
} |
|
|
|
func init() { |
|
github := &SocialGithub{} |
|
name := "github" |
|
config := &oauth.Config{ |
|
ClientId: "09383403ff2dc16daaa1", //base.OauthService.GitHub.ClientId, // FIXME: panic when set |
|
ClientSecret: "0e4aa0c3630df396cdcea01a9d45cacf79925fea", //base.OauthService.GitHub.ClientSecret, |
|
RedirectURL: strings.TrimSuffix(base.AppUrl, "/") + "/user/login/" + name, //ctx.Req.URL.RequestURI(), |
|
Scope: "https://api.github.com/user", |
|
AuthURL: "https://github.com/login/oauth/authorize", |
|
TokenURL: "https://github.com/login/oauth/access_token", |
|
} |
|
github.Transport = &oauth.Transport{ |
|
Config: config, |
|
Transport: http.DefaultTransport, |
|
} |
|
SocialMap[name] = github |
|
} |
|
|
|
func (s *SocialGithub) SetRedirectUrl(url string) { |
|
s.Transport.Config.RedirectURL = url |
|
} |
|
|
|
func (s *SocialGithub) UserInfo(token *oauth.Token, _ *url.URL) (*BasicUserInfo, error) { |
|
transport := &oauth.Transport{ |
|
Token: token, |
|
} |
|
var data struct { |
|
Id int `json:"id"` |
|
Name string `json:"login"` |
|
Email string `json:"email"` |
|
} |
|
var err error |
|
r, err := transport.Client().Get(s.Transport.Scope) |
|
if err != nil { |
|
return nil, err |
|
} |
|
defer r.Body.Close() |
|
if err = json.NewDecoder(r.Body).Decode(&data); err != nil { |
|
return nil, err |
|
} |
|
return &BasicUserInfo{ |
|
Identity: strconv.Itoa(data.Id), |
|
Name: data.Name, |
|
Email: data.Email, |
|
}, nil |
|
}
|
|
|