diff --git a/controllers/AccountController.go b/controllers/AccountController.go
index 0e099a78..b22d0962 100644
--- a/controllers/AccountController.go
+++ b/controllers/AccountController.go
@@ -221,7 +221,7 @@ func (c *AccountController) Register() {
// 找回密码
func (c *AccountController) FindPassword() {
c.TplName = "account/find_password_setp1.tpl"
- mail_conf := conf.GetMailConfig()
+ mailConf := conf.GetMailConfig()
if c.Ctx.Input.IsPost() {
@@ -231,7 +231,7 @@ func (c *AccountController) FindPassword() {
if email == "" {
c.JsonResult(6005, "邮箱地址不能为空")
}
- if !mail_conf.EnableMail {
+ if !mailConf.EnableMail {
c.JsonResult(6004, "未启用邮件服务")
}
@@ -260,23 +260,23 @@ func (c *AccountController) FindPassword() {
beego.Error(err)
c.JsonResult(6008, "发送邮件失败")
}
- if count > mail_conf.MailNumber {
+ if count > mailConf.MailNumber {
c.JsonResult(6008, "发送次数太多,请稍候再试")
}
- member_token := models.NewMemberToken()
+ memberToken := models.NewMemberToken()
- member_token.Token = string(utils.Krand(32, utils.KC_RAND_KIND_ALL))
- member_token.Email = email
- member_token.MemberId = member.MemberId
- member_token.IsValid = false
- if _, err := member_token.InsertOrUpdate(); err != nil {
+ memberToken.Token = string(utils.Krand(32, utils.KC_RAND_KIND_ALL))
+ memberToken.Email = email
+ memberToken.MemberId = member.MemberId
+ memberToken.IsValid = false
+ if _, err := memberToken.InsertOrUpdate(); err != nil {
c.JsonResult(6009, "邮件发送失败")
}
data := map[string]interface{}{
"SITE_NAME": c.Option["SITE_NAME"],
- "url": conf.URLFor("AccountController.FindPassword", "token", member_token.Token, "mail", email),
+ "url": conf.URLFor("AccountController.FindPassword", "token", memberToken.Token, "mail", email),
"BaseUrl": c.BaseUrl(),
}
@@ -332,16 +332,16 @@ func (c *AccountController) FindPassword() {
//if err != nil {
// beego.Error("邮件发送失败 => ", email, err)
//}
- }(mail_conf, email, body)
+ }(mailConf, email, body)
c.JsonResult(0, "ok", conf.URLFor("AccountController.Login"))
}
token := c.GetString("token")
- mail := c.GetString("mail")
+ email := c.GetString("mail")
- if token != "" && mail != "" {
- member_token, err := models.NewMemberToken().FindByFieldFirst("token", token)
+ if token != "" && email != "" {
+ memberToken, err := models.NewMemberToken().FindByFieldFirst("token", token)
if err != nil {
beego.Error(err)
@@ -349,15 +349,15 @@ func (c *AccountController) FindPassword() {
c.TplName = "errors/error.tpl"
return
}
- sub_time := member_token.SendTime.Sub(time.Now())
+ subTime := memberToken.SendTime.Sub(time.Now())
- if !strings.EqualFold(member_token.Email, mail) || sub_time.Minutes() > float64(mail_conf.MailExpired) || !member_token.ValidTime.IsZero() {
+ if !strings.EqualFold(memberToken.Email, email) || subTime.Minutes() > float64(mailConf.MailExpired) || !memberToken.ValidTime.IsZero() {
c.Data["ErrorMessage"] = "验证码已过期,请重新操作。"
c.TplName = "errors/error.tpl"
return
}
- c.Data["Email"] = member_token.Email
- c.Data["Token"] = member_token.Token
+ c.Data["Email"] = memberToken.Email
+ c.Data["Token"] = memberToken.Token
c.TplName = "account/find_password_setp2.tpl"
}
@@ -370,7 +370,7 @@ func (c *AccountController) ValidEmail() {
password2 := c.GetString("password2")
captcha := c.GetString("code")
token := c.GetString("token")
- mail := c.GetString("mail")
+ email := c.GetString("mail")
if password1 == "" {
c.JsonResult(6001, "密码不能为空")
@@ -392,20 +392,20 @@ func (c *AccountController) ValidEmail() {
c.JsonResult(6001, "验证码不正确")
}
- mail_conf := conf.GetMailConfig()
- member_token, err := models.NewMemberToken().FindByFieldFirst("token", token)
+ mailConf := conf.GetMailConfig()
+ memberToken, err := models.NewMemberToken().FindByFieldFirst("token", token)
if err != nil {
beego.Error(err)
c.JsonResult(6007, "邮件已失效")
}
- sub_time := member_token.SendTime.Sub(time.Now())
+ subTime := memberToken.SendTime.Sub(time.Now())
- if !strings.EqualFold(member_token.Email, mail) || sub_time.Minutes() > float64(mail_conf.MailExpired) || !member_token.ValidTime.IsZero() {
+ if !strings.EqualFold(memberToken.Email, email) || subTime.Minutes() > float64(mailConf.MailExpired) || !memberToken.ValidTime.IsZero() {
c.JsonResult(6008, "验证码已过期,请重新操作。")
}
- member, err := models.NewMember().Find(member_token.MemberId)
+ member, err := models.NewMember().Find(memberToken.MemberId)
if err != nil {
beego.Error(err)
c.JsonResult(6005, "用户不存在")
@@ -420,9 +420,9 @@ func (c *AccountController) ValidEmail() {
member.Password = hash
err = member.Update("password")
- member_token.ValidTime = time.Now()
- member_token.IsValid = true
- member_token.InsertOrUpdate()
+ memberToken.ValidTime = time.Now()
+ memberToken.IsValid = true
+ memberToken.InsertOrUpdate()
if err != nil {
beego.Error(err)
diff --git a/controllers/BaseController.go b/controllers/BaseController.go
index 834c761c..b3d6a8d1 100644
--- a/controllers/BaseController.go
+++ b/controllers/BaseController.go
@@ -79,6 +79,10 @@ func (c *BaseController) Prepare() {
}
}
+//判断用户是否登录.
+func (c *BaseController)isUserLoggedIn() bool {
+ return c.Member != nil && c.Member.MemberId > 0
+}
// SetMember 获取或设置当前登录用户信息,如果 MemberId 小于 0 则标识删除 Session
func (c *BaseController) SetMember(member models.Member) {
@@ -189,6 +193,7 @@ func (c *BaseController) ShowErrorPage(errCode int, errMsg string) {
}
}
+
func (c *BaseController) CheckErrorResult(code int,err error) {
if err != nil {
c.ShowErrorPage(code, err.Error())
diff --git a/controllers/BookController.go b/controllers/BookController.go
index 69de0231..80be3d24 100644
--- a/controllers/BookController.go
+++ b/controllers/BookController.go
@@ -73,15 +73,12 @@ func (c *BookController) Dashboard() {
if key == "" {
c.Abort("404")
}
- if c.Member == nil {
- c.ShowErrorPage(500,"aaaa")
- }
+
book, err := models.NewBookResult().FindByIdentify(key, c.Member.MemberId)
if err != nil {
if err == models.ErrPermissionDenied {
c.Abort("403")
}
- beego.Error(err)
c.Abort("500")
}
@@ -172,6 +169,7 @@ func (c *BookController) SaveBook() {
book.Editor = editor
book.HistoryCount = historyCount
book.IsDownload = 0
+ book.BookPassword = c.GetString("bPassword")
if autoRelease {
book.AutoRelease = 1
@@ -282,7 +280,7 @@ func (c *BookController) Transfer() {
err = models.NewRelationship().Transfer(bookResult.BookId, c.Member.MemberId, member.MemberId)
if err != nil {
- logs.Error("Transfer => ", err)
+ logs.Error("转让项目失败 -> ", err)
c.JsonResult(6008, err.Error())
}
c.JsonResult(0, "ok")
diff --git a/controllers/DocumentController.go b/controllers/DocumentController.go
index 1a88c324..cf461f1c 100644
--- a/controllers/DocumentController.go
+++ b/controllers/DocumentController.go
@@ -1,7 +1,6 @@
package controllers
import (
- "container/list"
"encoding/json"
"html/template"
"net/http"
@@ -14,9 +13,6 @@ import (
"net/url"
"image/png"
"fmt"
- "bytes"
-
- "github.com/PuerkitoBio/goquery"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"github.com/boombuler/barcode"
@@ -49,12 +45,12 @@ func (c *DocumentController) Index() {
}
// 如果没有开启匿名访问则跳转到登录
- if !c.EnableAnonymous && !isUserLoggedIn(c) {
+ if !c.EnableAnonymous && !c.isUserLoggedIn() {
promptUserToLogIn(c)
return
}
- bookResult := isReadable(identify, token, c)
+ bookResult := c.isReadable(identify, token)
c.TplName = "document/" + bookResult.Theme + "_read.tpl"
@@ -104,12 +100,12 @@ func (c *DocumentController) Read() {
}
// 如果没有开启匿名访问则跳转到登录
- if !c.EnableAnonymous && !isUserLoggedIn(c) {
+ if !c.EnableAnonymous && !c.isUserLoggedIn() {
promptUserToLogIn(c)
return
}
- bookResult := isReadable(identify, token, c)
+ bookResult := c.isReadable(identify, token)
c.TplName = fmt.Sprintf("document/%s_read.tpl", bookResult.Theme)
@@ -246,7 +242,7 @@ func (c *DocumentController) Edit() {
if conf.GetUploadFileSize() > 0 {
c.Data["UploadFileSize"] = conf.GetUploadFileSize()
- }else{
+ } else {
c.Data["UploadFileSize"] = "undefined";
}
}
@@ -815,7 +811,7 @@ func (c *DocumentController) Export() {
token := c.GetString("token")
// 如果没有开启匿名访问则跳转到登录
- if !c.EnableAnonymous && !isUserLoggedIn(c) {
+ if !c.EnableAnonymous && !c.isUserLoggedIn() {
promptUserToLogIn(c)
return
}
@@ -836,7 +832,7 @@ func (c *DocumentController) Export() {
}
bookResult = models.NewBookResult().ToBookResult(*book)
} else {
- bookResult = isReadable(identify, token, c)
+ bookResult = c.isReadable(identify, token)
}
if !bookResult.IsDownload {
c.ShowErrorPage(200, "当前项目没有开启导出功能")
@@ -944,12 +940,12 @@ func (c *DocumentController) Search() {
c.JsonResult(6001, "参数错误")
}
- if !c.EnableAnonymous && !isUserLoggedIn(c) {
+ if !c.EnableAnonymous && !c.isUserLoggedIn() {
promptUserToLogIn(c)
return
}
- bookResult := isReadable(identify, token, c)
+ bookResult := c.isReadable(identify, token)
docs, err := models.NewDocumentSearchResult().SearchDocument(keyword, bookResult.BookId)
if err != nil {
@@ -1220,64 +1216,8 @@ func (c *DocumentController) Compare() {
}
}
-// 递归生成文档序列数组
-func RecursiveFun(parentId int, prefix, dpath string, c *DocumentController, book *models.BookResult, docs []*models.Document, paths *list.List) {
- for _, item := range docs {
- if item.ParentId == parentId {
- EachFun(prefix, dpath, c, book, item, paths)
-
- for _, sub := range docs {
- if sub.ParentId == item.DocumentId {
- prefix += strconv.Itoa(item.ParentId) + strconv.Itoa(item.OrderSort) + strconv.Itoa(item.DocumentId)
- RecursiveFun(item.DocumentId, prefix, dpath, c, book, docs, paths)
- break
- }
- }
- }
- }
-}
-
-func EachFun(prefix, dpath string, c *DocumentController, book *models.BookResult, item *models.Document, paths *list.List) {
- name := prefix + strconv.Itoa(item.ParentId) + strconv.Itoa(item.OrderSort) + strconv.Itoa(item.DocumentId)
- fpath := dpath + "/" + name + ".html"
- paths.PushBack(fpath)
-
- f, err := os.OpenFile(fpath, os.O_CREATE|os.O_RDWR, 0777)
- if err != nil {
- beego.Error(err)
- c.ShowErrorPage(500, "系统错误")
- }
-
- html, err := c.ExecuteViewPathTemplate("document/export.tpl", map[string]interface{}{"Model": book, "Lists": item, "BaseUrl": c.BaseUrl()})
- if err != nil {
- f.Close()
- beego.Error(err)
- c.ShowErrorPage(500, "系统错误")
- }
-
- buf := bytes.NewReader([]byte(html))
- doc, err := goquery.NewDocumentFromReader(buf)
- doc.Find("img").Each(func(i int, contentSelection *goquery.Selection) {
- if src, ok := contentSelection.Attr("src"); ok && strings.HasPrefix(src, "/uploads/") {
- contentSelection.SetAttr("src", c.BaseUrl()+src)
- }
- })
-
- html, err = doc.Html()
- if err != nil {
- f.Close()
- beego.Error(err)
- c.ShowErrorPage(500, "系统错误")
- }
-
- // html = strings.Replace(html, "", err)
+ }
+ c.CustomAbort(200, body)
+ }
+ } else {
+ c.ShowErrorPage(403, "权限不足")
+ }
}
}
- //// 判断是否需要显示评论框
- //if bookResult.CommentStatus == "closed" {
- // bookResult.IsDisplayComment = false
- //} else if bookResult.CommentStatus == "open" {
- // bookResult.IsDisplayComment = true
- //} else if bookResult.CommentStatus == "group_only" {
- // bookResult.IsDisplayComment = bookResult.RelationshipId > 0
- //} else if bookResult.CommentStatus == "registered_only" {
- // bookResult.IsDisplayComment = true
- //}
-
return bookResult
}
-func isUserLoggedIn(c *DocumentController) bool {
- return c.Member != nil && c.Member.MemberId > 0
-}
-
func promptUserToLogIn(c *DocumentController) {
beego.Info("Access " + c.Ctx.Request.URL.RequestURI() + " not permitted.")
beego.Info(" Access will be redirected to login page(SessionId: " + c.CruSession.SessionID() + ").")
diff --git a/models/BookModel.go b/models/BookModel.go
index 5f96c43b..ffeb7b17 100644
--- a/models/BookModel.go
+++ b/models/BookModel.go
@@ -47,6 +47,8 @@ type Book struct {
PrivatelyOwned int `orm:"column(privately_owned);type(int);default(0)" json:"privately_owned"`
// 当项目是私有时的访问Token.
PrivateToken string `orm:"column(private_token);size(500);null" json:"private_token"`
+ //访问密码.
+ BookPassword string `orm:"column(book_password);size(500);null" json:"book_password"`
//状态:0 正常/1 已删除
Status int `orm:"column(status);type(int);default(0)" json:"status"`
//默认的编辑器.
@@ -919,7 +921,7 @@ where mtr.book_id = ? and mtm.member_id = ? order by mtm.role_id asc limit 1;`
if err != nil {
beego.Error("查询用户项目角色出错 -> book_id=", bookId, " member_id=", memberId, err)
- return 0, nil
+ return 0, err
}
return conf.BookRole(roleId), nil
}
diff --git a/models/BookResult.go b/models/BookResult.go
index 16ae940b..49976596 100644
--- a/models/BookResult.go
+++ b/models/BookResult.go
@@ -39,6 +39,7 @@ type BookResult struct {
Publisher string `json:"publisher"`
PrivatelyOwned int `json:"privately_owned"`
PrivateToken string `json:"private_token"`
+ BookPassword string `json:"book_password"`
DocCount int `json:"doc_count"`
CommentStatus string `json:"comment_status"`
CommentCount int `json:"comment_count"`
@@ -93,11 +94,11 @@ func (m *BookResult) FindByIdentify(identify string, memberId int) (*BookResult,
err := NewBook().QueryTable().Filter("identify", identify).One(&book)
if err != nil {
- beego.Error("获取项目失败 ->",err)
+ beego.Error("获取项目失败 ->", err)
return m, err
}
- roleId,err := NewBook().FindForRoleId(book.BookId,memberId)
+ roleId, err := NewBook().FindForRoleId(book.BookId, memberId)
if err != nil {
return m, ErrPermissionDenied
@@ -126,7 +127,6 @@ func (m *BookResult) FindByIdentify(identify string, memberId int) (*BookResult,
m.RealName = member.RealName
}
-
if m.RoleId == conf.BookFounder {
m.RoleName = "创始人"
} else if m.RoleId == conf.BookAdmin {
@@ -185,6 +185,7 @@ func (m *BookResult) ToBookResult(book Book) *BookResult {
m.Description = strings.Replace(book.Description, "\r\n", "
", -1)
m.PrivatelyOwned = book.PrivatelyOwned
m.PrivateToken = book.PrivateToken
+ m.BookPassword = book.BookPassword
m.DocCount = book.DocCount
m.CommentStatus = book.CommentStatus
m.CommentCount = book.CommentCount
diff --git a/views/book/edit.tpl b/views/book/edit.tpl
deleted file mode 100644
index e69de29b..00000000
diff --git a/views/book/setting.tpl b/views/book/setting.tpl
index 97910dfe..5d877305 100644
--- a/views/book/setting.tpl
+++ b/views/book/setting.tpl
@@ -26,7 +26,7 @@
没有访问权限访问项目时需要提供的密码
+