miniflux/ui/form/settings.go

116 lines
3.5 KiB
Go
Raw Normal View History

2017-11-20 06:10:04 +01:00
// Copyright 2017 Frédéric Guillot. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.
2018-08-25 06:51:50 +02:00
package form // import "miniflux.app/ui/form"
2017-11-20 06:10:04 +01:00
import (
"net/http"
"strconv"
2017-11-28 06:30:04 +01:00
2018-08-25 06:51:50 +02:00
"miniflux.app/errors"
"miniflux.app/model"
2017-11-20 06:10:04 +01:00
)
2017-11-28 06:30:04 +01:00
// SettingsForm represents the settings form.
2017-11-20 06:10:04 +01:00
type SettingsForm struct {
2021-08-30 16:53:05 +02:00
Username string
Password string
Confirmation string
Theme string
Language string
Timezone string
EntryDirection string
EntryOrder string
EntriesPerPage int
KeyboardShortcuts bool
ShowReadingTime bool
CustomCSS string
EntrySwipe bool
DisplayMode string
DefaultReadingSpeed int
CJKReadingSpeed int
2017-11-20 06:10:04 +01:00
}
2017-11-28 06:30:04 +01:00
// Merge updates the fields of the given user.
2017-11-20 06:10:04 +01:00
func (s *SettingsForm) Merge(user *model.User) *model.User {
user.Username = s.Username
user.Theme = s.Theme
user.Language = s.Language
user.Timezone = s.Timezone
2017-12-03 02:04:01 +01:00
user.EntryDirection = s.EntryDirection
user.EntryOrder = s.EntryOrder
user.EntriesPerPage = s.EntriesPerPage
user.KeyboardShortcuts = s.KeyboardShortcuts
2020-07-17 04:46:24 +02:00
user.ShowReadingTime = s.ShowReadingTime
user.Stylesheet = s.CustomCSS
user.EntrySwipe = s.EntrySwipe
user.DisplayMode = s.DisplayMode
2021-08-30 16:53:05 +02:00
user.CJKReadingSpeed = s.CJKReadingSpeed
user.DefaultReadingSpeed = s.DefaultReadingSpeed
2017-11-20 06:10:04 +01:00
if s.Password != "" {
user.Password = s.Password
}
return user
}
2017-11-28 06:30:04 +01:00
// Validate makes sure the form values are valid.
2017-11-20 06:10:04 +01:00
func (s *SettingsForm) Validate() error {
if s.Username == "" || s.Theme == "" || s.Language == "" || s.Timezone == "" || s.EntryDirection == "" || s.DisplayMode == "" {
return errors.NewLocalizedError("error.settings_mandatory_fields")
2017-11-20 06:10:04 +01:00
}
2021-08-30 16:53:05 +02:00
if s.CJKReadingSpeed <= 0 || s.DefaultReadingSpeed <= 0 {
return errors.NewLocalizedError("error.settings_reading_speed_is_positive")
}
if s.Confirmation == "" {
// Firefox insists on auto-completing the password field.
// If the confirmation field is blank, the user probably
// didn't intend to change their password.
s.Password = ""
} else if s.Password != "" {
2017-11-20 06:10:04 +01:00
if s.Password != s.Confirmation {
return errors.NewLocalizedError("error.different_passwords")
2017-11-20 06:10:04 +01:00
}
}
return nil
}
2017-11-28 06:30:04 +01:00
// NewSettingsForm returns a new SettingsForm.
2017-11-20 06:10:04 +01:00
func NewSettingsForm(r *http.Request) *SettingsForm {
entriesPerPage, err := strconv.ParseInt(r.FormValue("entries_per_page"), 10, 0)
if err != nil {
entriesPerPage = 0
}
2021-08-30 16:53:05 +02:00
defaultReadingSpeed, err := strconv.ParseInt(r.FormValue("default_reading_speed"), 10, 0)
if err != nil {
defaultReadingSpeed = 0
}
cjkReadingSpeed, err := strconv.ParseInt(r.FormValue("cjk_reading_speed"), 10, 0)
if err != nil {
cjkReadingSpeed = 0
}
2017-11-20 06:10:04 +01:00
return &SettingsForm{
2021-08-30 16:53:05 +02:00
Username: r.FormValue("username"),
Password: r.FormValue("password"),
Confirmation: r.FormValue("confirmation"),
Theme: r.FormValue("theme"),
Language: r.FormValue("language"),
Timezone: r.FormValue("timezone"),
EntryDirection: r.FormValue("entry_direction"),
EntryOrder: r.FormValue("entry_order"),
EntriesPerPage: int(entriesPerPage),
KeyboardShortcuts: r.FormValue("keyboard_shortcuts") == "1",
ShowReadingTime: r.FormValue("show_reading_time") == "1",
CustomCSS: r.FormValue("custom_css"),
EntrySwipe: r.FormValue("entry_swipe") == "1",
DisplayMode: r.FormValue("display_mode"),
DefaultReadingSpeed: int(defaultReadingSpeed),
CJKReadingSpeed: int(cjkReadingSpeed),
2017-11-20 06:10:04 +01:00
}
}