48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package reddit
|
|
|
|
import "fmt"
|
|
|
|
var (
|
|
errMissingOauthCredentials = fmt.Errorf("missing oauth credentials")
|
|
errMissingUsername = fmt.Errorf("missing username")
|
|
errMissingPassword = fmt.Errorf("missing password")
|
|
)
|
|
|
|
// App holds all the information needed to identify as a registered app on
|
|
// Reddit. If you are unfamiliar with this information, you can find it in your
|
|
// "apps" tab on reddit; see this tutorial:
|
|
// https://github.com/reddit/reddit/wiki/OAuth2
|
|
type App struct {
|
|
// ID and Secret are used to claim an OAuth2 grant the bot's account
|
|
// previously authorized.
|
|
ID string
|
|
Secret string
|
|
|
|
// Username and Password are used to authorize with the endpoint.
|
|
Username string
|
|
Password string
|
|
|
|
// tokenURL is the url of the token request location for OAuth2.
|
|
tokenURL string
|
|
}
|
|
|
|
func (a App) unauthenticated() bool {
|
|
return a.ID == "" || a.Secret == ""
|
|
}
|
|
|
|
func (a App) validateAuth() error {
|
|
if a.unauthenticated() {
|
|
return errMissingOauthCredentials
|
|
}
|
|
|
|
if a.Password != "" && a.Username == "" {
|
|
return errMissingUsername
|
|
}
|
|
|
|
if a.Username != "" && a.Password == "" {
|
|
return errMissingPassword
|
|
}
|
|
|
|
return nil
|
|
}
|