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"}
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
}

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"}
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
}

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"}
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
}

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"}
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
}

View file

@ -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

View file

@ -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)
}

View file

@ -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