···161162 return err
163}
164+165+func RegisterV2(e Execer, domain, did string) error {
166+ // TODO: this secret is useless because it is never used
167+ // all comms happen through authenticated records on the firehose
168+ secret := genSecret()
169+ _, err := e.Exec(`
170+ insert into registrations (domain, did, secret)
171+ values (?, ?, ?)
172+ on conflict(domain) do update set did = excluded.did, created = excluded.created, registered = excluded.created
173+ `, domain, did, secret)
174+175+ return err
176+}
···29 create table if not exists owner (
30 id integer primary key check (id = 0),
31 did text not null,
032 createdAt text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
33 );
34
···29 create table if not exists owner (
30 id integer primary key check (id = 0),
31 did text not null,
32+ rkey text not null,
33 createdAt text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
34 );
35
···157 // Health check. Used for two-way verification with appview.
158 r.With(h.VerifySignature).Get("/health", h.Health)
159000160 // All public keys on the knot.
161 r.Get("/keys", h.Keys)
162···241 return err
242 }
243244- err = h.db.SetOwner(ownerDid)
245 if err != nil {
246 return err
247 }
···157 // Health check. Used for two-way verification with appview.
158 r.With(h.VerifySignature).Get("/health", h.Health)
159160+ // Return did of the owner of this knot
161+ r.Get("/owner", h.Owner)
162+163 // All public keys on the knot.
164 r.Get("/keys", h.Keys)
165···244 return err
245 }
246247+ err = h.db.SetOwner(ownerDid, rkey)
248 if err != nil {
249 return err
250 }
+12
knotserver/routes.go
···1287 w.Write([]byte("ok"))
1288}
12890000000000001290func validateRepoName(name string) error {
1291 // check for path traversal attempts
1292 if name == "." || name == ".." ||
···1287 w.Write([]byte("ok"))
1288}
12891290+func (h *Handle) Owner(w http.ResponseWriter, r *http.Request) {
1291+ owner, err := h.db.Owner()
1292+ if err != nil {
1293+ writeError(w, "no owner", http.StatusNotFound)
1294+ return
1295+ }
1296+1297+ writeJSON(w, types.KnotOwnerResponse{
1298+ OwnerDid: owner,
1299+ })
1300+}
1301+1302func validateRepoName(name string) error {
1303 // check for path traversal attempts
1304 if name == "." || name == ".." ||