Monorepo for Tangled tangled.org

appview: oauth/handler: implement logout

anirudh.fi 4d3b93c1 ed80e5a5

verified
Changed files
+70 -4
appview
oauth
handler
pages
templates
user
+15 -2
appview/oauth/handler/handler.go
··· 14 14 "github.com/lestrrat-go/jwx/v2/jwk" 15 15 "tangled.sh/tangled.sh/core/appview" 16 16 "tangled.sh/tangled.sh/core/appview/db" 17 + "tangled.sh/tangled.sh/core/appview/middleware" 17 18 "tangled.sh/tangled.sh/core/appview/oauth" 18 19 "tangled.sh/tangled.sh/core/appview/oauth/client" 19 20 "tangled.sh/tangled.sh/core/appview/pages" ··· 37 38 38 39 r.Get("/login", o.login) 39 40 r.Post("/login", o.login) 41 + 42 + r.With(middleware.AuthMiddleware(o.OAuth)).Post("/logout", o.logout) 40 43 41 44 r.Get("/oauth/client-metadata.json", o.clientMetadata) 42 45 r.Get("/oauth/jwks.json", o.jwks) ··· 60 63 "token_endpoint_auth_method": "private_key_jwt", 61 64 "token_endpoint_auth_signing_alg": "ES256", 62 65 } 63 - 64 - fmt.Println("clientMetadata", metadata) 65 66 66 67 w.Header().Set("Content-Type", "application/json") 67 68 w.WriteHeader(http.StatusOK) ··· 243 244 244 245 log.Println("session saved successfully") 245 246 247 + http.Redirect(w, r, "/", http.StatusFound) 248 + } 249 + 250 + func (o *OAuthHandler) logout(w http.ResponseWriter, r *http.Request) { 251 + err := o.OAuth.ClearSession(r, w) 252 + if err != nil { 253 + log.Println("failed to clear session:", err) 254 + http.Redirect(w, r, "/", http.StatusFound) 255 + return 256 + } 257 + 258 + log.Println("session cleared successfully") 246 259 http.Redirect(w, r, "/", http.StatusFound) 247 260 } 248 261
+2 -2
appview/pages/templates/user/login.html
··· 27 27 </h2> 28 28 <form 29 29 class="mt-4 max-w-sm mx-auto" 30 - hx-post="/oauth/login" 30 + hx-post="/login" 31 31 hx-swap="none" 32 - hx-disabled-elt="this" 32 + hx-disabled-elt="#login-button" 33 33 > 34 34 <div class="flex flex-col"> 35 35 <label for="handle">handle</label>
+48
kvothe.dolphin-pentatonic.ts.net.crt
··· 1 + -----BEGIN CERTIFICATE----- 2 + MIIDrTCCAzOgAwIBAgISBZtKgBCUc/UBeE224CLaBBFJMAoGCCqGSM49BAMDMDIx 3 + CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF 4 + NTAeFw0yNTA1MDkxMjUwMjNaFw0yNTA4MDcxMjUwMjJaMCsxKTAnBgNVBAMTIGt2 5 + b3RoZS5kb2xwaGluLXBlbnRhdG9uaWMudHMubmV0MFkwEwYHKoZIzj0CAQYIKoZI 6 + zj0DAQcDQgAEAmfzlJtDI6zQPvUzwM8mxFWAJluFHtyq3KHmKSqfjDdwyX05q4/R 7 + jhoXWF7x3Vd9S+V8JGIBiMoNgCQ+XpgYXaOCAi4wggIqMA4GA1UdDwEB/wQEAwIH 8 + gDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAd 9 + BgNVHQ4EFgQUMcRA7pwt4yXVuUO3pQLTwh4auncwHwYDVR0jBBgwFoAUnytfzzwh 10 + T50Et+0rLMTGcIvS1w0wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRw 11 + Oi8vZTUuaS5sZW5jci5vcmcvMCsGA1UdEQQkMCKCIGt2b3RoZS5kb2xwaGluLXBl 12 + bnRhdG9uaWMudHMubmV0MBMGA1UdIAQMMAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQw 13 + IqAgoB6GHGh0dHA6Ly9lNS5jLmxlbmNyLm9yZy83NC5jcmwwggEEBgorBgEEAdZ5 14 + AgQCBIH1BIHyAPAAdQAN4fIwK9MNwUBiEgnqVS78R3R8sdfpMO8OQh60fk6qNAAA 15 + AZa1TlxzAAAEAwBGMEQCIEDpoiH+6miZzTk44vJyyfnzrb9/MgZVey/82qKgPcoi 16 + AiASPKLS20X3nlo10Wmfejac4mMyks9FuR6MJ4mUqeroLQB3AKRCxQZJYGFUjw/U 17 + 6pz7ei0mRU2HqX8v30VZ9idPOoRUAAABlrVOXHUAAAQDAEgwRgIhAK81NbYOshL2 18 + sas1ARp68siObt6/i44JxWWXgVjG2JETAiEAgjsU14b0+f8iRyFfforu7o3mmJ+J 19 + 05ZDqxZv5SwvI4QwCgYIKoZIzj0EAwMDaAAwZQIxAK8HPrFeNx9fpyZ188QVGNUW 20 + ulqjYC0DKfU0ehzTOW1QUi//UxH+5C53fasVjRZr3gIwBWcyEeemIOt5Gt1qxkXb 21 + el3SirHpHiwyY8940+3NBbks2NO2Ty5QsSVKayWOTWQ6 22 + -----END CERTIFICATE----- 23 + -----BEGIN CERTIFICATE----- 24 + MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw 25 + TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh 26 + cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw 27 + WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg 28 + RW5jcnlwdDELMAkGA1UEAxMCRTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNCzqK 29 + a2GOtu/cX1jnxkJFVKtj9mZhSAouWXW0gQI3ULc/FnncmOyhKJdyIBwsz9V8UiBO 30 + VHhbhBRrwJCuhezAUUE8Wod/Bk3U/mDR+mwt4X2VEIiiCFQPmRpM5uoKrNijgfgw 31 + gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD 32 + ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfK1/PPCFPnQS37SssxMZw 33 + i9LXDTAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB 34 + AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g 35 + BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu 36 + Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAH3KdNEVCQdqk0LKyuNImTKdRJY1C 37 + 2uw2SJajuhqkyGPY8C+zzsufZ+mgnhnq1A2KVQOSykOEnUbx1cy637rBAihx97r+ 38 + bcwbZM6sTDIaEriR/PLk6LKs9Be0uoVxgOKDcpG9svD33J+G9Lcfv1K9luDmSTgG 39 + 6XNFIN5vfI5gs/lMPyojEMdIzK9blcl2/1vKxO8WGCcjvsQ1nJ/Pwt8LQZBfOFyV 40 + XP8ubAp/au3dc4EKWG9MO5zcx1qT9+NXRGdVWxGvmBFRAajciMfXME1ZuGmk3/GO 41 + koAM7ZkjZmleyokP1LGzmfJcUd9s7eeu1/9/eg5XlXd/55GtYjAM+C4DG5i7eaNq 42 + cm2F+yxYIPt6cbbtYVNJCGfHWqHEQ4FYStUyFnv8sjyqU8ypgZaNJ9aVcWSICLOI 43 + E1/Qv/7oKsnZCWJ926wU6RqG1OYPGOi1zuABhLw61cuPVDT28nQS/e6z95cJXq0e 44 + K1BcaJ6fJZsmbjRgD5p3mvEf5vdQM7MCEvU0tHbsx2I5mHHJoABHb8KVBgWp/lcX 45 + GWiWaeOyB7RP+OfDtvi2OsapxXiV7vNVs7fMlrRjY1joKaqmmycnBvAq14AEbtyL 46 + sVfOS66B8apkeFX2NY4XPEYV4ZSCe8VHPrdrERk2wILG3T/EGmSIkCYVUMSnjmJd 47 + VQD9F6Na/+zmXCc= 48 + -----END CERTIFICATE-----
+5
kvothe.dolphin-pentatonic.ts.net.key
··· 1 + -----BEGIN EC PRIVATE KEY----- 2 + MHcCAQEEIMJO0WxtmpDeZ7747hBOX3VCxAjybvqlhRpQhyfmfoiaoAoGCCqGSM49 3 + AwEHoUQDQgAEAmfzlJtDI6zQPvUzwM8mxFWAJluFHtyq3KHmKSqfjDdwyX05q4/R 4 + jhoXWF7x3Vd9S+V8JGIBiMoNgCQ+XpgYXQ== 5 + -----END EC PRIVATE KEY-----