tavern/web/handler_api_v1.go

80 lines
2.3 KiB
Go

package web
import (
"fmt"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/ngerakines/tavern/g"
"github.com/ngerakines/tavern/storage"
)
func (h handler) apiV1Instance(c *gin.Context) {
user, err := h.storage.GetUserByName(c.Request.Context(), h.adminUser)
if err != nil {
h.hardFail(c, err)
return
}
followers, err := h.storage.RowCount(c.Request.Context(), `SELECT COUNT(*) FROM followers WHERE user_id = $1`, user.ID)
if err != nil {
h.hardFail(c, err)
return
}
following, err := h.storage.RowCount(c.Request.Context(), `SELECT COUNT(*) FROM following WHERE user_id = $1`, user.ID)
if err != nil {
h.hardFail(c, err)
return
}
users, err := h.storage.RowCount(c.Request.Context(), `SELECT COUNT(*) FROM users`)
if err != nil {
h.hardFail(c, err)
return
}
c.JSON(http.StatusOK, map[string]interface{}{
"uri": h.domain,
"title": "Tavern",
"short_description": "An ActivityPub server.",
"description": "An ActivityPub server.",
"email": fmt.Sprintf("admin@%s", h.domain),
"version": g.Version(),
"urls": map[string]interface{}{},
"stats": map[string]interface{}{
"user_count": users,
"status_count": 0,
"domain_count": 0,
},
"thumbnail": fmt.Sprintf("https://%s/public/server_thumbnail.png", h.domain),
"languages": []string{"en"},
"registrations": false,
"approval_required": true,
"contact_account": map[string]interface{}{
"id": user.ID.String(),
"username": user.Name,
"acct": user.Name,
"display_name": user.DisplayName,
"locked": false,
"bot": false,
"discoverable": true,
"group": false,
"created_at": user.CreatedAt,
"note": user.About,
"url": storage.NewActorID(user.Name, h.domain),
"avatar": fmt.Sprintf("https://%s/avatars/%s", h.domain, user.Name),
"avatar_static": fmt.Sprintf("https://%s/avatars/%s", h.domain, user.Name),
"followers_count": followers,
"following_count": following,
"statuses_count": 0,
"last_status_at": time.Now().Format("2006-01-02"),
"fields": []string{},
},
})
}
func (h handler) apiV1InstancePeers(c *gin.Context) {
c.JSON(http.StatusOK, []string{
"mastodon.social",
})
}