|
|
|
package main
|
|
|
|
|
|
|
|
import "github.com/gin-gonic/gin"
|
|
|
|
|
|
|
|
// @Summary Returns the logged-in user's Jellyfin ID & Username.
|
|
|
|
// @Produce json
|
|
|
|
// @Success 200 {object} MyDetailsDTO
|
|
|
|
// @Router /my/details [get]
|
|
|
|
// @tags User Page
|
|
|
|
func (app *appContext) MyDetails(gc *gin.Context) {
|
|
|
|
resp := MyDetailsDTO{
|
|
|
|
Id: gc.GetString("jfId"),
|
|
|
|
}
|
|
|
|
|
|
|
|
user, status, err := app.jf.UserByID(resp.Id, false)
|
|
|
|
if status != 200 || err != nil {
|
|
|
|
app.err.Printf("Failed to get Jellyfin user (%d): %+v\n", status, err)
|
|
|
|
respond(500, "Failed to get user", gc)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
resp.Username = user.Name
|
|
|
|
resp.Admin = user.Policy.IsAdministrator
|
|
|
|
resp.Disabled = user.Policy.IsDisabled
|
|
|
|
|
|
|
|
if exp, ok := app.storage.users[user.ID]; ok {
|
|
|
|
resp.Expiry = exp.Unix()
|
|
|
|
}
|
|
|
|
|
|
|
|
app.storage.loadEmails()
|
|
|
|
app.storage.loadDiscordUsers()
|
|
|
|
app.storage.loadMatrixUsers()
|
|
|
|
app.storage.loadTelegramUsers()
|
|
|
|
|
|
|
|
if emailEnabled {
|
|
|
|
resp.Email = &MyDetailsContactMethodsDTO{}
|
|
|
|
if email, ok := app.storage.emails[user.ID]; ok && email.Addr != "" {
|
|
|
|
resp.Email.Value = email.Addr
|
|
|
|
resp.Email.Enabled = email.Contact
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if discordEnabled {
|
|
|
|
resp.Discord = &MyDetailsContactMethodsDTO{}
|
|
|
|
if discord, ok := app.storage.discord[user.ID]; ok {
|
|
|
|
resp.Discord.Value = RenderDiscordUsername(discord)
|
|
|
|
resp.Discord.Enabled = discord.Contact
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if telegramEnabled {
|
|
|
|
resp.Telegram = &MyDetailsContactMethodsDTO{}
|
|
|
|
if telegram, ok := app.storage.telegram[user.ID]; ok {
|
|
|
|
resp.Telegram.Value = telegram.Username
|
|
|
|
resp.Telegram.Enabled = telegram.Contact
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if matrixEnabled {
|
|
|
|
resp.Matrix = &MyDetailsContactMethodsDTO{}
|
|
|
|
if matrix, ok := app.storage.matrix[user.ID]; ok {
|
|
|
|
resp.Matrix.Value = matrix.UserID
|
|
|
|
resp.Matrix.Enabled = matrix.Contact
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
gc.JSON(200, resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Summary Sets whether to notify yourself through telegram/discord/matrix/email or not.
|
|
|
|
// @Produce json
|
|
|
|
// @Param SetContactMethodsDTO body SetContactMethodsDTO true "User's Jellyfin ID and whether or not to notify then through Telegram."
|
|
|
|
// @Success 200 {object} boolResponse
|
|
|
|
// @Success 400 {object} boolResponse
|
|
|
|
// @Success 500 {object} boolResponse
|
|
|
|
// @Router /my/contact [post]
|
|
|
|
// @Security Bearer
|
|
|
|
// @tags User Page
|
|
|
|
func (app *appContext) SetMyContactMethods(gc *gin.Context) {
|
|
|
|
var req SetContactMethodsDTO
|
|
|
|
gc.BindJSON(&req)
|
|
|
|
req.ID = gc.GetString("jfId")
|
|
|
|
if req.ID == "" {
|
|
|
|
respondBool(400, false, gc)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
app.setContactMethods(req, gc)
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Summary Logout by deleting refresh token from cookies.
|
|
|
|
// @Produce json
|
|
|
|
// @Success 200 {object} boolResponse
|
|
|
|
// @Failure 500 {object} stringResponse
|
|
|
|
// @Router /my/logout [post]
|
|
|
|
// @Security Bearer
|
|
|
|
// @tags User Page
|
|
|
|
func (app *appContext) LogoutUser(gc *gin.Context) {
|
|
|
|
cookie, err := gc.Cookie("user-refresh")
|
|
|
|
if err != nil {
|
|
|
|
app.debug.Printf("Couldn't get cookies: %s", err)
|
|
|
|
respond(500, "Couldn't fetch cookies", gc)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
app.invalidTokens = append(app.invalidTokens, cookie)
|
|
|
|
gc.SetCookie("refresh", "invalid", -1, "/my", gc.Request.URL.Hostname(), true, true)
|
|
|
|
respondBool(200, true, gc)
|
|
|
|
}
|