package handlers import ( "net/http" "github.com/gin-gonic/gin" "github.com/synctv-org/synctv/internal/db" dbModel "github.com/synctv-org/synctv/internal/model" "github.com/synctv-org/synctv/internal/op" "github.com/synctv-org/synctv/server/model" ) func Admins(ctx *gin.Context) { // user := ctx.MustGet("user").(*op.User) u := db.GetAdmins() us := make([]model.UserInfoResp, len(u)) for i, v := range u { us[i] = model.UserInfoResp{ ID: v.ID, Username: v.Username, Role: v.Role, CreatedAt: v.CreatedAt.UnixMilli(), } } ctx.JSON(http.StatusOK, model.NewApiDataResp(us)) } func AddAdmin(ctx *gin.Context) { user := ctx.MustGet("user").(*op.User) req := model.IdReq{} if err := model.Decode(ctx, &req); err != nil { ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err)) return } if req.Id == user.ID { ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("cannot add yourself")) return } u, err := op.GetUserById(req.Id) if err != nil { ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorStringResp("user not found")) return } if u.Role >= dbModel.RoleAdmin { ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("user is already admin")) return } if err := u.SetRole(dbModel.RoleAdmin); err != nil { ctx.AbortWithError(http.StatusInternalServerError, err) return } ctx.Status(http.StatusNoContent) } func DeleteAdmin(ctx *gin.Context) { user := ctx.MustGet("user").(*op.User) req := model.IdReq{} if err := model.Decode(ctx, &req); err != nil { ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err)) return } if req.Id == user.ID { ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("cannot remove yourself")) return } u, err := op.GetUserById(req.Id) if err != nil { ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorStringResp("user not found")) return } if u.Role == dbModel.RoleRoot { ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp("cannot remove root")) return } if err := u.SetRole(dbModel.RoleUser); err != nil { ctx.AbortWithError(http.StatusInternalServerError, err) return } ctx.Status(http.StatusNoContent) }