make login page date different depending on auth type

This commit is contained in:
2026-08-04 21:07:07 -04:00
parent ab78dd711f
commit 8a8ebcdeec
5 changed files with 92 additions and 41 deletions
+17 -28
View File
@@ -2,41 +2,30 @@ package auth
import ( import (
"fmt" "fmt"
"strings"
"astraltech.xyz/calendar/v2/caldav" "astraltech.xyz/calendar/v2/webserver"
ics "github.com/arran4/golang-ical"
) )
func HandleAuthRequest(username string, password string) bool { func HandlePasswordAuth(authData webserver.PasswordAuthData) bool {
calDavData := caldav.GetCalDAVData(username, password) fmt.Printf("%s, %s\n", authData.Username, authData.Password)
return false
}
fmt.Printf("Users display name: %s\n", calDavData.DisplayName) func HandleOAuth(authData webserver.OAuthAuthData) bool {
fmt.Printf("Calandar Count: %d\n", len(calDavData.Calandars)) fmt.Printf("doing an OAuth")
for i := range len(calDavData.Calandars) { return false
calDavData.Calandars[i] = caldav.GetCalendarData(calDavData.Calandars[i], username, password) }
fmt.Printf("Cal %d is named %s\n", i, calDavData.Calandars[i].DisplayName) func HandleAuthRequest(authType webserver.AuthStyle, authData webserver.AuthData) bool {
fmt.Printf("\tLink to cal: %s\n", calDavData.Calandars[i].Link) if authType == webserver.AuthStylePassword {
fmt.Printf("\tEvent count: %d\n", len(calDavData.Calandars[i].Events)) passwordAuthData, _ := authData.(webserver.PasswordAuthData)
for j := range len(calDavData.Calandars[i].Events) { return HandlePasswordAuth(passwordAuthData)
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())
if authType == webserver.AuthStyleOAuth {
passwordAuthData, _ := authData.(webserver.OAuthAuthData)
return HandleOAuth(passwordAuthData)
} }
}
}
return true return false
} }
+31
View File
@@ -1 +1,32 @@
package auth package auth
import (
"encoding/json"
"os"
"golang.org/x/oauth2"
)
type TokenStore struct {
filePath string
}
func (ts *TokenStore) Save(token *oauth2.Token) error {
data, err := json.Marshal(token)
if err != nil {
return err
}
return os.WriteFile(ts.filePath, data, 0600)
}
func (ts *TokenStore) Load() (*oauth2.Token, error) {
data, err := os.ReadFile(ts.filePath)
if err != nil {
return nil, err
}
var token oauth2.Token
if err := json.Unmarshal(data, &token); err != nil {
return nil, err
}
return &token, nil
}
+1
View File
@@ -14,6 +14,7 @@ func main() {
ServiceName: "Astral Calendar", ServiceName: "Astral Calendar",
AuthRequestFunction: auth.HandleAuthRequest, AuthRequestFunction: auth.HandleAuthRequest,
}) })
webserver.ServeWebpage("/callback", auth.OAuthCallback)
webserver.EnableLogoRoute() webserver.EnableLogoRoute()
webserver.EnableStaticRoute() webserver.EnableStaticRoute()
webserver.ServeWebserver() webserver.ServeWebserver()
+32 -2
View File
@@ -10,10 +10,28 @@ type LoginPageData struct {
IsHiddenClassList string IsHiddenClassList string
LoginData CustomizableLoginData LoginData CustomizableLoginData
} }
type AuthStyle int
const (
AuthStylePassword AuthStyle = 0
AuthStyleOAuth AuthStyle = 1
)
type AuthData interface{}
type PasswordAuthData struct {
Username string
Password string
}
type OAuthAuthData struct {
Username string
Password string
}
type CustomizableLoginData struct { type CustomizableLoginData struct {
ServiceName string ServiceName string
AuthRequestFunction func(string, string) bool AuthRequestFunction func(AuthStyle, AuthData) bool
} }
var LoginPageDataCustomizations CustomizableLoginData var LoginPageDataCustomizations CustomizableLoginData
@@ -27,15 +45,27 @@ func loginHandler(w http.ResponseWriter, r *http.Request) {
} }
if r.Method == http.MethodPost { if r.Method == http.MethodPost {
action := r.FormValue("action")
if action == "password" {
username := r.FormValue("username") username := r.FormValue("username")
if strings.Contains(username, "/") { if strings.Contains(username, "/") {
tmpl.Execute(w, LoginPageData{IsHiddenClassList: "", LoginData: LoginPageDataCustomizations}) tmpl.Execute(w, LoginPageData{IsHiddenClassList: "", LoginData: LoginPageDataCustomizations})
} }
password := r.FormValue("password") password := r.FormValue("password")
auth_success := LoginPageDataCustomizations.AuthRequestFunction(username, password) auth_success := LoginPageDataCustomizations.AuthRequestFunction(AuthStylePassword, PasswordAuthData{
Username: username,
Password: password,
})
if auth_success == false {
tmpl.Execute(w, LoginPageData{IsHiddenClassList: "", LoginData: LoginPageDataCustomizations})
}
} else {
auth_success := LoginPageDataCustomizations.AuthRequestFunction(AuthStyleOAuth, OAuthAuthData{})
if auth_success == false { if auth_success == false {
tmpl.Execute(w, LoginPageData{IsHiddenClassList: "", LoginData: LoginPageDataCustomizations}) tmpl.Execute(w, LoginPageData{IsHiddenClassList: "", LoginData: LoginPageDataCustomizations})
} }
} }
}
} }
+2 -2
View File
@@ -34,8 +34,8 @@
</div> </div>
</div> </div>
<div id="login_buttons"> <div id="login_buttons">
<button type="submit">Login with password</button> <button type="submit" name="action" value="password">Login with password</button>
<button type="submit" id="login_with_oauth"><img src="/favicon.ico"/></button> <button type="submit" id="login_with_oauth" name="action" value="oauth"><img src="/favicon.ico"/></button>
</div> </div>
</form> </form>