···
203
-
if err := s.db.AddPublicKey(did, name, key); err != nil {
203
+
// Start transaction
204
+
tx, err := s.db.Db.Begin()
206
+
log.Printf("failed to start transaction: %s", err)
207
+
http.Error(w, "Internal server error", http.StatusInternalServerError)
210
+
defer tx.Rollback() // Will rollback if not committed
212
+
if err := s.db.AddPublicKeyTx(tx, did, name, key); err != nil {
log.Printf("adding public key: %s", err)
···
235
+
// If everything succeeded, commit the transaction
236
+
if err := tx.Commit(); err != nil {
237
+
log.Printf("failed to commit transaction: %s", err)
238
+
http.Error(w, "Internal server error", http.StatusInternalServerError)
log.Println("created atproto record: ", resp.Uri)
···
log.Println("checking ", domain)
243
-
secret, err := s.db.GetRegistrationKey(domain)
259
+
// Start transaction
260
+
tx, err := s.db.Db.Begin()
262
+
log.Printf("failed to start transaction: %s", err)
263
+
http.Error(w, "Internal server error", http.StatusInternalServerError)
266
+
defer tx.Rollback() // Will rollback if not committed
268
+
secret, err := s.db.GetRegistrationKeyTx(tx, domain)
log.Printf("no key found for domain %s: %s\n", domain, err)
···
288
-
// mark as registered
289
-
err = s.db.Register(domain)
313
+
// mark as registered within transaction
314
+
err = s.db.RegisterTx(tx, domain)
log.Println("failed to register domain", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
296
-
// set permissions for this did as owner
297
-
reg, err := s.db.RegistrationByDomain(domain)
321
+
// set permissions for this did as owner within transaction
322
+
reg, err := s.db.RegistrationByDomainTx(tx, domain)
log.Println("failed to register domain", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
304
-
// add basic acls for this domain
329
+
// add basic acls for this domain within transaction
err = s.enforcer.AddDomain(domain)
log.Println("failed to setup owner of domain", err)
···
312
-
// add this did as owner of this domain
337
+
// add this did as owner of this domain within transaction
err = s.enforcer.AddOwner(domain, reg.ByDid)
log.Println("failed to setup owner of domain", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
345
+
// Commit transaction
346
+
if err := tx.Commit(); err != nil {
347
+
log.Printf("failed to commit transaction: %s", err)
348
+
http.Error(w, "Internal server error", http.StatusInternalServerError)
···
log.Printf("adding %s to %s\n", memberIdent.Handle.String(), domain)
414
-
// announce this relation into the firehose, store into owners' pds
415
-
client, _ := s.auth.AuthorizedClient(r)
416
-
currentUser := s.auth.GetUser(r)
417
-
addedAt := time.Now().Format(time.RFC3339)
418
-
resp, err := comatproto.RepoPutRecord(r.Context(), client, &comatproto.RepoPutRecord_Input{
419
-
Collection: tangled.KnotMemberNSID,
420
-
Repo: currentUser.Did,
422
-
Record: &lexutil.LexiconTypeDecoder{
423
-
Val: &tangled.KnotMember{
424
-
Member: memberIdent.DID.String(),
446
+
// Start transaction
447
+
tx, err := s.db.Db.Begin()
431
-
log.Printf("failed to create record: %s", err)
449
+
log.Printf("failed to start transaction: %s", err)
450
+
http.Error(w, "Internal server error", http.StatusInternalServerError)
434
-
log.Println("created atproto record: ", resp.Uri)
453
+
defer tx.Rollback() // Will rollback if not committed
436
-
secret, err := s.db.GetRegistrationKey(domain)
455
+
// Get registration key within transaction
456
+
secret, err := s.db.GetRegistrationKeyTx(tx, domain)
log.Printf("no key found for domain %s: %s\n", domain, err)
462
+
// Make the external call to the knot server
ksClient, err := NewSignedClient(domain, secret)
log.Println("failed to create client to ", domain)
···
ksResp, err := ksClient.AddMember(memberIdent.DID.String(), []string{})
450
-
log.Printf("failet to make request to %s: %s", domain, err)
471
+
log.Printf("failed to make request to %s: %s", domain, err)
if ksResp.StatusCode != http.StatusNoContent {
···
480
+
// Create ATProto record within transaction
481
+
client, _ := s.auth.AuthorizedClient(r)
482
+
currentUser := s.auth.GetUser(r)
483
+
addedAt := time.Now().Format(time.RFC3339)
484
+
resp, err := comatproto.RepoPutRecord(r.Context(), client, &comatproto.RepoPutRecord_Input{
485
+
Collection: tangled.KnotMemberNSID,
486
+
Repo: currentUser.Did,
488
+
Record: &lexutil.LexiconTypeDecoder{
489
+
Val: &tangled.KnotMember{
490
+
Member: memberIdent.DID.String(),
496
+
log.Printf("failed to create record: %s", err)
500
+
// Update RBAC within transaction
err = s.enforcer.AddMember(domain, memberIdent.DID.String())
w.Write([]byte(fmt.Sprint("failed to add member: ", err)))
507
+
// If everything succeeded, commit the transaction
508
+
if err := tx.Commit(); err != nil {
509
+
log.Printf("failed to commit transaction: %s", err)
510
+
http.Error(w, "Internal server error", http.StatusInternalServerError)
514
+
log.Println("created atproto record: ", resp.Uri)
w.Write([]byte(fmt.Sprint("added member: ", memberIdent.Handle.String())))
···
497
-
secret, err := s.db.GetRegistrationKey(domain)
548
+
// Start transaction
549
+
tx, err := s.db.Db.Begin()
551
+
log.Printf("failed to start transaction: %s", err)
552
+
http.Error(w, "Internal server error", http.StatusInternalServerError)
555
+
defer tx.Rollback() // Will rollback if not committed
557
+
secret, err := s.db.GetRegistrationKeyTx(tx, domain)
log.Printf("no key found for domain %s: %s\n", domain, err)
···
client, err := NewSignedClient(domain, secret)
log.Println("failed to create client to ", domain)
resp, err := client.NewRepo(user.Did, repoName)
···
579
+
// add to local db within transaction
524
-
err = s.db.AddRepo(repo)
585
+
err = s.db.AddRepoTx(tx, repo)
log.Println("failed to add repo to db", err)
591
+
// acls within transaction
err = s.enforcer.AddRepo(user.Did, domain, filepath.Join(user.Did, repoName))
log.Println("failed to set up acls", err)
598
+
// Commit transaction
599
+
if err := tx.Commit(); err != nil {
600
+
log.Printf("failed to commit transaction: %s", err)
601
+
http.Error(w, "Internal server error", http.StatusInternalServerError)