···141142 l.Info("checking domain")
143000000000000144 secret, err := db.GetRegistrationKey(k.Db, domain)
145 if err != nil {
146 l.Error("failed to get registration key for domain", "err", err)
···141142 l.Info("checking domain")
143144+ registration, err := db.RegistrationByDomain(k.Db, domain)
145+ if err != nil {
146+ l.Error("failed to get registration for domain", "err", err)
147+ fail()
148+ return
149+ }
150+ if registration.ByDid != user.Did {
151+ l.Error("unauthorized", "wantedDid", registration.ByDid, "gotDid", user.Did)
152+ w.WriteHeader(http.StatusUnauthorized)
153+ return
154+ }
155+156 secret, err := db.GetRegistrationKey(k.Db, domain)
157 if err != nil {
158 l.Error("failed to get registration key for domain", "err", err)
+1-1
appview/pages/templates/knots/index.html
···19 <p class="dark:text-gray-300">
20 Knots are lightweight headless servers that enable users to host Git repositories with ease.
21 Knots are designed for either single or multi-tenant use which is perfect for self-hosting on a Raspberry Pi at home, or larger “community” servers.
22- By default, Tangled provides managed knots where you can host your repositories for free.
23 <a href="https://tangled.sh/@tangled.sh/core/blob/master/docs/knot-hosting.md">
24 Checkout the documentation if you're interested in self-hosting.
25 </a>
···19 <p class="dark:text-gray-300">
20 Knots are lightweight headless servers that enable users to host Git repositories with ease.
21 Knots are designed for either single or multi-tenant use which is perfect for self-hosting on a Raspberry Pi at home, or larger “community” servers.
22+ When creating a repository, you can choose a knot to store it on.
23 <a href="https://tangled.sh/@tangled.sh/core/blob/master/docs/knot-hosting.md">
24 Checkout the documentation if you're interested in self-hosting.
25 </a>