package timetask import ( "fmt" "log" "net/http" "net/http/cookiejar" "net/url" "strconv" "strings" "golang.org/x/net/publicsuffix" ) func Login(username, password string) (resp *http.Response, err error) { cookies, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) if err != nil { return nil, err } client := http.Client{Jar: cookies} resp, err = client.PostForm( "https://af83.timetask.com/index.php", url.Values{ "module": {"people"}, "action": {"loginsubmit"}, "f_url": {"/"}, "f_username": {username}, "f_password": {password}, }, ) if err != nil { return resp, err } return resp, err } func SubmitTimeEntries(fields Fields, time_entries []TimeEntry) (resp *http.Response, err error) { v := buildSubmissionParams(fields, time_entries) log.Printf("%+v", v) return nil, nil } func buildSubmissionParams(fields Fields, time_entries []TimeEntry) url.Values { v := url.Values{} entry_indexes := []string{} for i, entry := range time_entries { entry_indexes = append(entry_indexes, strconv.Itoa(i)) client, err := fields.ClientByName(entry.Client) if err != nil { log.Panic(err) } project, err := client.ProjectByName(entry.Project) if err != nil { log.Panic(err) } module, err := project.ModuleByName(entry.Module) if err != nil { log.Panic(err) } task, err := project.TaskByName(entry.Task) if err != nil { log.Panic(err) } work_type, err := project.WorkTypeByName(entry.WorkType) if err != nil { log.Panic(err) } var billable string if entry.Billable { billable = "t" } else { billable = "f" } v.Set( fmt.Sprintf("f_personID%d", i), strconv.Itoa(fields.PersonID), ) v.Set( fmt.Sprintf("f_clientID%d", i), strconv.Itoa(client.ID), ) v.Set( fmt.Sprintf("f_projectID%d", i), strconv.Itoa(project.ID), ) v.Set( fmt.Sprintf("f_moduleID%d", i), strconv.Itoa(module.ID), ) v.Set( fmt.Sprintf("f_taskID%d", i), strconv.Itoa(task.ID), ) v.Set( fmt.Sprintf("f_worktypeID%d", i), strconv.Itoa(work_type.ID), ) v.Set( fmt.Sprintf("f_date%d", i), entry.Date.Format("02/01/06"), // day/month/year ) v.Set( fmt.Sprintf("f_time%d", i), strconv.Itoa(entry.Time), ) v.Set( fmt.Sprintf("f_billable%d", i), billable, ) v.Set( fmt.Sprintf("f_description%d", i), entry.Description, ) } v.Set("f_entryIndexes", strings.Join(entry_indexes, ",")) return v }