diff --git a/models/user.go b/models/user.go index fa37fe1..bc85eeb 100644 --- a/models/user.go +++ b/models/user.go @@ -6,7 +6,7 @@ type User struct { Password string `json:"-"` CreatedAt CustomTime `gorm:"type:timestamp; default:CURRENT_TIMESTAMP"` LastLoggedInAt CustomTime `gorm:"type:timestamp; default:CURRENT_TIMESTAMP"` - ShareDataMaxDays uint `json:"-" gorm:"default:0"` + ShareDataMaxDays int `json:"-" gorm:"default:0"` ShareEditors bool `json:"-" gorm:"default:false; type:bool"` ShareLanguages bool `json:"-" gorm:"default:false; type:bool"` ShareProjects bool `json:"-" gorm:"default:false; type:bool"` diff --git a/routes/compat/shields/v1/badge.go b/routes/compat/shields/v1/badge.go index 6d31939..7c9ba99 100644 --- a/routes/compat/shields/v1/badge.go +++ b/routes/compat/shields/v1/badge.go @@ -68,7 +68,8 @@ func (h *BadgeHandler) Get(w http.ResponseWriter, r *http.Request) { _, rangeFrom, rangeTo := utils.ResolveInterval(interval) minStart := utils.StartOfDay(rangeTo.Add(-24 * time.Hour * time.Duration(user.ShareDataMaxDays))) - if rangeFrom.Before(minStart) { + // negative value means no limit + if rangeFrom.Before(minStart) && user.ShareDataMaxDays >= 0 { w.WriteHeader(http.StatusForbidden) w.Write([]byte("requested time range too broad")) return diff --git a/routes/compat/wakatime/v1/stats.go b/routes/compat/wakatime/v1/stats.go index 493b239..d74b488 100644 --- a/routes/compat/wakatime/v1/stats.go +++ b/routes/compat/wakatime/v1/stats.go @@ -65,7 +65,7 @@ func (h *StatsHandler) Get(w http.ResponseWriter, r *http.Request) { minStart := utils.StartOfDay(rangeTo.Add(-24 * time.Hour * time.Duration(requestedUser.ShareDataMaxDays))) if (authorizedUser == nil || requestedUser.ID != authorizedUser.ID) && - (requestedUser.ShareDataMaxDays == 0 || rangeFrom.Before(minStart)) { + rangeFrom.Before(minStart) && requestedUser.ShareDataMaxDays >= 0 { w.WriteHeader(http.StatusForbidden) w.Write([]byte("requested time range too broad")) return diff --git a/routes/settings.go b/routes/settings.go index ca7f771..81f0981 100644 --- a/routes/settings.go +++ b/routes/settings.go @@ -2,7 +2,6 @@ package routes import ( "encoding/base64" - "errors" "fmt" "github.com/emvi/logbuch" "github.com/gorilla/mux" @@ -218,11 +217,7 @@ func (h *SettingsHandler) actionUpdateSharing(w http.ResponseWriter, r *http.Req user.ShareEditors, err = strconv.ParseBool(r.PostFormValue("share_editors")) user.ShareOSs, err = strconv.ParseBool(r.PostFormValue("share_oss")) user.ShareMachines, err = strconv.ParseBool(r.PostFormValue("share_machines")) - if v, e := strconv.Atoi(r.PostFormValue("max_days")); e == nil && v >= 0 { - user.ShareDataMaxDays = uint(v) - } else { - err = errors.New("") - } + user.ShareDataMaxDays, err = strconv.Atoi(r.PostFormValue("max_days")) if err != nil { return http.StatusBadRequest, "", "invalid input" diff --git a/views/settings.tpl.html b/views/settings.tpl.html index 581a8f6..20bbcc2 100644 --- a/views/settings.tpl.html +++ b/views/settings.tpl.html @@ -223,10 +223,10 @@
- Publicly accessible data range:
(in days; 0 = not public)
+ Publicly accessible data range:
(in days; 0 = not public, -1 = unlimited)
+ style="width: 70px;" type="number" id="max_days" name="max_days" min="-1" required value="{{ .User.ShareDataMaxDays }}">