Files
phishingclub/backend/controller/update.go
2025-08-21 16:14:09 +02:00

94 lines
2.3 KiB
Go

package controller
import (
"github.com/gin-gonic/gin"
"github.com/go-errors/errors"
"github.com/phishingclub/phishingclub/data"
"github.com/phishingclub/phishingclub/errs"
"github.com/phishingclub/phishingclub/service"
)
type Update struct {
Common
UpdateService *service.Update
OptionService *service.Option
}
// CheckForUpdateCached checks if there is a new update from cache
func (u *Update) CheckForUpdateCached(g *gin.Context) {
session, _, ok := u.handleSession(g)
if !ok {
return
}
updateAvailable, usingSystemd, err := u.UpdateService.CheckForUpdateCached(g, session)
if ok := u.handleErrors(g, err); !ok {
return
}
u.Response.OK(g, gin.H{
"updateAvailable": updateAvailable,
"updateInApp": usingSystemd,
})
}
// CheckForUpdate checks if there is a new update
func (u *Update) CheckForUpdate(g *gin.Context) {
session, _, ok := u.handleSession(g)
if !ok {
return
}
updateAvailable, usingSystemd, err := u.UpdateService.CheckForUpdate(g, session)
if ok := u.handleErrors(g, err); !ok {
return
}
u.Response.OK(g, gin.H{
"updateAvailable": updateAvailable,
"updateInApp": usingSystemd,
})
}
// GetUpdateDetails gets details about the newest software update
func (u *Update) GetUpdateDetails(g *gin.Context) {
session, _, ok := u.handleSession(g)
if !ok {
return
}
opt, err := u.OptionService.GetOption(g, session, data.OptionKeyUsingSystemd)
if ok := u.handleErrors(g, err); !ok {
return
}
details, err := u.UpdateService.GetUpdateDetails(g, session)
if err != nil && !errors.Is(err, errs.ErrNoUpdateAvailable) {
if ok := u.handleErrors(g, err); !ok {
return
}
}
if errors.Is(err, errs.ErrNoUpdateAvailable) {
u.Response.OK(g, gin.H{
"updateAvailable": false,
"updateInApp": opt.Value.String() == data.OptionValueUsingSystemdYes,
"downloadURL": "",
"latestVersion": "",
})
return
}
u.Response.OK(g, gin.H{
"updateAvailable": true,
"updateInApp": opt.Value.String() == data.OptionValueUsingSystemdYes,
"downloadURL": details.DownloadURL,
"latestVersion": details.LatestVersion,
})
}
// RunUpdate performs an update
func (u *Update) RunUpdate(g *gin.Context) {
session, _, ok := u.handleSession(g)
if !ok {
return
}
err := u.UpdateService.RunUpdate(g, session)
if ok := u.handleErrors(g, err); !ok {
return
}
u.Response.OK(g, gin.H{})
}