mirror of
https://github.com/m1k1o/neko.git
synced 2026-11-03 00:11:48 -06:00
dae23a90b5
* feat(auth): add OIDC member authentication * docs(auth): document OIDC member login * fix(auth): address OAuth review feedback * refactor(auth): move OAuth flow into member provider
64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
package legacy
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/m1k1o/neko/server/pkg/types"
|
|
)
|
|
|
|
func TestCreateUsesExistingSessionCookie(t *testing.T) {
|
|
backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
switch r.URL.Path {
|
|
case "/api/whoami":
|
|
if r.Method != http.MethodGet {
|
|
t.Fatalf("method = %s, want GET", r.Method)
|
|
}
|
|
if got := r.Header.Get("Cookie"); got != "NEKO_SESSION=session-token" {
|
|
t.Fatalf("cookie = %q", got)
|
|
}
|
|
_ = json.NewEncoder(w).Encode(map[string]any{
|
|
"id": "oauth:user-123",
|
|
"profile": types.MemberProfile{
|
|
Name: "Ada Lovelace",
|
|
IsAdmin: true,
|
|
},
|
|
})
|
|
case "/api/protected":
|
|
if got := r.Header.Get("Cookie"); got != "NEKO_SESSION=session-token" {
|
|
t.Fatalf("authenticated request cookie = %q", got)
|
|
}
|
|
_ = json.NewEncoder(w).Encode(true)
|
|
default:
|
|
http.NotFound(w, r)
|
|
}
|
|
}))
|
|
defer backend.Close()
|
|
|
|
request := httptest.NewRequest(http.MethodGet, "http://neko.test/ws", nil)
|
|
request.Header.Set("Cookie", "NEKO_SESSION=session-token")
|
|
handler := &LegacyHandler{sessionIPs: make(map[string]string)}
|
|
session := &session{
|
|
r: request,
|
|
h: handler,
|
|
serverAddr: strings.TrimPrefix(backend.URL, "http://"),
|
|
client: backend.Client(),
|
|
}
|
|
|
|
if err := session.create("", ""); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if session.id != "oauth:user-123" || session.name != "Ada Lovelace" || !session.isAdmin {
|
|
t.Fatalf("session = %#v", session)
|
|
}
|
|
if session.cookie != "NEKO_SESSION=session-token" || session.token != "" {
|
|
t.Fatalf("authentication state = cookie %q token %q", session.cookie, session.token)
|
|
}
|
|
if err := session.apiReq(http.MethodGet, "/api/protected", nil, nil); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|