reformat some stuff

This commit is contained in:
2026-08-03 21:01:58 -04:00
parent c3bee53ade
commit 1fddaf3f67
8 changed files with 63 additions and 48 deletions
-26
View File
@@ -1,26 +0,0 @@
package main
type MultiStatus struct {
Responses []Response `xml:"response"`
}
type Response struct {
Href string `xml:"href"`
PropStat []PropStat `xml:"propstat"`
}
type PropStat struct {
Prop Prop `xml:"prop"`
Status string `xml:"status"`
}
type Prop struct {
DisplayName string `xml:"displayname"`
Type ResourceType `xml:"resourcetype"`
CalendarData string `xml:"calendar-data"`
}
type ResourceType struct {
Collection *struct{} `xml:"DAV: collection"`
Calendar *struct{} `xml:"urn:ietf:params:xml:ns:caldav calendar"`
}
-146
View File
@@ -1,146 +0,0 @@
package main
import (
"encoding/xml"
"fmt"
"io"
"log"
"net/http"
"strings"
)
// simple test XML
const neededXML string = `
<?xml version="1.0" encoding="UTF-8"?>
<d:propfind xmlns:d="DAV:">
<d:prop>
<d:displayname/>
<d:resourcetype/>
</d:prop>
</d:propfind>
`
var client *http.Client
func init_dav_client() {
client = &http.Client{}
}
type Event struct {
CalData string
}
type Calandar struct {
DisplayName string
Link string
Events []Event
}
type SimpleCalDavData struct {
DisplayName string
Calandars []Calandar
}
// this makes stalwart assumptions
func get_caldav_data(username string, password string) SimpleCalDavData {
req, _ := http.NewRequest(
"PROPFIND",
serverConfig.URL+"/dav/cal/"+convert_username_into_url(username),
strings.NewReader(neededXML),
)
req.SetBasicAuth(username, password)
req.Header.Set("Depth", "1")
req.Header.Set("Content-Type", "application/xml")
resp, err := client.Do(req)
if err != nil {
fmt.Print(err.Error())
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Print(err.Error())
}
var davResp MultiStatus
err = xml.Unmarshal(body, &davResp)
if err != nil {
fmt.Print(err)
}
calandars := []Calandar{}
for i := range len(davResp.Responses) {
if davResp.Responses[i].PropStat[0].Prop.Type.Calendar == nil {
continue
}
var new_cal Calandar = Calandar{
DisplayName: davResp.Responses[i].PropStat[0].Prop.DisplayName,
Link: serverConfig.URL + davResp.Responses[i].Href,
}
calandars = append(calandars, new_cal)
}
return SimpleCalDavData{
DisplayName: davResp.Responses[0].PropStat[0].Prop.DisplayName,
Calandars: calandars,
}
}
const XML_cal string = `
<C:calendar-query xmlns:D="DAV:"
xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<D:getetag/>
<C:calendar-data/>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT"/>
</C:comp-filter>
</C:filter>
</C:calendar-query>
`
func get_calandar_data(cal Calandar, username string, password string) Calandar {
req, _ := http.NewRequest(
"REPORT",
cal.Link,
strings.NewReader(XML_cal),
)
req.SetBasicAuth(username, password)
req.Header.Set("Depth", "1")
req.Header.Set("Content-Type", "application/xml")
resp, err := client.Do(req)
if err != nil {
fmt.Print(err.Error())
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
var davResp MultiStatus
err = xml.Unmarshal(body, &davResp)
if err != nil {
log.Fatal(err)
}
for i := range len(davResp.Responses) {
newEvent := Event{
CalData: davResp.Responses[i].PropStat[0].Prop.CalendarData,
}
cal.Events = append(cal.Events, newEvent)
}
return cal
}
-8
View File
@@ -1,8 +0,0 @@
package main
import "strings"
func convert_username_into_url(username string) string {
result := strings.ReplaceAll(username, "@", "%40")
return result
}
+4 -39
View File
@@ -1,53 +1,18 @@
package main
import (
"fmt"
"strings"
"astraltech.xyz/calendar/v2/auth"
"astraltech.xyz/calendar/v2/caldav"
"astraltech.xyz/calendar/v2/webserver"
ics "github.com/arran4/golang-ical"
)
func HandleAuthRequest(username string, password string) bool {
calDavData := get_caldav_data(username, password)
fmt.Printf("Users display name: %s\n", calDavData.DisplayName)
fmt.Printf("Calandar Count: %d\n", len(calDavData.Calandars))
for i := range len(calDavData.Calandars) {
calDavData.Calandars[i] = get_calandar_data(calDavData.Calandars[i], username, password)
fmt.Printf("Cal %d is named %s\n", i, calDavData.Calandars[i].DisplayName)
fmt.Printf("\tLink to cal: %s\n", calDavData.Calandars[i].Link)
fmt.Printf("\tEvent count: %d\n", len(calDavData.Calandars[i].Events))
for j := range len(calDavData.Calandars[i].Events) {
cal, err := ics.ParseCalendar(strings.NewReader(calDavData.Calandars[i].Events[j].CalData))
if err != nil {
fmt.Print(err.Error())
}
events := cal.Events()
for k := range len(events) {
name := events[k].GetProperty(ics.ComponentProperty(ics.PropertySummary)).Value
start, _ := events[k].GetStartAt()
end, _ := events[k].GetEndAt()
time := end.Sub(start)
fmt.Printf("\t\tEvent name: %s\n", name)
fmt.Printf("\t\t\tEvent start date: %s\n", end.UTC().String())
fmt.Printf("\t\t\tEvent length date: %s\n", time.String())
}
}
}
return true
}
func main() {
read_config()
init_dav_client()
caldav.InitDavClient(serverConfig.URL)
webserver.ServeLoginPage("/login", webserver.CustomizableLoginData{
ServiceName: "Astral Calendar",
AuthRequestFunction: HandleAuthRequest,
AuthRequestFunction: auth.HandleAuthRequest,
})
webserver.EnableLogoRoute()
webserver.EnableStaticRoute()