Config for todo
parent
eead63ecb6
commit
dac2114af0
60
config.go
60
config.go
|
|
@ -1,8 +1,12 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"local/args"
|
||||
"local/oauth2"
|
||||
"local/storage"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
|
|
@ -10,7 +14,8 @@ type Config struct {
|
|||
EmailPass string
|
||||
EmailIMAP string
|
||||
TodoAddr string
|
||||
TodoPass string
|
||||
TodoToken string
|
||||
TodoList string
|
||||
Storage storage.DB
|
||||
}
|
||||
|
||||
|
|
@ -24,6 +29,10 @@ func NewConfig() Config {
|
|||
as.Append(args.STRING, "emailimap", "email imap", "imap.gmail.com:993")
|
||||
as.Append(args.STRING, "todoaddr", "todo addr", "https://todo-server.remote.blapointe.com")
|
||||
as.Append(args.STRING, "todopass", "todo pass", "gJtEXbbLHLf54yS9EdujtVN2n6Y")
|
||||
as.Append(args.STRING, "todotoken", "todo token", "")
|
||||
as.Append(args.STRING, "todolist", "todo list", "")
|
||||
|
||||
as.Append(args.STRING, "authaddr", "auth addr", "https://auth.remote.blapointe.com")
|
||||
as.Append(args.STRING, "store", "store type", "map")
|
||||
as.Append(args.STRING, "storeaddr", "store addr", "/tmp/store")
|
||||
as.Append(args.STRING, "storeuser", "store user", "")
|
||||
|
|
@ -33,6 +42,52 @@ func NewConfig() Config {
|
|||
panic(err)
|
||||
}
|
||||
|
||||
token := as.GetString("todotoken")
|
||||
if len(token) == 0 {
|
||||
c := &http.Client{CheckRedirect: func(r *http.Request, via []*http.Request) error {
|
||||
return http.ErrUseLastResponse
|
||||
}}
|
||||
body := "username=" + as.GetString("todopass")
|
||||
req, err := http.NewRequest("POST", as.GetString("authaddr")+"/authorize/todo-server?"+oauth2.REDIRECT+"=127.0.0.1", strings.NewReader(body))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
resp, err := c.Do(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
cookie := resp.Header.Get("Set-Cookie")
|
||||
token = cookie[strings.Index(cookie, "=")+1:]
|
||||
token = strings.Split(token, "; ")[0]
|
||||
}
|
||||
list := as.GetString("todolist")
|
||||
if len(list) == 0 {
|
||||
req, err := http.NewRequest("GET", as.GetString("todoaddr")+"/ajax.php?loadLists", nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
req.Header.Set("Cookie", oauth2.COOKIE+"="+token)
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
var r struct {
|
||||
List []struct {
|
||||
ID string `json:"id"`
|
||||
} `json:"list"`
|
||||
}
|
||||
if err := json.NewDecoder(resp.Body).Decode(&r); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if len(r.List) == 0 {
|
||||
panic("no lists found")
|
||||
}
|
||||
list = r.List[0].ID
|
||||
}
|
||||
|
||||
storage, err := storage.New(storage.TypeFromString(as.GetString("store")), as.GetString("storeaddr"), as.GetString("storeuser"), as.GetString("storepass"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
|
@ -43,7 +98,8 @@ func NewConfig() Config {
|
|||
EmailPass: as.GetString("emailpass"),
|
||||
EmailIMAP: as.GetString("emailimap"),
|
||||
TodoAddr: as.GetString("todoaddr"),
|
||||
TodoPass: as.GetString("todopass"),
|
||||
TodoToken: token,
|
||||
TodoList: list,
|
||||
Storage: storage,
|
||||
}
|
||||
return config
|
||||
|
|
|
|||
22
main.go
22
main.go
|
|
@ -3,6 +3,7 @@ package main
|
|||
import (
|
||||
"local/sandbox/contact/contact"
|
||||
"log"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
|
@ -13,11 +14,30 @@ func main() {
|
|||
Password: config.EmailPass,
|
||||
}
|
||||
log.Println(emailer)
|
||||
|
||||
//{45b6895c6dd6345f46e6e15dd2c61f03 Chase 12.86 GOOGLE *GSUITE_blapo [Wed, 1 Apr 2020 10:14:11 -0400 (EDT)]}
|
||||
log.Println(Upload(config, NewTransaction("11.11", "vendor", time.Now().String(), Bank(0))))
|
||||
|
||||
return
|
||||
emails, err := emailer.Read()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for _, email := range emails {
|
||||
log.Println(Scrape(email))
|
||||
transactions, err := Scrape(email)
|
||||
if err != nil {
|
||||
log.Println("failed to scrape email:", err)
|
||||
}
|
||||
for _, transaction := range transactions {
|
||||
if _, err := config.Storage.Get(transaction.ID); err == nil {
|
||||
log.Println("skipping duplicate transaction:", transaction)
|
||||
} else {
|
||||
if err := Upload(config, transaction); err != nil {
|
||||
log.Println("failed to upload transaction", transaction, ":", err)
|
||||
} else if err := config.Storage.Set(transaction.ID, []byte(transaction.String())); err != nil {
|
||||
log.Println("failed to log", transaction, ":", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"local/oauth2"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Upload(config Config, transaction *Transaction) error {
|
||||
params := url.Values{
|
||||
"list": {"2548023766"},
|
||||
"title": {"test task: " + time.Now().String()},
|
||||
"tag": {"expense"},
|
||||
}
|
||||
req, err := http.NewRequest("POST", config.TodoAddr+"/ajax.php?newTask", strings.NewReader(params.Encode()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
req.Header.Set("Cookie", oauth2.COOKIE+"="+config.TodoToken)
|
||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Printf("%+v\n\n%+v", req, resp)
|
||||
return errors.New("not impl")
|
||||
}
|
||||
Loading…
Reference in New Issue