toutmonenfant/main.go

184 lines
3.6 KiB
Go

package main
import (
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
"net/http/cookiejar"
"net/http/httputil"
"os"
"time"
)
type username struct {
Email string `json:"username"`
}
type signin struct {
Email string `json:"username"`
Password string `json:"password"`
Student int `json:"student"`
}
var client http.Client
func init() {
jar, err := cookiejar.New(nil)
if err != nil {
log.Fatalf("Got error while creating cookie jar %s", err.Error())
}
client = http.Client{
Jar: jar,
Timeout: time.Second * 10,
}
}
func callGet(url string) error {
method := "GET"
req, err := http.NewRequest(method, url, nil)
if err != nil {
return fmt.Errorf("Got error %s", err.Error())
}
req.Header.Set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0")
res, err := client.Do(req)
if err != nil {
return fmt.Errorf("Got error %s", err.Error())
}
defer res.Body.Close()
/*
fmt.Printf("=====\n\nStatuscode: %s %d\n========\n\n", url, res.StatusCode)
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
fmt.Printf("=====\n\n")
for name, values := range res.Header {
// Loop over all values for the name.
for _, value := range values {
fmt.Println(name, value)
}
}
*/
dump, err := httputil.DumpRequestOut(req, true)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%q", dump)
return nil
}
func callPost(url string, payload []byte) error {
method := "POST"
req, err := http.NewRequest(method, url, bytes.NewBuffer(payload))
if err != nil {
return fmt.Errorf("Got error %s", err.Error())
}
// assume all POST is JSON
req.Header.Set("content-type", "application/json; charset=UTF-8")
req.Header.Set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0")
dump, err := httputil.DumpRequestOut(req, true)
res, err := client.Do(req)
if err != nil {
return fmt.Errorf("Got error %s", err.Error())
}
defer res.Body.Close()
/*
fmt.Printf("=====\n\nStatuscode: %s %d\n========\n\n", url, res.StatusCode)
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
fmt.Printf("=====\n\n")
for name, values := range res.Header {
// Loop over all values for the name.
for _, value := range values {
fmt.Println(name, value)
}
}
*/
fmt.Printf("=DumpRequestOut====\n\n")
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", dump)
return nil
}
func toutmonlogin(schoolid string, email string, password string) {
// get all cookie first
loginUrl := "https://www.toutemonannee.com/connect"
callGet(loginUrl)
// email-username
emailUrl := "https://www.toutemonannee.com/connect/check-email-username"
emailPayload := username{
Email: email,
}
jsonEmailPayload, err := json.Marshal(emailPayload)
if err != nil {
log.Fatal(err)
}
callPost(emailUrl, jsonEmailPayload)
// signin
signinUrl := "https://www.toutemonannee.com/connect/signin"
signinPayload := signin{
Email: email,
Password: password,
Student: 0,
}
jsonSigninPayload, err := json.Marshal(signinPayload)
if err != nil {
log.Fatal(err)
}
callPost(signinUrl, jsonSigninPayload)
// get json
blogposturl := "https://www.toutemonannee.com/journal/" + schoolid + "/posts/list?page=1&publishedDateOrder=1"
callGet(blogposturl)
}
func main() {
schoolid, ok := os.LookupEnv("TOUTMONENFANTID")
email := os.LookupEnv("TOUTMONENFANTEMAIL")
password := os.LookupEnv("TOUTMONENFANTPASSWORD")
if ok {
toutmonlogin(schoolid, email, password)
} else {
fmt.Printf("TOUTMONENFANTID var is undefined")
}
}