Initial commit
This commit is contained in:
48
vendor/github.com/emersion/go-sasl/xoauth2.go
generated
vendored
Normal file
48
vendor/github.com/emersion/go-sasl/xoauth2.go
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
package sasl
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// The XOAUTH2 mechanism name.
|
||||
const Xoauth2 = "XOAUTH2"
|
||||
|
||||
// An XOAUTH2 error.
|
||||
type Xoauth2Error struct {
|
||||
Status string `json:"status"`
|
||||
Schemes string `json:"schemes"`
|
||||
Scope string `json:"scope"`
|
||||
}
|
||||
|
||||
// Implements error.
|
||||
func (err *Xoauth2Error) Error() string {
|
||||
return fmt.Sprintf("XOAUTH2 authentication error (%v)", err.Status)
|
||||
}
|
||||
|
||||
type xoauth2Client struct {
|
||||
Username string
|
||||
Token string
|
||||
}
|
||||
|
||||
func (a *xoauth2Client) Start() (mech string, ir []byte, err error) {
|
||||
mech = Xoauth2
|
||||
ir = []byte("user=" + a.Username + "\x01auth=Bearer " + a.Token + "\x01\x01")
|
||||
return
|
||||
}
|
||||
|
||||
func (a *xoauth2Client) Next(challenge []byte) ([]byte, error) {
|
||||
// Server sent an error response
|
||||
xoauth2Err := &Xoauth2Error{}
|
||||
if err := json.Unmarshal(challenge, xoauth2Err); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return nil, xoauth2Err
|
||||
}
|
||||
}
|
||||
|
||||
// An implementation of the XOAUTH2 authentication mechanism, as
|
||||
// described in https://developers.google.com/gmail/xoauth2_protocol.
|
||||
func NewXoauth2Client(username, token string) Client {
|
||||
return &xoauth2Client{username, token}
|
||||
}
|
Reference in New Issue
Block a user