···
1230
+
func (rp *Repo) SubscribeLabel(w http.ResponseWriter, r *http.Request) {
1231
+
user := rp.oauth.GetUser(r)
1232
+
l := rp.logger.With("handler", "DeleteLabel")
1233
+
l = l.With("did", user.Did)
1234
+
l = l.With("handle", user.Handle)
1236
+
f, err := rp.repoResolver.Resolve(r)
1238
+
l.Error("failed to get repo and knot", "err", err)
1242
+
errorId := "label-operation"
1243
+
fail := func(msg string, err error) {
1244
+
l.Error(msg, "err", err)
1245
+
rp.pages.Notice(w, errorId, msg)
1248
+
labelAt := r.FormValue("label")
1249
+
_, err = db.GetLabelDefinition(rp.db, db.FilterEq("at_uri", labelAt))
1251
+
fail("Failed to subscribe to label.", err)
1256
+
newRepo.Labels = append(newRepo.Labels, labelAt)
1257
+
repoRecord := newRepo.AsRecord()
1259
+
client, err := rp.oauth.AuthorizedClient(r)
1261
+
fail(err.Error(), err)
1265
+
ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, f.Repo.Did, f.Repo.Rkey)
1267
+
fail("Failed to update labels, no record found on PDS.", err)
1270
+
_, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
1271
+
Collection: tangled.RepoNSID,
1272
+
Repo: newRepo.Did,
1273
+
Rkey: newRepo.Rkey,
1274
+
SwapRecord: ex.Cid,
1275
+
Record: &lexutil.LexiconTypeDecoder{
1280
+
err = db.SubscribeLabel(rp.db, &db.RepoLabel{
1281
+
RepoAt: f.RepoAt(),
1282
+
LabelAt: syntax.ATURI(labelAt),
1285
+
fail("Failed to subscribe to label.", err)
1289
+
// everything succeeded
1290
+
rp.pages.HxRefresh(w)
1293
+
func (rp *Repo) UnsubscribeLabel(w http.ResponseWriter, r *http.Request) {
1294
+
user := rp.oauth.GetUser(r)
1295
+
l := rp.logger.With("handler", "DeleteLabel")
1296
+
l = l.With("did", user.Did)
1297
+
l = l.With("handle", user.Handle)
1299
+
f, err := rp.repoResolver.Resolve(r)
1301
+
l.Error("failed to get repo and knot", "err", err)
1305
+
errorId := "label-operation"
1306
+
fail := func(msg string, err error) {
1307
+
l.Error(msg, "err", err)
1308
+
rp.pages.Notice(w, errorId, msg)
1311
+
labelAt := r.FormValue("label")
1312
+
_, err = db.GetLabelDefinition(rp.db, db.FilterEq("at_uri", labelAt))
1314
+
fail("Failed to unsubscribe to label.", err)
1318
+
// update repo record to remove the label reference
1320
+
var updated []string
1321
+
for _, l := range newRepo.Labels {
1323
+
updated = append(updated, l)
1326
+
newRepo.Labels = updated
1327
+
repoRecord := newRepo.AsRecord()
1329
+
client, err := rp.oauth.AuthorizedClient(r)
1331
+
fail(err.Error(), err)
1335
+
ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, f.Repo.Did, f.Repo.Rkey)
1337
+
fail("Failed to update labels, no record found on PDS.", err)
1340
+
_, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
1341
+
Collection: tangled.RepoNSID,
1342
+
Repo: newRepo.Did,
1343
+
Rkey: newRepo.Rkey,
1344
+
SwapRecord: ex.Cid,
1345
+
Record: &lexutil.LexiconTypeDecoder{
1350
+
err = db.UnsubscribeLabel(
1352
+
db.FilterEq("repo_at", f.RepoAt()),
1353
+
db.FilterEq("label_at", labelAt),
1356
+
fail("Failed to unsubscribe label.", err)
1360
+
// everything succeeded
1361
+
rp.pages.HxRefresh(w)
func (rp *Repo) AddCollaborator(w http.ResponseWriter, r *http.Request) {
user := rp.oauth.GetUser(r)
l := rp.logger.With("handler", "AddCollaborator")