mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-12-22 09:00:10 +00:00
Harvey Tindall
a97bccc88f
added in the same way as ombi profiles. Most code is copy-pasted and adjusted from ombi (especially on web), so maybe this can be merged in the future. Also, profile names are url-escaped like announcement template names were not too long ago. API client has "LogRequestBodies" option which just dumps the request body when enabled (useful for recreating reqs in the jellyseerr swagger UI). User.Name() helper returns a name from all three possible values in the struct.
101 lines
3.0 KiB
Go
101 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"net/url"
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// @Summary Get a list of Jellyseerr users.
|
|
// @Produce json
|
|
// @Success 200 {object} ombiUsersDTO
|
|
// @Failure 500 {object} stringResponse
|
|
// @Router /jellyseerr/users [get]
|
|
// @Security Bearer
|
|
// @tags Jellyseerr
|
|
func (app *appContext) JellyseerrUsers(gc *gin.Context) {
|
|
app.debug.Println("Jellyseerr users requested")
|
|
users, err := app.js.GetUsers()
|
|
if err != nil {
|
|
app.err.Printf("Failed to get users from Jellyseerr: %v", err)
|
|
respond(500, "Couldn't get users", gc)
|
|
return
|
|
}
|
|
app.debug.Printf("Jellyseerr users retrieved: %d", len(users))
|
|
userlist := make([]ombiUser, len(users))
|
|
i := 0
|
|
for _, u := range users {
|
|
userlist[i] = ombiUser{
|
|
Name: u.Name(),
|
|
ID: strconv.FormatInt(u.ID, 10),
|
|
}
|
|
i++
|
|
}
|
|
gc.JSON(200, ombiUsersDTO{Users: userlist})
|
|
}
|
|
|
|
// @Summary Store Jellyseerr user template in an existing profile.
|
|
// @Produce json
|
|
// @Param id path string true "Jellyseerr ID of user to source from"
|
|
// @Param profile path string true "Name of profile to store in"
|
|
// @Success 200 {object} boolResponse
|
|
// @Failure 400 {object} boolResponse
|
|
// @Failure 500 {object} stringResponse
|
|
// @Router /profiles/jellyseerr/{profile}/{id} [post]
|
|
// @Security Bearer
|
|
// @tags Jellyseerr
|
|
func (app *appContext) SetJellyseerrProfile(gc *gin.Context) {
|
|
jellyseerrID, err := strconv.ParseInt(gc.Param("id"), 10, 64)
|
|
if err != nil {
|
|
respondBool(400, false, gc)
|
|
return
|
|
}
|
|
escapedProfileName := gc.Param("profile")
|
|
profileName, _ := url.QueryUnescape(escapedProfileName)
|
|
profile, ok := app.storage.GetProfileKey(profileName)
|
|
if !ok {
|
|
respondBool(400, false, gc)
|
|
return
|
|
}
|
|
u, err := app.js.UserByID(jellyseerrID)
|
|
if err != nil {
|
|
app.err.Printf("Couldn't get user from Jellyseerr: %v", err)
|
|
respond(500, "Couldn't get user", gc)
|
|
return
|
|
}
|
|
profile.Jellyseerr.User = u.UserTemplate
|
|
n, err := app.js.GetNotificationPreferencesByID(jellyseerrID)
|
|
if err != nil {
|
|
app.err.Printf("Couldn't get user's notification prefs from Jellyseerr: %v", err)
|
|
respond(500, "Couldn't get user notification prefs", gc)
|
|
return
|
|
}
|
|
profile.Jellyseerr.Notifications = n.NotificationsTemplate
|
|
profile.Jellyseerr.Enabled = true
|
|
app.storage.SetProfileKey(profileName, profile)
|
|
respondBool(204, true, gc)
|
|
}
|
|
|
|
// @Summary Remove jellyseerr user template from a profile.
|
|
// @Produce json
|
|
// @Param profile path string true "Name of profile to store in"
|
|
// @Success 200 {object} boolResponse
|
|
// @Failure 400 {object} boolResponse
|
|
// @Failure 500 {object} stringResponse
|
|
// @Router /profiles/jellyseerr/{profile} [delete]
|
|
// @Security Bearer
|
|
// @tags Jellyseerr
|
|
func (app *appContext) DeleteJellyseerrProfile(gc *gin.Context) {
|
|
escapedProfileName := gc.Param("profile")
|
|
profileName, _ := url.QueryUnescape(escapedProfileName)
|
|
profile, ok := app.storage.GetProfileKey(profileName)
|
|
if !ok {
|
|
respondBool(400, false, gc)
|
|
return
|
|
}
|
|
profile.Jellyseerr.Enabled = false
|
|
app.storage.SetProfileKey(profileName, profile)
|
|
respondBool(204, true, gc)
|
|
}
|