+15
-2
appview/oauth/handler/handler.go
+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
+2
-2
appview/pages/templates/user/login.html
+48
kvothe.dolphin-pentatonic.ts.net.crt
+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-----