|
@@ -48,7 +48,7 @@ func NewOauthService() {
|
|
|
base.OauthService.OauthInfos = make(map[string]*base.OauthInfo)
|
|
|
|
|
|
socialConfigs := make(map[string]*oauth.Config)
|
|
|
- allOauthes := []string{"github", "google", "qq", "twitter"}
|
|
|
+ allOauthes := []string{"github", "google", "qq", "twitter", "weibo"}
|
|
|
// Load all OAuth config data.
|
|
|
for _, name := range allOauthes {
|
|
|
base.OauthService.OauthInfos[name] = &base.OauthInfo{
|
|
@@ -98,6 +98,13 @@ func NewOauthService() {
|
|
|
enabledOauths = append(enabledOauths, "Twitter")
|
|
|
}
|
|
|
|
|
|
+ // Weibo.
|
|
|
+ if base.Cfg.MustBool("oauth.weibo", "ENABLED") {
|
|
|
+ base.OauthService.Weibo = true
|
|
|
+ newWeiboOauth(socialConfigs["weibo"])
|
|
|
+ enabledOauths = append(enabledOauths, "Weibo")
|
|
|
+ }
|
|
|
+
|
|
|
log.Info("Oauth Service Enabled %s", enabledOauths)
|
|
|
}
|
|
|
|
|
@@ -331,3 +338,56 @@ func (s *SocialTwitter) UserInfo(token *oauth.Token, _ *url.URL) (*BasicUserInfo
|
|
|
// }, nil
|
|
|
return nil, nil
|
|
|
}
|
|
|
+
|
|
|
+// __ __ ._____.
|
|
|
+// / \ / \ ____ |__\_ |__ ____
|
|
|
+// \ \/\/ // __ \| || __ \ / _ \
|
|
|
+// \ /\ ___/| || \_\ ( <_> )
|
|
|
+// \__/\ / \___ >__||___ /\____/
|
|
|
+// \/ \/ \/
|
|
|
+
|
|
|
+type SocialWeibo struct {
|
|
|
+ Token *oauth.Token
|
|
|
+ *oauth.Transport
|
|
|
+}
|
|
|
+
|
|
|
+func (s *SocialWeibo) Type() int {
|
|
|
+ return models.OT_WEIBO
|
|
|
+}
|
|
|
+
|
|
|
+func newWeiboOauth(config *oauth.Config) {
|
|
|
+ SocialMap["weibo"] = &SocialWeibo{
|
|
|
+ Transport: &oauth.Transport{
|
|
|
+ Config: config,
|
|
|
+ Transport: http.DefaultTransport,
|
|
|
+ },
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (s *SocialWeibo) SetRedirectUrl(url string) {
|
|
|
+ s.Transport.Config.RedirectURL = url
|
|
|
+}
|
|
|
+
|
|
|
+func (s *SocialWeibo) UserInfo(token *oauth.Token, _ *url.URL) (*BasicUserInfo, error) {
|
|
|
+ transport := &oauth.Transport{Token: token}
|
|
|
+ var data struct {
|
|
|
+ Id string `json:"id"`
|
|
|
+ Name string `json:"name"`
|
|
|
+ }
|
|
|
+ var err error
|
|
|
+
|
|
|
+ reqUrl := "https://api.weibo.com/2/users/show.json"
|
|
|
+ r, err := transport.Client().Get(reqUrl)
|
|
|
+ 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: data.Id,
|
|
|
+ Name: data.Name,
|
|
|
+ }, nil
|
|
|
+ return nil, nil
|
|
|
+}
|