mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-11-09 20:00:12 +00:00
Harvey Tindall
f348262f88
.go files done in alphabetical order. Some refactoring done to checkInvite(s) so they share most code. Also removed some useless debug lines.
153 lines
4.3 KiB
Go
153 lines
4.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
lm "github.com/hrfee/jfa-go/logmessages"
|
|
"github.com/hrfee/mediabrowser"
|
|
)
|
|
|
|
func (app *appContext) getOmbiUser(jfID string) (map[string]interface{}, int, error) {
|
|
ombiUsers, code, err := app.ombi.GetUsers()
|
|
if err != nil || code != 200 {
|
|
return nil, code, err
|
|
}
|
|
jfUser, code, err := app.jf.UserByID(jfID, false)
|
|
if err != nil || code != 200 {
|
|
return nil, code, err
|
|
}
|
|
username := jfUser.Name
|
|
email := ""
|
|
if e, ok := app.storage.GetEmailsKey(jfID); ok {
|
|
email = e.Addr
|
|
}
|
|
for _, ombiUser := range ombiUsers {
|
|
ombiAddr := ""
|
|
if a, ok := ombiUser["emailAddress"]; ok && a != nil {
|
|
ombiAddr = a.(string)
|
|
}
|
|
if ombiUser["userName"].(string) == username || (ombiAddr == email && email != "") {
|
|
return ombiUser, code, err
|
|
}
|
|
}
|
|
return nil, 400, fmt.Errorf("couldn't find user")
|
|
}
|
|
|
|
// Returns a user with the given name who has been imported from Jellyfin/Emby by Ombi
|
|
func (app *appContext) getOmbiImportedUser(name string) (map[string]interface{}, int, error) {
|
|
// Ombi User Types: 3/4 = Emby, 5 = Jellyfin
|
|
ombiUsers, code, err := app.ombi.GetUsers()
|
|
if err != nil || code != 200 {
|
|
return nil, code, err
|
|
}
|
|
for _, ombiUser := range ombiUsers {
|
|
if ombiUser["userName"].(string) == name {
|
|
uType, ok := ombiUser["userType"].(int)
|
|
if !ok { // Don't know if Ombi somehow allows duplicate usernames
|
|
continue
|
|
}
|
|
if serverType == mediabrowser.JellyfinServer && uType != 5 { // Jellyfin
|
|
continue
|
|
} else if uType != 3 && uType != 4 { // Emby
|
|
continue
|
|
}
|
|
return ombiUser, code, err
|
|
}
|
|
}
|
|
return nil, 400, fmt.Errorf("couldn't find user")
|
|
}
|
|
|
|
// @Summary Get a list of Ombi users.
|
|
// @Produce json
|
|
// @Success 200 {object} ombiUsersDTO
|
|
// @Failure 500 {object} stringResponse
|
|
// @Router /ombi/users [get]
|
|
// @Security Bearer
|
|
// @tags Ombi
|
|
func (app *appContext) OmbiUsers(gc *gin.Context) {
|
|
users, status, err := app.ombi.GetUsers()
|
|
if err != nil || status != 200 {
|
|
app.err.Printf(lm.FailedGetUsers, lm.Ombi, err)
|
|
respond(500, "Couldn't get users", gc)
|
|
return
|
|
}
|
|
userlist := make([]ombiUser, len(users))
|
|
for i, data := range users {
|
|
userlist[i] = ombiUser{
|
|
Name: data["userName"].(string),
|
|
ID: data["id"].(string),
|
|
}
|
|
}
|
|
gc.JSON(200, ombiUsersDTO{Users: userlist})
|
|
}
|
|
|
|
// @Summary Store Ombi user template in an existing profile.
|
|
// @Produce json
|
|
// @Param ombiUser body ombiUser true "User to source settings 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/ombi/{profile} [post]
|
|
// @Security Bearer
|
|
// @tags Ombi
|
|
func (app *appContext) SetOmbiProfile(gc *gin.Context) {
|
|
var req ombiUser
|
|
gc.BindJSON(&req)
|
|
escapedProfileName := gc.Param("profile")
|
|
profileName, _ := url.QueryUnescape(escapedProfileName)
|
|
profile, ok := app.storage.GetProfileKey(profileName)
|
|
if !ok {
|
|
respondBool(400, false, gc)
|
|
return
|
|
}
|
|
template, code, err := app.ombi.TemplateByID(req.ID)
|
|
if err != nil || code != 200 || len(template) == 0 {
|
|
app.err.Printf(lm.FailedGetUsers, lm.Ombi, err)
|
|
respond(500, "Couldn't get user", gc)
|
|
return
|
|
}
|
|
profile.Ombi = template
|
|
app.storage.SetProfileKey(profileName, profile)
|
|
respondBool(204, true, gc)
|
|
}
|
|
|
|
// @Summary Remove ombi 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/ombi/{profile} [delete]
|
|
// @Security Bearer
|
|
// @tags Ombi
|
|
func (app *appContext) DeleteOmbiProfile(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.Ombi = nil
|
|
app.storage.SetProfileKey(profileName, profile)
|
|
respondBool(204, true, gc)
|
|
}
|
|
|
|
func (app *appContext) applyOmbiProfile(user map[string]interface{}, profile map[string]interface{}) (status int, err error) {
|
|
for k, v := range profile {
|
|
switch v.(type) {
|
|
case map[string]interface{}, []interface{}:
|
|
user[k] = v
|
|
default:
|
|
if v != user[k] {
|
|
user[k] = v
|
|
}
|
|
}
|
|
}
|
|
status, err = app.ombi.ModifyUser(user)
|
|
return
|
|
}
|