#697 and #1606 and new admin edit user UI

This commit is contained in:
Unknwon committed 2015-09-13 11:07:21 -04:00
1 parent e5ed5904c6
commit 83e747bfda
15 files changed
+183 -156

No files matched your search

+1 -1
View File
@@ -5,7 +5,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
![](public/img/gogs-large-resize.png) ![](public/img/gogs-large-resize.png)
##### Current version: 0.6.11 Beta ##### Current version: 0.6.12 Beta
<table> <table>
<tr> <tr>
+2 -2
View File
@@ -99,8 +99,8 @@ ENABLE_REVERSE_PROXY_AUTHENTICATION = false
ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false
; Do not check minimum key size with corresponding type ; Do not check minimum key size with corresponding type
DISABLE_MINIMUM_KEY_SIZE_CHECK = false DISABLE_MINIMUM_KEY_SIZE_CHECK = false
; Disable captcha validation for registration ; Enable captcha validation for registration
DISABLE_CAPTCHA = false ENABLE_CAPTCHA = true
[webhook] [webhook]
; Hook task queue length ; Hook task queue length
+1
View File
@@ -785,6 +785,7 @@ users.edit = Edit
users.auth_source = Authentication Source users.auth_source = Authentication Source
users.local = Local users.local = Local
users.auth_login_name = Authentication Login Name users.auth_login_name = Authentication Login Name
users.password_helper = Leave it empty to remain unchanged.
users.update_profile_success = Account profile has been updated successfully. users.update_profile_success = Account profile has been updated successfully.
users.edit_account = Edit Account users.edit_account = Edit Account
users.is_activated = This account is activated users.is_activated = This account is activated
+1 -1
View File
@@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
) )
const APP_VER = "0.6.11.0913 Beta" const APP_VER = "0.6.12.0913 Beta"
func init() { func init() {
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())
+16 -4
View File
@@ -10,17 +10,29 @@ import (
"github.com/macaron-contrib/binding" "github.com/macaron-contrib/binding"
) )
type AdminCrateUserForm struct {
LoginType string `binding:"Required"`
LoginName string
UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"`
Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"MaxSize(255)"`
}
func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
return validate(errs, ctx.Data, f, ctx.Locale)
}
type AdminEditUserForm struct { type AdminEditUserForm struct {
FullName string `form:"fullname" binding:"MaxSize(100)"` LoginType string `binding:"Required"`
LoginName string
FullName string `binding:"MaxSize(100)"`
Email string `binding:"Required;Email;MaxSize(254)"` Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"OmitEmpty;MinSize(6);MaxSize(255)"` Password string `binding:"MaxSize(255)"`
Website string `binding:"MaxSize(50)"` Website string `binding:"MaxSize(50)"`
Location string `binding:"MaxSize(50)"` Location string `binding:"MaxSize(50)"`
Avatar string `binding:"Required;Email;MaxSize(50)"`
Active bool Active bool
Admin bool Admin bool
AllowGitHook bool AllowGitHook bool
LoginType int
} }
func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
-12
View File
@@ -78,18 +78,6 @@ func (f *SignInForm) Validate(ctx *macaron.Context, errs binding.Errors) binding
return validate(errs, ctx.Data, f, ctx.Locale) return validate(errs, ctx.Data, f, ctx.Locale)
} }
type AdminCrateUserForm struct {
UserName string `binding:"Required;AlphaDashDot;MaxSize(35)"`
Email string `binding:"Required;Email;MaxSize(254)"`
Password string `binding:"MaxSize(255)"`
LoginType string
LoginName string
}
func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
return validate(errs, ctx.Data, f, ctx.Locale)
}
// __________________________________________.___ _______ ________ _________ // __________________________________________.___ _______ ________ _________
// / _____/\_ _____/\__ ___/\__ ___/| |\ \ / _____/ / _____/ // / _____/\_ _____/\__ ___/\__ ___/| |\ \ / _____/ / _____/
// \_____ \ | __)_ | | | | | |/ | \/ \ ___ \_____ \ // \_____ \ | __)_ | | | | | |/ | \/ \ ___ \_____ \
+4 -4
View File
@@ -284,7 +284,7 @@ func (fi bindataFileInfo) Sys() interface{} {
return nil return nil
} }
var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x5a\x5b\x8f\xe3\x46\x76\x7e\xe7\xaf\x28\xcb\x71\x3c\x0e\x24\xf5\xcd\x73\x71\xdb\x9d\x58\x2d\x51\xdd\xda\xd1\xcd\xa4\x34\xe3\xf1\x60\xc0\x61\x93\x25\x89\x6e\x8a\xd4\xb0\xc8\xee\x91\x91\x87\x35\xf2\x10\x20\x8f\xc9\x22\x79\x09\x82\xe4\x21\x08\xb0\xb9\x20\x8b\xbc\xec\x6e\x90\x27\x23\xef\x33\xff\xc1\xf0\x6e\xfe\x45\xbe\x73\xaa\x28\x51\x3d\xed\x59\xef\x26\x8b\x19\xb4\xa8\x62\xd5\xa9\x3a\x5f\x9d\xcb\x77\xaa\xf4\xae\x18\xda\x8f\x6c\x47\xf0\x9f\xc1\xa8\xd3\xeb\x3e\x11\x93\xf3\x9e\x2b\xba\xbd\xbe\x6d\xbd\x2b\xc6\x7d\xbb\xe5\xda\x62\xd0\x7a\x68\x8b\xf6\x79\x6b\x78\x66\xbb\x62\x34\x14\xed\x91\xe3\xd8\xee\x78\x34\xec\xf4\x86\x67\xa2\x3d\x75\x27\xa3\x01\x1a\x87\xdd\xde\x99\x1e\x69\x7d\x2c\x5a\xab\x95\x48\xfc\xa5\x14\xf9\xc2\xcf\x85\x5a\xa4\xd7\x4a\xa4\x89\x90\x57\x32\x5b\x8b\x95\x3f\xc7\x8b\x28\x8f\xa5\xd5\x1a\x8f\xbd\x61\x6b\x60\x8b\x13\x71\x96\xce\xd5\x31\xfe\x8a\xb3\x28\x17\xae\xcc\xae\xa2\x40\x42\x52\x7b\xe1\x27\xe8\x8e\xb6\x68\x26\xd6\x69\x21\xb2\x22\x11\x71\x1a\xf8\x71\xbc\xb6\x9c\xe9\xd0\x9b\xba\x58\xfd\x89\x98\x47\x39\x7a\xdb\x51\xbe\x90\x99\xa8\x85\xf2\xaa\x56\x17\xb5\x55\x96\x86\x35\x91\xa2\x21\x97\x2a\x47\x4b\x28\x67\x7e\x11\x43\x96\xd2\x7d\x58\x02\x54\xa7\x05\xe0\xbb\x65\x3d\xcd\xe4\x2a\x55\x51\x9e\x66\xeb\x67\x96\x33\x1a\x4d\xc4\x89\xe5\xb6\x9d\xde\x78\xe2\x4d\x9e\x8c\xa9\xdb\x85\xaf\x16\xe8\x57\x44\xcf\x30\xdf\xb0\x58\x5e\x60\xbe\x74\x26\x36\xe3\x22\xa9\xb4\xd6\x7e\x26\x59\x73\x19\x8a\x28\x81\xf6\x52\xc8\x97\xab\x38\x45\x2b\x01\x60\xd9\x9f\x8f\xfb\x23\xc7\xf6\xc6\xad\x33\xe0\xe8\x0d\xa7\x03\x08\x3f\xdc\xdf\x11\x1a\x29\x55\x7c\xbf\x38\x16\xd3\x73\xdd\xe9\x0d\x21\x07\xfb\xbc\xbe\xa6\x1f\x2e\xa3\xc4\xac\x52\xcb\x2b\x94\xcc\xde\x2e\x8e\xd0\xdc\x95\x76\x97\xa4\x2d\xfd\xec\x32\x4c\xaf\x59\x9a\x9d\xf8\x17\xb1\x14\x0b\x3f\x0b\x45\x1c\x61\xe0\x45\x26\xfd\x4b\x28\x97\xcb\x44\x45\x69\x62\xd9\xc3\xd6\x69\xdf\xf6\xce\x5b\x4e\xc7\xeb\xf7\x86\xb6\x77\xea\xd8\xad\x87\x10\x35\xf3\x63\x25\x21\x0d\xab\x80\x21\x3c\xb3\xc6\xce\x68\x32\x6a\x8f\xfa\x78\xb5\xc8\xf3\x95\xd5\x19\x0d\x5a\xbd\x21\xbe\xf1\xfe\x2e\x52\x95\xf3\x16\x78\x53\x87\xba\xbc\x77\xa7\xec\xff\x81\x3a\xde\xdb\x7b\xef\x8e\xee\x8e\x2f\xef\xdd\x39\x9f\x4c\xc6\xde\x78\xe4\x4c\x3e\x50\x7b\x16\x7f\x69\x75\x3a\x30\x0b\x6b\xf3\x02\x02\x8e\xf6\xf7\x09\xde\x4e\xa4\x58\x01\xd7\x3d\x17\x33\xe9\xe7\x05\x90\xb8\x5e\xc8\x44\x24\x29\x60\xb9\xf2\xa3\x98\x5e\x5b\x9d\x9e\xcb\x6a\x50\xb7\x72\xe9\x78\x2e\x85\x1d\x1e\x56\x44\xb5\x3b\x43\xb2\xed\x84\xa0\x34\x46\xb7\x4c\x43\x69\x8d\xba\x5d\x06\xc0\x58\x98\x16\x52\x0a\x76\x46\xd3\x09\xc0\xee\x8f\xce\x36\xaf\x3e\x16\x67\x32\x91\x99\x9f\x63\x6f\x72\xb9\x52\xc7\x68\xf9\x03\x11\x84\xd8\x9b\x7c\xb1\x97\xa7\x7b\x73\x38\xc9\x5e\x50\xa8\x3c\x5d\xee\x11\x64\x8a\x3b\x34\xb9\x5d\x04\x32\xcb\x45\x23\xf0\x4f\xf2\xac\x90\xa2\x11\x16\x10\x84\xfd\x38\x79\x70\xff\xde\xfe\x62\x7f\xb9\xaf\x44\x83\x30\x3d\x59\xae\xe9\xa3\x29\x5f\xfa\xcb\x55\x2c\x9b\x41\xba\xb4\x3e\x86\x9c\x51\x26\x66\x59\xba\x14\xbe\x68\xae\x66\x2f\xc5\x2c\x8a\xd9\x62\xd3\x2c\x87\x8d\xf0\x1b\xf8\x96\x78\x1c\x25\x21\x79\x33\x4d\x16\xcd\xa2\x40\xaf\x95\xac\xfa\x4e\x98\x42\x0a\x81\x38\x4b\xb3\xb9\xcc\x45\x9e\x9a\xf1\x3c\x70\x95\x45\x57\xd4\xf9\x52\xae\x3f\xd0\x7a\xa5\x2b\x18\x8c\x8a\xc5\xea\x32\x50\x07\x87\xa2\x01\xf0\x48\x2a\xcf\xde\x48\x8b\xdc\x7c\x93\x4b\xd1\x48\x52\x0c\x53\x3f\x6c\x14\x7a\x96\x83\xe8\x85\xa2\x87\x50\x2a\xab\x6d\x3b\x13\x8f\x02\x14\xe0\xae\x42\xb8\x57\x4e\x63\x3d\xb4\x9f\xdc\xda\xc1\x48\xc4\xf4\xd3\xd5\x0a\x9e\x14\x63\xaf\x63\xf2\xa7\x5c\x02\x41\x52\xca\x4f\x42\xa0\x00\xb8\x03\x8d\x1b\xed\x17\xba\x57\xc2\x0d\x43\x80\x56\x32\x35\x80\x45\xd1\x8e\x9a\xe5\x4b\x19\x14\x00\xd8\x72\x27\xad\x49\xaf\xed\xb1\xbd\x8f\x5b\x13\xd8\x9c\x0e\xa3\x31\x41\x8c\x5d\x34\x93\x9e\x7d\xd1\x1b\x0b\x55\xac\x08\xd6\xd2\xd1\xb8\x6d\x6b\x42\x7d\x2c\x26\x4a\xe6\x3a\xcc\x62\x2b\xb0\x25\x49\x23\x4e\xe7\x73\x6c\x23\x07\x80\xba\x08\xfc\x44\x5c\x48\x51\x5b\xa4\x4b\xa9\xe3\xa3\x09\x4d\x35\xab\xdf\xe2\xb8\x4e\x31\x80\x70\xa0\x1e\xf0\xd8\xd0\xcf\x7d\x04\x3e\xf9\xac\x12\x63\x97\x6b\xf5\x22\xe6\x28\x0b\x6b\x9a\x67\x52\x69\x49\x68\x8c\x72\x79\x84\x17\x51\xfe\xbe\xa2\x90\x9d\x89\x60\x91\x52\x34\xef\x9c\x96\x41\x94\xc7\x5a\xe7\x23\x97\x5c\xe9\xe0\xf0\x7e\x73\x1f\xff\x0e\x8e\x8f\x8e\xf6\xef\x59\x26\x1f\x90\x49\x5b\x26\xb8\x67\x69\x9a\x5b\xe3\x96\xeb\x3e\xee\x30\x2e\x5d\x9a\xa8\x32\x6d\x12\xaf\xeb\x42\x96\xb1\x5f\x3b\x25\xad\x2c\x93\x2f\x8a\x28\x33\x2a\x22\xe4\x44\xb3\x75\x63\x56\xc4\x71\x0d\x9e\xdc\xdf\xc4\x7d\xdd\xbf\x14\x5b\xae\x9f\xf7\xb4\x96\x47\xe1\x45\xcd\xd2\x1b\x22\x08\x05\x76\xb5\x66\x78\x01\x50\x4c\x7c\xa5\x78\x16\x14\x59\x94\x23\x63\xf4\x86\xd8\xc7\x7e\x1f\x4e\xdd\x7e\x58\xd9\x92\x77\xde\xd1\xf9\x53\xa7\xd7\xc9\x48\x3c\xb4\xed\xb1\x78\x32\x9a\x3a\x82\x35\xec\xb4\x26\x2d\xe1\xb6\xba\xf6\x3b\xef\x58\xae\xdd\x76\xec\x89\x07\x5b\x84\x80\x77\xde\xfd\xb4\xdb\xb1\x1f\x3b\xf8\xff\x87\x7f\x74\x87\x2c\xa2\xc8\x53\xda\x4c\x58\x7d\x26\x97\x92\x13\x45\xe8\xc3\x35\x10\x46\x7a\x43\xcf\xb1\x07\xf6\xe0\x14\x51\xa5\xd3\x7a\xe2\x62\xfc\x7d\xab\x3d\x1a\x3d\Line truncated var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x5a\x5b\x8f\xe3\x46\x76\x7e\xe7\xaf\x28\xcb\x71\x3c\x0e\x24\xf5\xcd\x73\x71\xdb\x9d\x58\x2d\x51\xdd\xda\xd1\xcd\xa4\x34\xe3\xf1\x60\xc0\x61\x93\x25\x89\x6e\x8a\xd4\xb0\xc8\xee\x91\x91\x87\x35\xf2\x10\x20\x8f\xc9\x22\x79\x09\x82\xe4\x21\x08\xb0\xb9\x20\x8b\xbc\xec\x6e\x90\x27\x23\xef\x33\xff\xc1\xf0\x6e\xfe\x45\xbe\x73\xaa\x28\x51\x3d\xed\x59\xef\x26\x8b\x19\xb4\xa8\x62\xd5\xa9\x3a\x5f\x9d\xcb\x77\xaa\xf4\xae\x18\xda\x8f\x6c\x47\xf0\x9f\xc1\xa8\xd3\xeb\x3e\x11\x93\xf3\x9e\x2b\xba\xbd\xbe\x6d\xbd\x2b\xc6\x7d\xbb\xe5\xda\x62\xd0\x7a\x68\x8b\xf6\x79\x6b\x78\x66\xbb\x62\x34\x14\xed\x91\xe3\xd8\xee\x78\x34\xec\xf4\x86\x67\xa2\x3d\x75\x27\xa3\x01\x1a\x87\xdd\xde\x99\x1e\x69\x7d\x2c\x5a\xab\x95\x48\xfc\xa5\x14\xf9\xc2\xcf\x85\x5a\xa4\xd7\x4a\xa4\x89\x90\x57\x32\x5b\x8b\x95\x3f\xc7\x8b\x28\x8f\xa5\xd5\x1a\x8f\xbd\x61\x6b\x60\x8b\x13\x71\x96\xce\xd5\x31\xfe\x8a\xb3\x28\x17\xae\xcc\xae\xa2\x40\x42\x52\x7b\xe1\x27\xe8\x8e\xb6\x68\x26\xd6\x69\x21\xb2\x22\x11\x71\x1a\xf8\x71\xbc\xb6\x9c\xe9\xd0\x9b\xba\x58\xfd\x89\x98\x47\x39\x7a\xdb\x51\xbe\x90\x99\xa8\x85\xf2\xaa\x56\x17\xb5\x55\x96\x86\x35\x91\xa2\x21\x97\x2a\x47\x4b\x28\x67\x7e\x11\x43\x96\xd2\x7d\x58\x02\x54\xa7\x05\xe0\xbb\x65\x3d\xcd\xe4\x2a\x55\x51\x9e\x66\xeb\x67\x96\x33\x1a\x4d\xc4\x89\xe5\xb6\x9d\xde\x78\xe2\x4d\x9e\x8c\xa9\xdb\x85\xaf\x16\xe8\x57\x44\xcf\x30\xdf\xb0\x58\x5e\x60\xbe\x74\x26\x36\xe3\x22\xa9\xb4\xd6\x7e\x26\x59\x73\x19\x8a\x28\x81\xf6\x52\xc8\x97\xab\x38\x45\x2b\x01\x60\xd9\x9f\x8f\xfb\x23\xc7\xf6\xc6\xad\x33\xe0\xe8\x0d\xa7\x03\x08\x3f\xdc\xdf\x11\x1a\x29\x55\x7c\xbf\x38\x16\xd3\x73\xdd\xe9\x0d\x21\x07\xfb\xbc\xbe\xa6\x1f\x2e\xa3\xc4\xac\x52\xcb\x2b\x94\xcc\xde\x2e\x8e\xd0\xdc\x95\x76\x97\xa4\x2d\xfd\xec\x32\x4c\xaf\x59\x9a\x9d\xf8\x17\xb1\x14\x0b\x3f\x0b\x45\x1c\x61\xe0\x45\x26\xfd\x4b\x28\x97\xcb\x44\x45\x69\x62\xd9\xc3\xd6\x69\xdf\xf6\xce\x5b\x4e\xc7\xeb\xf7\x86\xb6\x77\xea\xd8\xad\x87\x10\x35\xf3\x63\x25\x21\x0d\xab\x80\x21\x3c\xb3\xc6\xce\x68\x32\x6a\x8f\xfa\x78\xb5\xc8\xf3\x95\xd5\x19\x0d\x5a\xbd\x21\xbe\xf1\xfe\x2e\x52\x95\xf3\x16\x78\x53\x87\xba\xbc\x77\xa7\xec\xff\x81\x3a\xde\xdb\x7b\xef\x8e\xee\x8e\x2f\xef\xdd\x39\x9f\x4c\xc6\xde\x78\xe4\x4c\x3e\x50\x7b\x16\x7f\x69\x75\x3a\x30\x0b\x6b\xf3\x02\x02\x8e\xf6\xf7\x09\xde\x4e\xa4\x58\x01\xd7\x3d\x17\x33\xe9\xe7\x05\x90\xb8\x5e\xc8\x44\x24\x29\x60\xb9\xf2\xa3\x98\x5e\x5b\x9d\x9e\xcb\x6a\x50\xb7\x72\xe9\x78\x2e\x85\x1d\x1e\x56\x44\xb5\x3b\x43\xb2\xed\x84\xa0\x34\x46\xb7\x4c\x43\x69\x8d\xba\x5d\x06\xc0\x58\x98\x16\x52\x0a\x76\x46\xd3\x09\xc0\xee\x8f\xce\x36\xaf\x3e\x16\x67\x32\x91\x99\x9f\x63\x6f\x72\xb9\x52\xc7\x68\xf9\x03\x11\x84\xd8\x9b\x7c\xb1\x97\xa7\x7b\x73\x38\xc9\x5e\x50\xa8\x3c\x5d\xee\x11\x64\x8a\x3b\x34\xb9\x5d\x04\x32\xcb\x45\x23\xf0\x4f\xf2\xac\x90\xa2\x11\x16\x10\x84\xfd\x38\x79\x70\xff\xde\xfe\x62\x7f\xb9\xaf\x44\x83\x30\x3d\x59\xae\xe9\xa3\x29\x5f\xfa\xcb\x55\x2c\x9b\x41\xba\xb4\x3e\x86\x9c\x51\x26\x66\x59\xba\x14\xbe\x68\xae\x66\x2f\xc5\x2c\x8a\xd9\x62\xd3\x2c\x87\x8d\xf0\x1b\xf8\x96\x78\x1c\x25\x21\x79\x33\x4d\x16\xcd\xa2\x40\xaf\x95\xac\xfa\x4e\x98\x42\x0a\x81\x38\x4b\xb3\xb9\xcc\x45\x9e\x9a\xf1\x3c\x70\x95\x45\x57\xd4\xf9\x52\xae\x3f\xd0\x7a\xa5\x2b\x18\x8c\x8a\xc5\xea\x32\x50\x07\x87\xa2\x01\xf0\x48\x2a\xcf\xde\x48\x8b\xdc\x7c\x93\x4b\xd1\x48\x52\x0c\x53\x3f\x6c\x14\x7a\x96\x83\xe8\x85\xa2\x87\x50\x2a\xab\x6d\x3b\x13\x8f\x02\x14\xe0\xae\x42\xb8\x57\x4e\x63\x3d\xb4\x9f\xdc\xda\xc1\x48\xc4\xf4\xd3\xd5\x0a\x9e\x14\x63\xaf\x63\xf2\xa7\x5c\x02\x41\x52\xca\x4f\x42\xa0\x00\xb8\x03\x8d\x1b\xed\x17\xba\x57\xc2\x0d\x43\x80\x56\x32\x35\x80\x45\xd1\x8e\x9a\xe5\x4b\x19\x14\x00\xd8\x72\x27\xad\x49\xaf\xed\xb1\xbd\x8f\x5b\x13\xd8\x9c\x0e\xa3\x31\x41\x8c\x5d\x34\x93\x9e\x7d\xd1\x1b\x0b\x55\xac\x08\xd6\xd2\xd1\xb8\x6d\x6b\x42\x7d\x2c\x26\x4a\xe6\x3a\xcc\x62\x2b\xb0\x25\x49\x23\x4e\xe7\x73\x6c\x23\x07\x80\xba\x08\xfc\x44\x5c\x48\x51\x5b\xa4\x4b\xa9\xe3\xa3\x09\x4d\x35\xab\xdf\xe2\xb8\x4e\x31\x80\x70\xa0\x1e\xf0\xd8\xd0\xcf\x7d\x04\x3e\xf9\xac\x12\x63\x97\x6b\xf5\x22\xe6\x28\x0b\x6b\x9a\x67\x52\x69\x49\x68\x8c\x72\x79\x84\x17\x51\xfe\xbe\xa2\x90\x9d\x89\x60\x91\x52\x34\xef\x9c\x96\x41\x94\xc7\x5a\xe7\x23\x97\x5c\xe9\xe0\xf0\x7e\x73\x1f\xff\x0e\x8e\x8f\x8e\xf6\xef\x59\x26\x1f\x90\x49\x5b\x26\xb8\x67\x69\x9a\x5b\xe3\x96\xeb\x3e\xee\x30\x2e\x5d\x9a\xa8\x32\x6d\x12\xaf\xeb\x42\x96\xb1\x5f\x3b\x25\xad\x2c\x93\x2f\x8a\x28\x33\x2a\x22\xe4\x44\xb3\x75\x63\x56\xc4\x71\x0d\x9e\xdc\xdf\xc4\x7d\xdd\xbf\x14\x5b\xae\x9f\xf7\xb4\x96\x47\xe1\x45\xcd\xd2\x1b\x22\x08\x05\x76\xb5\x66\x78\x01\x50\x4c\x7c\xa5\x78\x16\x14\x59\x94\x23\x63\xf4\x86\xd8\xc7\x7e\x1f\x4e\xdd\x7e\x58\xd9\x92\x77\xde\xd1\xf9\x53\xa7\xd7\xc9\x48\x3c\xb4\xed\xb1\x78\x32\x9a\x3a\x82\x35\xec\xb4\x26\x2d\xe1\xb6\xba\xf6\x3b\xef\x58\xae\xdd\x76\xec\x89\x07\x5b\x84\x80\x77\xde\xfd\xb4\xdb\xb1\x1f\x3b\xf8\xff\x87\x7f\x74\x87\x2c\xa2\xc8\x53\xda\x4c\x58\x7d\x26\x97\x92\x13\x45\xe8\xc3\x35\x10\x46\x7a\x43\xcf\xb1\x07\xf6\xe0\x14\x51\xa5\xd3\x7a\xe2\x62\xfc\x7d\xab\x3d\x1a\x3d\Line truncated
func confAppIniBytes() ([]byte, error) { func confAppIniBytes() ([]byte, error) {
return bindataRead( return bindataRead(
@@ -299,7 +299,7 @@ func confAppIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/app.ini", size: 9885, mode: os.FileMode(420), modTime: time.Unix(1442150798, 0)} info := bindataFileInfo{name: "conf/app.ini", size: 9882, mode: os.FileMode(420), modTime: time.Unix(1442156680, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
@@ -4364,7 +4364,7 @@ func confLocaleLocale_deDeIni() (*asset, error) {
return a, nil return a, nil
} }
var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\xbd\xeb\x72\xdc\x48\xae\x27\xfe\x9d\x4f\xc1\xf6\x09\xff\xdd\x8e\x90\xcb\xd1\xdd\xff\xbd\x44\x87\xed\x5e\x59\x6a\x5f\xe6\x58\x96\xc6\x92\x67\x76\xd6\xe1\x60\xb3\x8a\x54\x15\xc7\x55\x64\x35\xc9\x72\x59\x73\xe2\x44\xec\x6b\xec\xeb\xed\x93\x2c\xf0\x03\x90\x17\x92\x25\xd9\x3d\x27\x76\xbf\x48\xac\x4c\xe4\x0d\x89\x44\x02\x48\x24\x32\xdf\x6e\xb3\xa2\xec\x16\xe9\xd3\xf4\x38\xdd\xe6\x55\xbd\x2e\xbb\x2e\xed\xca\xf5\xf5\xa3\x55\xd3\xf5\x65\x91\xbe\xac\x7a\xfa\xdd\x7e\xae\x16\x65\x92\xac\x9a\x4d\x49\xa0\xaf\xe8\x5f\x52\xe4\xdd\x6a\xde\xe4\x6d\x41\x09\xa7\xf6\x9d\x94\x5f\xb6\xeb\xa6\x65\xa0\x5f\xe5\x2b\x59\x95\xeb\x2d\x97\xa1\x7f\x49\x57\x2d\xeb\xac\xaa\xe9\xe7\x25\x7d\xa5\xaf\xeb\xa4\x6b\x16\x55\xbe\xce\x82\x0c\x24\x58\xfe\xcf\xe9\x8f\x75\x91\x5e\xf6\xe5\x36\x7d\xd2\x6d\xf2\xf5\xfa\x59\xde\xa1\x48\x5f\xa6\xf9\x62\xd1\xec\xea\xfe\xc9\x63\xc9\x90\xca\x9b\x5d\x6f\xb5\x9f\xef\x7a\x49\xdb\x6d\x2d\xe9\xfd\x36\x69\xcb\x65\x45\x03\x6b\x29\xe9\x9d\x7e\x26\xfb\x72\xde\x55\x3d\x77\xfa\xaf\xf2\x95\x7c\x2e\xdb\xae\x6a\xb8\x3f\x7f\x91\xaf\x64\x9b\x2f\x19\xe0\x82\xfe\x25\x7d\xb9\xd9\xae\x73\x14\xb8\xd2\xcf\x64\x9d\xd7\xcb\x9d\xc0\xbc\xd1\xcf\x64\xd1\x96\x94\x95\xd5\xe5\x9e\x52\x4f\xf0\x63\x36\x9b\x25\x3b\xc2\x67\xb6\x6d\x9b\xeb\x6a\x5d\x66\x79\x5d\x64\x1b\xc1\xd8\x7b\x4a\x4f\x35\x3d\xa5\xf4\x94\xd3\x31\x84\xb2\x20\xe4\x64\x79\xa7\xe3\xa0\x69\x21\x5c\xe5\x5d\x82\xaa\xea\x7c\x63\xa5\xf9\x33\x29\x37\x79\xb5\xe6\x09\x78\xc4\x1f\xd4\xf1\xae\xdb\x37\x98\xa6\x0b\xfd\x24\x24\x64\xfd\xcd\xb6\x04\x0e\x1e\x5d\xd1\x57\xb2\xc8\xb7\xfd\x62\x95\x73\x3f\xe5\x2b\x21\xa0\x6d\x43\xc8\x68\xda\x1b\xc0\xd9\x8f\xa4\x69\x97\x79\x5d\xfd\x23\xef\x05\x41\xe7\xc1\xcf\x64\x53\xb5\x6d\xc3\xb8\x3d\xc3\x47\x42\x43\xcf\xb8\x1e\x4a\x79\x4b\x58\x08\x6a\xe1\x9c\x4d\xb5\x6c\x05\x8d\x9c\x79\x86\x5f\x5c\x0b\xe7\x5d\x37\xed\x27\xcd\x78\xc1\x9f\x83\xa2\xd4\x09\xcd\x8d\xdb\xcf\x6b\x42\xbc\xe6\x9e\xe1\x47\x04\xd0\x25\x79\xb1\x21\x54\x6e\xf3\xba\x64\x1c\x1d\xf3\x2f\xc2\x0b\xfd\x4a\x94\x9e\xb2\xae\xec\xfb\xaa\x5e\x32\xb2\x8f\x25\x29\xbd\xd4\xa4\x24\xc8\x73\x69\x37\xcd\xce\x4d\x27\xa5\xff\x8d\x7e\xa6\x17\xf2\x53\xf2\x82\x42\xc8\x74\x25\x79\x24\x5d\x76\x5d\x96\x85\x8c\xa5\x4b\x5f\xd0\x77\xb2\xdd\xad\xd7\x84\xb5\xdf\x77\x65\xd7\x73\xa1\x0b\xfa\x4d\xe3\x97\xdf\x49\xd5\x75\xf4\x41\xc9\xaf\xf1\x91\xd0\xd4\xd5\x0b\x0c\xe6\x04\x1f\x49\xf2\xa1\x2b\xf3\x76\xb1\xfa\x98\xc8\x7f\xf4\x95\x3f\x98\xf6\x0e\x4d\x2a\x13\x92\x12\x91\xb4\x60\x0d\x24\x8b\xa6\xe0\x1f\x27\xf4\x8f\xaa\xae\xea\xae\xa7\xd5\xf6\x31\xd1\x0f\x06\x93\x2f\x99\x80\xbe\xea\x81\x05\x4d\xc4\xd2\xed\x78\x06\xd3\x17\x55\xdb\xf5\x8f\xfa\x8a\x88\xf5\xdd\xae\x4e\x78\x7c\xb4\xd2\xb2\x62\x6e\x0c\xe8\x65\x43\x28\x42\x72\x4b\xe3\x3b\xbb\xb9\xfc\xf3\x9b\xa3\xf4\x82\xb8\xd0\xb2\x2d\xf1\x4d\x7f\xa8\xc4\x4f\x29\x55\x76\x55\x9d\x3e\x9f\x25\x54\xd6\xda\x3b\xcd\xfb\x7c\x9e\x77\xa5\x47\x2e\x67\x0a\x8d\xbb\x3c\x50\x3a\xf3\x35\xf0\xb0\xae\x8f\x46\x3d\xb5\x4e\xa8\x0e\x5d\x5d\xae\x8e\xb7\xbc\xc4\x28\x9d\xd9\x1a\x0a\x5f\xac\x4b\x4e\xa7\xaa\xd2\xd7\x6f\xdf\x9e\x9f\x3e\x4f\xcb\x7a\x59\xd5\x65\xba\xaf\xfa\x55\xba\xeb\xaf\xff\x6b\xb6\x2c\xeb\xb2\x25\x2e\xb7\xa8\x52\x5a\x59\x2d\xd1\x43\x4a\xe4\x2d\x43\x9c\x25\x5d\xb7\x26\x0e\x00\x24\x5f\x5e\xbe\x49\xcf\x18\xd1\xdb\xbc\x5f\xa1\x23\xfd\x2a\xe9\x7e\x5f\x33\xa2\x5c\x83\x57\xab\x32\x05\xad\x01\xa8\xb9\x1e\xe2\x25\x2d\xb4\xaf\xb3\xa4\x6c\xdb\x8c\x18\x54\x7f\xc3\x68\xd6\x3a\x0f\x41\x4b\x75\x44\x4c\x75\xd3\xa7\xf3\x32\x45\x39\xa9\xa2\xaa\x3f\xe7\xeb\xaa\x20\x64\x7b\x84\xc4\x65\x91\x58\x34\x34\x6f\x5c\x9a\x26\xbe\xd9\x63\xa8\xf9\x82\xf8\x6b\x97\xde\x9b\xdd\x03\x43\xbb\xf7\xe8\xde\x2c\xa9\x9b\x4c\x16\x21\xb3\xbe\xa2\xea\xf2\x39\xb1\x41\x61\xcb\xad\x31\x15\x5a\x27\xd6\x15\x85\x48\x23\x08\xc6\x2d\xb3\x7a\x70\x58\x9a\x6e\xaa\x3d\x45\xa5\xb6\x2b\x84\x63\xb7\x25\xef\xe6\x57\x56\xbd\x4b\x18\x8d\x39\xb1\x09\x33\xea\x3a\xde\x6e\xd7\xd5\x42\x9a\x7e\x29\x79\x9e\xd0\x78\x0f\x55\xa4\x84\x70\x20\x14\xcb\x0b\xc8\x85\x7a\xcd\x5c\x21\x8d\xd8\x28\xca\xaf\x4a\xda\x06\x56\xbb\xa5\x30\xff\x75\xb3\x2b\xbe\xc3\x7a\xb5\x99\xf3\xcb\x35\x7d\xd7\x50\x87\x41\x1d\x0e\xc0\x37\x71\x4c\xeb\x8e\xb7\xed\xb6\xdc\x34\x3d\x23\x4e\x8b\x55\x34\x3d\xfb\x8a\x32\x69\xa4\x5d\xfe\x99\xb8\x4e\xdf\xa4\xfd\xaa\xea\x08\xc7\x6d\xb9\xe0\x8a\x89\x41\xec\x68\xc3\x94\x65\x41\xcb\x54\x96\x86\xa5\xc5\x34\x08\xa8\xcd\x8e\x56\xd3\x8a\x2a\x63\xc4\xb3\xec\x40\x55\x4e\xf5\x13\x43\xa2\x7a\xb0\xca\x69\xe5\x36\xb4\x37\xf1\x44\x9f\xe2\x43\x7f\x87\xf5\x53\xaf\xf2\xeb\x6b\xea\x55\x47\xab\xe2\x55\xba\x58\x37\xb4\xa4\xde\xbf\x7b\xd3\xf1\x82\x59\x65\xdb\xa6\xc5\x46\x4f\x59\x17\xf4\xe9\xd2\x02\x44\x33\x44\xbd\xdb\xcc\xe9\xd7\x7e\x55\x11\x1f\x04\xda\xb9\x04\xcb\x33\x94\x4a\x4d\xec\x3a\x9a\xc2\xa3\x94\x96\x30\x8d\x80\x50\x06\x02\xe0\x31\x18\xd5\x31\xf8\x35\xd1\xd8\xae\xa5\xe5\xb4\xea\xfb\xad\xb5\xfc\xea\xea\xea\x42\x9a\x76\xa9\xb7\xb5\x9d\x07\x94\x81\x39\x58\xb3\xe8\x51\xa7\x4d\x3d\x03\x91\xec\xda\xf5\x80\x7e\x68\xac\x96\x73\x00\x2f\xdc\x85\xc7\xfc\xe7\xd2\xa3\x07\x78\xee\x48\x3e\xdb\x83\x9a\x08\xc7\x2Line truncated var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\xbd\xeb\x72\xdc\x48\xae\x27\xfe\x9d\x4f\xc1\xf6\x09\xff\xdd\x8e\x90\xcb\xd1\xdd\xff\xbd\x44\x87\xed\x5e\x59\x6a\x5f\xe6\x58\x96\xc6\x92\x67\x76\xd6\xe1\x60\xb3\x8a\x54\x15\xc7\x55\x64\x35\xc9\x72\x59\x73\xe2\x44\xec\x6b\xec\xeb\xed\x93\x2c\xf0\x03\x90\x17\x92\x25\xd9\x3d\x27\x76\xbf\x48\xac\x4c\xe4\x0d\x89\x44\x02\x48\x24\x32\xdf\x6e\xb3\xa2\xec\x16\xe9\xd3\xf4\x38\xdd\xe6\x55\xbd\x2e\xbb\x2e\xed\xca\xf5\xf5\xa3\x55\xd3\xf5\x65\x91\xbe\xac\x7a\xfa\xdd\x7e\xae\x16\x65\x92\xac\x9a\x4d\x49\xa0\xaf\xe8\x5f\x52\xe4\xdd\x6a\xde\xe4\x6d\x41\x09\xa7\xf6\x9d\x94\x5f\xb6\xeb\xa6\x65\xa0\x5f\xe5\x2b\x59\x95\xeb\x2d\x97\xa1\x7f\x49\x57\x2d\xeb\xac\xaa\xe9\xe7\x25\x7d\xa5\xaf\xeb\xa4\x6b\x16\x55\xbe\xce\x82\x0c\x24\x58\xfe\xcf\xe9\x8f\x75\x91\x5e\xf6\xe5\x36\x7d\xd2\x6d\xf2\xf5\xfa\x59\xde\xa1\x48\x5f\xa6\xf9\x62\xd1\xec\xea\xfe\xc9\x63\xc9\x90\xca\x9b\x5d\x6f\xb5\x9f\xef\x7a\x49\xdb\x6d\x2d\xe9\xfd\x36\x69\xcb\x65\x45\x03\x6b\x29\xe9\x9d\x7e\x26\xfb\x72\xde\x55\x3d\x77\xfa\xaf\xf2\x95\x7c\x2e\xdb\xae\x6a\xb8\x3f\x7f\x91\xaf\x64\x9b\x2f\x19\xe0\x82\xfe\x25\x7d\xb9\xd9\xae\x73\x14\xb8\xd2\xcf\x64\x9d\xd7\xcb\x9d\xc0\xbc\xd1\xcf\x64\xd1\x96\x94\x95\xd5\xe5\x9e\x52\x4f\xf0\x63\x36\x9b\x25\x3b\xc2\x67\xb6\x6d\x9b\xeb\x6a\x5d\x66\x79\x5d\x64\x1b\xc1\xd8\x7b\x4a\x4f\x35\x3d\xa5\xf4\x94\xd3\x31\x84\xb2\x20\xe4\x64\x79\xa7\xe3\xa0\x69\x21\x5c\xe5\x5d\x82\xaa\xea\x7c\x63\xa5\xf9\x33\x29\x37\x79\xb5\xe6\x09\x78\xc4\x1f\xd4\xf1\xae\xdb\x37\x98\xa6\x0b\xfd\x24\x24\x64\xfd\xcd\xb6\x04\x0e\x1e\x5d\xd1\x57\xb2\xc8\xb7\xfd\x62\x95\x73\x3f\xe5\x2b\x21\xa0\x6d\x43\xc8\x68\xda\x1b\xc0\xd9\x8f\xa4\x69\x97\x79\x5d\xfd\x23\xef\x05\x41\xe7\xc1\xcf\x64\x53\xb5\x6d\xc3\xb8\x3d\xc3\x47\x42\x43\xcf\xb8\x1e\x4a\x79\x4b\x58\x08\x6a\xe1\x9c\x4d\xb5\x6c\x05\x8d\x9c\x79\x86\x5f\x5c\x0b\xe7\x5d\x37\xed\x27\xcd\x78\xc1\x9f\x83\xa2\xd4\x09\xcd\x8d\xdb\xcf\x6b\x42\xbc\xe6\x9e\xe1\x47\x04\xd0\x25\x79\xb1\x21\x54\x6e\xf3\xba\x64\x1c\x1d\xf3\x2f\xc2\x0b\xfd\x4a\x94\x9e\xb2\xae\xec\xfb\xaa\x5e\x32\xb2\x8f\x25\x29\xbd\xd4\xa4\x24\xc8\x73\x69\x37\xcd\xce\x4d\x27\xa5\xff\x8d\x7e\xa6\x17\xf2\x53\xf2\x82\x42\xc8\x74\x25\x79\x24\x5d\x76\x5d\x96\x85\x8c\xa5\x4b\x5f\xd0\x77\xb2\xdd\xad\xd7\x84\xb5\xdf\x77\x65\xd7\x73\xa1\x0b\xfa\x4d\xe3\x97\xdf\x49\xd5\x75\xf4\x41\xc9\xaf\xf1\x91\xd0\xd4\xd5\x0b\x0c\xe6\x04\x1f\x49\xf2\xa1\x2b\xf3\x76\xb1\xfa\x98\xc8\x7f\xf4\x95\x3f\x98\xf6\x0e\x4d\x2a\x13\x92\x12\x91\xb4\x60\x0d\x24\x8b\xa6\xe0\x1f\x27\xf4\x8f\xaa\xae\xea\xae\xa7\xd5\xf6\x31\xd1\x0f\x06\x93\x2f\x99\x80\xbe\xea\x81\x05\x4d\xc4\xd2\xed\x78\x06\xd3\x17\x55\xdb\xf5\x8f\xfa\x8a\x88\xf5\xdd\xae\x4e\x78\x7c\xb4\xd2\xb2\x62\x6e\x0c\xe8\x65\x43\x28\x42\x72\x4b\xe3\x3b\xbb\xb9\xfc\xf3\x9b\xa3\xf4\x82\xb8\xd0\xb2\x2d\xf1\x4d\x7f\xa8\xc4\x4f\x29\x55\x76\x55\x9d\x3e\x9f\x25\x54\xd6\xda\x3b\xcd\xfb\x7c\x9e\x77\xa5\x47\x2e\x67\x0a\x8d\xbb\x3c\x50\x3a\xf3\x35\xf0\xb0\xae\x8f\x46\x3d\xb5\x4e\xa8\x0e\x5d\x5d\xae\x8e\xb7\xbc\xc4\x28\x9d\xd9\x1a\x0a\x5f\xac\x4b\x4e\xa7\xaa\xd2\xd7\x6f\xdf\x9e\x9f\x3e\x4f\xcb\x7a\x59\xd5\x65\xba\xaf\xfa\x55\xba\xeb\xaf\xff\x6b\xb6\x2c\xeb\xb2\x25\x2e\xb7\xa8\x52\x5a\x59\x2d\xd1\x43\x4a\xe4\x2d\x43\x9c\x25\x5d\xb7\x26\x0e\x00\x24\x5f\x5e\xbe\x49\xcf\x18\xd1\xdb\xbc\x5f\xa1\x23\xfd\x2a\xe9\x7e\x5f\x33\xa2\x5c\x83\x57\xab\x32\x05\xad\x01\xa8\xb9\x1e\xe2\x25\x2d\xb4\xaf\xb3\xa4\x6c\xdb\x8c\x18\x54\x7f\xc3\x68\xd6\x3a\x0f\x41\x4b\x75\x44\x4c\x75\xd3\xa7\xf3\x32\x45\x39\xa9\xa2\xaa\x3f\xe7\xeb\xaa\x20\x64\x7b\x84\xc4\x65\x91\x58\x34\x34\x6f\x5c\x9a\x26\xbe\xd9\x63\xa8\xf9\x82\xf8\x6b\x97\xde\x9b\xdd\x03\x43\xbb\xf7\xe8\xde\x2c\xa9\x9b\x4c\x16\x21\xb3\xbe\xa2\xea\xf2\x39\xb1\x41\x61\xcb\xad\x31\x15\x5a\x27\xd6\x15\x85\x48\x23\x08\xc6\x2d\xb3\x7a\x70\x58\x9a\x6e\xaa\x3d\x45\xa5\xb6\x2b\x84\x63\xb7\x25\xef\xe6\x57\x56\xbd\x4b\x18\x8d\x39\xb1\x09\x33\xea\x3a\xde\x6e\xd7\xd5\x42\x9a\x7e\x29\x79\x9e\xd0\x78\x0f\x55\xa4\x84\x70\x20\x14\xcb\x0b\xc8\x85\x7a\xcd\x5c\x21\x8d\xd8\x28\xca\xaf\x4a\xda\x06\x56\xbb\xa5\x30\xff\x75\xb3\x2b\xbe\xc3\x7a\xb5\x99\xf3\xcb\x35\x7d\xd7\x50\x87\x41\x1d\x0e\xc0\x37\x71\x4c\xeb\x8e\xb7\xed\xb6\xdc\x34\x3d\x23\x4e\x8b\x55\x34\x3d\xfb\x8a\x32\x69\xa4\x5d\xfe\x99\xb8\x4e\xdf\xa4\xfd\xaa\xea\x08\xc7\x6d\xb9\xe0\x8a\x89\x41\xec\x68\xc3\x94\x65\x41\xcb\x54\x96\x86\xa5\xc5\x34\x08\xa8\xcd\x8e\x56\xd3\x8a\x2a\x63\xc4\xb3\xec\x40\x55\x4e\xf5\x13\x43\xa2\x7a\xb0\xca\x69\xe5\x36\xb4\x37\xf1\x44\x9f\xe2\x43\x7f\x87\xf5\x53\xaf\xf2\xeb\x6b\xea\x55\x47\xab\xe2\x55\xba\x58\x37\xb4\xa4\xde\xbf\x7b\xd3\xf1\x82\x59\x65\xdb\xa6\xc5\x46\x4f\x59\x17\xf4\xe9\xd2\x02\x44\x33\x44\xbd\xdb\xcc\xe9\xd7\x7e\x55\x11\x1f\x04\xda\xb9\x04\xcb\x33\x94\x4a\x4d\xec\x3a\x9a\xc2\xa3\x94\x96\x30\x8d\x80\x50\x06\x02\xe0\x31\x18\xd5\x31\xf8\x35\xd1\xd8\xae\xa5\xe5\xb4\xea\xfb\xad\xb5\xfc\xea\xea\xea\x42\x9a\x76\xa9\xb7\xb5\x9d\x07\x94\x81\x39\x58\xb3\xe8\x51\xa7\x4d\x3d\x03\x91\xec\xda\xf5\x80\x7e\x68\xac\x96\x73\x00\x2f\xdc\x85\xc7\xfc\xe7\xd2\xa3\x07\x78\xee\x48\x3e\xdb\x83\x9a\x08\xc7\x2Line truncated
func confLocaleLocale_enUsIniBytes() ([]byte, error) { func confLocaleLocale_enUsIniBytes() ([]byte, error) {
return bindataRead( return bindataRead(
@@ -4379,7 +4379,7 @@ func confLocaleLocale_enUsIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 43237, mode: os.FileMode(420), modTime: time.Unix(1442150578, 0)} info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 43297, mode: os.FileMode(420), modTime: time.Unix(1442154588, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
+2 -2
View File
@@ -421,7 +421,7 @@ var Service struct {
EnableReverseProxyAuth bool EnableReverseProxyAuth bool
EnableReverseProxyAutoRegister bool EnableReverseProxyAutoRegister bool
DisableMinimumKeySizeCheck bool DisableMinimumKeySizeCheck bool
DisableCaptcha bool EnableCaptcha bool
} }
func newService() { func newService() {
@@ -435,7 +435,7 @@ func newService() {
Service.EnableReverseProxyAuth = sec.Key("ENABLE_REVERSE_PROXY_AUTHENTICATION").MustBool() Service.EnableReverseProxyAuth = sec.Key("ENABLE_REVERSE_PROXY_AUTHENTICATION").MustBool()
Service.EnableReverseProxyAutoRegister = sec.Key("ENABLE_REVERSE_PROXY_AUTO_REGISTRATION").MustBool() Service.EnableReverseProxyAutoRegister = sec.Key("ENABLE_REVERSE_PROXY_AUTO_REGISTRATION").MustBool()
Service.DisableMinimumKeySizeCheck = sec.Key("DISABLE_MINIMUM_KEY_SIZE_CHECK").MustBool() Service.DisableMinimumKeySizeCheck = sec.Key("DISABLE_MINIMUM_KEY_SIZE_CHECK").MustBool()
Service.DisableCaptcha = sec.Key("DISABLE_CAPTCHA").MustBool() Service.EnableCaptcha = sec.Key("ENABLE_CAPTCHA").MustBool()
} }
var logLevels = map[string]string{ var logLevels = map[string]string{
+9 -3
View File
@@ -458,20 +458,26 @@ function initAdmin() {
} }
// New user // New user
if ($('.admin.new.user').length > 0) { if ($('.admin.new.user').length > 0 ||
$('.admin.edit.user').length > 0) {
$('#login_type').change(function () { $('#login_type').change(function () {
if ($(this).val().substring(0, 1) == '0') { if ($(this).val().substring(0, 1) == '0') {
$('#login_name').removeAttr('required'); $('#login_name').removeAttr('required');
$('#password').attr('required', 'required');
$('.non-local').hide(); $('.non-local').hide();
$('.local').show(); $('.local').show();
$('#user_name').focus(); $('#user_name').focus();
if($(this).data('password')=="required"){
$('#password').attr('required', 'required');
}
} else { } else {
$('#login_name').attr('required', 'required'); $('#login_name').attr('required', 'required');
$('#password').removeAttr('required');
$('.non-local').show(); $('.non-local').show();
$('.local').hide(); $('.local').hide();
$('#login_name').focus(); $('#login_name').focus();
$('#password').removeAttr('required');
} }
}); });
} }
+45 -32
View File
@@ -122,30 +122,44 @@ func NewUserPost(ctx *middleware.Context, form auth.AdminCrateUserForm) {
ctx.Redirect(setting.AppSubUrl + "/admin/users/" + com.ToStr(u.Id)) ctx.Redirect(setting.AppSubUrl + "/admin/users/" + com.ToStr(u.Id))
} }
func prepareUserInfo(ctx *middleware.Context) *models.User {
u, err := models.GetUserByID(ctx.ParamsInt64(":userid"))
if err != nil {
ctx.Handle(500, "GetUserByID", err)
return nil
}
ctx.Data["User"] = u
if u.LoginSource > 0 {
ctx.Data["LoginSource"], err = models.GetLoginSourceByID(u.LoginSource)
if err != nil {
ctx.Handle(500, "GetLoginSourceByID", err)
return nil
}
} else {
ctx.Data["LoginSource"] = &models.LoginSource{}
}
sources, err := models.LoginSources()
if err != nil {
ctx.Handle(500, "LoginSources", err)
return nil
}
ctx.Data["Sources"] = sources
return u
}
func EditUser(ctx *middleware.Context) { func EditUser(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("admin.users.edit_account") ctx.Data["Title"] = ctx.Tr("admin.users.edit_account")
ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminUsers"] = true ctx.Data["PageIsAdminUsers"] = true
uid := com.StrTo(ctx.Params(":userid")).MustInt64() prepareUserInfo(ctx)
if uid == 0 { if ctx.Written() {
ctx.Handle(404, "EditUser", nil)
return return
} }
u, err := models.GetUserByID(uid)
if err != nil {
ctx.Handle(500, "GetUserByID", err)
return
}
ctx.Data["User"] = u
sources, err := models.LoginSources()
if err != nil {
ctx.Handle(500, "LoginSources", err)
return
}
ctx.Data["LoginSources"] = sources
ctx.HTML(200, USER_EDIT) ctx.HTML(200, USER_EDIT)
} }
@@ -154,25 +168,28 @@ func EditUserPost(ctx *middleware.Context, form auth.AdminEditUserForm) {
ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminUsers"] = true ctx.Data["PageIsAdminUsers"] = true
uid := com.StrTo(ctx.Params(":userid")).MustInt64() u := prepareUserInfo(ctx)
if uid == 0 { if ctx.Written() {
ctx.Handle(404, "EditUser", nil)
return return
} }
u, err := models.GetUserByID(uid)
if err != nil {
ctx.Handle(500, "GetUserById", err)
return
}
ctx.Data["User"] = u
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, USER_EDIT) ctx.HTML(200, USER_EDIT)
return return
} }
// FIXME: need password length check fields := strings.Split(form.LoginType, "-")
if len(fields) == 2 {
loginType := models.LoginType(com.StrTo(fields[0]).MustInt())
loginSource := com.StrTo(fields[1]).MustInt64()
if u.LoginSource != loginSource {
u.LoginSource = loginSource
u.LoginType = loginType
u.LoginName = form.LoginName
}
}
if len(form.Password) > 0 { if len(form.Password) > 0 {
u.Passwd = form.Password u.Passwd = form.Password
u.Salt = models.GetUserSalt() u.Salt = models.GetUserSalt()
@@ -183,11 +200,6 @@ func EditUserPost(ctx *middleware.Context, form auth.AdminEditUserForm) {
u.Email = form.Email u.Email = form.Email
u.Website = form.Website u.Website = form.Website
u.Location = form.Location u.Location = form.Location
if len(form.Avatar) == 0 {
form.Avatar = form.Email
}
u.Avatar = base.EncodeMd5(form.Avatar)
u.AvatarEmail = form.Avatar
u.IsActive = form.Active u.IsActive = form.Active
u.IsAdmin = form.Admin u.IsAdmin = form.Admin
u.AllowGitHook = form.AllowGitHook u.AllowGitHook = form.AllowGitHook
@@ -202,6 +214,7 @@ func EditUserPost(ctx *middleware.Context, form auth.AdminEditUserForm) {
return return
} }
log.Trace("Account profile updated by admin(%s): %s", ctx.User.Name, u.Name) log.Trace("Account profile updated by admin(%s): %s", ctx.User.Name, u.Name)
ctx.Flash.Success(ctx.Tr("admin.users.update_profile_success")) ctx.Flash.Success(ctx.Tr("admin.users.update_profile_success"))
ctx.Redirect(setting.AppSubUrl + "/admin/users/" + ctx.Params(":userid")) ctx.Redirect(setting.AppSubUrl + "/admin/users/" + ctx.Params(":userid"))
} }
+3 -3
View File
@@ -151,7 +151,7 @@ func oauthSignUp(ctx *middleware.Context, sid int64) {
func SignUp(ctx *middleware.Context) { func SignUp(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("sign_up") ctx.Data["Title"] = ctx.Tr("sign_up")
ctx.Data["DisableCaptcha"] = setting.Service.DisableCaptcha ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
if setting.Service.DisableRegistration { if setting.Service.DisableRegistration {
ctx.Data["DisableRegistration"] = true ctx.Data["DisableRegistration"] = true
@@ -170,7 +170,7 @@ func SignUp(ctx *middleware.Context) {
func SignUpPost(ctx *middleware.Context, cpt *captcha.Captcha, form auth.RegisterForm) { func SignUpPost(ctx *middleware.Context, cpt *captcha.Captcha, form auth.RegisterForm) {
ctx.Data["Title"] = ctx.Tr("sign_up") ctx.Data["Title"] = ctx.Tr("sign_up")
ctx.Data["DisableCaptcha"] = setting.Service.DisableCaptcha ctx.Data["EnableCaptcha"] = setting.Service.EnableCaptcha
if setting.Service.DisableRegistration { if setting.Service.DisableRegistration {
ctx.Error(403) ctx.Error(403)
@@ -188,7 +188,7 @@ func SignUpPost(ctx *middleware.Context, cpt *captcha.Captcha, form auth.Registe
return return
} }
if !setting.Service.DisableCaptcha && !cpt.VerifyReq(ctx.Req) { if setting.Service.EnableCaptcha && !cpt.VerifyReq(ctx.Req) {
ctx.Data["Err_Captcha"] = true ctx.Data["Err_Captcha"] = true
ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), SIGNUP, &form) ctx.RenderWithErr(ctx.Tr("form.captcha_incorrect"), SIGNUP, &form)
return return
+1 -1
View File
@@ -1 +1 @@
0.6.11.0913 Beta 0.6.12.0913 Beta
+96 -89
View File
@@ -1,93 +1,100 @@
{{template "ng/base/head" .}} {{template "base/head" .}}
{{template "ng/base/header" .}} <div class="admin edit user">
<div id="admin-wrapper"> <div class="ui container">
<div id="setting-wrapper" class="main-wrapper"> <div class="ui grid">
<div id="admin-setting" class="container clear"> {{template "admin/navbar" .}}
{{template "admin/nav" .}} <div class="twelve wide column content">
<div class="grid-4-5 left"> {{template "base/alert" .}}
<div class="setting-content"> <h4 class="ui top attached header">
{{template "ng/base/alert" .}} {{.i18n.Tr "admin.users.edit_account"}}
<div id="setting-content"> </h4>
<div class="panel panel-radius"> <div class="ui attached segment">
<div class="panel-header"> <form class="ui form" action="{{.Link}}" method="post">
<strong>{{.i18n.Tr "admin.users.edit_account"}}</strong> {{.CsrfTokenHtml}}
</div> <div class="inline field {{if .Err_UserName}}error{{end}}">
<form class="form form-align panel-body" id="user-profile-form" action="{{AppSubUrl}}/admin/users/{{.User.Id}}" method="post" data-delete-url="{{AppSubUrl}}/admin/users/{{.User.Id}}/delete"> <label for="user_name">{{.i18n.Tr "username"}}</label>
{{.CsrfTokenHtml}} <span>{{.User.Name}}</span>
<div class="field"> </div>
<label class="req">{{.i18n.Tr "admin.users.auth_source"}}</label> <!-- Types and name -->
<select id="login-type" name="logintype"> <div class="inline required field {{if .Err_LoginType}}error{{end}}">
<option value="0-0">{{.i18n.Tr "admin.users.local"}}</option> <label>{{.i18n.Tr "admin.users.auth_source"}}</label>
{{$tp := .User.LoginSource}} <div class="ui selection type dropdown">
{{range $key, $val := .LoginSources}} <input type="hidden" id="login_type" name="login_type" value="{{.LoginSource.Type}}-{{.LoginSource.ID}}" required>
<option value="{{$val.Type}}-{{$val.ID}}"{{if eq $val.ID $tp}} selected{{end}}>{{$val.Name}}</option> <div class="text">{{.i18n.Tr "admin.users.local"}}</div>
{{end}} <i class="dropdown icon"></i>
</select> <div class="menu">
</div> <div class="item" data-value="0-0">{{.i18n.Tr "admin.users.local"}}</div>
<div class="field"> {{range .Sources}}
<label for="loginname">{{.i18n.Tr "admin.users.auth_login_name"}}</label> <div class="item" data-value="{{.Type}}-{{.ID}}">{{.Name}}</div>
<input class="ipt ipt-large ipt-radius {{if .Err_LoginName}}ipt-error{{end}}" id="loginname" name="loginname" value="{{.User.LoginName}}" /> {{end}}
</div> </div>
<div class="field"> </div>
<label>{{.i18n.Tr "username"}}</label> </div>
<label class="text-left">{{.User.Name}}</label> <div class="required non-local field {{if .Err_LoginName}}error{{end}} {{if eq .User.LoginSource 0}}hide{{end}}">
</div> <label for="login_name">{{.i18n.Tr "admin.users.auth_login_name"}}</label>
<div class="field"> <input id="login_name" name="login_name" value="{{.User.LoginName}}" autofocus>
<label for="full-name">{{.i18n.Tr "settings.full_name"}}</label> </div>
<input class="ipt ipt-large ipt-radius {{if .Err_FullName}}ipt-error{{end}}" id="full-name" name="fullname" type="text" value="{{.User.FullName}}" /> <div class="field {{if .Err_FullName}}error{{end}}">
</div> <label for="full_name">{{.i18n.Tr "settings.full_name"}}</label>
<div class="field"> <input id="full_name" name="full_name" value="{{.User.FullName}}">
<label class="req" for="email">{{.i18n.Tr "email"}}</label> </div>
<input class="ipt ipt-large ipt-radius {{if .Err_Email}}ipt-error{{end}}" id="email" name="email" type="email" value="{{.User.Email}}" required/> <div class="required field {{if .Err_Email}}error{{end}}">
</div> <label for="email">{{.i18n.Tr "email"}}</label>
<div class="field pwd"> <input id="email" name="email" type="email" value="{{.User.Email}}" autofocus required>
<label for="password">{{.i18n.Tr "password"}}</label> </div>
<input class="ipt ipt-large ipt-radius {{if .Err_Password}}ipt-error{{end}}" id="password" name="password" type="password" /> <input class="fake" type="password">
</div> <div class="local field {{if .Err_Password}}error{{end}} {{if not (eq .User.LoginSource 0)}}hide{{end}}">
<div class="field"> <label for="password">{{.i18n.Tr "password"}}</label>
<label for="website">{{.i18n.Tr "settings.website"}}</label> <input id="password" name="password" type="password">
<input class="ipt ipt-large ipt-radius {{if .Err_Website}}ipt-error{{end}}" id="website" name="website" type="url" value="{{.User.Website}}" /> <p class="help">{{.i18n.Tr "admin.users.password_helper"}}</p>
</div> </div>
<div class="field"> <div class="field {{if .Err_Website}}error{{end}}">
<label for="location">{{.i18n.Tr "settings.location"}}</label> <label for="website">{{.i18n.Tr "settings.website"}}</label>
<input class="ipt ipt-large ipt-radius {{if .Err_Location}}ipt-error{{end}}" id="location" name="location" type="text" value="{{.User.Location}}" /> <input id="website" name="website" type="url" value="{{.User.Website}}" placeholder="e.g. http://mydomain.com or https://mydomain.com">
</div> </div>
<div class="field"> <div class="field {{if .Err_Location}}error{{end}}">
<label for="gravatar-email">Gravatar {{.i18n.Tr "email"}}</label> <label for="location">{{.i18n.Tr "settings.location"}}</label>
<input class="ipt ipt-large ipt-radius {{if .Err_Avatar}}ipt-error{{end}}" id="gravatar-email" name="avatar" type="text" value="{{.User.AvatarEmail}}" /> <input id="location" name="location" value="{{.User.Location}}">
</div> </div>
<div class="field">
<label></label> <div class="inline field">
<input type="checkbox" name="active" {{if .User.IsActive}}checked{{end}}> <div class="ui checkbox">
<strong>{{.i18n.Tr "admin.users.is_activated"}}</strong> <label><strong>{{.i18n.Tr "admin.users.is_activated"}}</strong></label>
<br> <input name="active" type="checkbox" {{if .User.IsActive}}checked{{end}}>
<label></label> </div>
<input type="checkbox" name="admin" {{if .User.IsAdmin}}checked{{end}}> </div>
<strong>{{.i18n.Tr "admin.users.is_admin"}}</strong> <div class="inline field">
<br> <div class="ui checkbox">
<label></label> <label><strong>{{.i18n.Tr "admin.users.is_admin"}}</strong></label>
<input type="checkbox" name="allow_git_hook" {{if .User.AllowGitHook}}checked{{end}}> <input name="admin" type="checkbox" {{if .User.IsAdmin}}checked{{end}}>
<strong>{{.i18n.Tr "admin.users.allow_git_hook"}}</strong> </div>
</div> </div>
<div class="field"> <div class="inline field">
<label></label> <div class="ui checkbox">
<button class="btn btn-green btn-large btn-radius">{{.i18n.Tr "admin.users.update_profile"}}</button> <label><strong>{{.i18n.Tr "admin.users.allow_git_hook"}}</strong></label>
&nbsp;&nbsp;&nbsp;&nbsp; <input name="allow_git_hook" type="checkbox" {{if or .User.IsAdmin .User.AllowGitHook}}checked{{end}}>
<button class="btn btn-large btn-red btn-radius" id="delete-account-btn" href="#delete-account-modal">{{.i18n.Tr "admin.users.delete_account"}}</button> </div>
</div> </div>
<div class="white-popup-block mfp-hide" id="delete-account-modal">
<h1 class="text-red">{{.i18n.Tr "settings.delete_account_title"}}</h1> <div class="field">
<p>{{.i18n.Tr "settings.delete_account_desc"}}</p> <button class="ui green button">{{.i18n.Tr "admin.users.update_profile"}}</button>
<br> <div class="ui red button delete-button" data-url="{{$.Link}}/delete" data-id="{{.User.Id}}">{{.i18n.Tr "admin.users.delete_account"}}</div>
<button class="btn btn-red btn-large btn-radius" id="delete-account-submit">{{.i18n.Tr "settings.continue"}}</button> </div>
<button class="btn btn-large btn-radius popup-modal-dismiss">{{.i18n.Tr "settings.cancel"}}</button> </form>
</div> </div>
</form>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{{template "ng/base/footer" .}}
<div class="ui small basic delete modal">
<div class="ui icon header">
<i class="trash icon"></i>
{{.i18n.Tr "settings.delete_account_title"}}
</div>
<div class="content">
<p>{{.i18n.Tr "settings.delete_account_desc"}}</p>
</div>
{{template "base/delete_modal_actions" .}}
</div>
{{template "base/footer" .}}
+1 -1
View File
@@ -15,7 +15,7 @@
<div class="inline required field {{if .Err_LoginType}}error{{end}}"> <div class="inline required field {{if .Err_LoginType}}error{{end}}">
<label>{{.i18n.Tr "admin.users.auth_source"}}</label> <label>{{.i18n.Tr "admin.users.auth_source"}}</label>
<div class="ui selection type dropdown"> <div class="ui selection type dropdown">
<input type="hidden" id="login_type" name="login_type" value="{{.login_type}}" required> <input type="hidden" id="login_type" name="login_type" value="{{.login_type}}" data-password="required" required>
<div class="text">{{.i18n.Tr "admin.users.local"}}</div> <div class="text">{{.i18n.Tr "admin.users.local"}}</div>
<i class="dropdown icon"></i> <i class="dropdown icon"></i>
<div class="menu"> <div class="menu">
+1 -1
View File
@@ -28,7 +28,7 @@
<label for="retype">{{.i18n.Tr "re_type"}}</label> <label for="retype">{{.i18n.Tr "re_type"}}</label>
<input id="retype" name="retype" type="password" value="{{.retype}}" required> <input id="retype" name="retype" type="password" value="{{.retype}}" required>
</div> </div>
{{if not .DisableCaptcha}} {{if .EnableCaptcha}}
<div class="inline field"> <div class="inline field">
<label></label> <label></label>
{{.Captcha.CreateHtml}} {{.Captcha.CreateHtml}}