You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.5 KiB
67 lines
1.5 KiB
package users
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"git.drinkme.beer/yinghe/log"
|
|
|
|
"git.drinkme.beer/yinghe/asana/util"
|
|
)
|
|
|
|
const (
|
|
URI = "/api/1.0/users/%s"
|
|
)
|
|
|
|
type User struct {
|
|
ID string `json:"gid,omitempty"`
|
|
ResourceType string `json:"resource_type,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Email string `json:"email,omitempty"`
|
|
|
|
Photo map[string]string `json:"photo,omitempty"`
|
|
Workspaces []struct {
|
|
ID string `json:"gid,omitempty"`
|
|
ResourceType string `json:"resource_type,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
} `json:"workspaces,omitempty"`
|
|
}
|
|
|
|
type Response struct {
|
|
Data User `json:"data,omitempty"`
|
|
}
|
|
|
|
func (u User) Get(paToken string) (*User, error) {
|
|
var (
|
|
err error
|
|
resp Response
|
|
)
|
|
headers := make(map[string]string)
|
|
headers["Authorization"] = paToken
|
|
headers["Content-Type"] = util.ContentType
|
|
|
|
client := util.NewHttpClient(util.AsanaHost, fmt.Sprintf(URI, u.ID), util.HttpGetMethod, nil)
|
|
client.Headers = headers
|
|
|
|
err = client.Request()
|
|
if nil != err {
|
|
log.Errorf("failed to obtain user info: %s", err.Error())
|
|
return nil, err
|
|
}
|
|
|
|
log.Infof("response status: %d", client.HTTPStatus)
|
|
if http.StatusOK != client.HTTPStatus {
|
|
log.Errorf("unexpected response")
|
|
err = errors.New("unexpected response")
|
|
return nil, err
|
|
}
|
|
|
|
err = json.Unmarshal(client.Body, &resp)
|
|
if nil != err {
|
|
log.Errorf("illegal task result: %s", err.Error())
|
|
return nil, err
|
|
}
|
|
return &resp.Data, err
|
|
}
|