sns

package module
v0.0.0-...-3fcf710 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 9, 2019 License: MIT Imports: 8 Imported by: 0

README

open login for Go(lang)

  • wechat
  • weibo
  • qq
  • github
import (
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/limtech/sns"
)

// const
const (
	ServerURL = "https://github.com"
	// SNS keys
	SNSWechatID     = "SNS_WECHAT_ID"
	SNSWechatSecret = "SNS_WECHAT_SECRET"
	SNSWeiboID      = "SNS_WEIBO_ID"
	SNSWeiboSecret  = "SNS_WEIBO_SECRET"
	SNSQQID         = "SNS_QQ_ID"
	SNSQQSecret     = "SNS_QQ_SECRET"
	SNSGithubID     = "SNS_GITHUB_ID"
	SNSGithubSecret = "SNS_GITHUB_SECRET"
)

// OAuth controller
// authorize /oauth/:sns/authorize
// callback  /oauth/:sns/callback
// revoke    /oauth/:sns/revoke
type OAuth struct {
	Platform string
	State    string
	Code     string
}

// NewOAuth new OAuth
func NewOAuth() *OAuth {
	return &OAuth{}
}

// CallbackURL return callback url
func (o *OAuth) CallbackURL() string {
	return fmt.Sprintf(`%s/oauth/%s/callback`, ServerURL, o.Platform)
}

// Authorize redirect to sns authorize url
func (o *OAuth) Authorize(c *gin.Context) {
	o.Platform = c.Param("platform")
	o.State = "authorize"
	if o.Platform == "" {
		c.Redirect(http.StatusFound, ServerURL)
		return
	}

	// redirect to new uri
	c.Redirect(
		http.StatusFound,
		o.Instance().(sns.OAuthInterface).Authorize(o.State, o.CallbackURL()),
	)
}

// Instance return sns.OAuthInterface
func (o *OAuth) Instance() sns.OAuthInterface {
	var oauth sns.OAuthInterface
	switch o.Platform {
	case sns.OAuthUserPlatformWechat:
		oauth = sns.NewOAuthWechat(SNSWechatID, SNSWechatSecret)
		break
	case sns.OAuthUserPlatformWeibo:
		oauth = sns.NewOAuthWeibo(SNSWeiboID, SNSWeiboSecret)
		break
	case sns.OAuthUserPlatformQQ:
		oauth = sns.NewOAuthQQ(SNSQQID, SNSQQSecret)
		break
	case sns.OAuthUserPlatformGithub:
		oauth = sns.NewOAuthGithub(SNSGithubID, SNSGithubSecret)
		break
	}
	return oauth
}

Documentation

Index

Constants

View Source
const (
	OAuthUserGenderFemale  int = iota // Female
	OAuthUserGenderMale               // male
	OAuthUserGenderUnknown            // unknown

	// oauth user platform
	OAuthUserPlatformWechat = "wechat" // wechat
	OAuthUserPlatformWeibo  = "weibo"  // weibo
	OAuthUserPlatformQQ     = "qq"     // qq
	OAuthUserPlatformGithub = "github" // github
)

user gender

Variables

This section is empty.

Functions

This section is empty.

Types

type OAuthAccessToken

type OAuthAccessToken struct {
	AccessToken string `json:"access_token"`
	OpenID      string `json:"openid"`
	UnionID     string `json:"unionid"`
}

OAuthAccessToken access token

type OAuthGithub

type OAuthGithub struct {
	ClientID     string
	ClientSecret string
}

OAuthGithub oauth github

func NewOAuthGithub

func NewOAuthGithub(id, secret string) *OAuthGithub

NewOAuthGithub return *OAuthGithub

func (*OAuthGithub) AccessToken

func (o *OAuthGithub) AccessToken(code, state, callback string) (OAuthAccessToken, error)

AccessToken for github to get access token

func (*OAuthGithub) Authorize

func (o *OAuthGithub) Authorize(state, callback string) string

Authorize for github

func (*OAuthGithub) Userinfo

func (o *OAuthGithub) Userinfo(accessToken, openID string) (OAuthUserinfo, error)

Userinfo for github by access token

type OAuthInterface

type OAuthInterface interface {
	Authorize(state, callback string) string
	AccessToken(code, state, callback string) (OAuthAccessToken, error)
	Userinfo(accessToken, openID string) (OAuthUserinfo, error)
}

OAuthInterface interface

type OAuthQQ

type OAuthQQ struct {
	ClientID     string
	ClientSecret string
}

OAuthQQ oauth qq

func NewOAuthQQ

func NewOAuthQQ(id, secret string) *OAuthQQ

NewOAuthQQ return *OAuthQQ

func (*OAuthQQ) AccessToken

func (o *OAuthQQ) AccessToken(code, state, callback string) (OAuthAccessToken, error)

AccessToken for qq to get access token

func (*OAuthQQ) Authorize

func (o *OAuthQQ) Authorize(state, callback string) string

Authorize for qq

func (*OAuthQQ) GetOpenID

func (o *OAuthQQ) GetOpenID(accessToken string) (string, error)

GetOpenID return openid by accesstoken

func (*OAuthQQ) Userinfo

func (o *OAuthQQ) Userinfo(accessToken, openID string) (OAuthUserinfo, error)

Userinfo for qq by access token

type OAuthUserinfo

type OAuthUserinfo struct {
	Platform string `json:"platform"`
	Name     string `json:"name"`
	OpenID   string `json:"openid"`
	UnionID  string `json:"unionid"`
	Avatar   string `json:"avatar"`
	Gender   int    `json:"gender"`
	Detail   string `json:"-"`
}

OAuthUserinfo common struct

type OAuthWechat

type OAuthWechat struct {
	ClientID     string
	ClientSecret string
}

OAuthWechat oauth wechat

func NewOAuthWechat

func NewOAuthWechat(id, secret string) *OAuthWechat

NewOAuthWechat return *OAuthWechat

func (*OAuthWechat) AccessToken

func (o *OAuthWechat) AccessToken(code, state, callback string) (OAuthAccessToken, error)

AccessToken for wechat to get access token

func (*OAuthWechat) Authorize

func (o *OAuthWechat) Authorize(state, callback string) string

Authorize for wechat

func (*OAuthWechat) Userinfo

func (o *OAuthWechat) Userinfo(accessToken, openID string) (OAuthUserinfo, error)

Userinfo for wechat to get access token

type OAuthWeibo

type OAuthWeibo struct {
	ClientID     string
	ClientSecret string
}

OAuthWeibo oauth weibo

func NewOAuthWeibo

func NewOAuthWeibo(id, secret string) *OAuthWeibo

NewOAuthWeibo return *OAuthWeibo

func (*OAuthWeibo) AccessToken

func (o *OAuthWeibo) AccessToken(code, state, callback string) (OAuthAccessToken, error)

AccessToken for weibo to get access token

func (*OAuthWeibo) Authorize

func (o *OAuthWeibo) Authorize(state, callback string) string

Authorize for weibo

func (*OAuthWeibo) Userinfo

func (o *OAuthWeibo) Userinfo(accessToken, openID string) (OAuthUserinfo, error)

Userinfo for weibo to get access token

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL