···
// HandleBlock blocks a community
-
// POST /xrpc/social.coves.community.block
-
// Body: { "community": "did:plc:xxx" or "!gaming@coves.social" }
func (h *BlockHandler) HandleBlock(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
···
-
Community string `json:"community"` // DID or handle
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
···
-
// Validate format (DID or handle) with proper regex patterns
-
if strings.HasPrefix(req.Community, "did:") {
-
// Validate DID format: did:method:identifier
-
// atProto supports did:plc and did:web
-
didRegex := regexp.MustCompile(`^did:(plc|web):[a-zA-Z0-9._:%-]+$`)
-
if !didRegex.MatchString(req.Community) {
-
writeError(w, http.StatusBadRequest, "InvalidRequest", "invalid DID format")
-
} else if strings.HasPrefix(req.Community, "!") {
-
// Validate handle format: !name@domain.tld
-
if !strings.Contains(req.Community, "@") {
-
writeError(w, http.StatusBadRequest, "InvalidRequest", "handle must contain @domain")
writeError(w, http.StatusBadRequest, "InvalidRequest",
-
"community must be a DID (did:plc:...) or handle (!name@instance.com)")
···
// HandleUnblock unblocks a community
-
// POST /xrpc/social.coves.community.unblock
-
// Body: { "community": "did:plc:xxx" or "!gaming@coves.social" }
func (h *BlockHandler) HandleUnblock(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
···
-
Community string `json:"community"`
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
···
-
// Validate format (DID or handle) with proper regex patterns
-
if strings.HasPrefix(req.Community, "did:") {
-
// Validate DID format: did:method:identifier
-
didRegex := regexp.MustCompile(`^did:(plc|web):[a-zA-Z0-9._:%-]+$`)
-
if !didRegex.MatchString(req.Community) {
-
writeError(w, http.StatusBadRequest, "InvalidRequest", "invalid DID format")
-
} else if strings.HasPrefix(req.Community, "!") {
-
// Validate handle format: !name@domain.tld
-
if !strings.Contains(req.Community, "@") {
-
writeError(w, http.StatusBadRequest, "InvalidRequest", "handle must contain @domain")
writeError(w, http.StatusBadRequest, "InvalidRequest",
-
"community must be a DID (did:plc:...) or handle (!name@instance.com)")