Removed Fatalf

in order to prevent a huge amount of restarts i removed Fatalf and made it return normally

I also made GetTime load the timezone once and just return the correct value as well as default to utc

made the Auth function retry 3 times per account and send an error after that

put time.Sleep into the correct loop in main.go

initUpdate is in main now
This commit is contained in:
Jannover5000r 2026-08-25 23:27:37 +02:00
parent 1d57e8a867
commit d2a84a8435
7 changed files with 62 additions and 38 deletions

View file

@ -32,14 +32,14 @@ func Classes(cookies []*http.Cookie) {
g := getClasses{"2023-05-06 15:44:22.215292", "getKlassen", map[string]interface{}{}, "2.0"} g := getClasses{"2023-05-06 15:44:22.215292", "getKlassen", map[string]interface{}{}, "2.0"}
ClassesJson, err := json.Marshal(g) ClassesJson, err := json.Marshal(g)
if err != nil { if err != nil {
log.Fatalf("Error marshaling login data: %v", err) log.Printf("Error marshaling login data: %v", err)
return return
} }
classes := bytes.NewReader(ClassesJson) classes := bytes.NewReader(ClassesJson)
prompt, err := http.NewRequest("POST", Url, classes) prompt, err := http.NewRequest("POST", Url, classes)
if err != nil { if err != nil {
log.Fatalf("Error creatingrequest: %v", err) log.Printf("Error creatingrequest: %v", err)
return return
} }
// log.Println("prompt without extra header or cookie ", prompt) // log.Println("prompt without extra header or cookie ", prompt)
@ -72,15 +72,17 @@ func Classes(cookies []*http.Cookie) {
var Response ClassesResponse var Response ClassesResponse
err = json.Unmarshal(response, &Response) err = json.Unmarshal(response, &Response)
if err != nil { if err != nil {
log.Fatalf("Error unmarshaling response: %v", err) log.Printf("Error unmarshaling response: %v", err)
} }
data, err := json.MarshalIndent(Response.Result, "", " ") data, err := json.MarshalIndent(Response.Result, "", " ")
if err != nil { if err != nil {
log.Fatal(err) log.Print(err)
return
} }
err = os.WriteFile("classes.json", data, 0o644) err = os.WriteFile("classes.json", data, 0o644)
if err != nil { if err != nil {
log.Fatal(err) log.Print(err)
return
} }
// log.Println("Updated Classes")//dont need log anymore // log.Println("Updated Classes")//dont need log anymore
} }

View file

@ -35,14 +35,14 @@ func Rooms(cookies []*http.Cookie) {
g := getRooms{"2023-05-06 15:44:22.215292", "getRooms", map[string]interface{}{}, "2.0"} g := getRooms{"2023-05-06 15:44:22.215292", "getRooms", map[string]interface{}{}, "2.0"}
roomsJson, err := json.Marshal(g) roomsJson, err := json.Marshal(g)
if err != nil { if err != nil {
log.Fatalf("Error marshaling login data: %v", err) log.Printf("Error marshaling login data: %v", err)
return return
} }
rooms := bytes.NewReader(roomsJson) rooms := bytes.NewReader(roomsJson)
prompt, err := http.NewRequest("POST", Url, rooms) prompt, err := http.NewRequest("POST", Url, rooms)
if err != nil { if err != nil {
log.Fatalf("Error creatingrequest: %v", err) log.Printf("Error creatingrequest: %v", err)
return return
} }
// log.Println("prompt without extra header or cookie ", prompt) // log.Println("prompt without extra header or cookie ", prompt)
@ -75,16 +75,19 @@ func Rooms(cookies []*http.Cookie) {
var Response RoomsResponse var Response RoomsResponse
err = json.Unmarshal(response, &Response) err = json.Unmarshal(response, &Response)
if err != nil { if err != nil {
log.Fatalf("Error unmarshaling response: %v", err) log.Printf("Error unmarshaling response: %v", err)
return
} }
data, err := json.MarshalIndent(Response.Result, "", " ") data, err := json.MarshalIndent(Response.Result, "", " ")
if err != nil { if err != nil {
log.Fatal(err) log.Print(err)
return
} }
err = os.WriteFile("rooms.json", data, 0o644) err = os.WriteFile("rooms.json", data, 0o644)
if err != nil { if err != nil {
log.Fatal(err) log.Print(err)
return
} }
// log.Println("Updated Rooms")//dont need log anymore // log.Println("Updated Rooms")//dont need log anymore
} }

View file

@ -32,14 +32,14 @@ func Subjects(cookies []*http.Cookie) {
g := getSubjects{"2023-05-06 15:44:22.215292", "getSubjects", map[string]interface{}{}, "2.0"} g := getSubjects{"2023-05-06 15:44:22.215292", "getSubjects", map[string]interface{}{}, "2.0"}
SubjectsJson, err := json.Marshal(g) SubjectsJson, err := json.Marshal(g)
if err != nil { if err != nil {
log.Fatalf("Error marshaling login data: %v", err) log.Printf("Error marshaling login data: %v", err)
return return
} }
subjects := bytes.NewReader(SubjectsJson) subjects := bytes.NewReader(SubjectsJson)
prompt, err := http.NewRequest("POST", Url, subjects) prompt, err := http.NewRequest("POST", Url, subjects)
if err != nil { if err != nil {
log.Fatalf("Error creatingrequest: %v", err) log.Printf("Error creatingrequest: %v", err)
return return
} }
// log.Println("prompt without extra header or cookie ", prompt) // log.Println("prompt without extra header or cookie ", prompt)
@ -72,15 +72,18 @@ func Subjects(cookies []*http.Cookie) {
var Response SubjectsResponse var Response SubjectsResponse
err = json.Unmarshal(response, &Response) err = json.Unmarshal(response, &Response)
if err != nil { if err != nil {
log.Fatalf("Error unmarshaling response: %v", err) log.Printf("Error unmarshaling response: %v", err)
return
} }
data, err := json.MarshalIndent(Response.Result, "", " ") data, err := json.MarshalIndent(Response.Result, "", " ")
if err != nil { if err != nil {
log.Fatal(err) log.Print(err)
return
} }
err = os.WriteFile("subjects.json", data, 0o644) err = os.WriteFile("subjects.json", data, 0o644)
if err != nil { if err != nil {
log.Fatal(err) log.Print(err)
return
} }
// log.Println("Updated Subjects")//dont need log anymore // log.Println("Updated Subjects")//dont need log anymore
} }

