summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUnknown <joe2010xtmf@163.com>2014-03-22 09:21:57 -0400
committerUnknown <joe2010xtmf@163.com>2014-03-22 09:21:57 -0400
commitfd1831052c3a79492643b89512282fc66f34dd8d (patch)
tree2d1146e02a6c4efd6901ca9d966c085910bf6939
parentf9c07c4186b61a1548d9a908fe6228bd130f4f92 (diff)
downloadgitea-fd1831052c3a79492643b89512282fc66f34dd8d.tar.gz
gitea-fd1831052c3a79492643b89512282fc66f34dd8d.zip
Update session
-rw-r--r--.gopmfile1
-rw-r--r--README.md2
-rw-r--r--conf/app.ini25
-rw-r--r--gogs.go2
-rw-r--r--modules/base/conf.go16
-rw-r--r--modules/base/tool.go84
-rw-r--r--routers/admin/admin.go12
-rw-r--r--templates/admin/config.tmpl19
-rw-r--r--templates/admin/dashboard.tmpl1
9 files changed, 135 insertions, 27 deletions
diff --git a/.gopmfile b/.gopmfile
index 5b690a06a7..6e6b59c620 100644
--- a/.gopmfile
+++ b/.gopmfile
@@ -4,7 +4,6 @@ path=github.com/gogits/gogs
[deps]
github.com/codegangsta/cli=
github.com/codegangsta/martini=
-github.com/martini-contrib/sessions=
github.com/Unknwon/com=
github.com/Unknwon/cae=
github.com/Unknwon/goconfig=
diff --git a/README.md b/README.md
index a9ab7fe498..35044927ff 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,7 @@ There are two ways to install Gogs:
## Acknowledgments
- Logo is inspired by [martini](https://github.com/martini-contrib).
-- Mail service is based on [WeTalk](https://github.com/beego/wetalk).
+- Mail Service is based on [WeTalk](https://github.com/beego/wetalk).
- System Monitor Status is based on [GoBlog](https://github.com/fuxiaohei/goblog).
## Contributors
diff --git a/conf/app.ini b/conf/app.ini
index cf2ae31d83..30d6c7d483 100644
--- a/conf/app.ini
+++ b/conf/app.ini
@@ -75,28 +75,25 @@ HOST =
[session]
; Either "memory", "file", "redis" or "mysql", default is "memory"
PROVIDER = file
-; provider config
+; Provider config options
; memory: not have any config yet
-; file: session file path
-; e.g. tmp/sessions
-; redis: config like redis server addr,poolSize,password
-; e.g. 127.0.0.1:6379,100,astaxie
-; mysql: go-sql-driver/mysql dsn config string
-; e.g. root:password@/session_table
+; file: session file path, e.g. data/sessions
+; redis: config like redis server addr, poolSize, password, e.g. 127.0.0.1:6379,100,astaxie
+; mysql: go-sql-driver/mysql dsn config string, e.g. root:password@/session_table
PROVIDER_CONFIG = data/sessions
-; session cookie name
+; Session cookie name
COOKIE_NAME = i_like_gogits
-; if you use session in https only, default is false
+; If you use session in https only, default is false
COOKIE_SECURE = false
-; enable set cookie, default is true
+; Enable set cookie, default is true
ENABLE_SET_COOKIE = true
-; session gc time interval, default is 86400
+; Session GC time interval, default is 86400
GC_INTERVAL_TIME = 86400
-; session life time, default is 86400
+; Session life time, default is 86400
SESSION_LIFE_TIME = 86400
-; session id hash func, default is sha1
+; Session id hash func, default is sha1
SESSION_ID_HASHFUNC = sha1
-; session hash key, default is use random string
+; Session hash key, default is use random string
SESSION_ID_HASHKEY =
[picture]
diff --git a/gogs.go b/gogs.go
index 8ec4fd42f1..a609032093 100644
--- a/gogs.go
+++ b/gogs.go
@@ -20,7 +20,7 @@ import (
// Test that go1.2 tag above is included in builds. main.go refers to this definition.
const go12tag = true
-const APP_VER = "0.1.5.0322"
+const APP_VER = "0.1.5.0322.2"
func init() {
base.AppVer = APP_VER
diff --git a/modules/base/conf.go b/modules/base/conf.go
index d5e27d043b..7c8ed93654 100644
--- a/modules/base/conf.go
+++ b/modules/base/conf.go
@@ -41,19 +41,19 @@ var (
Cfg *goconfig.ConfigFile
MailService *Mailer
+ LogMode string
+ LogConfig string
+
Cache cache.Cache
CacheAdapter string
CacheConfig string
- PictureService string
- PictureRootPath string
-
- LogMode string
- LogConfig string
-
SessionProvider string
SessionConfig *session.Config
SessionManager *session.Manager
+
+ PictureService string
+ PictureRootPath string
)
var Service struct {
@@ -182,6 +182,10 @@ func newSessionService() {
SessionConfig.SessionIDHashFunc = Cfg.MustValue("session", "SESSION_ID_HASHFUNC", "sha1")
SessionConfig.SessionIDHashKey = Cfg.MustValue("session", "SESSION_ID_HASHKEY")
+ if SessionProvider == "file" {
+ os.MkdirAll(path.Dir(SessionConfig.ProviderConfig), os.ModePerm)
+ }
+
var err error
SessionManager, err = session.NewManager(SessionProvider, *SessionConfig)
if err != nil {
diff --git a/modules/base/tool.go b/modules/base/tool.go
index 8fabb8c531..4f368aa58c 100644
--- a/modules/base/tool.go
+++ b/modules/base/tool.go
@@ -111,6 +111,85 @@ const (
Year = 12 * Month
)
+func computeTimeDiff(diff int64) (int64, string) {
+ diffStr := ""
+ switch {
+ case diff <= 0:
+ diff = 0
+ diffStr = "now"
+ case diff < 2:
+ diff = 0
+ diffStr = "1 second"
+ case diff < 1*Minute:
+ diffStr = fmt.Sprintf("%d seconds", diff)
+ diff = 0
+
+ case diff < 2*Minute:
+ diff -= 1 * Minute
+ diffStr = "1 minute"
+ case diff < 1*Hour:
+ diffStr = fmt.Sprintf("%d minutes", diff/Minute)
+ diff -= diff / Minute * Minute
+
+ case diff < 2*Hour:
+ diff -= 1 * Hour
+ diffStr = "1 hour"
+ case diff < 1*Day:
+ diffStr = fmt.Sprintf("%d hours", diff/Hour)
+ diff -= diff / Hour * Hour
+
+ case diff < 2*Day:
+ diff -= 1 * Day
+ diffStr = "1 day"
+ case diff < 1*Week:
+ diffStr = fmt.Sprintf("%d days", diff/Day)
+ diff -= diff / Day * Day
+
+ case diff < 2*Week:
+ diff -= 1 * Week
+ diffStr = "1 week"
+ case diff < 1*Month:
+ diffStr = fmt.Sprintf("%d weeks", diff/Week)
+ diff -= diff / Week * Week
+
+ case diff < 2*Month:
+ diff -= 1 * Month
+ diffStr = "1 month"
+ case diff < 1*Year:
+ diffStr = fmt.Sprintf("%d months", diff/Month)
+ diff -= diff / Month * Month
+
+ case diff < 2*Year:
+ diff -= 1 * Year
+ diffStr = "1 year"
+ default:
+ diffStr = fmt.Sprintf("%d years", diff/Year)
+ diff = 0
+ }
+ return diff, diffStr
+}
+
+// TimeSincePro calculates the time interval and generate full user-friendly string.
+func TimeSincePro(then time.Time) string {
+ now := time.Now()
+ diff := now.Unix() - then.Unix()
+
+ if then.After(now) {
+ return "future"
+ }
+
+ var timeStr, diffStr string
+ for {
+ if diff == 0 {
+ break
+ }
+
+ diff, diffStr = computeTimeDiff(diff)
+ timeStr += ", " + diffStr
+ }
+ return strings.TrimPrefix(timeStr, ", ")
+}
+
// TimeSince calculates the time interval and generate user-friendly string.
func TimeSince(then time.Time) string {
now := time.Now()
@@ -123,7 +202,6 @@ func TimeSince(then time.Time) string {
}
switch {
-
case diff <= 0:
return "now"
case diff <= 2:
@@ -156,8 +234,10 @@ func TimeSince(then time.Time) string {
case diff < 1*Year:
return fmt.Sprintf("%d months %s", diff/Month, lbl)
- case diff < 18*Month:
+ case diff < 2*Year:
return fmt.Sprintf("1 year %s", lbl)
+ default:
+ return fmt.Sprintf("%d years %s", diff/Year, lbl)
}
return then.String()
}
diff --git a/routers/admin/admin.go b/routers/admin/admin.go
index 57a46d1dfe..c0f39f7159 100644
--- a/routers/admin/admin.go
+++ b/routers/admin/admin.go
@@ -17,7 +17,10 @@ import (
"github.com/gogits/gogs/modules/middleware"
)
+var startTime = time.Now()
+
var sysStatus struct {
+ Uptime string
NumGoroutine int
// General statistics.
@@ -58,6 +61,8 @@ var sysStatus struct {
}
func updateSystemStatus() {
+ sysStatus.Uptime = base.TimeSincePro(startTime)
+
m := new(runtime.MemStats)
runtime.ReadMemStats(m)
sysStatus.NumGoroutine = runtime.NumGoroutine()
@@ -88,8 +93,8 @@ func updateSystemStatus() {
sysStatus.NextGC = base.FileSize(int64(m.NextGC))
sysStatus.LastGC = fmt.Sprintf("%.1fs", float64(time.Now().UnixNano()-int64(m.LastGC))/1000/1000/1000)
- sysStatus.PauseTotalNs = fmt.Sprintf("%.1fs", float64(m.PauseTotalNs/1000/1000/1000))
- sysStatus.PauseNs = fmt.Sprintf("%.3fs", float64(m.PauseNs[(m.NumGC+255)%256]/1000/1000/1000))
+ sysStatus.PauseTotalNs = fmt.Sprintf("%.1fs", float64(m.PauseTotalNs)/1000/1000/1000)
+ sysStatus.PauseNs = fmt.Sprintf("%.3fs", float64(m.PauseNs[(m.NumGC+255)%256])/1000/1000/1000)
sysStatus.NumGC = m.NumGC
}
@@ -151,6 +156,9 @@ func Config(ctx *middleware.Context) {
ctx.Data["CacheAdapter"] = base.CacheAdapter
ctx.Data["CacheConfig"] = base.CacheConfig
+ ctx.Data["SessionProvider"] = base.SessionProvider
+ ctx.Data["SessionConfig"] = base.SessionConfig
+
ctx.Data["PictureService"] = base.PictureService
ctx.Data["PictureRootPath"] = base.PictureRootPath
diff --git a/templates/admin/config.tmpl b/templates/admin/config.tmpl
index e3f69ee6ea..048740e617 100644
--- a/templates/admin/config.tmpl
+++ b/templates/admin/config.tmpl
@@ -79,6 +79,25 @@
<div class="panel panel-default">
<div class="panel-heading">
+ Session Configuration
+ </div>
+
+ <div class="panel-body">
+ <div><b>Session Provider:</b> {{.SessionProvider}}</div>
+ <div><b>Cookie Name:</b> {{.SessionConfig.CookieName}}</div>
+ <div><b>Enable Set Cookie:</b> <i class="fa fa{{if .SessionConfig.EnableSetCookie}}-check{{end}}-square-o"></i></div>
+ <div><b>GC Interval Time:</b> {{.SessionConfig.GcIntervalTime}} seconds</div>
+ <div><b>Session Life Time:</b> {{.SessionConfig.SessionLifeTime}} seconds</div>
+ <div><b>HTTPS Only:</b> <i class="fa fa{{if .SessionConfig.CookieSecure}}-check{{end}}-square-o"></i></div>
+ <div><b>Cookie Life Time:</b> {{.SessionConfig.CookieLifeTime}} seconds</div>
+ <div><b>Session ID Hash Function:</b> {{.SessionConfig.SessionIDHashFunc}}</div>
+ <div><b>Session ID Hash Key:</b> {{.SessionConfig.SessionIDHashKey}}</div>
+ <div><b>Provider Config:</b> {{.SessionConfig.ProviderConfig}}</div>
+ </div>
+ </div>
+
+ <div class="panel panel-default">
+ <div class="panel-heading">
Picture Configuration
</div>
diff --git a/templates/admin/dashboard.tmpl b/templates/admin/dashboard.tmpl
index 0bebf8318f..2a5a161e03 100644
--- a/templates/admin/dashboard.tmpl
+++ b/templates/admin/dashboard.tmpl
@@ -19,6 +19,7 @@
</div>
<div class="panel-body">
+ <div>Server Uptime: <b>{{.SysStatus.Uptime}}</b></div>
<div>Current Goroutines: <b>{{.SysStatus.NumGoroutine}}</b></div>
<hr/>
<div>Current Memory Usage: <b>{{.SysStatus.MemAllocated}}</b></div>