···
+
func (rp *Repo) SubscribeLabel(w http.ResponseWriter, r *http.Request) {
+
user := rp.oauth.GetUser(r)
+
l := rp.logger.With("handler", "DeleteLabel")
+
l = l.With("did", user.Did)
+
l = l.With("handle", user.Handle)
+
f, err := rp.repoResolver.Resolve(r)
+
l.Error("failed to get repo and knot", "err", err)
+
errorId := "label-operation"
+
fail := func(msg string, err error) {
+
l.Error(msg, "err", err)
+
rp.pages.Notice(w, errorId, msg)
+
labelAt := r.FormValue("label")
+
_, err = db.GetLabelDefinition(rp.db, db.FilterEq("at_uri", labelAt))
+
fail("Failed to subscribe to label.", err)
+
newRepo.Labels = append(newRepo.Labels, labelAt)
+
repoRecord := newRepo.AsRecord()
+
client, err := rp.oauth.AuthorizedClient(r)
+
ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, f.Repo.Did, f.Repo.Rkey)
+
fail("Failed to update labels, no record found on PDS.", err)
+
_, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
+
Collection: tangled.RepoNSID,
+
Record: &lexutil.LexiconTypeDecoder{
+
err = db.SubscribeLabel(rp.db, &db.RepoLabel{
+
LabelAt: syntax.ATURI(labelAt),
+
fail("Failed to subscribe to label.", err)
+
// everything succeeded
+
func (rp *Repo) UnsubscribeLabel(w http.ResponseWriter, r *http.Request) {
+
user := rp.oauth.GetUser(r)
+
l := rp.logger.With("handler", "DeleteLabel")
+
l = l.With("did", user.Did)
+
l = l.With("handle", user.Handle)
+
f, err := rp.repoResolver.Resolve(r)
+
l.Error("failed to get repo and knot", "err", err)
+
errorId := "label-operation"
+
fail := func(msg string, err error) {
+
l.Error(msg, "err", err)
+
rp.pages.Notice(w, errorId, msg)
+
labelAt := r.FormValue("label")
+
_, err = db.GetLabelDefinition(rp.db, db.FilterEq("at_uri", labelAt))
+
fail("Failed to unsubscribe to label.", err)
+
// update repo record to remove the label reference
+
for _, l := range newRepo.Labels {
+
updated = append(updated, l)
+
newRepo.Labels = updated
+
repoRecord := newRepo.AsRecord()
+
client, err := rp.oauth.AuthorizedClient(r)
+
ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, f.Repo.Did, f.Repo.Rkey)
+
fail("Failed to update labels, no record found on PDS.", err)
+
_, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
+
Collection: tangled.RepoNSID,
+
Record: &lexutil.LexiconTypeDecoder{
+
err = db.UnsubscribeLabel(
+
db.FilterEq("repo_at", f.RepoAt()),
+
db.FilterEq("label_at", labelAt),
+
fail("Failed to unsubscribe label.", err)
+
// everything succeeded
func (rp *Repo) AddCollaborator(w http.ResponseWriter, r *http.Request) {
user := rp.oauth.GetUser(r)
l := rp.logger.With("handler", "AddCollaborator")