node build fixed

This commit is contained in:
ra_ma
2025-09-20 14:08:38 +01:00
parent c6ebbe069d
commit 3d298fa434
1516 changed files with 535727 additions and 2 deletions

View File

@@ -0,0 +1,138 @@
package handlers
import (
"context"
"errors"
"seanime/internal/database/models"
"seanime/internal/platforms/anilist_platform"
"seanime/internal/platforms/simulated_platform"
"seanime/internal/util"
"time"
"github.com/goccy/go-json"
"github.com/labstack/echo/v4"
)
// HandleLogin
//
// @summary logs in the user by saving the JWT token in the database.
// @desc This is called when the JWT token is obtained from AniList after logging in with redirection on the client.
// @desc It also fetches the Viewer data from AniList and saves it in the database.
// @desc It creates a new handlers.Status and refreshes App modules.
// @route /api/v1/auth/login [POST]
// @returns handlers.Status
func (h *Handler) HandleLogin(c echo.Context) error {
type body struct {
Token string `json:"token"`
}
var b body
if err := c.Bind(&b); err != nil {
return h.RespondWithError(c, err)
}
// Set a new AniList client by passing to JWT token
h.App.UpdateAnilistClientToken(b.Token)
// Get viewer data from AniList
getViewer, err := h.App.AnilistClient.GetViewer(context.Background())
if err != nil {
h.App.Logger.Error().Msg("Could not authenticate to AniList")
return h.RespondWithError(c, err)
}
if len(getViewer.Viewer.Name) == 0 {
return h.RespondWithError(c, errors.New("could not find user"))
}
// Marshal viewer data
bytes, err := json.Marshal(getViewer.Viewer)
if err != nil {
h.App.Logger.Err(err).Msg("scan: could not save local files")
}
// Save account data in database
_, err = h.App.Database.UpsertAccount(&models.Account{
BaseModel: models.BaseModel{
ID: 1,
UpdatedAt: time.Now(),
},
Username: getViewer.Viewer.Name,
Token: b.Token,
Viewer: bytes,
})
if err != nil {
return h.RespondWithError(c, err)
}
h.App.Logger.Info().Msg("app: Authenticated to AniList")
// Update the platform
anilistPlatform := anilist_platform.NewAnilistPlatform(h.App.AnilistClient, h.App.Logger)
h.App.UpdatePlatform(anilistPlatform)
// Create a new status
status := h.NewStatus(c)
h.App.InitOrRefreshAnilistData()
h.App.InitOrRefreshModules()
go func() {
defer util.HandlePanicThen(func() {})
h.App.InitOrRefreshTorrentstreamSettings()
h.App.InitOrRefreshMediastreamSettings()
h.App.InitOrRefreshDebridSettings()
}()
// Return new status
return h.RespondWithData(c, status)
}
// HandleLogout
//
// @summary logs out the user by removing JWT token from the database.
// @desc It removes JWT token and Viewer data from the database.
// @desc It creates a new handlers.Status and refreshes App modules.
// @route /api/v1/auth/logout [POST]
// @returns handlers.Status
func (h *Handler) HandleLogout(c echo.Context) error {
// Update the anilist client
h.App.UpdateAnilistClientToken("")
// Update the platform
simulatedPlatform, err := simulated_platform.NewSimulatedPlatform(h.App.LocalManager, h.App.AnilistClient, h.App.Logger)
if err != nil {
return h.RespondWithError(c, err)
}
h.App.UpdatePlatform(simulatedPlatform)
_, err = h.App.Database.UpsertAccount(&models.Account{
BaseModel: models.BaseModel{
ID: 1,
UpdatedAt: time.Now(),
},
Username: "",
Token: "",
Viewer: nil,
})
if err != nil {
return h.RespondWithError(c, err)
}
h.App.Logger.Info().Msg("Logged out of AniList")
status := h.NewStatus(c)
h.App.InitOrRefreshModules()
h.App.InitOrRefreshAnilistData()
return h.RespondWithData(c, status)
}