From bea881c449a04a15186c4ff8f11fc0be28d53129 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Thu, 09 Apr 2026 10:48:26 +0000 Subject: [PATCH] knotmirror: check host from DB before guessing SSL Signed-off-by: Seongmin Lee --- knotmirror/tapclient.go | 1 + knotmirror/xrpc/proxy.go | 16 +++++++++++----- knotmirror/xrpc/sync_request_crawl.go | 1 + 3 file(s) changed, 13 insertion(s)(+), 5 deletion(s)(-) diff --git a/knotmirror/tapclient.go b/knotmirror/tapclient.go --- a/knotmirror/tapclient.go +++ b/knotmirror/tapclient.go @@ -129,6 +129,7 @@ } } + t.logger.Debug("tap: upserting repo with knot", "knot", repo.KnotDomain) if err := db.UpsertRepo(ctx, t.db, repo); err != nil { return fmt.Errorf("upserting repo to db: %w", err) } diff --git a/knotmirror/xrpc/proxy.go b/knotmirror/xrpc/proxy.go --- a/knotmirror/xrpc/proxy.go +++ b/knotmirror/xrpc/proxy.go @@ -70,12 +70,17 @@ record := out.Value.Val.(*tangled.Repo) knotURL := record.Knot - if !strings.Contains(knotURL, "://") { - scheme := "http" - if x.cfg.KnotUseSSL { - scheme = "https" + if !strings.Contains(record.Knot, "://") { + if host, _ := db.GetHost(ctx, x.db, record.Knot); host != nil { + knotURL = host.URL() + } else { + x.logger.Warn("repo is from unknown knot") + if x.cfg.KnotUseSSL { + knotURL = "https://" + knotURL + } else { + knotURL = "http://" + knotURL + } } - knotURL = scheme + "://" + knotURL } go func() { @@ -88,6 +93,7 @@ KnotDomain: knotURL, State: models.RepoStatePending, } + x.logger.Debug("pending: upserting repo with knot", "knot", pending.KnotDomain) if upsertErr := db.UpsertRepo(bgCtx, x.db, pending); upsertErr != nil { x.logger.Error("failed to upsert repo after proxy resolution", "err", upsertErr) } diff --git a/knotmirror/xrpc/sync_request_crawl.go b/knotmirror/xrpc/sync_request_crawl.go --- a/knotmirror/xrpc/sync_request_crawl.go +++ b/knotmirror/xrpc/sync_request_crawl.go @@ -83,6 +83,7 @@ RetryCount: 0, } + x.logger.Debug("requestCrawl: upserting repo with knot", "knot", repo.KnotDomain) if err := db.UpsertRepo(ctx, x.db, repo); err != nil { l.Error("failed to upsert repo", "err", err) writeErr(w, err) -- tangled.sh