tinyrelayfile
tinyrelay/tinyclient/webmcp.go/

tinyclient/webmcp.go raw
1package tinyclient
2
3import (
4 _ "embed"
5 "encoding/json"
6 "fmt"
7 "net/http"
8)
9
10//go:embed webmcp.js
11var webMCPJavaScript string
12
13func (a *App) webMCP(writer http.ResponseWriter, request *http.Request) {
14 writer.Header().Set("content-type", "application/javascript; charset=utf-8")
15 writer.Header().Set("cache-control", "no-store")
16 _, _ = writer.Write([]byte(webMCPJavaScript))
17}
18
19func (a *App) webMCPQuery(writer http.ResponseWriter, request *http.Request) {
20 writer.Header().Set("cache-control", "no-store, private")
21 method := request.URL.Query().Get("method")
22 var params []json.RawMessage
23 if raw := request.URL.Query().Get("params"); raw != "" {
24 if err := json.Unmarshal([]byte(raw), &params); err != nil {
25 writeJSON(writer, http.StatusBadRequest, map[string]string{"error": "invalid WebMCP query"})
26 return
27 }
28 }
29 allowed := map[string]bool{"browserepos": true, "browserepo": true, "browsefiles": true, "browsefile": true, "browsestatus": true, "browseissues": true, "browsepulls": true, "browseissue": true, "browsepull": true, "browsewiki": true, "browsewikipage": true, "browsewikimerge": true, "browserooms": true, "browseroom": true, "browsethread": true, "browseagent": true, "browseprofile": true, "browseapprovals": true, "browseapproval": true, "browsejobs": true, "browsejob": true}
30 if !allowed[method] {
31 writeJSON(writer, http.StatusBadRequest, map[string]string{"error": "unsupported WebMCP query"})
32 return
33 }
34 actor, err := a.resolveActor(request)
35 if err != nil {
36 writeJSON(writer, http.StatusUnauthorized, map[string]string{"error": "authentication required"})
37 return
38 }
39 result, err := a.backend.Query(request.Context(), method, params, actor)
40 if err != nil {
41 writeJSON(writer, http.StatusForbidden, map[string]string{"error": fmt.Sprint(err)})
42 return
43 }
44 writeJSON(writer, http.StatusOK, result)
45}
46
47var _ http.Handler = (*App)(nil)

About

ownerc01503e8035f
visibilitypublic
headd730679639bf

Maintainers

  • c01503e8035f owner
  • ba1b5beed5b5 agent hermes

Clone

  • https://012.run/npub1cq2s86qrtadf36eqq3epm38wmhdynrrcwxf84eldk3f94dkv7ttsrulrz5/tinyrelay.git

Refs