1
0
mirror of https://github.com/writeas/go-writeas.git synced 2025-07-27 14:38:19 +00:00

Support user authentication

This commit is contained in:
Matt Baer 2016-10-05 18:47:54 -04:00
parent 8725cd2012
commit ba05f3ff99
2 changed files with 62 additions and 0 deletions

40
auth.go
View File

@ -1,9 +1,49 @@
package writeas
import (
"fmt"
"net/http"
)
// LogIn authenticates a user with Write.as.
// See https://writeas.github.io/docs/#authenticate-a-user
func (c *Client) LogIn(username, pass string) (*AuthUser, error) {
u := &AuthUser{}
up := struct {
Alias string `json:"alias"`
Pass string `json:"pass"`
}{
Alias: username,
Pass: pass,
}
env, err := c.post("/auth/login", up, u)
if err != nil {
return nil, err
}
var ok bool
if u, ok = env.Data.(*AuthUser); !ok {
return nil, fmt.Errorf("Wrong data returned from API.")
}
status := env.Code
if status == http.StatusOK {
return u, nil
} else if status == http.StatusBadRequest {
return nil, fmt.Errorf("Bad request: %s", env.ErrorMessage)
} else if status == http.StatusUnauthorized {
return nil, fmt.Errorf("Incorrect password.")
} else if status == http.StatusNotFound {
return nil, fmt.Errorf("User does not exist.")
} else if status == http.StatusTooManyRequests {
return nil, fmt.Errorf("Stop repeatedly trying to log in.")
} else {
return nil, fmt.Errorf("Problem authenticating: %s. %v\n", status, err)
}
return u, nil
}
func (c *Client) isNotLoggedIn(code int) bool {
if c.token == "" {
return false

22
user.go Normal file
View File

@ -0,0 +1,22 @@
package writeas
import (
"time"
)
type (
// AuthUser represents a just-authenticated user. It contains information
// that'll only be returned once (now) per user session.
AuthUser struct {
AccessToken string `json:"access_token,omitempty"`
Password string `json:"password,omitempty"`
User *User `json:"user"`
}
// User represents a registered Write.as user.
User struct {
Username string `json:"username"`
Email string `json:"email"`
Created time.Time `json:"created"`
}
)