audon/user.go

104 wiersze
2.9 KiB
Go

package main
import (
"context"
"net/http"
"time"
"github.com/labstack/echo/v4"
mastodon "github.com/mattn/go-mastodon"
"go.mongodb.org/mongo-driver/bson"
)
type MastodonAccount struct {
ID mastodon.ID `json:"id"`
Username string `json:"username"`
Acct string `json:"acct"`
DisplayName string `json:"displayName"`
Locked bool `json:"locked"`
CreatedAt time.Time `json:"createdAt"`
FollowersCount int64 `json:"followersCount"`
FollowingCount int64 `json:"followingCount"`
StatusesCount int64 `json:"statusesCount"`
Note string `json:"note"`
URL string `json:"url"`
Avatar string `json:"avatar"`
AvatarStatic string `json:"avatarStatic"`
Header string `json:"header"`
HeaderStatic string `json:"headerStatic"`
Emojis []mastodon.Emoji `json:"emojis"`
Moved *MastodonAccount `json:"moved"`
Fields []mastodon.Field `json:"fields"`
Bot bool `json:"bot"`
Discoverable bool `json:"discoverable"`
Source *mastodon.AccountSource `json:"source"`
}
func getUserHandler(c echo.Context) error {
audonID := c.Param("id")
if err := mainValidator.Var(&audonID, "required,printascii"); err != nil {
return wrapValidationError(err)
}
user, err := findUserByID(c.Request().Context(), audonID)
if err != nil {
return ErrUserNotFound
}
return c.JSON(http.StatusOK, user)
}
func getStatusHandler(c echo.Context) error {
u := c.Get("user").(*AudonUser)
ids, err := u.GetCurrentRoomIDs(c.Request().Context())
if err != nil {
c.Logger().Error(err)
return echo.NewHTTPError(http.StatusInternalServerError)
}
return c.JSON(http.StatusOK, ids)
}
func (a *AudonUser) Equal(u *AudonUser) bool {
if a == nil {
return false
}
return a.AudonID == u.AudonID || (a.RemoteID == u.RemoteID && a.RemoteURL == u.RemoteURL)
}
func (a *AudonUser) InLivekit(ctx context.Context) (bool, error) {
rooms, err := a.GetCurrentLivekitRooms(ctx)
if err != nil {
return false, err
}
return len(rooms) > 0, nil
}
func (a *AudonUser) ClearUserAvatar(ctx context.Context) error {
coll := mainDB.Collection(COLLECTION_USER)
_, err := coll.UpdateOne(ctx,
bson.D{{Key: "audon_id", Value: a.AudonID}},
bson.D{
{Key: "$set", Value: bson.D{{Key: "avatar", Value: ""}}},
})
// if err == nil {
// os.Remove(a.getAvatarImagePath(a.AvatarFile))
// }
return err
}
func (a *AudonUser) GetCurrentRoomIDs(ctx context.Context) ([]string, error) {
rooms, err := a.GetCurrentLivekitRooms(ctx)
if err != nil {
return nil, err
}
roomIDs := make([]string, len(rooms))
for i, r := range rooms {
roomIDs[i] = r.GetName()
}
return roomIDs, nil
}