diff --git a/Untis/Classes.go b/Untis/Classes.go index 81c34f7..e707963 100644 --- a/Untis/Classes.go +++ b/Untis/Classes.go @@ -32,14 +32,14 @@ func Classes(cookies []*http.Cookie) { g := getClasses{"2023-05-06 15:44:22.215292", "getKlassen", map[string]interface{}{}, "2.0"} ClassesJson, err := json.Marshal(g) if err != nil { - log.Fatalf("Error marshaling login data: %v", err) + log.Printf("Error marshaling login data: %v", err) return } classes := bytes.NewReader(ClassesJson) prompt, err := http.NewRequest("POST", Url, classes) if err != nil { - log.Fatalf("Error creatingrequest: %v", err) + log.Printf("Error creatingrequest: %v", err) return } // log.Println("prompt without extra header or cookie ", prompt) @@ -72,15 +72,17 @@ func Classes(cookies []*http.Cookie) { var Response ClassesResponse err = json.Unmarshal(response, &Response) if err != nil { - log.Fatalf("Error unmarshaling response: %v", err) + log.Printf("Error unmarshaling response: %v", err) } data, err := json.MarshalIndent(Response.Result, "", " ") if err != nil { - log.Fatal(err) + log.Print(err) + return } err = os.WriteFile("classes.json", data, 0o644) if err != nil { - log.Fatal(err) + log.Print(err) + return } // log.Println("Updated Classes")//dont need log anymore } diff --git a/Untis/Rooms.go b/Untis/Rooms.go index 32cc63b..27057b0 100644 --- a/Untis/Rooms.go +++ b/Untis/Rooms.go @@ -35,14 +35,14 @@ func Rooms(cookies []*http.Cookie) { g := getRooms{"2023-05-06 15:44:22.215292", "getRooms", map[string]interface{}{}, "2.0"} roomsJson, err := json.Marshal(g) if err != nil { - log.Fatalf("Error marshaling login data: %v", err) + log.Printf("Error marshaling login data: %v", err) return } rooms := bytes.NewReader(roomsJson) prompt, err := http.NewRequest("POST", Url, rooms) if err != nil { - log.Fatalf("Error creatingrequest: %v", err) + log.Printf("Error creatingrequest: %v", err) return } // log.Println("prompt without extra header or cookie ", prompt) @@ -75,16 +75,19 @@ func Rooms(cookies []*http.Cookie) { var Response RoomsResponse err = json.Unmarshal(response, &Response) if err != nil { - log.Fatalf("Error unmarshaling response: %v", err) + log.Printf("Error unmarshaling response: %v", err) + return } data, err := json.MarshalIndent(Response.Result, "", " ") if err != nil { - log.Fatal(err) + log.Print(err) + return } err = os.WriteFile("rooms.json", data, 0o644) if err != nil { - log.Fatal(err) + log.Print(err) + return } // log.Println("Updated Rooms")//dont need log anymore } diff --git a/Untis/Subjects.go b/Untis/Subjects.go index 13713d5..8ae21fe 100644 --- a/Untis/Subjects.go +++ b/Untis/Subjects.go @@ -32,14 +32,14 @@ func Subjects(cookies []*http.Cookie) { g := getSubjects{"2023-05-06 15:44:22.215292", "getSubjects", map[string]interface{}{}, "2.0"} SubjectsJson, err := json.Marshal(g) if err != nil { - log.Fatalf("Error marshaling login data: %v", err) + log.Printf("Error marshaling login data: %v", err) return } subjects := bytes.NewReader(SubjectsJson) prompt, err := http.NewRequest("POST", Url, subjects) if err != nil { - log.Fatalf("Error creatingrequest: %v", err) + log.Printf("Error creatingrequest: %v", err) return } // log.Println("prompt without extra header or cookie ", prompt) @@ -72,15 +72,18 @@ func Subjects(cookies []*http.Cookie) { var Response SubjectsResponse err = json.Unmarshal(response, &Response) if err != nil { - log.Fatalf("Error unmarshaling response: %v", err) + log.Printf("Error unmarshaling response: %v", err) + return } data, err := json.MarshalIndent(Response.Result, "", " ") if err != nil { - log.Fatal(err) + log.Print(err) + return } err = os.WriteFile("subjects.json", data, 0o644) if err != nil { - log.Fatal(err) + log.Print(err) + return } // log.Println("Updated Subjects")//dont need log anymore } diff --git a/Untis/Teachers.go b/Untis/Teachers.go index 03850d0..b4e06a1 100644 --- a/Untis/Teachers.go +++ b/Untis/Teachers.go @@ -32,14 +32,14 @@ func Teachers(cookies []*http.Cookie) { g := getTeachers{"2023-05-06 15:44:22.215292", "getTeachers", map[string]interface{}{}, "2.0"} TeachersJson, err := json.Marshal(g) if err != nil { - log.Fatalf("Error marshaling login data: %v", err) + log.Printf("Error marshaling login data: %v", err) return } teachers := bytes.NewReader(TeachersJson) prompt, err := http.NewRequest("POST", Url, teachers) if err != nil { - log.Fatalf("Error creatingrequest: %v", err) + log.Printf("Error creatingrequest: %v", err) return } // log.Println("prompt without extra header or cookie ", prompt) @@ -72,15 +72,18 @@ func Teachers(cookies []*http.Cookie) { var Response TeachersResponse err = json.Unmarshal(response, &Response) if err != nil { - log.Fatalf("Error unmarshaling response: %v", err) + log.Printf("Error unmarshaling response: %v", err) + return } data, err := json.MarshalIndent(Response.Result, "", " ") if err != nil { - log.Fatal(err) + log.Print(err) + return } err = os.WriteFile("teachers.json", data, 0o644) if err != nil { - log.Fatal(err) + log.Print(err) + return } // log.Println("Updated Teachers")//dont need log anymore } diff --git a/Untis/Untis.go b/Untis/Untis.go index 16e07fd..4079b2d 100644 --- a/Untis/Untis.go +++ b/Untis/Untis.go @@ -7,6 +7,7 @@ import ( "log" "net/http" "os" + "time" "github.com/joho/godotenv" ) @@ -59,21 +60,29 @@ func Update(user, password, userID string) { } func Auth(user, password, userID string) ([]*http.Cookie, error) { - l := Login{"2023-05-06 15:44:22.215292", "authenticate", Params{user, password, "WebUntis Test"}, "2.0"} - loginJSON, err := json.Marshal(l) - if err != nil { - return nil, err - } - login := bytes.NewReader(loginJSON) + loginJSON, _ := json.Marshal(Login{ + "2023-05-06 15:44:22.215292", "authenticate", + Params{user, password, "WebUntis Test"}, + "2.0", + }) if Url == "" { Url = os.Getenv("URL") } - LoginOut, err := http.Post(Url, "application/json", login) + + var LoginOut *http.Response + var err error + for attempt := 1; attempt <= 3; attempt++ { + LoginOut, err = http.Post(Url, "application/json", bytes.NewReader(loginJSON)) + if err == nil { + break + } + log.Printf("Auth attempt %d/3 failed for %s: %v", attempt, user, err) + time.Sleep(time.Duration(attempt*2) * time.Second) + } if err != nil { return nil, err } defer LoginOut.Body.Close() - cookies := LoginOut.Cookies() // log.Printf("Login successful for user: %s", user)//log not needed diff --git a/Untis/timeutil.go b/Untis/timeutil.go index 6943f74..db15d28 100644 --- a/Untis/timeutil.go +++ b/Untis/timeutil.go @@ -8,17 +8,21 @@ import ( "github.com/joho/godotenv" ) -var ( - locerr error - Location *time.Location -) +var Location *time.Location -func GetTime() time.Time { +func init() { godotenv.Load("../.env") timezone := os.Getenv("LOCATION_ENV") - Location, locerr = time.LoadLocation(timezone) - if locerr != nil { - log.Fatalf("Failed to load Timezone: %v", locerr) + if timezone == "" { + timezone = "UTC" } + loc, err := time.LoadLocation(timezone) + if err != nil { + log.Printf("Failed to load timezone, set as UTC") + } + Location = loc +} + +func GetTime() time.Time { return time.Now().In(Location) } diff --git a/main.go b/main.go index 7fe44e4..7b85e7c 100644 --- a/main.go +++ b/main.go @@ -101,10 +101,10 @@ func init() { } else { log.Println("No Discord webhook provided, Discord notifications will be disabled") } - initUpdate() } func main() { + initUpdate() go BotStart.Start() scheduleTimetableUpdate() sigChan := make(chan os.Signal, 1) @@ -301,8 +301,8 @@ func scheduleTimetableUpdate() { } // Always update prevData prevData[acc.UserID] = data + time.Sleep(3 * time.Second) } - time.Sleep(3 * time.Second) } // Initial update