···
1206
+
func (rp *Repo) SubscribeLabel(w http.ResponseWriter, r *http.Request) {
1207
+
user := rp.oauth.GetUser(r)
1208
+
l := rp.logger.With("handler", "DeleteLabel")
1209
+
l = l.With("did", user.Did)
1210
+
l = l.With("handle", user.Handle)
1212
+
f, err := rp.repoResolver.Resolve(r)
1214
+
l.Error("failed to get repo and knot", "err", err)
1218
+
errorId := "label-operation"
1219
+
fail := func(msg string, err error) {
1220
+
l.Error(msg, "err", err)
1221
+
rp.pages.Notice(w, errorId, msg)
1224
+
labelAt := r.FormValue("label")
1225
+
_, err = db.GetLabelDefinition(rp.db, db.FilterEq("at_uri", labelAt))
1227
+
fail("Failed to subscribe to label.", err)
1232
+
newRepo.Labels = append(newRepo.Labels, labelAt)
1233
+
repoRecord := newRepo.AsRecord()
1235
+
client, err := rp.oauth.AuthorizedClient(r)
1237
+
fail(err.Error(), err)
1241
+
ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, f.Repo.Did, f.Repo.Rkey)
1243
+
fail("Failed to update labels, no record found on PDS.", err)
1246
+
_, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
1247
+
Collection: tangled.RepoNSID,
1248
+
Repo: newRepo.Did,
1249
+
Rkey: newRepo.Rkey,
1250
+
SwapRecord: ex.Cid,
1251
+
Record: &lexutil.LexiconTypeDecoder{
1256
+
err = db.SubscribeLabel(rp.db, &db.RepoLabel{
1257
+
RepoAt: f.RepoAt(),
1258
+
LabelAt: syntax.ATURI(labelAt),
1261
+
fail("Failed to subscribe to label.", err)
1265
+
// everything succeeded
1266
+
rp.pages.HxRefresh(w)
1269
+
func (rp *Repo) UnsubscribeLabel(w http.ResponseWriter, r *http.Request) {
1270
+
user := rp.oauth.GetUser(r)
1271
+
l := rp.logger.With("handler", "DeleteLabel")
1272
+
l = l.With("did", user.Did)
1273
+
l = l.With("handle", user.Handle)
1275
+
f, err := rp.repoResolver.Resolve(r)
1277
+
l.Error("failed to get repo and knot", "err", err)
1281
+
errorId := "label-operation"
1282
+
fail := func(msg string, err error) {
1283
+
l.Error(msg, "err", err)
1284
+
rp.pages.Notice(w, errorId, msg)
1287
+
labelAt := r.FormValue("label")
1288
+
_, err = db.GetLabelDefinition(rp.db, db.FilterEq("at_uri", labelAt))
1290
+
fail("Failed to unsubscribe to label.", err)
1294
+
// update repo record to remove the label reference
1296
+
var updated []string
1297
+
for _, l := range newRepo.Labels {
1299
+
updated = append(updated, l)
1302
+
newRepo.Labels = updated
1303
+
repoRecord := newRepo.AsRecord()
1305
+
client, err := rp.oauth.AuthorizedClient(r)
1307
+
fail(err.Error(), err)
1311
+
ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, f.Repo.Did, f.Repo.Rkey)
1313
+
fail("Failed to update labels, no record found on PDS.", err)
1316
+
_, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
1317
+
Collection: tangled.RepoNSID,
1318
+
Repo: newRepo.Did,
1319
+
Rkey: newRepo.Rkey,
1320
+
SwapRecord: ex.Cid,
1321
+
Record: &lexutil.LexiconTypeDecoder{
1326
+
err = db.UnsubscribeLabel(
1328
+
db.FilterEq("repo_at", f.RepoAt()),
1329
+
db.FilterEq("label_at", labelAt),
1332
+
fail("Failed to unsubscribe label.", err)
1336
+
// everything succeeded
1337
+
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")