Skip to content

Commit 2a0e5d9

Browse files
committed
metamcp: robust auth in provision/user-bootstrap by mirroring raw Set-Cookie to in-cluster host; bump to 0.1.21
1 parent 78bf7fd commit 2a0e5d9

File tree

3 files changed

+48
-16
lines changed

3 files changed

+48
-16
lines changed

charts/metamcp/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apiVersion: v2
22
name: metamcp
33
description: MetaMCP aggregator Helm chart for Kubernetes
44
type: application
5-
version: 0.1.20
5+
version: 0.1.21
66
appVersion: "latest"
77
icon: https://icoretech.github.io/helm/charts/metamcp/logo.png
88
keywords:

charts/metamcp/scripts/provision.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,31 @@ def signin(retries=8, delay=1.5):
7272
)
7373
except Exception:
7474
token = None
75-
if not token:
76-
# try to read cookie set by server and mirror it under our in-cluster host
77-
for c in sess.cookies:
78-
if c.name in ('better-auth.session_token','__Secure-better-auth.session_token') and c.value:
79-
token = c.value
80-
break
81-
if token:
75+
# Try to capture the raw cookie value from Set-Cookie header (preferred for signed cookies)
76+
raw_cookie = None
77+
try:
78+
sch = r.headers.get('set-cookie') or r.headers.get('Set-Cookie')
79+
if sch:
80+
# pick either __Secure-better-auth.session_token or better-auth.session_token
81+
for nm in ('__Secure-better-auth.session_token','better-auth.session_token'):
82+
marker = nm + '='
83+
if marker in sch:
84+
seg = sch.split(marker,1)[1]
85+
raw_cookie = seg.split(';',1)[0]
86+
break
87+
except Exception:
88+
raw_cookie = None
89+
# Prefer raw signed cookie value; otherwise fall back to token from JSON
90+
cookie_val = raw_cookie or token
91+
if cookie_val:
8292
# set both cookie names to maximize compatibility with secure-cookie deployments
8393
for cname in ('better-auth.session_token','__Secure-better-auth.session_token'):
8494
try:
85-
sess.cookies.set(cname, token, domain=host, path='/')
95+
sess.cookies.set(cname, cookie_val, domain=host, path='/')
8696
except Exception:
87-
sess.cookies.set(cname, token)
88-
sess.headers['Authorization'] = f"Bearer {token}"
97+
sess.cookies.set(cname, cookie_val)
98+
if token:
99+
sess.headers['Authorization'] = f"Bearer {token}"
89100
# Persist cookies to mozilla jar and reload next time
90101
try:
91102
mozjar.clear()

charts/metamcp/scripts/user-bootstrap.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,34 @@ def k8s_upsert_secret(name: str, email: str, api_key: str):
7979
if resp.status_code != 200:
8080
log(f"WARN: sign-in status {resp.status_code}: {resp.text[:160]}")
8181
else:
82+
host = SVC.split(':')[0]
83+
token = None
8284
try:
83-
token = resp.json().get('token')
84-
if token:
85-
host = SVC.split(':')[0]
86-
s.cookies.set('better-auth.session_token', token, domain=host, path='/')
85+
j = resp.json()
86+
token = j.get('token') or j.get('sessionToken') or (j.get('data') or {}).get('token') or (j.get('data') or {}).get('sessionToken')
8787
except Exception:
88-
pass
88+
token = None
89+
raw_cookie = None
90+
try:
91+
sch = resp.headers.get('set-cookie') or resp.headers.get('Set-Cookie')
92+
if sch:
93+
for nm in ('__Secure-better-auth.session_token','better-auth.session_token'):
94+
marker = nm + '='
95+
if marker in sch:
96+
seg = sch.split(marker,1)[1]
97+
raw_cookie = seg.split(';',1)[0]
98+
break
99+
except Exception:
100+
raw_cookie = None
101+
cookie_val = raw_cookie or token
102+
if cookie_val:
103+
for cname in ('better-auth.session_token','__Secure-better-auth.session_token'):
104+
try:
105+
s.cookies.set(cname, cookie_val, domain=host, path='/')
106+
except Exception:
107+
s.cookies.set(cname, cookie_val)
108+
if token:
109+
s.headers['Authorization'] = f"Bearer {token}"
89110
except Exception as e:
90111
log(f"WARN: sign-in exception: {e}")
91112
sessions.append(s)

0 commit comments

Comments
 (0)