fix (session): expand session information

To handle scenarios where we need to know the whole session information
to make decisions such as in our use case: authorisation
This commit is contained in:
MickaelK 2025-12-01 23:29:57 +11:00
parent d69e75cbb6
commit bca88ee1cc
4 changed files with 18 additions and 6 deletions

View file

@ -84,6 +84,7 @@ func NewConfiguration() Configuration {
FormElement{Name: "filepage_default_view", Type: "select", Default: "grid", Opts: []string{"list", "grid"}, Description: "Default layout for files and folder on the file page"}, FormElement{Name: "filepage_default_view", Type: "select", Default: "grid", Opts: []string{"list", "grid"}, Description: "Default layout for files and folder on the file page"},
FormElement{Name: "filepage_default_sort", Type: "select", Default: "type", Opts: []string{"type", "date", "name"}, Description: "Default order for files and folder on the file page"}, FormElement{Name: "filepage_default_sort", Type: "select", Default: "type", Opts: []string{"type", "date", "name"}, Description: "Default order for files and folder on the file page"},
FormElement{Name: "cookie_timeout", Type: "number", Default: 60 * 24 * 7, Description: "Authentication Cookie expiration in minutes. Default: 60 * 24 * 7 = 1 week"}, FormElement{Name: "cookie_timeout", Type: "number", Default: 60 * 24 * 7, Description: "Authentication Cookie expiration in minutes. Default: 60 * 24 * 7 = 1 week"},
FormElement{Name: "extended_session", Type: "boolean", Default: false, Description: "Store extra auth data in session"},
FormElement{Name: "custom_css", Type: "long_text", Default: "", Description: "Set custom css code for your instance"}, FormElement{Name: "custom_css", Type: "long_text", Default: "", Description: "Set custom css code for your instance"},
}, },
}, },

View file

@ -200,9 +200,10 @@ func GenerateID(params map[string]string) string {
for _, key := range orderedKeys { for _, key := range orderedKeys {
switch key { switch key {
case "timestamp":
case "password": case "password":
case "path": case "path":
case "session":
case "timestamp":
default: default:
if val := params[key]; val != "" { if val := params[key]; val != "" {
p += key + "=>" + params[key] + ", " p += key + "=>" + params[key] + ", "

View file

@ -320,7 +320,7 @@ func SessionAuthMiddleware(ctx *App, res http.ResponseWriter, req *http.Request)
// Step2: End of the authentication process. Could come from: // Step2: End of the authentication process. Could come from:
// - target of a html form. eg: ldap, mysql, ... // - target of a html form. eg: ldap, mysql, ...
// - identity provider redirection uri. eg: oauth2, openid, ... // - identity provider redirection uri. eg: oauth2, openid, ...
templateBind, err := plugin.Callback(formData, idpParams, res) pluginCallback, err := plugin.Callback(formData, idpParams, res)
if err == ErrAuthenticationFailed { if err == ErrAuthenticationFailed {
Log.Warning("failed authentication - %s", err.Error()) Log.Warning("failed authentication - %s", err.Error())
http.Redirect( http.Redirect(
@ -340,7 +340,7 @@ func SessionAuthMiddleware(ctx *App, res http.ResponseWriter, req *http.Request)
} else if err != nil { // response handled directly within a plugin } else if err != nil { // response handled directly within a plugin
return return
} }
templateBind = TmplParams(templateBind) templateBind := TmplParams(pluginCallback)
var ( var (
label = "" label = ""
@ -426,6 +426,12 @@ func SessionAuthMiddleware(ctx *App, res http.ResponseWriter, req *http.Request)
mappingToUse[k] = out mappingToUse[k] = out
} }
mappingToUse["timestamp"] = time.Now().Format(time.RFC3339) mappingToUse["timestamp"] = time.Now().Format(time.RFC3339)
if label != "" && Config.Get("general.extended_session").Bool() {
pluginCallback["label"] = label
if jsonStr, err := json.Marshal(pluginCallback); err == nil {
mappingToUse["session"] = string(jsonStr)
}
}
return mappingToUse, nil return mappingToUse, nil
}(templateBind) }(templateBind)
if err != nil { if err != nil {

View file

@ -38,14 +38,18 @@ func TmplExec(params string, input map[string]string) (string, error) {
} }
func TmplParams(data map[string]string) map[string]string { func TmplParams(data map[string]string) map[string]string {
data["machine_id"] = GenerateMachineID() out := map[string]string{}
for key, value := range data {
out[key] = value
}
out["machine_id"] = GenerateMachineID()
for _, value := range os.Environ() { for _, value := range os.Environ() {
pair := strings.SplitN(value, "=", 2) pair := strings.SplitN(value, "=", 2)
if len(pair) == 2 { if len(pair) == 2 {
data[fmt.Sprintf("ENV_%s", pair[0])] = pair[1] out[fmt.Sprintf("ENV_%s", pair[0])] = pair[1]
} }
} }
return data return out
} }
var tmplFuncs = template.FuncMap{ var tmplFuncs = template.FuncMap{