8 changed files with 101 additions and 22 deletions
@ -1 +1,64 @@ |
|||
package auth |
|||
|
|||
import ( |
|||
"context" |
|||
"encoding/json" |
|||
|
|||
"github.com/sirupsen/logrus" |
|||
|
|||
"golang.org/x/oauth2/github" |
|||
|
|||
"github.com/pkg/errors" |
|||
"golang.org/x/oauth2" |
|||
) |
|||
|
|||
type githubAdapter struct { |
|||
config *oauth2.Config |
|||
} |
|||
|
|||
// NewGithubAdapter creates an oAuth adapter out of the credentials and the baseURL
|
|||
func NewGithubAdapter(clientID, clientSecret, baseURL string) Adapter { |
|||
return &githubAdapter{&oauth2.Config{ |
|||
ClientID: clientID, |
|||
ClientSecret: clientSecret, |
|||
RedirectURL: baseURL + "/api/v1/auth/github/callback", |
|||
Scopes: []string{ |
|||
"(no scope)", |
|||
}, |
|||
Endpoint: github.Endpoint, |
|||
}} |
|||
} |
|||
|
|||
func (a *githubAdapter) GetRedirectURL(state string) string { |
|||
return a.config.AuthCodeURL(state) |
|||
} |
|||
|
|||
func (a *githubAdapter) GetUserData(state, code string) (*user, error) { |
|||
logrus.Debugf("Getting User Data with state: %s, and code: %s", state, code) |
|||
oAuthToken, err := a.config.Exchange(context.Background(), code) |
|||
if err != nil { |
|||
return nil, errors.Wrap(err, "could not exchange code") |
|||
} |
|||
oAuthUserInfoReq, err := a.config.Client(context.Background(), oAuthToken).Get("https://api.github.com/user") |
|||
if err != nil { |
|||
return nil, errors.Wrap(err, "could not get user data") |
|||
} |
|||
defer oAuthUserInfoReq.Body.Close() |
|||
var gUser struct { |
|||
ID int `json:"id"` |
|||
AvatarURL string `json:"avatar_url"` |
|||
Name string `json:"name"` |
|||
} |
|||
if err = json.NewDecoder(oAuthUserInfoReq.Body).Decode(&gUser); err != nil { |
|||
return nil, errors.Wrap(err, "decoding user info failed") |
|||
} |
|||
return &user{ |
|||
ID: string(gUser.ID), |
|||
Name: gUser.Name, |
|||
Picture: gUser.AvatarURL, |
|||
}, nil |
|||
} |
|||
|
|||
func (a *githubAdapter) GetOAuthProviderName() string { |
|||
return "github" |
|||
} |
|||
|
|||
@ -0,0 +1,13 @@ |
|||
.swatch-github-gray-light { |
|||
background-color:#999; |
|||
} |
|||
.swatch-github-gray { |
|||
background-color:#767676; |
|||
} |
|||
.swatch-github-gray-dark { |
|||
background-color:#333; |
|||
} |
|||
.ui.github.button { |
|||
background-color: #333; |
|||
color: #fff; |
|||
} |
|||
Loading…
Reference in new issue