Skip to content

Commit bb1e0af

Browse files
committed
fix tmpauth passthrough
1 parent 7010df9 commit bb1e0af

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

cmd/mini-server/main.go

+15-1
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,28 @@ func main() {
198198
return
199199
}
200200

201+
token := r.Header.Get(tmpauth.TokenHeader)
202+
if token == "" {
203+
log.Println("missing tmpauth token")
204+
http.Error(w, "missing tmpauth token", http.StatusBadRequest)
205+
return
206+
}
207+
201208
ta, ok := tmpauthInstances[configID]
202209
if !ok {
203210
log.Println("invalid config ID:", configID)
204211
http.Error(w, "invalid config ID", http.StatusPreconditionFailed)
205212
return
206213
}
207214

208-
whomstData, err := ta.Whomst()
215+
cachedToken, err := ta.ParseWrappedAuthJWT(token)
216+
if err != nil {
217+
log.Println("error parsing token:", err)
218+
http.Error(w, err.Error(), http.StatusBadRequest)
219+
return
220+
}
221+
222+
whomstData, err := ta.Whomst(cachedToken)
209223
if err != nil {
210224
log.Println("error getting whomst:", err)
211225
http.Error(w, err.Error(), http.StatusInternalServerError)

handler.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ func (t *Tmpauth) serveWhomst(w http.ResponseWriter, token *CachedToken) (int, e
411411
return http.StatusUnauthorized, fmt.Errorf("tmpauth: must be logged in to retrieve whomst database")
412412
}
413413

414-
whomstData, err := t.Whomst()
414+
whomstData, err := t.Whomst(token)
415415
if err != nil {
416416
return http.StatusInternalServerError, fmt.Errorf("tmpauth: failed to retrieve whomst data: %w", err)
417417
}
@@ -423,7 +423,7 @@ func (t *Tmpauth) serveWhomst(w http.ResponseWriter, token *CachedToken) (int, e
423423
return 0, nil
424424
}
425425

426-
func (t *Tmpauth) Whomst() (map[string]json.RawMessage, error) {
426+
func (t *Tmpauth) Whomst(token *CachedToken) (map[string]json.RawMessage, error) {
427427
var resp *http.Response
428428
var respErr error
429429

@@ -433,11 +433,12 @@ func (t *Tmpauth) Whomst() (map[string]json.RawMessage, error) {
433433
return nil, fmt.Errorf("invalid mini server request: %w", err)
434434
}
435435

436-
req.Header.Set(ConfigIDHeader, t.miniConfigID)
436+
req.Header.Set(TokenHeader, token.RawToken)
437437

438438
resp, respErr = t.miniClient(req, 0)
439439
} else {
440-
resp, respErr = t.HttpClient.Get("https://" + TmpAuthHost + "/whomst")
440+
resp, respErr = t.HttpClient.Get("https://" + TmpAuthHost + "/whomst/tmpauth/db?token=" +
441+
url.QueryEscape(token.RawToken))
441442
}
442443
if respErr != nil {
443444
return nil, respErr

token.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type CachedToken struct {
2727
ValidatedAt time.Time
2828
IssuedAt time.Time
2929
UserIDs []string // IDs that can be used in Config.AllowedUsers from IDFormats
30+
RawToken string
3031
headersMutex *sync.RWMutex
3132
}
3233

@@ -48,9 +49,12 @@ func (w *wrappedToken) Valid() error {
4849
return nil
4950
}
5051

51-
const ConfigIDHeader = "X-Tmpauth-Config-Id"
52-
const RequestURIHeader = "X-Tmpauth-Request-URI"
53-
const HostHeader = "X-Tmpauth-Host"
52+
const (
53+
ConfigIDHeader = "X-Tmpauth-Config-Id"
54+
RequestURIHeader = "X-Tmpauth-Request-URI"
55+
HostHeader = "X-Tmpauth-Host"
56+
TokenHeader = "X-Tmpauth-Token"
57+
)
5458

5559
func (t *Tmpauth) ParseWrappedMicrotoken(tokenStr string) (*CachedToken, error) {
5660
codec := &microtoken.Codec{
@@ -252,6 +256,7 @@ func (t *Tmpauth) ParseAuthJWT(tokenStr string, minValidationTime time.Time) (*C
252256
IssuedAt: iat,
253257
StateID: stateID,
254258
ValidatedAt: minValidationTime,
259+
RawToken: tokenStr,
255260
headersMutex: new(sync.RWMutex),
256261
}
257262

0 commit comments

Comments
 (0)