View file

@ -32,14 +32,14 @@ func Teachers(cookies []*http.Cookie) {
g := getTeachers{"2023-05-06 15:44:22.215292", "getTeachers", map[string]interface{}{}, "2.0"} g := getTeachers{"2023-05-06 15:44:22.215292", "getTeachers", map[string]interface{}{}, "2.0"}
TeachersJson, err := json.Marshal(g) TeachersJson, err := json.Marshal(g)
if err != nil { if err != nil {
log.Fatalf("Error marshaling login data: %v", err) log.Printf("Error marshaling login data: %v", err)
return return
} }
teachers := bytes.NewReader(TeachersJson) teachers := bytes.NewReader(TeachersJson)
prompt, err := http.NewRequest("POST", Url, teachers) prompt, err := http.NewRequest("POST", Url, teachers)
if err != nil { if err != nil {
log.Fatalf("Error creatingrequest: %v", err) log.Printf("Error creatingrequest: %v", err)
return return
} }
// log.Println("prompt without extra header or cookie ", prompt) // log.Println("prompt without extra header or cookie ", prompt)
@ -72,15 +72,18 @@ func Teachers(cookies []*http.Cookie) {
var Response TeachersResponse var Response TeachersResponse
err = json.Unmarshal(response, &Response) err = json.Unmarshal(response, &Response)
if err != nil { if err != nil {
log.Fatalf("Error unmarshaling response: %v", err) log.Printf("Error unmarshaling response: %v", err)
return
} }
data, err := json.MarshalIndent(Response.Result, "", " ") data, err := json.MarshalIndent(Response.Result, "", " ")
if err != nil { if err != nil {
log.Fatal(err) log.Print(err)
return
} }
err = os.WriteFile("teachers.json", data, 0o644) err = os.WriteFile("teachers.json", data, 0o644)
if err != nil { if err != nil {
log.Fatal(err) log.Print(err)
return
} }
// log.Println("Updated Teachers")//dont need log anymore // log.Println("Updated Teachers")//dont need log anymore
} }

View file

@ -7,6 +7,7 @@ import (
"log" "log"
"net/http" "net/http"
"os" "os"
"time"
"github.com/joho/godotenv" "github.com/joho/godotenv"
) )
@ -59,21 +60,29 @@ func Update(user, password, userID string) {
} }
func Auth(user, password, userID string) ([]*http.Cookie, error) { 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, _ := json.Marshal(Login{
loginJSON, err := json.Marshal(l) "2023-05-06 15:44:22.215292", "authenticate",
if err != nil { Params{user, password, "WebUntis Test"},
return nil, err "2.0",
} })
login := bytes.NewReader(loginJSON)
if Url == "" { if Url == "" {
Url = os.Getenv("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 { if err != nil {
return nil, err return nil, err
} }
defer LoginOut.Body.Close() defer LoginOut.Body.Close()
cookies := LoginOut.Cookies() cookies := LoginOut.Cookies()
// log.Printf("Login successful for user: %s", user)//log not needed // log.Printf("Login successful for user: %s", user)//log not needed

View file

@ -8,17 +8,21 @@ import (
"github.com/joho/godotenv" "github.com/joho/godotenv"
) )
var ( var Location *time.Location
locerr error
Location *time.Location
)
func GetTime() time.Time { func init() {
godotenv.Load("../.env") godotenv.Load("../.env")
timezone := os.Getenv("LOCATION_ENV") timezone := os.Getenv("LOCATION_ENV")
Location, locerr = time.LoadLocation(timezone) if timezone == "" {
if locerr != nil { timezone = "UTC"
log.Fatalf("Failed to load Timezone: %v", locerr)
} }
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) return time.Now().In(Location)
} }

View file

@ -101,10 +101,10 @@ func init() {
} else { } else {
log.Println("No Discord webhook provided, Discord notifications will be disabled") log.Println("No Discord webhook provided, Discord notifications will be disabled")
} }
initUpdate()
} }
func main() { func main() {
initUpdate()
go BotStart.Start() go BotStart.Start()
scheduleTimetableUpdate() scheduleTimetableUpdate()
sigChan := make(chan os.Signal, 1) sigChan := make(chan os.Signal, 1)
@ -301,9 +301,9 @@ func scheduleTimetableUpdate() {
} }
// Always update prevData // Always update prevData
prevData[acc.UserID] = data prevData[acc.UserID] = data
}
time.Sleep(3 * time.Second) time.Sleep(3 * time.Second)
} }
}
// Initial update // Initial update
updateAllUsers() updateAllUsers()