1
0
Fork 0
empact/task/access_token.go

77 lines
1.5 KiB
Go

package task
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"github.com/localhots/empact/config"
"github.com/localhots/empact/db"
)
type (
FetchAccessTokenTask struct {
Code string
Result chan string
*db.Task
}
)
func FetchAccessToken(tk Tasker) {
t := tk.(*FetchAccessTokenTask)
payload := url.Values{}
payload.Set("client_id", config.C().ClientID)
payload.Set("client_secret", config.C().ClientSecret)
payload.Set("code", t.Code)
payload.Set("redirect_uri", config.C().RedirectURI)
buf := bytes.NewBuffer([]byte(payload.Encode()))
fmt.Println("Requesting token")
resp, err := http.Post(config.C().AccessTokenURL, "application/x-www-form-urlencoded", buf)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
pairs, _ := url.ParseQuery(string(body))
token := pairs.Get("access_token")
fmt.Println("Got token: " + token)
fmt.Println("Requesting info")
resp, err = http.Get("https://api.github.com/user?access_token=" + token)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err = ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
user := &db.User{}
json.Unmarshal(body, &user)
user.Save()
fmt.Println("Saving user", user)
tok := &db.Token{
User: user.Login,
Token: token,
}
fmt.Println("Saving token", tok)
tok.Save()
t.Result <- user.Login
}