node build fixed
This commit is contained in:
138
seanime-2.9.10/internal/handlers/auth.go
Normal file
138
seanime-2.9.10/internal/handlers/auth.go
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user