vouch-proxy/pkg/providers/openstax/openstax.go

70 lines
1.7 KiB
Go

/*
Copyright 2020 The Vouch Proxy Authors.
Use of this source code is governed by The MIT License (MIT) that
can be found in the LICENSE file. Software distributed under The
MIT License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either express or implied.
*/
package openstax
import (
"encoding/json"
"golang.org/x/oauth2"
"io/ioutil"
"net/http"
"github.com/vouch/vouch-proxy/pkg/cfg"
"github.com/vouch/vouch-proxy/pkg/providers/common"
"github.com/vouch/vouch-proxy/pkg/structs"
"go.uber.org/zap"
)
// Provider provider specific functions
type Provider struct{}
var log *zap.SugaredLogger
// Configure see main.go configure()
func (Provider) Configure() {
log = cfg.Logging.Logger
}
// GetUserInfo provider specific call to get userinfomation
func (Provider) GetUserInfo(r *http.Request, user *structs.User, customClaims *structs.CustomClaims, ptokens *structs.PTokens, opts ...oauth2.AuthCodeOption) (rerr error) {
client, _, err := common.PrepareTokensAndClient(r, ptokens, false, opts...)
if err != nil {
return err
}
userinfo, err := client.Get(cfg.GenOAuth.UserInfoURL)
if err != nil {
return err
}
defer func() {
if err := userinfo.Body.Close(); err != nil {
rerr = err
}
}()
data, _ := ioutil.ReadAll(userinfo.Body)
log.Infof("OpenStax userinfo body: %s", string(data))
if err = common.MapClaims(data, customClaims); err != nil {
log.Error(err)
return err
}
oxUser := structs.OpenStaxUser{}
if err = json.Unmarshal(data, &oxUser); err != nil {
log.Error(err)
return err
}
oxUser.PrepareUserData()
user.Email = oxUser.Email
user.Name = oxUser.Name
user.Username = oxUser.Username
user.ID = oxUser.ID
user.PrepareUserData()
return nil
}