diff --git a/backend/internal/common/config.go b/backend/internal/common/config.go
index d1262ac..6762e59 100644
--- a/backend/internal/common/config.go
+++ b/backend/internal/common/config.go
@@ -36,6 +36,11 @@ func NewDefaultDbConfig() model.ApplicationConfiguration {
IsPublic: true,
Value: "Pocket ID",
},
+ SessionDuration: model.ApplicationConfigurationVariable{
+ Key: "sessionDuration",
+ Type: "number",
+ Value: "60",
+ },
BackgroundImageType: model.ApplicationConfigurationVariable{
Key: "backgroundImageType",
Type: "string",
diff --git a/backend/internal/common/jwt.go b/backend/internal/common/jwt.go
index 41e4490..8a4586e 100644
--- a/backend/internal/common/jwt.go
+++ b/backend/internal/common/jwt.go
@@ -15,6 +15,7 @@ import (
"os"
"path/filepath"
"slices"
+ "strconv"
"strings"
"time"
)
@@ -73,10 +74,11 @@ func GenerateIDToken(user model.User, clientID string, scope string, nonce strin
// GenerateAccessToken generates an access token for the given user.
func GenerateAccessToken(user model.User) (tokenString string, err error) {
+ sessionDurationInMinutes, _ := strconv.Atoi(DbConfig.SessionDuration.Value)
claim := accessTokenJWTClaims{
RegisteredClaims: jwt.RegisteredClaims{
Subject: user.ID,
- ExpiresAt: jwt.NewNumericDate(time.Now().Add(1 * time.Hour)),
+ ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Duration(sessionDurationInMinutes) * time.Minute)),
IssuedAt: jwt.NewNumericDate(time.Now()),
Audience: jwt.ClaimStrings{utils.GetHostFromURL(EnvConfig.AppURL)},
},
diff --git a/backend/internal/handler/application_configuration.go b/backend/internal/handler/application_configuration.go
index c952059..62a3efc 100644
--- a/backend/internal/handler/application_configuration.go
+++ b/backend/internal/handler/application_configuration.go
@@ -16,6 +16,7 @@ import (
func RegisterConfigurationRoutes(group *gin.RouterGroup) {
group.GET("/application-configuration", listApplicationConfigurationHandler)
+ group.GET("/application-configuration/all", middleware.JWTAuth(true), listAllApplicationConfigurationHandler)
group.PUT("/application-configuration", updateApplicationConfigurationHandler)
group.GET("/application-configuration/logo", getLogoHandler)
@@ -27,24 +28,11 @@ func RegisterConfigurationRoutes(group *gin.RouterGroup) {
}
func listApplicationConfigurationHandler(c *gin.Context) {
- // Return also the private configuration variables if the user is admin and showAll is true
- showAll := c.GetBool("userIsAdmin") && c.DefaultQuery("showAll", "false") == "true"
+ listApplicationConfiguration(c, false)
+}
- var configuration []model.ApplicationConfigurationVariable
- var err error
-
- if showAll {
- err = common.DB.Find(&configuration).Error
- } else {
- err = common.DB.Find(&configuration, "is_public = true").Error
- }
-
- if err != nil {
- utils.UnknownHandlerError(c, err)
- return
- }
-
- c.JSON(200, configuration)
+func listAllApplicationConfigurationHandler(c *gin.Context) {
+ listApplicationConfiguration(c, true)
}
func updateApplicationConfigurationHandler(c *gin.Context) {
@@ -188,3 +176,21 @@ func updateImage(c *gin.Context, imageName string, oldImageType string) {
c.Status(http.StatusNoContent)
}
+
+func listApplicationConfiguration(c *gin.Context, showAll bool) {
+ var configuration []model.ApplicationConfigurationVariable
+ var err error
+
+ if showAll {
+ err = common.DB.Find(&configuration).Error
+ } else {
+ err = common.DB.Find(&configuration, "is_public = true").Error
+ }
+
+ if err != nil {
+ utils.UnknownHandlerError(c, err)
+ return
+ }
+
+ c.JSON(200, configuration)
+}
diff --git a/backend/internal/model/application_configuration.go b/backend/internal/model/application_configuration.go
index fe244e7..b7a464d 100644
--- a/backend/internal/model/application_configuration.go
+++ b/backend/internal/model/application_configuration.go
@@ -12,6 +12,7 @@ type ApplicationConfiguration struct {
AppName ApplicationConfigurationVariable
BackgroundImageType ApplicationConfigurationVariable
LogoImageType ApplicationConfigurationVariable
+ SessionDuration ApplicationConfigurationVariable
}
type ApplicationConfigurationUpdateDto struct {
diff --git a/frontend/src/lib/components/form-input.svelte b/frontend/src/lib/components/form-input.svelte
index a285288..5424e01 100644
--- a/frontend/src/lib/components/form-input.svelte
+++ b/frontend/src/lib/components/form-input.svelte
@@ -7,10 +7,12 @@
let {
input = $bindable(),
label,
+ description,
children
}: {
input: FormInput {input.error} {description} {input.error}
{$userStore?.email}
+{$userStore?.email}