diff --git a/app/cmd/main.go b/app/cmd/main.go
index 7b9df89..4929262 100644
--- a/app/cmd/main.go
+++ b/app/cmd/main.go
@@ -1,9 +1,9 @@
package main
import (
- "github.com/revel/revel"
- "github.com/revel/cmd/harness"
"fmt"
+ "github.com/revel/cmd/harness"
+ "github.com/revel/revel"
)
func main() {
@@ -15,5 +15,5 @@ func main() {
panic(err)
}
fmt.Println("Ok")
-// panicOnError(reverr, "Failed to build")
-}
\ No newline at end of file
+ // panicOnError(reverr, "Failed to build")
+}
diff --git a/app/controllers/AlbumController.go b/app/controllers/AlbumController.go
index 43aa3fc..dcd097c 100644
--- a/app/controllers/AlbumController.go
+++ b/app/controllers/AlbumController.go
@@ -16,7 +16,7 @@ type Album struct {
// 图片管理, iframe
func (c Album) Index() revel.Result {
- c.SetLocale();
+ c.SetLocale()
return c.RenderTemplate("album/index.html")
}
diff --git a/app/controllers/AttachController.go b/app/controllers/AttachController.go
index 97d18f9..3852fad 100644
--- a/app/controllers/AttachController.go
+++ b/app/controllers/AttachController.go
@@ -2,18 +2,18 @@ package controllers
import (
"github.com/revel/revel"
-// "encoding/json"
- "gopkg.in/mgo.v2/bson"
- . "github.com/leanote/leanote/app/lea"
+ // "encoding/json"
+ "archive/tar"
+ "compress/gzip"
+ "fmt"
"github.com/leanote/leanote/app/info"
+ . "github.com/leanote/leanote/app/lea"
+ "gopkg.in/mgo.v2/bson"
+ "io"
"io/ioutil"
"os"
"strings"
"time"
- "io"
- "fmt"
- "archive/tar"
- "compress/gzip"
)
// 附件
@@ -31,44 +31,44 @@ func (c Attach) uploadAttach(noteId string) (re info.Re) {
var resultMsg = "error" // 错误信息
var Ok = false
var fileInfo info.Attach
-
+
re = info.NewRe()
-
+
defer func() {
re.Id = fileId // 只是id, 没有其它信息
re.Msg = resultMsg
re.Ok = Ok
re.Item = fileInfo
}()
-
+
// 判断是否有权限为笔记添加附件
if !shareService.HasUpdateNotePerm(noteId, c.GetUserId()) {
return re
}
-
+
file, handel, err := c.Request.FormFile("file")
if err != nil {
return re
}
defer file.Close()
-
+
data, err := ioutil.ReadAll(file)
if err != nil {
return re
}
// > 5M?
- maxFileSize := configService.GetUploadSize("uploadAttachSize");
+ maxFileSize := configService.GetUploadSize("uploadAttachSize")
if maxFileSize <= 0 {
maxFileSize = 1000
}
- if(float64(len(data)) > maxFileSize * float64(1024*1024)) {
+ if float64(len(data)) > maxFileSize*float64(1024*1024) {
resultMsg = fmt.Sprintf("The file's size is bigger than %vM", maxFileSize)
return re
}
-
+
// 生成上传路径
filePath := "files/" + c.GetUserId() + "/attachs"
- dir := revel.BasePath + "/" + filePath
+ dir := revel.BasePath + "/" + filePath
err = os.MkdirAll(dir, 0755)
if err != nil {
return re
@@ -77,12 +77,12 @@ func (c Attach) uploadAttach(noteId string) (re info.Re) {
filename := handel.Filename
_, ext := SplitFilename(filename) // .doc
filename = NewGuid() + ext
- toPath := dir + "/" + filename;
+ toPath := dir + "/" + filename
err = ioutil.WriteFile(toPath, data, 0777)
if err != nil {
return re
}
-
+
// add File to db
fileType := ""
if ext != "" {
@@ -90,22 +90,22 @@ func (c Attach) uploadAttach(noteId string) (re info.Re) {
}
filesize := GetFilesize(toPath)
fileInfo = info.Attach{Name: filename,
- Title: handel.Filename,
- NoteId: bson.ObjectIdHex(noteId),
+ Title: handel.Filename,
+ NoteId: bson.ObjectIdHex(noteId),
UploadUserId: c.GetObjectUserId(),
- Path: filePath + "/" + filename,
- Type: fileType,
- Size: filesize}
-
- id := bson.NewObjectId();
+ Path: filePath + "/" + filename,
+ Type: fileType,
+ Size: filesize}
+
+ id := bson.NewObjectId()
fileInfo.AttachId = id
fileId = id.Hex()
Ok, resultMsg = attachService.AddAttach(fileInfo, false)
if resultMsg != "" {
resultMsg = c.Message(resultMsg)
}
-
- fileInfo.Path = ""; // 不要返回
+
+ fileInfo.Path = "" // 不要返回
if Ok {
resultMsg = "success"
}
@@ -130,15 +130,15 @@ func (c Attach) GetAttachs(noteId string) revel.Result {
// 下载附件
// 权限判断
func (c Attach) Download(attachId string) revel.Result {
- attach := attachService.GetAttach(attachId, c.GetUserId()); // 得到路径
+ attach := attachService.GetAttach(attachId, c.GetUserId()) // 得到路径
path := attach.Path
if path == "" {
return c.RenderText("")
}
- fn := revel.BasePath + "/" + strings.TrimLeft(path, "/")
- file, _ := os.Open(fn)
- return c.RenderBinary(file, attach.Title, revel.Attachment, time.Now()) // revel.Attachment
- // return c.RenderFile(file, revel.Attachment) // revel.Attachment
+ fn := revel.BasePath + "/" + strings.TrimLeft(path, "/")
+ file, _ := os.Open(fn)
+ return c.RenderBinary(file, attach.Title, revel.Attachment, time.Now()) // revel.Attachment
+ // return c.RenderFile(file, revel.Attachment) // revel.Attachment
}
func (c Attach) DownloadAll(noteId string) revel.Result {
@@ -151,69 +151,69 @@ func (c Attach) DownloadAll(noteId string) revel.Result {
if attachs == nil || len(attachs) == 0 {
return c.RenderText("")
}
-
+
/*
- dir := revel.BasePath + "/files/tmp"
- err := os.MkdirAll(dir, 0755)
- if err != nil {
- return c.RenderText("")
- }
+ dir := revel.BasePath + "/files/tmp"
+ err := os.MkdirAll(dir, 0755)
+ if err != nil {
+ return c.RenderText("")
+ }
*/
-
+
filename := note.Title + ".tar.gz"
if note.Title == "" {
filename = "all.tar.gz"
}
-
+
// file write
- fw, err := os.Create(revel.BasePath + "/files/" + filename)
- if err != nil {
+ fw, err := os.Create(revel.BasePath + "/files/" + filename)
+ if err != nil {
return c.RenderText("")
- }
- // defer fw.Close() // 不需要关闭, 还要读取给用户下载
-
- // gzip write
- gw := gzip.NewWriter(fw)
- defer gw.Close()
-
- // tar write
- tw := tar.NewWriter(gw)
- defer tw.Close()
-
- // 遍历文件列表
- for _, attach := range attachs {
- fn := revel.BasePath + "/" + strings.TrimLeft(attach.Path, "/")
- fr, err := os.Open(fn)
- fileInfo, _ := fr.Stat()
- if err != nil {
+ }
+ // defer fw.Close() // 不需要关闭, 还要读取给用户下载
+
+ // gzip write
+ gw := gzip.NewWriter(fw)
+ defer gw.Close()
+
+ // tar write
+ tw := tar.NewWriter(gw)
+ defer tw.Close()
+
+ // 遍历文件列表
+ for _, attach := range attachs {
+ fn := revel.BasePath + "/" + strings.TrimLeft(attach.Path, "/")
+ fr, err := os.Open(fn)
+ fileInfo, _ := fr.Stat()
+ if err != nil {
return c.RenderText("")
- }
- defer fr.Close()
-
- // 信息头
- h := new(tar.Header)
- h.Name = attach.Title
- h.Size = fileInfo.Size()
- h.Mode = int64(fileInfo.Mode())
- h.ModTime = fileInfo.ModTime()
-
- // 写信息头
- err = tw.WriteHeader(h)
- if err != nil {
- panic(err)
- }
-
- // 写文件
- _, err = io.Copy(tw, fr)
- if err != nil {
- panic(err)
- }
- } // for
-
-// tw.Close()
-// gw.Close()
-// fw.Close()
-// file, _ := os.Open(dir + "/" + filename)
+ }
+ defer fr.Close()
+
+ // 信息头
+ h := new(tar.Header)
+ h.Name = attach.Title
+ h.Size = fileInfo.Size()
+ h.Mode = int64(fileInfo.Mode())
+ h.ModTime = fileInfo.ModTime()
+
+ // 写信息头
+ err = tw.WriteHeader(h)
+ if err != nil {
+ panic(err)
+ }
+
+ // 写文件
+ _, err = io.Copy(tw, fr)
+ if err != nil {
+ panic(err)
+ }
+ } // for
+
+ // tw.Close()
+ // gw.Close()
+ // fw.Close()
+ // file, _ := os.Open(dir + "/" + filename)
// fw.Seek(0, 0)
- return c.RenderBinary(fw, filename, revel.Attachment, time.Now()) // revel.Attachment
+ return c.RenderBinary(fw, filename, revel.Attachment, time.Now()) // revel.Attachment
}
diff --git a/app/controllers/AuthController.go b/app/controllers/AuthController.go
index a13be7c..ecfe5ed 100644
--- a/app/controllers/AuthController.go
+++ b/app/controllers/AuthController.go
@@ -1,10 +1,10 @@
package controllers
import (
- "github.com/revel/revel"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
-// "strconv"
+ "github.com/revel/revel"
+ // "strconv"
)
// 用户登录/注销/找回密码
@@ -21,14 +21,14 @@ func (c Auth) Login(email, from string) revel.Result {
c.RenderArgs["email"] = email
c.RenderArgs["from"] = from
c.RenderArgs["openRegister"] = configService.IsOpenRegister()
-
+
sessionId := c.Session.Id()
if sessionService.LoginTimesIsOver(sessionId) {
c.RenderArgs["needCaptcha"] = true
}
-
+
c.SetLocale()
-
+
if c.Has("demo") {
c.RenderArgs["demo"] = true
c.RenderArgs["email"] = "demo@leanote.com"
@@ -49,14 +49,14 @@ func (c Auth) doLogin(email, pwd string) revel.Result {
c.SetSession(userInfo)
sessionService.ClearLoginTimes(sessionId)
return c.RenderJson(info.Re{Ok: true})
- }
-
- return c.RenderJson(info.Re{Ok: false, Item: sessionService.LoginTimesIsOver(sessionId) , Msg: c.Message(msg)})
+ }
+
+ return c.RenderJson(info.Re{Ok: false, Item: sessionService.LoginTimesIsOver(sessionId), Msg: c.Message(msg)})
}
func (c Auth) DoLogin(email, pwd string, captcha string) revel.Result {
sessionId := c.Session.Id()
var msg = ""
-
+
// > 5次需要验证码, 直到登录成功
if sessionService.LoginTimesIsOver(sessionId) && sessionService.GetCaptcha(sessionId) != captcha {
msg = "captchaError"
@@ -66,15 +66,16 @@ func (c Auth) DoLogin(email, pwd string, captcha string) revel.Result {
// 登录错误, 则错误次数++
msg = "wrongUsernameOrPassword"
sessionService.IncrLoginTimes(sessionId)
- } else {
+ } else {
c.SetSession(userInfo)
sessionService.ClearLoginTimes(sessionId)
return c.RenderJson(info.Re{Ok: true})
- }
+ }
}
-
- return c.RenderJson(info.Re{Ok: false, Item: sessionService.LoginTimesIsOver(sessionId) , Msg: c.Message(msg)})
+
+ return c.RenderJson(info.Re{Ok: false, Item: sessionService.LoginTimesIsOver(sessionId), Msg: c.Message(msg)})
}
+
// 注销
func (c Auth) Logout() revel.Result {
sessionId := c.Session.Id()
@@ -90,8 +91,8 @@ func (c Auth) Demo() revel.Result {
userInfo, err := authService.Login(email, pwd)
if err != nil {
- return c.RenderJson(info.Re{Ok: false})
- } else {
+ return c.RenderJson(info.Re{Ok: false})
+ } else {
c.SetSession(userInfo)
return c.Redirect("/note")
}
@@ -107,7 +108,7 @@ func (c Auth) Register(from, iu string) revel.Result {
c.SetLocale()
c.RenderArgs["from"] = from
c.RenderArgs["iu"] = iu
-
+
c.RenderArgs["title"] = c.Message("register")
c.RenderArgs["subTitle"] = c.Message("register")
return c.RenderTemplate("home/register.html")
@@ -116,24 +117,24 @@ func (c Auth) DoRegister(email, pwd, iu string) revel.Result {
if !configService.IsOpenRegister() {
return c.Redirect("/index")
}
-
- re := info.NewRe();
-
+
+ re := info.NewRe()
+
if re.Ok, re.Msg = Vd("email", email); !re.Ok {
- return c.RenderRe(re);
+ return c.RenderRe(re)
}
if re.Ok, re.Msg = Vd("password", pwd); !re.Ok {
- return c.RenderRe(re);
+ return c.RenderRe(re)
}
-
+
// 注册
re.Ok, re.Msg = authService.Register(email, pwd, iu)
-
+
// 注册成功, 则立即登录之
if re.Ok {
c.doLogin(email, pwd)
}
-
+
return c.RenderRe(re)
}
@@ -150,6 +151,7 @@ func (c Auth) DoFindPassword(email string) revel.Result {
re.Ok = true
return c.RenderJson(re)
}
+
// 点击链接后, 先验证之
func (c Auth) FindPassword2(token string) revel.Result {
c.RenderArgs["title"] = c.Message("findPassword")
@@ -157,23 +159,24 @@ func (c Auth) FindPassword2(token string) revel.Result {
if token == "" {
return c.RenderTemplate("find_password2_timeout.html")
}
- ok, _, findPwd := tokenService.VerifyToken(token, info.TokenPwd);
+ ok, _, findPwd := tokenService.VerifyToken(token, info.TokenPwd)
if !ok {
return c.RenderTemplate("home/find_password2_timeout.html")
}
c.RenderArgs["findPwd"] = findPwd
-
+
c.RenderArgs["title"] = c.Message("updatePassword")
c.RenderArgs["subTitle"] = c.Message("updatePassword")
-
+
return c.RenderTemplate("home/find_password2.html")
}
+
// 找回密码修改密码
func (c Auth) FindPasswordUpdate(token, pwd string) revel.Result {
- re := info.NewRe();
+ re := info.NewRe()
if re.Ok, re.Msg = Vd("password", pwd); !re.Ok {
- return c.RenderRe(re);
+ return c.RenderRe(re)
}
// 修改之
diff --git a/app/controllers/BaseController.go b/app/controllers/BaseController.go
index d9ab2cf..53a389e 100644
--- a/app/controllers/BaseController.go
+++ b/app/controllers/BaseController.go
@@ -1,17 +1,17 @@
package controllers
import (
- "github.com/revel/revel"
- "gopkg.in/mgo.v2/bson"
"encoding/json"
"github.com/leanote/leanote/app/info"
-// . "github.com/leanote/leanote/app/lea"
-// "io/ioutil"
-// "fmt"
+ "github.com/revel/revel"
+ "gopkg.in/mgo.v2/bson"
+ // . "github.com/leanote/leanote/app/lea"
+ // "io/ioutil"
+ // "fmt"
+ "bytes"
"math"
"strconv"
"strings"
- "bytes"
)
// 公用Controller, 其它Controller继承它
@@ -56,29 +56,29 @@ func (c BaseController) GetUsername() string {
// 得到用户信息
func (c BaseController) GetUserInfo() info.User {
if userId, ok := c.Session["UserId"]; ok && userId != "" {
- return userService.GetUserInfo(userId);
+ return userService.GetUserInfo(userId)
/*
- notebookWidth, _ := strconv.Atoi(c.Session["NotebookWidth"])
- noteListWidth, _ := strconv.Atoi(c.Session["NoteListWidth"])
- mdEditorWidth, _ := strconv.Atoi(c.Session["MdEditorWidth"])
- LogJ(c.Session)
- user := info.User{UserId: bson.ObjectIdHex(userId),
- Email: c.Session["Email"],
- Logo: c.Session["Logo"],
- Username: c.Session["Username"],
- UsernameRaw: c.Session["UsernameRaw"],
- Theme: c.Session["Theme"],
- NotebookWidth: notebookWidth,
- NoteListWidth: noteListWidth,
- MdEditorWidth: mdEditorWidth,
+ notebookWidth, _ := strconv.Atoi(c.Session["NotebookWidth"])
+ noteListWidth, _ := strconv.Atoi(c.Session["NoteListWidth"])
+ mdEditorWidth, _ := strconv.Atoi(c.Session["MdEditorWidth"])
+ LogJ(c.Session)
+ user := info.User{UserId: bson.ObjectIdHex(userId),
+ Email: c.Session["Email"],
+ Logo: c.Session["Logo"],
+ Username: c.Session["Username"],
+ UsernameRaw: c.Session["UsernameRaw"],
+ Theme: c.Session["Theme"],
+ NotebookWidth: notebookWidth,
+ NoteListWidth: noteListWidth,
+ MdEditorWidth: mdEditorWidth,
+ }
+ if c.Session["Verified"] == "1" {
+ user.Verified = true
}
- if c.Session["Verified"] == "1" {
- user.Verified = true
- }
- if c.Session["LeftIsMin"] == "1" {
- user.LeftIsMin = true
- }
- return user
+ if c.Session["LeftIsMin"] == "1" {
+ user.LeftIsMin = true
+ }
+ return user
*/
}
return info.User{}
@@ -86,7 +86,7 @@ func (c BaseController) GetUserInfo() info.User {
func (c BaseController) GetUserAndBlogUrl() info.UserAndBlogUrl {
if userId, ok := c.Session["UserId"]; ok && userId != "" {
- return userService.GetUserAndBlogUrl(userId);
+ return userService.GetUserAndBlogUrl(userId)
}
return info.UserAndBlogUrl{}
}
@@ -107,16 +107,16 @@ func (c BaseController) SetSession(userInfo info.User) {
c.Session["UsernameRaw"] = userInfo.UsernameRaw
c.Session["Theme"] = userInfo.Theme
c.Session["Logo"] = userInfo.Logo
-
+
c.Session["NotebookWidth"] = strconv.Itoa(userInfo.NotebookWidth)
c.Session["NoteListWidth"] = strconv.Itoa(userInfo.NoteListWidth)
-
+
if userInfo.Verified {
c.Session["Verified"] = "1"
} else {
c.Session["Verified"] = "0"
}
-
+
if userInfo.LeftIsMin {
c.Session["LeftIsMin"] = "1"
} else {
@@ -139,8 +139,8 @@ func (c BaseController) UpdateSession(key, value string) {
// 返回json
func (c BaseController) Json(i interface{}) string {
-// b, _ := json.MarshalIndent(i, "", " ")
- b, _ := json.Marshal(i)
+ // b, _ := json.MarshalIndent(i, "", " ")
+ b, _ := json.Marshal(i)
return string(b)
}
@@ -157,9 +157,9 @@ func (c BaseController) GetPage() int {
// 判断是否含有某参数
func (c BaseController) Has(key string) bool {
if _, ok := c.Params.Values[key]; ok {
- return true;
+ return true
}
- return false;
+ return false
}
/*
@@ -169,12 +169,12 @@ func (c Blog) GetPage(page, count int, list interface{}) info.Page {
*/
func (c BaseController) GetTotalPage(page, count int) int {
- return int(math.Ceil(float64(count)/float64(page)))
+ return int(math.Ceil(float64(count) / float64(page)))
}
//-------------
func (c BaseController) E404() revel.Result {
- c.RenderArgs["title"] = "404";
+ c.RenderArgs["title"] = "404"
return c.NotFound("", nil)
}
@@ -187,15 +187,15 @@ func (c BaseController) SetLocale() string {
lang = locale[0:pos]
}
if lang != "zh" && lang != "en" {
- lang = "en";
+ lang = "en"
}
- c.RenderArgs["locale"] = lang;
- c.RenderArgs["siteUrl"] = configService.GetSiteUrl();
-
+ c.RenderArgs["locale"] = lang
+ c.RenderArgs["siteUrl"] = configService.GetSiteUrl()
+
c.RenderArgs["blogUrl"] = configService.GetBlogUrl()
c.RenderArgs["leaUrl"] = configService.GetLeaUrl()
c.RenderArgs["noteUrl"] = configService.GetNoteUrl()
-
+
return lang
}
@@ -203,7 +203,7 @@ func (c BaseController) SetLocale() string {
func (c BaseController) SetUserInfo() info.User {
userInfo := c.GetUserInfo()
c.RenderArgs["userInfo"] = userInfo
- if(userInfo.Username == configService.GetAdminUsername()) {
+ if userInfo.Username == configService.GetAdminUsername() {
c.RenderArgs["isAdmin"] = true
}
return userInfo
@@ -222,10 +222,10 @@ func (c BaseController) RenderTemplateStr(templatePath string) string {
Template: template,
RenderArgs: c.RenderArgs, // 把args给它
}
-
+
var buffer bytes.Buffer
tpl.Template.Render(&buffer, c.RenderArgs)
- return buffer.String();
+ return buffer.String()
}
// json, result
@@ -234,7 +234,7 @@ func (c BaseController) RenderTemplateStr(templatePath string) string {
func (c BaseController) RenderRe(re info.Re) revel.Result {
oldMsg := re.Msg
if re.Msg != "" {
- if(strings.Contains(re.Msg, "-")) {
+ if strings.Contains(re.Msg, "-") {
msgAndValues := strings.Split(re.Msg, "-")
if len(msgAndValues) == 2 {
re.Msg = c.Message(msgAndValues[0], msgAndValues[1])
diff --git a/app/controllers/BlogController.go b/app/controllers/BlogController.go
index 196ace2..c2d6f13 100644
--- a/app/controllers/BlogController.go
+++ b/app/controllers/BlogController.go
@@ -57,9 +57,9 @@ func (c Blog) render(templateName string, themePath string) revel.Result {
isPreview = true
themePath = themePath2.(string)
c.setPreviewUrl()
-
+
// 因为common的themeInfo是从UserBlog.ThemeId来取的, 所以这里要fugai下
- c.RenderArgs["themeInfo"] = c.RenderArgs["themeInfoPreview"];
+ c.RenderArgs["themeInfo"] = c.RenderArgs["themeInfoPreview"]
}
return blog.RenderTemplate(templateName, c.RenderArgs, revel.BasePath+"/"+themePath, isPreview)
}
@@ -119,9 +119,9 @@ func (c Blog) setPreviewUrl() {
indexUrl = blogUrl + "/" + userIdOrEmail
cateUrl = blogUrl + "/cate/" + userIdOrEmail // /notebookId
- postUrl = blogUrl + "/post/" + userIdOrEmail // /xxxxx
+ postUrl = blogUrl + "/post/" + userIdOrEmail // /xxxxx
searchUrl = blogUrl + "/search/" + userIdOrEmail // blog.leanote.com/search/userId
- singleUrl = blogUrl + "/single/" + userIdOrEmail // blog.leanote.com/single/singleId
+ singleUrl = blogUrl + "/single/" + userIdOrEmail // blog.leanote.com/single/singleId
archiveUrl = blogUrl + "/archives/" + userIdOrEmail // blog.leanote.com/archive/userId
tagsUrl = blogUrl + "/tags/" + userIdOrEmail // blog.leanote.com/archive/userId
@@ -220,7 +220,7 @@ func (c Blog) getCates(userBlog info.UserBlog) {
}
}
}
-
+
// 之后添加没有排序的
for _, n := range notebooks {
id := n.NotebookId.Hex()
@@ -234,19 +234,19 @@ func (c Blog) getCates(userBlog info.UserBlog) {
i++
}
}
-
-// LogJ(">>")
-// LogJ(cates)
-
+
+ // LogJ(">>")
+ // LogJ(cates)
+
// 建立层级
hasParent := map[string]bool{} // 有父的cate
for _, cate := range cates {
parentCateId := cate.ParentCateId
if parentCateId != "" {
if parentCate, ok := cateMap[parentCateId]; ok {
-// Log("________")
-// LogJ(parentCate)
-// LogJ(cate)
+ // Log("________")
+ // LogJ(parentCate)
+ // LogJ(cate)
if parentCate.Children == nil {
parentCate.Children = []*info.Cate{cate}
} else {
@@ -256,7 +256,7 @@ func (c Blog) getCates(userBlog info.UserBlog) {
}
}
}
-
+
// 得到没有父的cate, 作为第一级cate
catesTree := []*info.Cate{}
for _, cate := range cates {
@@ -264,7 +264,7 @@ func (c Blog) getCates(userBlog info.UserBlog) {
catesTree = append(catesTree, cate)
}
}
-
+
c.RenderArgs["cates"] = cates
c.RenderArgs["catesTree"] = catesTree
}
@@ -348,10 +348,10 @@ func (c Blog) blogCommon(userId string, userBlog info.UserBlog, userInfo info.Us
// 得到主题信息
themeInfo := themeService.GetThemeInfo(userBlog.ThemeId.Hex(), userBlog.Style)
c.RenderArgs["themeInfo"] = themeInfo
-
-// Log(">>")
-// Log(userBlog.Style)
-// Log(userBlog.ThemeId.Hex())
+
+ // Log(">>")
+ // Log(userBlog.Style)
+ // Log(userBlog.ThemeId.Hex())
return true, userBlog
}
@@ -507,6 +507,7 @@ func (c Blog) Archives(userIdOrEmail string, cateId string, year, month int) (re
// 进入某个用户的博客
var blogPageSize = 5
var searchBlogPageSize = 30
+
// 分类 /cate/xxxxxxxx?notebookId=1212
func (c Blog) Cate(userIdOrEmail string, notebookId string) (re revel.Result) {
// 自定义域名
@@ -833,7 +834,7 @@ func (c Blog) GetComments(noteId string, callback string) revel.Result {
result["comments"] = comments
result["commentUserInfo"] = commentUserInfo
re.Item = result
-
+
if callback != "" {
return c.RenderJsonP(callback, result)
}
diff --git a/app/controllers/CaptchaController.go b/app/controllers/CaptchaController.go
index a4dd621..a1dbe9e 100644
--- a/app/controllers/CaptchaController.go
+++ b/app/controllers/CaptchaController.go
@@ -2,17 +2,17 @@ package controllers
import (
"github.com/revel/revel"
-// "encoding/json"
-// "gopkg.in/mgo.v2/bson"
+ // "encoding/json"
+ // "gopkg.in/mgo.v2/bson"
. "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/lea/captcha"
-// "github.com/leanote/leanote/app/types"
-// "io/ioutil"
-// "fmt"
-// "math"
-// "os"
-// "path"
-// "strconv"
+ // "github.com/leanote/leanote/app/types"
+ // "io/ioutil"
+ // "fmt"
+ // "math"
+ // "os"
+ // "path"
+ // "strconv"
"net/http"
)
@@ -22,22 +22,23 @@ type Captcha struct {
}
type Ca string
+
func (r Ca) Apply(req *revel.Request, resp *revel.Response) {
- resp.WriteHeader(http.StatusOK, "image/png")
+ resp.WriteHeader(http.StatusOK, "image/png")
}
func (c Captcha) Get() revel.Result {
c.Response.ContentType = "image/png"
image, str := captcha.Fetch()
image.WriteTo(c.Response.Out)
-
+
sessionId := c.Session["_ID"]
-// LogJ(c.Session)
-// Log("------")
-// Log(str)
-// Log(sessionId)
-Log("..")
+ // LogJ(c.Session)
+ // Log("------")
+ // Log(str)
+ // Log(sessionId)
+ Log("..")
sessionService.SetCaptcha(sessionId, str)
-
+
return c.Render()
-}
\ No newline at end of file
+}
diff --git a/app/controllers/FileController.go b/app/controllers/FileController.go
index ce0e691..0f54e8f 100644
--- a/app/controllers/FileController.go
+++ b/app/controllers/FileController.go
@@ -2,15 +2,15 @@ package controllers
import (
"github.com/revel/revel"
-// "encoding/json"
- "gopkg.in/mgo.v2/bson"
+ // "encoding/json"
+ "fmt"
+ "github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/lea/netutil"
- "github.com/leanote/leanote/app/info"
+ "gopkg.in/mgo.v2/bson"
"io/ioutil"
"os"
- "fmt"
-// "strconv"
+ // "strconv"
"strings"
)
@@ -22,8 +22,8 @@ type File struct {
// 上传的是博客logo
// TODO logo不要设置权限, 另外的目录
func (c File) UploadBlogLogo() revel.Result {
- re := c.uploadImage("blogLogo", "");
-
+ re := c.uploadImage("blogLogo", "")
+
c.RenderArgs["fileUrlPath"] = re.Id
c.RenderArgs["resultCode"] = re.Code
c.RenderArgs["resultMsg"] = re.Msg
@@ -34,8 +34,8 @@ func (c File) UploadBlogLogo() revel.Result {
// 拖拉上传, pasteImage
// noteId 是为了判断是否是协作的note, 如果是则需要复制一份到note owner中
func (c File) PasteImage(noteId string) revel.Result {
- re := c.uploadImage("pasteImage", "");
-
+ re := c.uploadImage("pasteImage", "")
+
userId := c.GetUserId()
note := noteService.GetNoteById(noteId)
if note.UserId != "" {
@@ -44,29 +44,29 @@ func (c File) PasteImage(noteId string) revel.Result {
// 是否是有权限协作的
if shareService.HasUpdatePerm(noteUserId, userId, noteId) {
// 复制图片之, 图片复制给noteUserId
- _, re.Id = fileService.CopyImage(userId, re.Id, noteUserId)
+ _, re.Id = fileService.CopyImage(userId, re.Id, noteUserId)
} else {
// 怎么可能在这个笔记下paste图片呢?
// 正常情况下不会
}
}
}
-
+
return c.RenderJson(re)
}
// 头像设置
func (c File) UploadAvatar() revel.Result {
- re := c.uploadImage("logo", "");
-
+ re := c.uploadImage("logo", "")
+
c.RenderArgs["fileUrlPath"] = re.Id
c.RenderArgs["resultCode"] = re.Code
c.RenderArgs["resultMsg"] = re.Msg
-
+
if re.Ok {
re.Ok = userService.UpdateAvatar(c.GetUserId(), re.Id)
if re.Ok {
- c.UpdateSession("Logo", re.Id);
+ c.UpdateSession("Logo", re.Id)
}
}
@@ -100,13 +100,13 @@ func (c File) uploadImage(from, albumId string) (re info.Re) {
return re
}
defer file.Close()
-
+
// 生成上传路径
newGuid := NewGuid()
-
+
userId := c.GetUserId()
-
- if(from == "logo" || from == "blogLogo") {
+
+ if from == "logo" || from == "blogLogo" {
fileUrlPath = "public/upload/" + Digest3(userId) + "/" + userId + "/images/logo"
} else {
fileUrlPath = "files/" + Digest3(userId) + "/" + userId + "/" + Digest2(newGuid) + "/images"
@@ -180,8 +180,8 @@ func (c File) uploadImage(from, albumId string) (re info.Re) {
id := bson.NewObjectId()
fileInfo.FileId = id
fileId = id.Hex()
-
- if(from == "logo" || from == "blogLogo") {
+
+ if from == "logo" || from == "blogLogo" {
fileId = fileUrlPath
}
@@ -217,13 +217,13 @@ func (c File) DeleteImage(fileId string) revel.Result {
// 输出image
// 权限判断
func (c File) OutputImage(noteId, fileId string) revel.Result {
- path := fileService.GetFile(c.GetUserId(), fileId); // 得到路径
+ path := fileService.GetFile(c.GetUserId(), fileId) // 得到路径
if path == "" {
return c.RenderText("")
}
- fn := revel.BasePath + "/" + strings.TrimLeft(path, "/")
- file, _ := os.Open(fn)
- return c.RenderFile(file, revel.Inline) // revel.Attachment
+ fn := revel.BasePath + "/" + strings.TrimLeft(path, "/")
+ file, _ := os.Open(fn)
+ return c.RenderFile(file, revel.Inline) // revel.Attachment
}
// 协作时复制图片到owner
@@ -265,7 +265,7 @@ func (c File) CopyHttpImage(src string) revel.Result {
fileInfo.FileId = id
re.Id = id.Hex()
-// re.Item = fileInfo.Path
+ // re.Item = fileInfo.Path
re.Ok, re.Msg = fileService.AddImage(fileInfo, "", c.GetUserId(), true)
return c.RenderJson(re)
diff --git a/app/controllers/IndexController.go b/app/controllers/IndexController.go
index cc7188c..75c780b 100644
--- a/app/controllers/IndexController.go
+++ b/app/controllers/IndexController.go
@@ -1,9 +1,9 @@
package controllers
import (
- "github.com/revel/revel"
"github.com/leanote/leanote/app/info"
-// . "github.com/leanote/leanote/app/lea"
+ "github.com/revel/revel"
+ // . "github.com/leanote/leanote/app/lea"
)
// 首页
@@ -13,31 +13,32 @@ type Index struct {
}
func (c Index) Default() revel.Result {
- if configService.HomePageIsAdminsBlog(){
+ if configService.HomePageIsAdminsBlog() {
blog := Blog{c.BaseController}
- return blog.Index(configService.GetAdminUsername());
+ return blog.Index(configService.GetAdminUsername())
}
return c.Index()
}
+
// leanote展示页, 没有登录的, 或已登录明确要进该页的
func (c Index) Index() revel.Result {
c.SetUserInfo()
c.RenderArgs["title"] = "leanote"
c.RenderArgs["openRegister"] = configService.GlobalStringConfigs["openRegister"]
c.SetLocale()
-
- return c.RenderTemplate("home/index.html");
+
+ return c.RenderTemplate("home/index.html")
}
// 建议
func (c Index) Suggestion(addr, suggestion string) revel.Result {
re := info.NewRe()
re.Ok = suggestionService.AddSuggestion(info.Suggestion{Addr: addr, UserId: c.GetObjectUserId(), Suggestion: suggestion})
-
+
// 发给我
go func() {
- emailService.SendEmail("leanote@leanote.com", "建议", "UserId: " + c.GetUserId() + "
Suggestions: " + suggestion)
- }();
-
+ emailService.SendEmail("leanote@leanote.com", "建议", "UserId: "+c.GetUserId()+"
Suggestions: "+suggestion)
+ }()
+
return c.RenderJson(re)
-}
\ No newline at end of file
+}
diff --git a/app/controllers/NoteContentHistoryController.go b/app/controllers/NoteContentHistoryController.go
index f5b43ef..5ff1555 100644
--- a/app/controllers/NoteContentHistoryController.go
+++ b/app/controllers/NoteContentHistoryController.go
@@ -11,6 +11,6 @@ type NoteContentHistory struct {
// 得到list
func (c NoteContentHistory) ListHistories(noteId string) revel.Result {
histories := noteContentHistoryService.ListHistories(noteId, c.GetUserId())
-
+
return c.RenderJson(histories)
-}
\ No newline at end of file
+}
diff --git a/app/controllers/NoteController.go b/app/controllers/NoteController.go
index bc428ac..9a911e8 100644
--- a/app/controllers/NoteController.go
+++ b/app/controllers/NoteController.go
@@ -3,6 +3,7 @@ package controllers
import (
"github.com/revel/revel"
// "encoding/json"
+ "fmt"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
@@ -11,7 +12,6 @@ import (
"regexp"
"strings"
"time"
- "fmt"
// "github.com/leanote/leanote/app/types"
// "io/ioutil"
// "bytes"
@@ -30,51 +30,51 @@ func (c Note) Index(noteId, online string) revel.Result {
userInfo := c.GetUserAndBlogUrl()
userId := userInfo.UserId.Hex()
-
+
// 没有登录
if userId == "" {
return c.Redirect("/login")
}
-
+
c.RenderArgs["openRegister"] = configService.IsOpenRegister()
// 已登录了, 那么得到所有信息
notebooks := notebookService.GetNotebooks(userId)
shareNotebooks, sharedUserInfos := shareService.GetShareNotebooks(userId)
-
+
// 还需要按时间排序(DESC)得到notes
notes := []info.Note{}
noteContent := info.NoteContent{}
-
+
if len(notebooks) > 0 {
// noteId是否存在
// 是否传入了正确的noteId
hasRightNoteId := false
if IsObjectId(noteId) {
note := noteService.GetNoteById(noteId)
-
+
if note.NoteId != "" {
var noteOwner = note.UserId.Hex()
noteContent = noteService.GetNoteContent(noteId, noteOwner)
-
+
hasRightNoteId = true
c.RenderArgs["curNoteId"] = noteId
c.RenderArgs["curNotebookId"] = note.NotebookId.Hex()
-
+
// 打开的是共享的笔记, 那么判断是否是共享给我的默认笔记
if noteOwner != c.GetUserId() {
if shareService.HasReadPerm(noteOwner, c.GetUserId(), noteId) {
// 不要获取notebook下的笔记
// 在前端下发请求
c.RenderArgs["curSharedNoteNotebookId"] = note.NotebookId.Hex()
- c.RenderArgs["curSharedUserId"] = noteOwner;
- // 没有读写权限
+ c.RenderArgs["curSharedUserId"] = noteOwner
+ // 没有读写权限
} else {
hasRightNoteId = false
}
} else {
- _, notes = noteService.ListNotes(c.GetUserId(), note.NotebookId.Hex(), false, c.GetPage(), 50, defaultSortField, false, false);
-
+ _, notes = noteService.ListNotes(c.GetUserId(), note.NotebookId.Hex(), false, c.GetPage(), 50, defaultSortField, false, false)
+
// 如果指定了某笔记, 则该笔记放在首位
lenNotes := len(notes)
if lenNotes > 1 {
@@ -84,7 +84,7 @@ func (c Note) Index(noteId, online string) revel.Result {
for _, note := range notes {
if note.NoteId.Hex() != noteId {
if i == lenNotes { // 防止越界
- break;
+ break
}
notes2[i] = note
i++
@@ -94,40 +94,40 @@ func (c Note) Index(noteId, online string) revel.Result {
}
}
}
-
+
// 得到最近的笔记
- _, latestNotes := noteService.ListNotes(c.GetUserId(), "", false, c.GetPage(), 50, defaultSortField, false, false);
+ _, latestNotes := noteService.ListNotes(c.GetUserId(), "", false, c.GetPage(), 50, defaultSortField, false, false)
c.RenderArgs["latestNotes"] = latestNotes
}
-
+
// 没有传入笔记
// 那么得到最新笔记
if !hasRightNoteId {
- _, notes = noteService.ListNotes(c.GetUserId(), "", false, c.GetPage(), 50, defaultSortField, false, false);
+ _, notes = noteService.ListNotes(c.GetUserId(), "", false, c.GetPage(), 50, defaultSortField, false, false)
if len(notes) > 0 {
noteContent = noteService.GetNoteContent(notes[0].NoteId.Hex(), userId)
c.RenderArgs["curNoteId"] = notes[0].NoteId.Hex()
}
}
}
-
+
// 当然, 还需要得到第一个notes的content
//...
c.RenderArgs["isAdmin"] = configService.GetAdminUsername() == userInfo.Username
-
+
c.RenderArgs["userInfo"] = userInfo
c.RenderArgs["notebooks"] = notebooks
c.RenderArgs["shareNotebooks"] = shareNotebooks // note信息在notes列表中
c.RenderArgs["sharedUserInfos"] = sharedUserInfos
-
+
c.RenderArgs["notes"] = notes
c.RenderArgs["noteContentJson"] = noteContent
c.RenderArgs["noteContent"] = noteContent.Content
-
+
c.RenderArgs["tags"] = tagService.GetTags(c.GetUserId())
-
+
c.RenderArgs["globalConfigs"] = configService.GetGlobalConfigForUser()
-
+
// return c.RenderTemplate("note/note.html")
if isDev, _ := revel.Config.Bool("mode.dev"); isDev && online == "" {
@@ -167,93 +167,94 @@ func (c Note) GetNoteContent(noteId string) revel.Result {
// 会传Title, Content, Tags, 一种或几种
type NoteOrContent struct {
NotebookId string
- NoteId string
- UserId string
- Title string
- Desc string
- ImgSrc string
- Tags string
- Content string
- Abstract string
- IsNew bool
+ NoteId string
+ UserId string
+ Title string
+ Desc string
+ ImgSrc string
+ Tags string
+ Content string
+ Abstract string
+ IsNew bool
IsMarkdown bool
FromUserId string // 为共享而新建
- IsBlog bool // 是否是blog, 更新note不需要修改, 添加note时才有可能用到, 此时需要判断notebook是否设为Blog
+ IsBlog bool // 是否是blog, 更新note不需要修改, 添加note时才有可能用到, 此时需要判断notebook是否设为Blog
}
+
// 这里不能用json, 要用post
func (c Note) UpdateNoteOrContent(noteOrContent NoteOrContent) revel.Result {
// 新添加note
if noteOrContent.IsNew {
- userId := c.GetObjectUserId();
-// myUserId := userId
+ userId := c.GetObjectUserId()
+ // myUserId := userId
// 为共享新建?
if noteOrContent.FromUserId != "" {
userId = bson.ObjectIdHex(noteOrContent.FromUserId)
}
-
- note := info.Note{UserId: userId,
- NoteId: bson.ObjectIdHex(noteOrContent.NoteId),
- NotebookId: bson.ObjectIdHex(noteOrContent.NotebookId),
- Title: noteOrContent.Title,
- Tags: strings.Split(noteOrContent.Tags, ","),
- Desc: noteOrContent.Desc,
- ImgSrc: noteOrContent.ImgSrc,
- IsBlog: noteOrContent.IsBlog,
+
+ note := info.Note{UserId: userId,
+ NoteId: bson.ObjectIdHex(noteOrContent.NoteId),
+ NotebookId: bson.ObjectIdHex(noteOrContent.NotebookId),
+ Title: noteOrContent.Title,
+ Tags: strings.Split(noteOrContent.Tags, ","),
+ Desc: noteOrContent.Desc,
+ ImgSrc: noteOrContent.ImgSrc,
+ IsBlog: noteOrContent.IsBlog,
IsMarkdown: noteOrContent.IsMarkdown,
- };
- noteContent := info.NoteContent{NoteId: note.NoteId,
- UserId: userId,
- IsBlog: note.IsBlog,
- Content: noteOrContent.Content,
- Abstract: noteOrContent.Abstract};
-
+ }
+ noteContent := info.NoteContent{NoteId: note.NoteId,
+ UserId: userId,
+ IsBlog: note.IsBlog,
+ Content: noteOrContent.Content,
+ Abstract: noteOrContent.Abstract}
+
note = noteService.AddNoteAndContentForController(note, noteContent, c.GetUserId())
return c.RenderJson(note)
}
-
+
noteUpdate := bson.M{}
needUpdateNote := false
-
+
// Desc前台传来
if c.Has("Desc") {
needUpdateNote = true
- noteUpdate["Desc"] = noteOrContent.Desc;
+ noteUpdate["Desc"] = noteOrContent.Desc
}
if c.Has("ImgSrc") {
needUpdateNote = true
- noteUpdate["ImgSrc"] = noteOrContent.ImgSrc;
+ noteUpdate["ImgSrc"] = noteOrContent.ImgSrc
}
if c.Has("Title") {
needUpdateNote = true
- noteUpdate["Title"] = noteOrContent.Title;
+ noteUpdate["Title"] = noteOrContent.Title
}
-
+
if c.Has("Tags") {
needUpdateNote = true
- noteUpdate["Tags"] = strings.Split(noteOrContent.Tags, ",");
+ noteUpdate["Tags"] = strings.Split(noteOrContent.Tags, ",")
}
-
+
// web端不控制
- if needUpdateNote {
- noteService.UpdateNote(c.GetUserId(),
+ if needUpdateNote {
+ noteService.UpdateNote(c.GetUserId(),
noteOrContent.NoteId, noteUpdate, -1)
}
-
+
//-------------
afterContentUsn := 0
contentOk := false
contentMsg := ""
if c.Has("Content") {
-// noteService.UpdateNoteContent(noteOrContent.UserId, c.GetUserId(),
-// noteOrContent.NoteId, noteOrContent.Content, noteOrContent.Abstract)
+ // noteService.UpdateNoteContent(noteOrContent.UserId, c.GetUserId(),
+ // noteOrContent.NoteId, noteOrContent.Content, noteOrContent.Abstract)
contentOk, contentMsg, afterContentUsn = noteService.UpdateNoteContent(c.GetUserId(),
noteOrContent.NoteId, noteOrContent.Content, noteOrContent.Abstract, needUpdateNote, -1)
}
-
+
Log(afterContentUsn)
Log(contentOk)
Log(contentMsg)
-
+
return c.RenderJson(true)
}
@@ -347,14 +348,14 @@ func (c Note) ToPdf(noteId, appKey string) revel.Result {
//------------------
// 将content的图片转换为base64
contentStr := content.Content
-
+
siteUrlPattern := configService.GetSiteUrl()
if strings.Contains(siteUrlPattern, "https") {
siteUrlPattern = strings.Replace(siteUrlPattern, "https", "https*", 1)
} else {
siteUrlPattern = strings.Replace(siteUrlPattern, "http", "https*", 1)
}
-
+
regImage, _ := regexp.Compile(` 0 {
if !InArray(okSorter, s2[0]) {
- return sorterField, isAsc;
+ return sorterField, isAsc
}
}
-
+
sorterField = strings.Title(s2[0])
if s2[1] == "up" {
isAsc = true
@@ -47,7 +47,7 @@ func (c AdminBaseController) getSorter(sorterField string, isAsc bool, okSorter
isAsc = false
}
c.RenderArgs["sorter"] = sorter
- return sorterField, isAsc;
+ return sorterField, isAsc
}
func (c AdminBaseController) updateConfig(keys []string) {
@@ -56,4 +56,4 @@ func (c AdminBaseController) updateConfig(keys []string) {
v := c.Params.Values.Get(key)
configService.UpdateGlobalStringConfig(userId, key, v)
}
-}
\ No newline at end of file
+}
diff --git a/app/controllers/admin/AdminBlogController.go b/app/controllers/admin/AdminBlogController.go
index ca8a48d..e977f37 100644
--- a/app/controllers/admin/AdminBlogController.go
+++ b/app/controllers/admin/AdminBlogController.go
@@ -2,7 +2,7 @@ package admin
import (
"github.com/revel/revel"
-// . "github.com/leanote/leanote/app/lea"
+ // . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/info"
)
@@ -15,16 +15,16 @@ type AdminBlog struct {
// admin 主页
func (c AdminBlog) Index(sorter, keywords string) revel.Result {
pageNumber := c.GetPage()
- sorterField, isAsc := c.getSorter("CreatedTime", false, []string{"title", "userId", "isRecommed", "createdTime"});
- pageInfo, blogs := blogService.ListAllBlogs("", "", keywords, false, pageNumber, userPageSize, sorterField, isAsc);
+ sorterField, isAsc := c.getSorter("CreatedTime", false, []string{"title", "userId", "isRecommed", "createdTime"})
+ pageInfo, blogs := blogService.ListAllBlogs("", "", keywords, false, pageNumber, userPageSize, sorterField, isAsc)
c.RenderArgs["pageInfo"] = pageInfo
c.RenderArgs["blogs"] = blogs
c.RenderArgs["keywords"] = keywords
- return c.RenderTemplate("admin/blog/list.html");
+ return c.RenderTemplate("admin/blog/list.html")
}
func (c AdminBlog) SetRecommend(noteId string, recommend bool) revel.Result {
re := info.NewRe()
- re.Ok = blogService.SetRecommend(noteId, recommend);
+ re.Ok = blogService.SetRecommend(noteId, recommend)
return c.RenderJson(re)
}
diff --git a/app/controllers/admin/AdminController.go b/app/controllers/admin/AdminController.go
index c3215a5..c4360c8 100644
--- a/app/controllers/admin/AdminController.go
+++ b/app/controllers/admin/AdminController.go
@@ -13,15 +13,15 @@ type Admin struct {
// admin 主页
func (c Admin) Index() revel.Result {
c.SetUserInfo()
-
+
c.RenderArgs["title"] = "leanote"
c.SetLocale()
-
+
c.RenderArgs["countUser"] = userService.CountUser()
c.RenderArgs["countNote"] = noteService.CountNote("")
c.RenderArgs["countBlog"] = noteService.CountBlog("")
-
- return c.RenderTemplate("admin/index.html");
+
+ return c.RenderTemplate("admin/index.html")
}
// 模板
@@ -35,5 +35,5 @@ func (c Admin) T(t string) revel.Result {
}
func (c Admin) GetView(view string) revel.Result {
- return c.RenderTemplate("admin/" + view);
-}
\ No newline at end of file
+ return c.RenderTemplate("admin/" + view)
+}
diff --git a/app/controllers/admin/AdminData.go b/app/controllers/admin/AdminData.go
index 8304c79..1ea9dfb 100644
--- a/app/controllers/admin/AdminData.go
+++ b/app/controllers/admin/AdminData.go
@@ -1,14 +1,14 @@
package admin
import (
- "github.com/revel/revel"
- . "github.com/leanote/leanote/app/lea"
+ "archive/tar"
+ "compress/gzip"
"github.com/leanote/leanote/app/info"
- "archive/tar"
- "compress/gzip"
- "os"
- "io"
- "time"
+ . "github.com/leanote/leanote/app/lea"
+ "github.com/revel/revel"
+ "io"
+ "os"
+ "time"
)
// 数据管理, 备份和恢复
@@ -22,18 +22,18 @@ func (c AdminData) Index() revel.Result {
// 逆序之
backups2 := make([]map[string]string, len(backups))
j := 0
- for i := len(backups)-1; i >= 0; i-- {
+ for i := len(backups) - 1; i >= 0; i-- {
backups2[j] = backups[i]
j++
}
c.RenderArgs["backups"] = backups2
- return c.RenderTemplate("admin/data/index.html");
+ return c.RenderTemplate("admin/data/index.html")
}
func (c AdminData) Backup() revel.Result {
re := info.NewRe()
re.Ok, re.Msg = configService.Backup("")
- return c.RenderJson(re)
+ return c.RenderJson(re)
}
// 还原
@@ -51,7 +51,7 @@ func (c AdminData) Delete(createdTime string) revel.Result {
func (c AdminData) UpdateRemark(createdTime, remark string) revel.Result {
re := info.Re{}
re.Ok, re.Msg = configService.UpdateBackupRemark(createdTime, remark)
-
+
return c.RenderJson(re)
}
func (c AdminData) Download(createdTime string) revel.Result {
@@ -59,56 +59,56 @@ func (c AdminData) Download(createdTime string) revel.Result {
if !ok {
return c.RenderText("")
}
-
+
dbname, _ := revel.Config.String("db.dbname")
path := backup["path"] + "/" + dbname
- allFiles := ListDir(path)
-
+ allFiles := ListDir(path)
+
filename := "backup_" + dbname + "_" + backup["createdTime"] + ".tar.gz"
-
+
// file write
- fw, err := os.Create(revel.BasePath + "/files/" + filename)
- if err != nil {
+ fw, err := os.Create(revel.BasePath + "/files/" + filename)
+ if err != nil {
return c.RenderText("")
- }
- // defer fw.Close() // 不需要关闭, 还要读取给用户下载
- // gzip write
- gw := gzip.NewWriter(fw)
- defer gw.Close()
-
- // tar write
- tw := tar.NewWriter(gw)
- defer tw.Close()
-
- // 遍历文件列表
- for _, file := range allFiles {
+ }
+ // defer fw.Close() // 不需要关闭, 还要读取给用户下载
+ // gzip write
+ gw := gzip.NewWriter(fw)
+ defer gw.Close()
+
+ // tar write
+ tw := tar.NewWriter(gw)
+ defer tw.Close()
+
+ // 遍历文件列表
+ for _, file := range allFiles {
fn := path + "/" + file
- fr, err := os.Open(fn)
- fileInfo, _ := fr.Stat()
- if err != nil {
+ fr, err := os.Open(fn)
+ fileInfo, _ := fr.Stat()
+ if err != nil {
return c.RenderText("")
- }
- defer fr.Close()
-
- // 信息头
- h := new(tar.Header)
- h.Name = file
- h.Size = fileInfo.Size()
- h.Mode = int64(fileInfo.Mode())
- h.ModTime = fileInfo.ModTime()
-
- // 写信息头
- err = tw.WriteHeader(h)
- if err != nil {
- panic(err)
- }
-
- // 写文件
- _, err = io.Copy(tw, fr)
- if err != nil {
- panic(err)
- }
- } // for
-
- return c.RenderBinary(fw, filename, revel.Attachment, time.Now()) // revel.Attachm
+ }
+ defer fr.Close()
+
+ // 信息头
+ h := new(tar.Header)
+ h.Name = file
+ h.Size = fileInfo.Size()
+ h.Mode = int64(fileInfo.Mode())
+ h.ModTime = fileInfo.ModTime()
+
+ // 写信息头
+ err = tw.WriteHeader(h)
+ if err != nil {
+ panic(err)
+ }
+
+ // 写文件
+ _, err = io.Copy(tw, fr)
+ if err != nil {
+ panic(err)
+ }
+ } // for
+
+ return c.RenderBinary(fw, filename, revel.Attachment, time.Now()) // revel.Attachm
}
diff --git a/app/controllers/admin/AdminEmailController.go b/app/controllers/admin/AdminEmailController.go
index 86fc766..59fc409 100644
--- a/app/controllers/admin/AdminEmailController.go
+++ b/app/controllers/admin/AdminEmailController.go
@@ -1,11 +1,11 @@
package admin
import (
- "github.com/revel/revel"
- . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/info"
- "strings"
+ . "github.com/leanote/leanote/app/lea"
+ "github.com/revel/revel"
"strconv"
+ "strings"
)
// admin 首页
@@ -25,14 +25,14 @@ func (c AdminEmail) Blog() revel.Result {
newTags := configService.GetGlobalArrayConfig("newTags")
c.RenderArgs["recommendTags"] = strings.Join(recommendTags, ",")
c.RenderArgs["newTags"] = strings.Join(newTags, ",")
- return c.RenderTemplate("admin/setting/blog.html");
+ return c.RenderTemplate("admin/setting/blog.html")
}
func (c AdminEmail) DoBlogTag(recommendTags, newTags string) revel.Result {
re := info.NewRe()
-
+
re.Ok = configService.UpdateGlobalArrayConfig(c.GetUserId(), "recommendTags", strings.Split(recommendTags, ","))
re.Ok = configService.UpdateGlobalArrayConfig(c.GetUserId(), "newTags", strings.Split(newTags, ","))
-
+
return c.RenderJson(re)
}
@@ -41,24 +41,24 @@ func (c AdminEmail) DoBlogTag(recommendTags, newTags string) revel.Result {
func (c AdminEmail) Demo() revel.Result {
c.RenderArgs["demoUsername"] = configService.GetGlobalStringConfig("demoUsername")
c.RenderArgs["demoPassword"] = configService.GetGlobalStringConfig("demoPassword")
- return c.RenderTemplate("admin/setting/demo.html");
+ return c.RenderTemplate("admin/setting/demo.html")
}
func (c AdminEmail) DoDemo(demoUsername, demoPassword string) revel.Result {
re := info.NewRe()
-
+
userInfo, err := authService.Login(demoUsername, demoPassword)
if err != nil {
return c.RenderJson(info.Re{Ok: false})
}
if userInfo.UserId == "" {
- re.Msg = "The User is Not Exists";
+ re.Msg = "The User is Not Exists"
return c.RenderJson(re)
}
-
+
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "demoUserId", userInfo.UserId.Hex())
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "demoUsername", demoUsername)
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "demoPassword", demoPassword)
-
+
return c.RenderJson(re)
}
@@ -66,7 +66,7 @@ func (c AdminEmail) DoDemo(demoUsername, demoPassword string) revel.Result {
// 长微博的bin路径phantomJs
func (c AdminEmail) ToImage() revel.Result {
c.RenderArgs["toImageBinPath"] = configService.GetGlobalStringConfig("toImageBinPath")
- return c.RenderTemplate("admin/setting/toImage.html");
+ return c.RenderTemplate("admin/setting/toImage.html")
}
func (c AdminEmail) DoToImage(toImageBinPath string) revel.Result {
re := info.NewRe()
@@ -80,13 +80,13 @@ func (c AdminEmail) Set(emailHost, emailPort, emailUsername, emailPassword strin
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailPort", emailPort)
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailUsername", emailUsername)
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailPassword", emailPassword)
-
+
return c.RenderJson(re)
}
func (c AdminEmail) Template() revel.Result {
re := info.NewRe()
-
- keys := []string{"emailTemplateHeader", "emailTemplateFooter",
+
+ keys := []string{"emailTemplateHeader", "emailTemplateFooter",
"emailTemplateRegisterSubject",
"emailTemplateRegister",
"emailTemplateFindPasswordSubject",
@@ -98,7 +98,7 @@ func (c AdminEmail) Template() revel.Result {
"emailTemplateCommentSubject",
"emailTemplateComment",
}
-
+
userId := c.GetUserId()
for _, key := range keys {
v := c.Params.Values.Get(key)
@@ -113,7 +113,7 @@ func (c AdminEmail) Template() revel.Result {
}
}
}
-
+
re.Ok = true
return c.RenderJson(re)
}
@@ -121,100 +121,99 @@ func (c AdminEmail) Template() revel.Result {
// 发送Email
func (c AdminEmail) SendEmailToEmails(sendEmails, latestEmailSubject, latestEmailBody string, verified, saveAsOldEmail bool) revel.Result {
re := info.NewRe()
-
+
c.updateConfig([]string{"sendEmails", "latestEmailSubject", "latestEmailBody"})
-
+
if latestEmailSubject == "" || latestEmailBody == "" {
re.Msg = "subject or body is blank"
return c.RenderJson(re)
}
-
+
if saveAsOldEmail {
oldEmails := configService.GetGlobalMapConfig("oldEmails")
oldEmails[latestEmailSubject] = latestEmailBody
- configService.UpdateGlobalMapConfig(c.GetUserId(), "oldEmails", oldEmails);
+ configService.UpdateGlobalMapConfig(c.GetUserId(), "oldEmails", oldEmails)
}
-
+
sendEmails = strings.Replace(sendEmails, "\r", "", -1)
emails := strings.Split(sendEmails, "\n")
-
- re.Ok, re.Msg = emailService.SendEmailToEmails(emails, latestEmailSubject, latestEmailBody);
+
+ re.Ok, re.Msg = emailService.SendEmailToEmails(emails, latestEmailSubject, latestEmailBody)
return c.RenderJson(re)
}
// 发送Email
func (c AdminEmail) SendToUsers2(emails, latestEmailSubject, latestEmailBody string, verified, saveAsOldEmail bool) revel.Result {
re := info.NewRe()
-
+
c.updateConfig([]string{"sendEmails", "latestEmailSubject", "latestEmailBody"})
-
+
if latestEmailSubject == "" || latestEmailBody == "" {
re.Msg = "subject or body is blank"
return c.RenderJson(re)
}
-
+
if saveAsOldEmail {
oldEmails := configService.GetGlobalMapConfig("oldEmails")
oldEmails[latestEmailSubject] = latestEmailBody
- configService.UpdateGlobalMapConfig(c.GetUserId(), "oldEmails", oldEmails);
+ configService.UpdateGlobalMapConfig(c.GetUserId(), "oldEmails", oldEmails)
}
-
+
emails = strings.Replace(emails, "\r", "", -1)
emailsArr := strings.Split(emails, "\n")
-
+
users := userService.ListUserInfosByEmails(emailsArr)
LogJ(emailsArr)
-
-
- re.Ok, re.Msg = emailService.SendEmailToUsers(users, latestEmailSubject, latestEmailBody);
-
+
+ re.Ok, re.Msg = emailService.SendEmailToUsers(users, latestEmailSubject, latestEmailBody)
+
return c.RenderJson(re)
}
// send Email dialog
-func (c AdminEmail) SendEmailDialog(emails string) revel.Result{
+func (c AdminEmail) SendEmailDialog(emails string) revel.Result {
emailsArr := strings.Split(emails, ",")
emailsNl := strings.Join(emailsArr, "\n")
-
+
c.RenderArgs["emailsNl"] = emailsNl
c.RenderArgs["str"] = configService.GlobalStringConfigs
c.RenderArgs["map"] = configService.GlobalMapConfigs
-
- return c.RenderTemplate("admin/email/emailDialog.html");
+
+ return c.RenderTemplate("admin/email/emailDialog.html")
}
func (c AdminEmail) SendToUsers(userFilterEmail, userFilterWhiteList, userFilterBlackList, latestEmailSubject, latestEmailBody string, verified, saveAsOldEmail bool) revel.Result {
re := info.NewRe()
-
+
c.updateConfig([]string{"userFilterEmail", "userFilterWhiteList", "userFilterBlackList", "latestEmailSubject", "latestEmailBody"})
-
+
if latestEmailSubject == "" || latestEmailBody == "" {
re.Msg = "subject or body is blank"
return c.RenderJson(re)
}
-
+
if saveAsOldEmail {
oldEmails := configService.GetGlobalMapConfig("oldEmails")
oldEmails[latestEmailSubject] = latestEmailBody
- configService.UpdateGlobalMapConfig(c.GetUserId(), "oldEmails", oldEmails);
+ configService.UpdateGlobalMapConfig(c.GetUserId(), "oldEmails", oldEmails)
}
-
+
users := userService.GetAllUserByFilter(userFilterEmail, userFilterWhiteList, userFilterBlackList, verified)
-
- if(users == nil || len(users) == 0) {
+
+ if users == nil || len(users) == 0 {
re.Ok = false
re.Msg = "no users"
return c.RenderJson(re)
}
-
- re.Ok, re.Msg = emailService.SendEmailToUsers(users, latestEmailSubject, latestEmailBody);
- if(!re.Ok) {
+
+ re.Ok, re.Msg = emailService.SendEmailToUsers(users, latestEmailSubject, latestEmailBody)
+ if !re.Ok {
return c.RenderJson(re)
}
-
+
re.Ok = true
re.Msg = "users:" + strconv.Itoa(len(users))
-
+
return c.RenderJson(re)
}
@@ -227,10 +226,10 @@ func (c AdminEmail) DeleteEmails(ids string) revel.Result {
func (c AdminEmail) List(sorter, keywords string) revel.Result {
pageNumber := c.GetPage()
- sorterField, isAsc := c.getSorter("CreatedTime", false, []string{"email", "ok", "subject", "createdTime"});
- pageInfo, emails := emailService.ListEmailLogs(pageNumber, userPageSize, sorterField, isAsc, keywords);
+ sorterField, isAsc := c.getSorter("CreatedTime", false, []string{"email", "ok", "subject", "createdTime"})
+ pageInfo, emails := emailService.ListEmailLogs(pageNumber, userPageSize, sorterField, isAsc, keywords)
c.RenderArgs["pageInfo"] = pageInfo
c.RenderArgs["emails"] = emails
c.RenderArgs["keywords"] = keywords
- return c.RenderTemplate("admin/email/list.html");
-}
\ No newline at end of file
+ return c.RenderTemplate("admin/email/list.html")
+}
diff --git a/app/controllers/admin/AdminSettingController.go b/app/controllers/admin/AdminSettingController.go
index 7a68416..759ba18 100644
--- a/app/controllers/admin/AdminSettingController.go
+++ b/app/controllers/admin/AdminSettingController.go
@@ -2,10 +2,10 @@ package admin
import (
"github.com/revel/revel"
-// . "github.com/leanote/leanote/app/lea"
+ // . "github.com/leanote/leanote/app/lea"
+ "fmt"
"github.com/leanote/leanote/app/info"
"strings"
- "fmt"
)
// admin 首页
@@ -25,24 +25,24 @@ func (c AdminSetting) Blog() revel.Result {
newTags := configService.GetGlobalArrayConfig("newTags")
c.RenderArgs["recommendTags"] = strings.Join(recommendTags, ",")
c.RenderArgs["newTags"] = strings.Join(newTags, ",")
- return c.RenderTemplate("admin/setting/blog.html");
+ return c.RenderTemplate("admin/setting/blog.html")
}
func (c AdminSetting) DoBlogTag(recommendTags, newTags string) revel.Result {
re := info.NewRe()
-
+
re.Ok = configService.UpdateGlobalArrayConfig(c.GetUserId(), "recommendTags", strings.Split(recommendTags, ","))
re.Ok = configService.UpdateGlobalArrayConfig(c.GetUserId(), "newTags", strings.Split(newTags, ","))
-
+
return c.RenderJson(re)
}
// 共享设置
-func (c AdminSetting) ShareNote(registerSharedUserId string,
- registerSharedNotebookPerms, registerSharedNotePerms []int,
+func (c AdminSetting) ShareNote(registerSharedUserId string,
+ registerSharedNotebookPerms, registerSharedNotePerms []int,
registerSharedNotebookIds, registerSharedNoteIds, registerCopyNoteIds []string) revel.Result {
-
+
re := info.NewRe()
- re.Ok, re.Msg = configService.UpdateShareNoteConfig(registerSharedUserId, registerSharedNotebookPerms, registerSharedNotePerms, registerSharedNotebookIds, registerSharedNoteIds, registerCopyNoteIds);
+ re.Ok, re.Msg = configService.UpdateShareNoteConfig(registerSharedUserId, registerSharedNotebookPerms, registerSharedNotePerms, registerSharedNotebookIds, registerSharedNoteIds, registerCopyNoteIds)
return c.RenderJson(re)
}
@@ -51,25 +51,25 @@ func (c AdminSetting) ShareNote(registerSharedUserId string,
func (c AdminSetting) Demo() revel.Result {
c.RenderArgs["demoUsername"] = configService.GetGlobalStringConfig("demoUsername")
c.RenderArgs["demoPassword"] = configService.GetGlobalStringConfig("demoPassword")
- return c.RenderTemplate("admin/setting/demo.html");
+ return c.RenderTemplate("admin/setting/demo.html")
}
func (c AdminSetting) DoDemo(demoUsername, demoPassword string) revel.Result {
re := info.NewRe()
-
+
userInfo, err := authService.Login(demoUsername, demoPassword)
if err != nil {
fmt.Println(err)
return c.RenderJson(info.Re{Ok: false})
}
if userInfo.UserId == "" {
- re.Msg = "The User is Not Exists";
+ re.Msg = "The User is Not Exists"
return c.RenderJson(re)
}
-
+
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "demoUserId", userInfo.UserId.Hex())
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "demoUsername", demoUsername)
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "demoPassword", demoPassword)
-
+
return c.RenderJson(re)
}
@@ -83,23 +83,23 @@ func (c AdminSetting) ExportPdf(path string) revel.Result {
func (c AdminSetting) SubDomain() revel.Result {
c.RenderArgs["str"] = configService.GlobalStringConfigs
c.RenderArgs["arr"] = configService.GlobalArrayConfigs
-
+
c.RenderArgs["noteSubDomain"] = configService.GetGlobalStringConfig("noteSubDomain")
c.RenderArgs["blogSubDomain"] = configService.GetGlobalStringConfig("blogSubDomain")
c.RenderArgs["leaSubDomain"] = configService.GetGlobalStringConfig("leaSubDomain")
-
- return c.RenderTemplate("admin/setting/subDomain.html");
+
+ return c.RenderTemplate("admin/setting/subDomain.html")
}
func (c AdminSetting) DoSubDomain(noteSubDomain, blogSubDomain, leaSubDomain, blackSubDomains, allowCustomDomain, blackCustomDomains string) revel.Result {
re := info.NewRe()
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "noteSubDomain", noteSubDomain)
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "blogSubDomain", blogSubDomain)
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "leaSubDomain", leaSubDomain)
-
+
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "allowCustomDomain", allowCustomDomain)
re.Ok = configService.UpdateGlobalArrayConfig(c.GetUserId(), "blackSubDomains", strings.Split(blackSubDomains, ","))
re.Ok = configService.UpdateGlobalArrayConfig(c.GetUserId(), "blackCustomDomains", strings.Split(blackCustomDomains, ","))
-
+
return c.RenderJson(re)
}
@@ -133,4 +133,4 @@ func (c AdminSetting) UploadSize(uploadImageSize, uploadAvatarSize, uploadBlogLo
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "uploadBlogLogoSize", fmt.Sprintf("%v", uploadBlogLogoSize))
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "uploadAttachSize", fmt.Sprintf("%v", uploadAttachSize))
return c.RenderJson(re)
-}
\ No newline at end of file
+}
diff --git a/app/controllers/admin/AdminUpgradeController.go b/app/controllers/admin/AdminUpgradeController.go
index 8f8f2f3..0ca28fb 100644
--- a/app/controllers/admin/AdminUpgradeController.go
+++ b/app/controllers/admin/AdminUpgradeController.go
@@ -2,9 +2,9 @@ package admin
import (
"github.com/revel/revel"
-// "encoding/json"
+ // "encoding/json"
"github.com/leanote/leanote/app/info"
-// "io/ioutil"
+ // "io/ioutil"
)
// Upgrade controller
@@ -14,7 +14,7 @@ type AdminUpgrade struct {
func (c AdminUpgrade) UpgradeBlog() revel.Result {
upgradeService.UpgradeBlog()
- return nil;
+ return nil
}
func (c AdminUpgrade) UpgradeBetaToBeta2() revel.Result {
@@ -27,4 +27,4 @@ func (c AdminUpgrade) UpgradeBeta3ToBeta4() revel.Result {
re := info.NewRe()
re.Ok, re.Msg = upgradeService.Api(c.GetUserId())
return c.RenderJson(re)
-}
\ No newline at end of file
+}
diff --git a/app/controllers/admin/AdminUserController.go b/app/controllers/admin/AdminUserController.go
index 8e2ba65..73bc1b9 100644
--- a/app/controllers/admin/AdminUserController.go
+++ b/app/controllers/admin/AdminUserController.go
@@ -1,9 +1,9 @@
package admin
import (
- "github.com/revel/revel"
. "github.com/leanote/leanote/app/lea"
-// "time"
+ "github.com/revel/revel"
+ // "time"
"github.com/leanote/leanote/app/info"
)
@@ -15,37 +15,38 @@ type AdminUser struct {
// admin 主页
var userPageSize = 10
+
func (c AdminUser) Index(sorter, keywords string, pageSize int) revel.Result {
pageNumber := c.GetPage()
if userPageSize == 0 {
pageSize = userPageSize
}
- sorterField, isAsc := c.getSorter("CreatedTime", false, []string{"email", "username", "verified", "createdTime", "accountType"});
- pageInfo, users := userService.ListUsers(pageNumber, pageSize, sorterField, isAsc, keywords);
+ sorterField, isAsc := c.getSorter("CreatedTime", false, []string{"email", "username", "verified", "createdTime", "accountType"})
+ pageInfo, users := userService.ListUsers(pageNumber, pageSize, sorterField, isAsc, keywords)
c.RenderArgs["pageInfo"] = pageInfo
c.RenderArgs["users"] = users
c.RenderArgs["keywords"] = keywords
- return c.RenderTemplate("admin/user/list.html");
+ return c.RenderTemplate("admin/user/list.html")
}
func (c AdminUser) Add() revel.Result {
- return c.RenderTemplate("admin/user/add.html");
+ return c.RenderTemplate("admin/user/add.html")
}
// 添加
func (c AdminUser) Register(email, pwd string) revel.Result {
- re := info.NewRe();
-
+ re := info.NewRe()
+
if re.Ok, re.Msg = Vd("email", email); !re.Ok {
- return c.RenderRe(re);
+ return c.RenderRe(re)
}
if re.Ok, re.Msg = Vd("password", pwd); !re.Ok {
- return c.RenderRe(re);
+ return c.RenderRe(re)
}
-
+
// 注册
re.Ok, re.Msg = authService.Register(email, pwd, "")
-
+
return c.RenderRe(re)
}
@@ -53,14 +54,14 @@ func (c AdminUser) Register(email, pwd string) revel.Result {
func (c AdminUser) ResetPwd(userId string) revel.Result {
userInfo := userService.GetUserInfo(userId)
c.RenderArgs["userInfo"] = userInfo
- return c.RenderTemplate("admin/user/reset_pwd.html");
+ return c.RenderTemplate("admin/user/reset_pwd.html")
}
func (c AdminUser) DoResetPwd(userId, pwd string) revel.Result {
- re := info.NewRe();
+ re := info.NewRe()
if re.Ok, re.Msg = Vd("password", pwd); !re.Ok {
- return c.RenderRe(re);
+ return c.RenderRe(re)
}
re.Ok, re.Msg = userService.ResetPwd(c.GetUserId(), userId, pwd)
return c.RenderRe(re)
-}
\ No newline at end of file
+}
diff --git a/app/controllers/admin/init.go b/app/controllers/admin/init.go
index bcd964c..bd97b48 100644
--- a/app/controllers/admin/init.go
+++ b/app/controllers/admin/init.go
@@ -1,11 +1,11 @@
package admin
import (
- "github.com/leanote/leanote/app/service"
"github.com/leanote/leanote/app/info"
-// . "github.com/leanote/leanote/app/lea"
+ "github.com/leanote/leanote/app/service"
+ // . "github.com/leanote/leanote/app/lea"
"github.com/revel/revel"
-// "strings"
+ // "strings"
)
var userService *service.UserService
@@ -19,9 +19,9 @@ var blogService *service.BlogService
var tagService *service.TagService
var pwdService *service.PwdService
var tokenService *service.TokenService
-var suggestionService *service.SuggestionService
-var albumService *service.AlbumService
-var noteImageService *service.NoteImageService
+var suggestionService *service.SuggestionService
+var albumService *service.AlbumService
+var noteImageService *service.NoteImageService
var fileService *service.FileService
var attachService *service.AttachService
var configService *service.ConfigService
@@ -31,31 +31,32 @@ var upgradeService *service.UpgradeService
// 拦截器
// 不需要拦截的url
// Index 除了Note之外都不需要
-var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": true,
- "Login": true,
- "DoLogin": true,
- "Logout": true,
- "Register": true,
- "DoRegister": true,
- "FindPasswword": true,
- "DoFindPassword": true,
- "FindPassword2": true,
- "FindPasswordUpdate": true,
- "Suggestion": true,
- },
+var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": true,
+ "Login": true,
+ "DoLogin": true,
+ "Logout": true,
+ "Register": true,
+ "DoRegister": true,
+ "FindPasswword": true,
+ "DoFindPassword": true,
+ "FindPassword2": true,
+ "FindPasswordUpdate": true,
+ "Suggestion": true,
+},
"Blog": map[string]bool{"Index": true,
- "View": true,
- "AboutMe": true,
+ "View": true,
+ "AboutMe": true,
"SearchBlog": true,
- },
+ },
// 用户的激活与修改邮箱都不需要登录, 通过链接地址
"User": map[string]bool{"UpdateEmail": true,
- "ActiveEmail":true,
- },
- "Oauth": map[string]bool{"GithubCallback": true},
- "File": map[string]bool{"OutputImage": true, "OutputFile": true},
+ "ActiveEmail": true,
+ },
+ "Oauth": map[string]bool{"GithubCallback": true},
+ "File": map[string]bool{"OutputImage": true, "OutputFile": true},
"Attach": map[string]bool{"Download": true, "DownloadAll": true},
}
+
func needValidate(controller, method string) bool {
// 在里面
if v, ok := commonUrl[controller]; ok {
@@ -66,33 +67,33 @@ func needValidate(controller, method string) bool {
return true
} else {
// controller不在这里的, 肯定要验证
- return true;
+ return true
}
}
func AuthInterceptor(c *revel.Controller) revel.Result {
// 全部变成首字大写
/*
- var controller = strings.Title(c.Name)
- var method = strings.Title(c.MethodName)
- // 是否需要验证?
- if !needValidate(controller, method) {
- return nil
- }
+ var controller = strings.Title(c.Name)
+ var method = strings.Title(c.MethodName)
+ // 是否需要验证?
+ if !needValidate(controller, method) {
+ return nil
+ }
*/
-
+
// 验证是否已登录
// 必须是管理员
if username, ok := c.Session["Username"]; ok && username == configService.GetAdminUsername() {
return nil // 已登录
}
-
+
// 没有登录, 判断是否是ajax操作
if c.Request.Header.Get("X-Requested-With") == "XMLHttpRequest" {
re := info.NewRe()
re.Msg = "NOTLOGIN"
return c.RenderJson(re)
}
-
+
return c.Redirect("/login")
}
@@ -110,7 +111,7 @@ func InitService() {
tokenService = service.TokenS
noteImageService = service.NoteImageS
fileService = service.FileS
- albumService= service.AlbumS
+ albumService = service.AlbumS
attachService = service.AttachS
pwdService = service.PwdS
suggestionService = service.SuggestionS
diff --git a/app/controllers/api/ApiAuthController.go b/app/controllers/api/ApiAuthController.go
index 6f16a37..c651fd1 100644
--- a/app/controllers/api/ApiAuthController.go
+++ b/app/controllers/api/ApiAuthController.go
@@ -23,7 +23,7 @@ type ApiAuth struct {
// 失败返回 {Ok: false, Msg: ""}
func (c ApiAuth) Login(email, pwd string) revel.Result {
var msg = ""
-
+
userInfo, err := authService.Login(email, pwd)
if err == nil {
token := bson.NewObjectId().Hex()
diff --git a/app/controllers/api/ApiBaseController.go b/app/controllers/api/ApiBaseController.go
index b903cc6..1b975aa 100644
--- a/app/controllers/api/ApiBaseController.go
+++ b/app/controllers/api/ApiBaseController.go
@@ -4,11 +4,11 @@ import (
"github.com/revel/revel"
"gopkg.in/mgo.v2/bson"
// "encoding/json"
- . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/controllers"
"github.com/leanote/leanote/app/info"
+ . "github.com/leanote/leanote/app/lea"
"os"
-// "fmt"
+ // "fmt"
"io/ioutil"
// "fmt"
// "math"
@@ -43,75 +43,75 @@ func (c ApiBaseContrller) getUserInfo() info.User {
// 上传附件
func (c ApiBaseContrller) uploadAttach(name string, noteId string) (ok bool, msg string, id string) {
- userId := c.getUserId();
-
+ userId := c.getUserId()
+
// 判断是否有权限为笔记添加附件
// 如果笔记还没有添加是不是会有问题
/*
- if !shareService.HasUpdateNotePerm(noteId, userId) {
- return
- }
+ if !shareService.HasUpdateNotePerm(noteId, userId) {
+ return
+ }
*/
-
+
file, handel, err := c.Request.FormFile(name)
if err != nil {
- return
+ return
}
defer file.Close()
-
+
data, err := ioutil.ReadAll(file)
if err != nil {
- return
+ return
}
// > 5M?
- maxFileSize := configService.GetUploadSize("uploadAttachSize");
+ maxFileSize := configService.GetUploadSize("uploadAttachSize")
if maxFileSize <= 0 {
maxFileSize = 1000
}
- if(float64(len(data)) > maxFileSize * float64(1024*1024)) {
- msg = "fileIsTooLarge"
- return
+ if float64(len(data)) > maxFileSize*float64(1024*1024) {
+ msg = "fileIsTooLarge"
+ return
}
-
+
// 生成上传路径
newGuid := NewGuid()
- filePath := "files/" + Digest3(userId) + "/" + userId + "/" + Digest2(newGuid) + "/attachs"
-
- dir := revel.BasePath + "/" + filePath
+ filePath := "files/" + Digest3(userId) + "/" + userId + "/" + Digest2(newGuid) + "/attachs"
+
+ dir := revel.BasePath + "/" + filePath
err = os.MkdirAll(dir, 0755)
if err != nil {
- return
+ return
}
// 生成新的文件名
filename := handel.Filename
_, ext := SplitFilename(filename) // .doc
filename = newGuid + ext
- toPath := dir + "/" + filename;
+ toPath := dir + "/" + filename
err = ioutil.WriteFile(toPath, data, 0777)
if err != nil {
- return
+ return
}
-
+
// add File to db
fileType := ""
if ext != "" {
fileType = strings.ToLower(ext[1:])
}
filesize := GetFilesize(toPath)
- fileInfo := info.Attach{AttachId: bson.NewObjectId(),
- Name: filename,
- Title: handel.Filename,
- NoteId: bson.ObjectIdHex(noteId),
+ fileInfo := info.Attach{AttachId: bson.NewObjectId(),
+ Name: filename,
+ Title: handel.Filename,
+ NoteId: bson.ObjectIdHex(noteId),
UploadUserId: bson.ObjectIdHex(userId),
- Path: filePath + "/" + filename,
- Type: fileType,
- Size: filesize}
-
+ Path: filePath + "/" + filename,
+ Type: fileType,
+ Size: filesize}
+
ok, msg = attachService.AddAttach(fileInfo, true)
if !ok {
return
}
-
+
id = fileInfo.AttachId.Hex()
return
}
@@ -123,16 +123,16 @@ func (c ApiBaseContrller) upload(name string, noteId string, isAttach bool) (ok
}
file, handel, err := c.Request.FormFile(name)
if err != nil {
- return
+ return
}
defer file.Close()
-
+
newGuid := NewGuid()
// 生成上传路径
userId := c.getUserId()
fileUrlPath := "files/" + Digest3(userId) + "/" + userId + "/" + Digest2(newGuid) + "/images"
-
- dir := revel.BasePath + "/" + fileUrlPath
+
+ dir := revel.BasePath + "/" + fileUrlPath
err = os.MkdirAll(dir, 0755)
if err != nil {
return
@@ -140,7 +140,7 @@ func (c ApiBaseContrller) upload(name string, noteId string, isAttach bool) (ok
// 生成新的文件名
filename := handel.Filename
_, ext := SplitFilename(filename)
- if(ext != ".gif" && ext != ".jpg" && ext != ".png" && ext != ".bmp" && ext != ".jpeg") {
+ if ext != ".gif" && ext != ".jpg" && ext != ".png" && ext != ".bmp" && ext != ".jpeg" {
msg = "notImage"
return
}
@@ -150,35 +150,35 @@ func (c ApiBaseContrller) upload(name string, noteId string, isAttach bool) (ok
if err != nil {
return
}
-
- maxFileSize := configService.GetUploadSize("uploadImageSize");
+
+ maxFileSize := configService.GetUploadSize("uploadImageSize")
if maxFileSize <= 0 {
maxFileSize = 1000
}
-
+
// > 2M?
- if(float64(len(data)) > maxFileSize * float64(1024*1024)) {
+ if float64(len(data)) > maxFileSize*float64(1024*1024) {
msg = "fileIsTooLarge"
return
}
-
- toPath := dir + "/" + filename;
+
+ toPath := dir + "/" + filename
err = ioutil.WriteFile(toPath, data, 0777)
if err != nil {
- return
+ return
}
// 改变成gif图片
_, toPathGif := TransToGif(toPath, 0, true)
filename = GetFilename(toPathGif)
filesize := GetFilesize(toPathGif)
fileUrlPath += "/" + filename
-
+
// File
fileInfo := info.File{FileId: bson.NewObjectId(),
- Name: filename,
+ Name: filename,
Title: handel.Filename,
- Path: fileUrlPath,
- Size: filesize}
+ Path: fileUrlPath,
+ Size: filesize}
ok, msg = fileService.AddImage(fileInfo, "", c.getUserId(), true)
if ok {
id = fileInfo.FileId.Hex()
diff --git a/app/controllers/api/ApiFileController.go b/app/controllers/api/ApiFileController.go
index 530e9fe..4432501 100644
--- a/app/controllers/api/ApiFileController.go
+++ b/app/controllers/api/ApiFileController.go
@@ -3,18 +3,18 @@ package api
import (
"github.com/revel/revel"
// "encoding/json"
-// . "github.com/leanote/leanote/app/lea"
-// "gopkg.in/mgo.v2/bson"
+ // . "github.com/leanote/leanote/app/lea"
+ // "gopkg.in/mgo.v2/bson"
// "github.com/leanote/leanote/app/lea/netutil"
-// "github.com/leanote/leanote/app/info"
-// "io/ioutil"
+ // "github.com/leanote/leanote/app/info"
+ // "io/ioutil"
"os"
// "strconv"
+ "archive/tar"
+ "compress/gzip"
"io"
- "time"
"strings"
- "archive/tar"
- "compress/gzip"
+ "time"
)
// 文件操作, 图片, 头像上传, 输出
@@ -73,14 +73,14 @@ func (c ApiFile) GetImage(fileId string) revel.Result {
// 下载附件
// [OK]
func (c ApiFile) GetAttach(fileId string) revel.Result {
- attach := attachService.GetAttach(fileId, c.getUserId()); // 得到路径
+ attach := attachService.GetAttach(fileId, c.getUserId()) // 得到路径
path := attach.Path
if path == "" {
return c.RenderText("No Such File")
}
- fn := revel.BasePath + "/" + strings.TrimLeft(path, "/")
- file, _ := os.Open(fn)
- return c.RenderBinary(file, attach.Title, revel.Attachment, time.Now()) // revel.Attachment
+ fn := revel.BasePath + "/" + strings.TrimLeft(path, "/")
+ file, _ := os.Open(fn)
+ return c.RenderBinary(file, attach.Title, revel.Attachment, time.Now()) // revel.Attachment
}
// 下载所有附件
@@ -95,70 +95,69 @@ func (c ApiFile) GetAllAttachs(noteId string) revel.Result {
if attachs == nil || len(attachs) == 0 {
return c.RenderText("")
}
-
+
/*
- dir := revel.BasePath + "/files/tmp"
- err := os.MkdirAll(dir, 0755)
- if err != nil {
- return c.RenderText("")
- }
+ dir := revel.BasePath + "/files/tmp"
+ err := os.MkdirAll(dir, 0755)
+ if err != nil {
+ return c.RenderText("")
+ }
*/
-
+
filename := note.Title + ".tar.gz"
if note.Title == "" {
filename = "all.tar.gz"
}
-
- // file write
- fw, err := os.Create(revel.BasePath + "/files/" + filename)
- if err != nil {
- return c.RenderText("")
- }
- // defer fw.Close() // 不需要关闭, 还要读取给用户下载
-
- // gzip write
- gw := gzip.NewWriter(fw)
- defer gw.Close()
-
- // tar write
- tw := tar.NewWriter(gw)
- defer tw.Close()
-
- // 遍历文件列表
- for _, attach := range attachs {
- fn := revel.BasePath + "/" + strings.TrimLeft(attach.Path, "/")
- fr, err := os.Open(fn)
- fileInfo, _ := fr.Stat()
- if err != nil {
- return c.RenderText("")
- }
- defer fr.Close()
-
- // 信息头
- h := new(tar.Header)
- h.Name = attach.Title
- h.Size = fileInfo.Size()
- h.Mode = int64(fileInfo.Mode())
- h.ModTime = fileInfo.ModTime()
-
- // 写信息头
- err = tw.WriteHeader(h)
- if err != nil {
- panic(err)
- }
-
- // 写文件
- _, err = io.Copy(tw, fr)
- if err != nil {
- panic(err)
- }
- } // for
-
-// tw.Close()
-// gw.Close()
-// fw.Close()
-// file, _ := os.Open(dir + "/" + filename)
- // fw.Seek(0, 0)
- return c.RenderBinary(fw, filename, revel.Attachment, time.Now()) // revel.Attachment
-}
+ // file write
+ fw, err := os.Create(revel.BasePath + "/files/" + filename)
+ if err != nil {
+ return c.RenderText("")
+ }
+ // defer fw.Close() // 不需要关闭, 还要读取给用户下载
+
+ // gzip write
+ gw := gzip.NewWriter(fw)
+ defer gw.Close()
+
+ // tar write
+ tw := tar.NewWriter(gw)
+ defer tw.Close()
+
+ // 遍历文件列表
+ for _, attach := range attachs {
+ fn := revel.BasePath + "/" + strings.TrimLeft(attach.Path, "/")
+ fr, err := os.Open(fn)
+ fileInfo, _ := fr.Stat()
+ if err != nil {
+ return c.RenderText("")
+ }
+ defer fr.Close()
+
+ // 信息头
+ h := new(tar.Header)
+ h.Name = attach.Title
+ h.Size = fileInfo.Size()
+ h.Mode = int64(fileInfo.Mode())
+ h.ModTime = fileInfo.ModTime()
+
+ // 写信息头
+ err = tw.WriteHeader(h)
+ if err != nil {
+ panic(err)
+ }
+
+ // 写文件
+ _, err = io.Copy(tw, fr)
+ if err != nil {
+ panic(err)
+ }
+ } // for
+
+ // tw.Close()
+ // gw.Close()
+ // fw.Close()
+ // file, _ := os.Open(dir + "/" + filename)
+ // fw.Seek(0, 0)
+ return c.RenderBinary(fw, filename, revel.Attachment, time.Now()) // revel.Attachment
+}
diff --git a/app/controllers/api/ApiNoteController.go b/app/controllers/api/ApiNoteController.go
index be344fa..6c97c8c 100644
--- a/app/controllers/api/ApiNoteController.go
+++ b/app/controllers/api/ApiNoteController.go
@@ -6,11 +6,11 @@ import (
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
+ "os"
+ "os/exec"
"regexp"
"strings"
"time"
- "os/exec"
- "os"
// "github.com/leanote/leanote/app/types"
// "io/ioutil"
// "fmt"
@@ -58,7 +58,7 @@ func (c ApiNote) GetSyncNotes(afterUsn, maxEntry int) revel.Result {
// 得到笔记本下的笔记
// [OK]
func (c ApiNote) GetNotes(notebookId string) revel.Result {
- if notebookId != "" && !bson.IsObjectIdHex(notebookId) {
+ if notebookId != "" && !bson.IsObjectIdHex(notebookId) {
re := info.NewApiRe()
re.Msg = "notebookIdInvalid"
return c.RenderJson(re)
@@ -72,7 +72,7 @@ func (c ApiNote) GetNotes(notebookId string) revel.Result {
func (c ApiNote) GetTrashNotes() revel.Result {
_, notes := noteService.ListNotes(c.getUserId(), "", true, c.GetPage(), pageSize, defaultSortField, false, false)
return c.RenderJson(noteService.ToApiNotes(notes))
-
+
}
// get Note
@@ -125,12 +125,12 @@ func (c ApiNote) GetTrashNotes() revel.Result {
}
*/
func (c ApiNote) GetNote(noteId string) revel.Result {
- if !bson.IsObjectIdHex(noteId) {
+ if !bson.IsObjectIdHex(noteId) {
re := info.NewApiRe()
re.Msg = "noteIdInvalid"
return c.RenderJson(re)
}
-
+
note := noteService.GetNote(noteId, c.getUserId())
if note.NoteId == "" {
re := info.NewApiRe()
@@ -145,7 +145,7 @@ func (c ApiNote) GetNote(noteId string) revel.Result {
// [OK]
func (c ApiNote) GetNoteAndContent(noteId string) revel.Result {
noteAndContent := noteService.GetNoteAndContent(noteId, c.getUserId())
-
+
apiNotes := noteService.ToApiNotes([]info.Note{noteAndContent.Note})
apiNote := apiNotes[0]
apiNote.Content = noteAndContent.Content
@@ -156,57 +156,57 @@ func (c ApiNote) GetNoteAndContent(noteId string) revel.Result {
// 图片, 附件都替换
func (c ApiNote) fixContent(content string) string {
// TODO, 这个url需要从config中取
-// baseUrl := "http://leanote.com"
+ // baseUrl := "http://leanote.com"
baseUrl := configService.GetSiteUrl()
-// baseUrl := "http://localhost:9000"
-
+ // baseUrl := "http://localhost:9000"
+
patterns := []map[string]string{
map[string]string{"src": "src", "middle": "/file/outputImage", "param": "fileId", "to": "getImage?fileId="},
map[string]string{"src": "href", "middle": "/attach/download", "param": "attachId", "to": "getAttach?fileId="},
map[string]string{"src": "href", "middle": "/attach/downloadAll", "param": "noteId", "to": "getAllAttachs?noteId="},
}
-
+
for _, eachPattern := range patterns {
-
+
// src="http://leanote.com/file/outputImage?fileId=5503537b38f4111dcb0000d1"
// href="http://leanote.com/attach/download?attachId=5504243a38f4111dcb00017d"
// href="http://leanote.com/attach/downloadAll?noteId=55041b6a38f4111dcb000159"
-
- regImage, _ := regexp.Compile(eachPattern["src"] + `=('|")`+ baseUrl + eachPattern["middle"] + `\?` + eachPattern["param"] + `=([a-z0-9A-Z]{24})("|')`)
+
+ regImage, _ := regexp.Compile(eachPattern["src"] + `=('|")` + baseUrl + eachPattern["middle"] + `\?` + eachPattern["param"] + `=([a-z0-9A-Z]{24})("|')`)
findsImage := regImage.FindAllStringSubmatch(content, -1) // 查找所有的
-
+
// [[src='http://leanote.com/file/outputImage?fileId=54672e8d38f411286b000069" ' 54672e8d38f411286b000069 "] [src="http://leanote.com/file/outputImage?fileId=54672e8d38f411286b000069" " 54672e8d38f411286b000069 "] [src="http://leanote.com/file/outputImage?fileId=54672e8d38f411286b000069" " 54672e8d38f411286b000069 "] [src="http://leanote.com/file/outputImage?fileId=54672e8d38f411286b000069" " 54672e8d38f411286b000069 "]]
for _, eachFind := range findsImage {
// [src='http://leanote.com/file/outputImage?fileId=54672e8d38f411286b000069" ' 54672e8d38f411286b000069 "]
if len(eachFind) == 4 {
- content = strings.Replace(content,
- eachFind[0],
- eachPattern["src"] + "=\"" + baseUrl + "/api/file/" + eachPattern["to"] + eachFind[2] + "\"",
- 1);
+ content = strings.Replace(content,
+ eachFind[0],
+ eachPattern["src"]+"=\""+baseUrl+"/api/file/"+eachPattern["to"]+eachFind[2]+"\"",
+ 1)
}
}
-
+
// markdown处理
// 
// [selection 2.html](http://leanote.com/attach/download?attachId=5504262638f4111dcb00017f)
// [all.tar.gz](http://leanote.com/attach/downloadAll?noteId=5503b57d59f81b4eb4000000)
-
- pre := "!" // 默认图片
+
+ pre := "!" // 默认图片
if eachPattern["src"] == "href" { // 是attach
pre = ""
}
-
- regImageMarkdown, _ := regexp.Compile(pre + `\[(.*?)\]\(`+ baseUrl + eachPattern["middle"] + `\?` + eachPattern["param"] + `=([a-z0-9A-Z]{24})\)`)
+
+ regImageMarkdown, _ := regexp.Compile(pre + `\[(.*?)\]\(` + baseUrl + eachPattern["middle"] + `\?` + eachPattern["param"] + `=([a-z0-9A-Z]{24})\)`)
findsImageMarkdown := regImageMarkdown.FindAllStringSubmatch(content, -1) // 查找所有的
// [[ 5503537b38f4111dcb0000d1] [ 5503537b38f4111dcb0000d1]]
for _, eachFind := range findsImageMarkdown {
// [ 你好啊, 我很好, 为什么? 5503537b38f4111dcb0000d1]
if len(eachFind) == 3 {
- content = strings.Replace(content, eachFind[0], pre + "[" + eachFind[1] + "](" + baseUrl + "/api/file/" + eachPattern["to"] + eachFind[2] + ")", 1);
+ content = strings.Replace(content, eachFind[0], pre+"["+eachFind[1]+"]("+baseUrl+"/api/file/"+eachPattern["to"]+eachFind[2]+")", 1)
}
}
}
-
+
return content
}
@@ -222,7 +222,7 @@ func (c ApiNote) fixPostNotecontent(noteOrContent *info.ApiNote) {
if files != nil && len(files) > 0 {
for _, file := range files {
if file.LocalFileId != "" {
- noteOrContent.Content = strings.Replace(noteOrContent.Content, "fileId=" + file.LocalFileId, "fileId=" + file.FileId, -1)
+ noteOrContent.Content = strings.Replace(noteOrContent.Content, "fileId="+file.LocalFileId, "fileId="+file.FileId, -1)
}
}
}
@@ -236,13 +236,13 @@ func (c ApiNote) GetNoteContent(noteId string) revel.Result {
if noteContent.Content != "" {
noteContent.Content = c.fixContent(noteContent.Content)
}
-
+
apiNoteContent := info.ApiNoteContent{
- NoteId: noteContent.NoteId,
- UserId: noteContent.UserId,
+ NoteId: noteContent.NoteId,
+ UserId: noteContent.UserId,
Content: noteContent.Content,
}
-
+
// re.Item = noteContent
return c.RenderJson(apiNoteContent)
}
@@ -255,9 +255,9 @@ func (c ApiNote) AddNote(noteOrContent info.ApiNote) revel.Result {
myUserId := userId
// 为共享新建?
/*
- if noteOrContent.FromUserId != "" {
- userId = bson.ObjectIdHex(noteOrContent.FromUserId)
- }
+ if noteOrContent.FromUserId != "" {
+ userId = bson.ObjectIdHex(noteOrContent.FromUserId)
+ }
*/
// Log(noteOrContent.Title)
// LogJ(noteOrContent)
@@ -315,8 +315,8 @@ func (c ApiNote) AddNote(noteOrContent info.ApiNote) revel.Result {
c.fixPostNotecontent(¬eOrContent)
-// Log("Add")
-// LogJ(noteOrContent)
+ // Log("Add")
+ // LogJ(noteOrContent)
// return c.RenderJson(re)
@@ -326,7 +326,7 @@ func (c ApiNote) AddNote(noteOrContent info.ApiNote) revel.Result {
Title: noteOrContent.Title,
Tags: noteOrContent.Tags,
Desc: noteOrContent.Desc,
-// ImgSrc: noteOrContent.ImgSrc,
+ // ImgSrc: noteOrContent.ImgSrc,
IsBlog: noteOrContent.IsBlog,
IsMarkdown: noteOrContent.IsMarkdown,
AttachNum: attachNum,
@@ -346,7 +346,7 @@ func (c ApiNote) AddNote(noteOrContent info.ApiNote) revel.Result {
}
note = noteService.AddNoteAndContentApi(note, noteContent, myUserId)
-
+
if note.NoteId == "" {
re.Ok = false
return c.RenderJson(re)
@@ -386,8 +386,8 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
return c.RenderJson(re)
}
-// Log("_____________")
-// LogJ(noteOrContent)
+ // Log("_____________")
+ // LogJ(noteOrContent)
/*
LogJ(c.Params.Files)
LogJ(c.Request.Header)
@@ -410,14 +410,14 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
// 如果传了files
// TODO 测试
/*
- for key, v := range c.Params.Values {
- Log(key)
- Log(v)
- }
+ for key, v := range c.Params.Values {
+ Log(key)
+ Log(v)
+ }
*/
-// Log(c.Has("Files[0]"))
- if c.Has("Files[0][LocalFileId]") {
-// LogJ(c.Params.Files)
+ // Log(c.Has("Files[0]"))
+ if c.Has("Files[0][LocalFileId]") {
+ // LogJ(c.Params.Files)
if noteOrContent.Files != nil && len(noteOrContent.Files) > 0 {
for i, file := range noteOrContent.Files {
if file.HasBody {
@@ -444,25 +444,25 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
}
}
}
-
-// Log("after upload")
-// LogJ(noteOrContent.Files)
+
+ // Log("after upload")
+ // LogJ(noteOrContent.Files)
}
-
+
// 移到外面来, 删除最后一个file时也要处理, 不然总删不掉
// 附件问题, 根据Files, 有些要删除的, 只留下这些
attachService.UpdateOrDeleteAttachApi(noteId, userId, noteOrContent.Files)
-
+
// Desc前台传来
if c.Has("Desc") {
needUpdateNote = true
noteUpdate["Desc"] = noteOrContent.Desc
}
/*
- if c.Has("ImgSrc") {
- needUpdateNote = true
- noteUpdate["ImgSrc"] = noteOrContent.ImgSrc
- }
+ if c.Has("ImgSrc") {
+ needUpdateNote = true
+ noteUpdate["ImgSrc"] = noteOrContent.ImgSrc
+ }
*/
if c.Has("Title") {
needUpdateNote = true
@@ -472,7 +472,7 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
needUpdateNote = true
noteUpdate["IsTrash"] = noteOrContent.IsTrash
}
-
+
// 是否是博客
if c.Has("IsBlog") {
needUpdateNote = true
@@ -532,8 +532,8 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
if noteOrContent.Abstract == "" {
noteOrContent.Abstract = SubStringHTML(noteOrContent.Content, 200, "")
}
-// Log("--------> afte fixed")
-// Log(noteOrContent.Content)
+ // Log("--------> afte fixed")
+ // Log(noteOrContent.Content)
contentOk, contentMsg, afterContentUsn = noteService.UpdateNoteContent(c.getUserId(),
noteOrContent.NoteId, noteOrContent.Content, noteOrContent.Abstract, needUpdateNote, noteOrContent.Usn)
}
@@ -556,8 +556,8 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
noteOrContent.Usn = re.Usn
noteOrContent.UpdatedTime = time.Now()
-// Log("after upload")
-// LogJ(noteOrContent.Files)
+ // Log("after upload")
+ // LogJ(noteOrContent.Files)
noteOrContent.UserId = c.getUserId()
return c.RenderJson(noteOrContent)
@@ -593,7 +593,7 @@ func (c ApiNote) ExportPdf(noteId string) revel.Result {
re.Msg = "noteNotExists"
return c.RenderJson(re)
}
-
+
note := noteService.GetNoteById(noteId)
if note.NoteId == "" {
re.Msg = "noteNotExists"
@@ -625,7 +625,7 @@ func (c ApiNote) ExportPdf(noteId string) revel.Result {
if appKey == "" {
appKey, _ = revel.Config.String("app.secret")
}
-
+
// 生成之
binPath := configService.GetGlobalStringConfig("exportPdfBinPath")
// 默认路径
@@ -635,15 +635,15 @@ func (c ApiNote) ExportPdf(noteId string) revel.Result {
url := configService.GetSiteUrl() + "/note/toPdf?noteId=" + noteId + "&appKey=" + appKey
var cc string
- if(note.IsMarkdown) {
+ if note.IsMarkdown {
cc = binPath + " --window-status done \"" + url + "\" \"" + path + "\"" // \"" + cookieDomain + "\" \"" + cookieName + "\" \"" + cookieValue + "\""
} else {
cc = binPath + " \"" + url + "\" \"" + path + "\"" // \"" + cookieDomain + "\" \"" + cookieName + "\" \"" + cookieValue + "\""
}
-
+
cmd := exec.Command("/bin/sh", "-c", cc)
_, err := cmd.Output()
- if err != nil {
+ if err != nil {
re.Msg = "sysError"
return c.RenderJson(re)
}
@@ -660,5 +660,5 @@ func (c ApiNote) ExportPdf(noteId string) revel.Result {
} else {
filenameReturn += ".pdf"
}
- return c.RenderBinary(file, filenameReturn, revel.Attachment, time.Now()) // revel.Attachment
+ return c.RenderBinary(file, filenameReturn, revel.Attachment, time.Now()) // revel.Attachment
}
diff --git a/app/controllers/api/ApiNotebookController.go b/app/controllers/api/ApiNotebookController.go
index 53e8c67..520a998 100644
--- a/app/controllers/api/ApiNotebookController.go
+++ b/app/controllers/api/ApiNotebookController.go
@@ -2,9 +2,9 @@ package api
import (
"github.com/leanote/leanote/app/info"
+ . "github.com/leanote/leanote/app/lea"
"github.com/revel/revel"
"gopkg.in/mgo.v2/bson"
- . "github.com/leanote/leanote/app/lea"
// "io/ioutil"
)
@@ -30,17 +30,17 @@ func (c ApiNotebook) fixNotebook(notebook *info.Notebook) info.ApiNotebook {
return info.ApiNotebook{}
}
return info.ApiNotebook{
- NotebookId : notebook.NotebookId,
- UserId : notebook.UserId,
- ParentNotebookId : notebook.ParentNotebookId,
- Seq : notebook.Seq,
- Title : notebook.Title,
- UrlTitle : notebook.UrlTitle,
- IsBlog : notebook.IsBlog,
- CreatedTime : notebook.CreatedTime,
- UpdatedTime : notebook.UpdatedTime,
- Usn: notebook.Usn,
- IsDeleted: notebook.IsDeleted,
+ NotebookId: notebook.NotebookId,
+ UserId: notebook.UserId,
+ ParentNotebookId: notebook.ParentNotebookId,
+ Seq: notebook.Seq,
+ Title: notebook.Title,
+ UrlTitle: notebook.UrlTitle,
+ IsBlog: notebook.IsBlog,
+ CreatedTime: notebook.CreatedTime,
+ UpdatedTime: notebook.UpdatedTime,
+ Usn: notebook.Usn,
+ IsDeleted: notebook.IsDeleted,
}
}
@@ -86,7 +86,7 @@ func (c ApiNotebook) AddNotebook(title, parentNotebookId string, seq int) revel.
// [OK]
func (c ApiNotebook) UpdateNotebook(notebookId, title, parentNotebookId string, seq, usn int) revel.Result {
re := info.NewApiRe()
-
+
ok, msg, notebook := notebookService.UpdateNotebookApi(c.getUserId(), notebookId, title, parentNotebookId, seq, usn)
if !ok {
re.Ok = false
diff --git a/app/controllers/api/ApiTagController.go b/app/controllers/api/ApiTagController.go
index 5b2c58f..14dbcea 100644
--- a/app/controllers/api/ApiTagController.go
+++ b/app/controllers/api/ApiTagController.go
@@ -3,7 +3,7 @@ package api
import (
"github.com/leanote/leanote/app/info"
"github.com/revel/revel"
-// "gopkg.in/mgo.v2/bson"
+ // "gopkg.in/mgo.v2/bson"
// . "github.com/leanote/leanote/app/lea"
// "io/ioutil"
)
@@ -53,4 +53,4 @@ func (c ApiTag) DeleteTag(tag string, usn int) revel.Result {
re := info.NewReUpdate()
re.Ok, re.Msg, re.Usn = tagService.DeleteTagApi(c.getUserId(), tag, usn)
return c.RenderJson(re)
-}
\ No newline at end of file
+}
diff --git a/app/controllers/api/ApiUserController.go b/app/controllers/api/ApiUserController.go
index 1601b4f..a0c5426 100644
--- a/app/controllers/api/ApiUserController.go
+++ b/app/controllers/api/ApiUserController.go
@@ -3,15 +3,15 @@ package api
import (
"github.com/revel/revel"
// "encoding/json"
- "gopkg.in/mgo.v2/bson"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
+ "gopkg.in/mgo.v2/bson"
"time"
// "github.com/leanote/leanote/app/types"
- "io/ioutil"
+ "io/ioutil"
// "fmt"
// "math"
- "os"
+ "os"
// "path"
// "strconv"
@@ -31,10 +31,10 @@ func (c ApiUser) Info() revel.Result {
return c.RenderJson(re)
}
apiUser := info.ApiUser{
- UserId: userInfo.UserId.Hex(),
+ UserId: userInfo.UserId.Hex(),
Username: userInfo.Username,
- Email: userInfo.Email,
- Logo: userInfo.Logo,
+ Email: userInfo.Email,
+ Logo: userInfo.Logo,
Verified: userInfo.Verified,
}
return c.RenderJson(apiUser)
@@ -82,7 +82,6 @@ func (c ApiUser) GetSyncState() revel.Result {
return c.RenderJson(ret)
}
-
// 头像设置
// 参数file=文件
// 成功返回{Logo: url} 头像新url
@@ -112,7 +111,7 @@ func (c ApiUser) uploadImage() (ok bool, msg, url string) {
defer file.Close()
// 生成上传路径
fileUrlPath = "public/upload/" + c.getUserId() + "/images/logo"
-
+
dir := revel.BasePath + "/" + fileUrlPath
err = os.MkdirAll(dir, 0755)
if err != nil {
@@ -122,11 +121,11 @@ func (c ApiUser) uploadImage() (ok bool, msg, url string) {
filename := handel.Filename
var ext string
-
+
_, ext = SplitFilename(filename)
if ext != ".gif" && ext != ".jpg" && ext != ".png" && ext != ".bmp" && ext != ".jpeg" {
msg = "notImage"
- return
+ return
}
filename = NewGuid() + ext
@@ -148,8 +147,8 @@ func (c ApiUser) uploadImage() (ok bool, msg, url string) {
LogJ(err)
return
}
-
+
ok = true
url = configService.GetSiteUrl() + "/" + fileUrlPath + "/" + filename
- return
+ return
}
diff --git a/app/controllers/api/init.go b/app/controllers/api/init.go
index 28a9a69..37f9c1c 100644
--- a/app/controllers/api/init.go
+++ b/app/controllers/api/init.go
@@ -3,7 +3,7 @@ package api
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/service"
-// . "github.com/leanote/leanote/app/lea"
+ // . "github.com/leanote/leanote/app/lea"
"github.com/revel/revel"
"strings"
)
@@ -46,10 +46,10 @@ const (
// 不需要拦截的url
var commonUrl = map[string]map[string]bool{"ApiAuth": map[string]bool{"Login": true,
"Register": true,
- },
+},
// 文件的操作也不用登录, userId会从session中获取
"ApiFile": map[string]bool{"GetImage": true,
- "GetAttach": true,
+ "GetAttach": true,
"GetAllAttachs": true,
},
}
@@ -90,15 +90,15 @@ func AuthInterceptor(c *revel.Controller) revel.Result {
if noToken && userId == "" {
// 从session中获取, api/file/getImage, api/file/getAttach, api/file/getAllAttach
// 客户端
- userId, _ = c.Session["UserId"];
+ userId, _ = c.Session["UserId"]
}
c.Session["_userId"] = userId
-
+
// 是否需要验证?
if !needValidate(controller, method) {
return nil
}
-
+
if userId != "" {
return nil // 已登录
}
diff --git a/app/controllers/init.go b/app/controllers/init.go
index 7fba55a..790b453 100644
--- a/app/controllers/init.go
+++ b/app/controllers/init.go
@@ -1,10 +1,10 @@
package controllers
import (
- "github.com/leanote/leanote/app/service"
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/lea/blog"
-// . "github.com/leanote/leanote/app/lea"
+ "github.com/leanote/leanote/app/service"
+ // . "github.com/leanote/leanote/app/lea"
"github.com/revel/revel"
"strings"
)
@@ -68,7 +68,7 @@ var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": tru
},
"Oauth": map[string]bool{"GithubCallback": true},
"File": map[string]bool{"OutputImage": true, "OutputFile": true},
- "Attach": map[string]bool{"Download": true/*, "DownloadAll": true*/},
+ "Attach": map[string]bool{"Download": true /*, "DownloadAll": true*/},
}
func needValidate(controller, method string) bool {
diff --git a/app/controllers/member/MemberBaseController.go b/app/controllers/member/MemberBaseController.go
index 2fac5f4..4db0bb7 100644
--- a/app/controllers/member/MemberBaseController.go
+++ b/app/controllers/member/MemberBaseController.go
@@ -1,15 +1,15 @@
package member
import (
-// "github.com/revel/revel"
-// "gopkg.in/mgo.v2/bson"
-// "encoding/json"
- . "github.com/leanote/leanote/app/lea"
+ // "github.com/revel/revel"
+ // "gopkg.in/mgo.v2/bson"
+ // "encoding/json"
"github.com/leanote/leanote/app/controllers"
-// "io/ioutil"
-// "fmt"
-// "math"
-// "strconv"
+ . "github.com/leanote/leanote/app/lea"
+ // "io/ioutil"
+ // "fmt"
+ // "math"
+ // "strconv"
"strings"
)
@@ -20,26 +20,26 @@ type MemberBaseController struct {
// 得到sorterField 和 isAsc
// okSorter = ['email', 'username']
-func (c MemberBaseController) getSorter(sorterField string, isAsc bool, okSorter []string) (string, bool){
+func (c MemberBaseController) getSorter(sorterField string, isAsc bool, okSorter []string) (string, bool) {
sorter := ""
c.Params.Bind(&sorter, "sorter")
if sorter == "" {
- return sorterField, isAsc;
+ return sorterField, isAsc
}
-
+
// sorter形式 email-up, email-down
s2 := strings.Split(sorter, "-")
if len(s2) != 2 {
- return sorterField, isAsc;
+ return sorterField, isAsc
}
-
+
// 必须是可用的sorter
if okSorter != nil && len(okSorter) > 0 {
if !InArray(okSorter, s2[0]) {
- return sorterField, isAsc;
+ return sorterField, isAsc
}
}
-
+
sorterField = strings.Title(s2[0])
if s2[1] == "up" {
isAsc = true
@@ -47,7 +47,7 @@ func (c MemberBaseController) getSorter(sorterField string, isAsc bool, okSorter
isAsc = false
}
c.RenderArgs["sorter"] = sorter
- return sorterField, isAsc;
+ return sorterField, isAsc
}
func (c MemberBaseController) updateConfig(keys []string) {
@@ -56,4 +56,4 @@ func (c MemberBaseController) updateConfig(keys []string) {
v := c.Params.Values.Get(key)
configService.UpdateGlobalStringConfig(userId, key, v)
}
-}
\ No newline at end of file
+}
diff --git a/app/controllers/member/MemberGroupController.go b/app/controllers/member/MemberGroupController.go
index 345a95d..dc6072a 100644
--- a/app/controllers/member/MemberGroupController.go
+++ b/app/controllers/member/MemberGroupController.go
@@ -1,8 +1,8 @@
package member
import (
- "github.com/revel/revel"
"github.com/leanote/leanote/app/info"
+ "github.com/revel/revel"
)
// 分组管理
@@ -16,7 +16,7 @@ func (c MemberGroup) Index() revel.Result {
c.SetLocale()
c.RenderArgs["title"] = "My Group"
c.RenderArgs["groups"] = groupService.GetGroupsAndUsers(c.GetUserId())
- return c.RenderTemplate("member/group/index.html");
+ return c.RenderTemplate("member/group/index.html")
}
// 添加分组
diff --git a/app/controllers/member/MemberIndexController.go b/app/controllers/member/MemberIndexController.go
index 6393450..50caac6 100644
--- a/app/controllers/member/MemberIndexController.go
+++ b/app/controllers/member/MemberIndexController.go
@@ -14,13 +14,13 @@ type MemberIndex struct {
func (c MemberIndex) Index() revel.Result {
c.SetUserInfo()
c.RenderArgs["title"] = "Leanote Member Center"
-
+
c.RenderArgs["countNote"] = noteService.CountNote(c.GetUserId())
c.RenderArgs["countBlog"] = noteService.CountBlog(c.GetUserId())
-
+
c.SetLocale()
-
- return c.RenderTemplate("member/index.html");
+
+ return c.RenderTemplate("member/index.html")
}
// 模板
@@ -33,5 +33,5 @@ func (c MemberIndex) T(t string) revel.Result {
}
func (c MemberIndex) GetView(view string) revel.Result {
- return c.RenderTemplate("admin/" + view);
-}
\ No newline at end of file
+ return c.RenderTemplate("admin/" + view)
+}
diff --git a/app/controllers/member/MemberUserController.go b/app/controllers/member/MemberUserController.go
index 4fdb2eb..408daf0 100644
--- a/app/controllers/member/MemberUserController.go
+++ b/app/controllers/member/MemberUserController.go
@@ -14,21 +14,21 @@ func (c MemberUser) Username() revel.Result {
c.SetUserInfo()
c.SetLocale()
c.RenderArgs["title"] = "Username"
- return c.RenderTemplate("member/user/username.html");
+ return c.RenderTemplate("member/user/username.html")
}
func (c MemberUser) Email() revel.Result {
c.SetUserInfo()
c.SetLocale()
c.RenderArgs["title"] = "Email"
- return c.RenderTemplate("member/user/email.html");
+ return c.RenderTemplate("member/user/email.html")
}
func (c MemberUser) Password() revel.Result {
c.SetUserInfo()
c.SetLocale()
c.RenderArgs["title"] = "Password"
- return c.RenderTemplate("member/user/password.html");
+ return c.RenderTemplate("member/user/password.html")
}
func (c MemberUser) Avatar() revel.Result {
@@ -36,11 +36,11 @@ func (c MemberUser) Avatar() revel.Result {
c.SetLocale()
c.RenderArgs["title"] = "Avatar"
c.RenderArgs["globalConfigs"] = configService.GetGlobalConfigForUser()
- return c.RenderTemplate("member/user/avatar.html");
+ return c.RenderTemplate("member/user/avatar.html")
}
func (c MemberUser) AddAccount() revel.Result {
c.SetUserInfo()
c.SetLocale()
c.RenderArgs["title"] = "Add Account"
- return c.RenderTemplate("member/user/add_account.html");
-}
\ No newline at end of file
+ return c.RenderTemplate("member/user/add_account.html")
+}
diff --git a/app/controllers/member/init.go b/app/controllers/member/init.go
index b52edb0..eea26e6 100644
--- a/app/controllers/member/init.go
+++ b/app/controllers/member/init.go
@@ -1,11 +1,11 @@
package member
import (
- "github.com/leanote/leanote/app/service"
"github.com/leanote/leanote/app/info"
-// . "github.com/leanote/leanote/app/lea"
+ "github.com/leanote/leanote/app/service"
+ // . "github.com/leanote/leanote/app/lea"
"github.com/revel/revel"
-// "strings"
+ // "strings"
)
var userService *service.UserService
@@ -20,9 +20,9 @@ var blogService *service.BlogService
var tagService *service.TagService
var pwdService *service.PwdService
var tokenService *service.TokenService
-var suggestionService *service.SuggestionService
-var albumService *service.AlbumService
-var noteImageService *service.NoteImageService
+var suggestionService *service.SuggestionService
+var albumService *service.AlbumService
+var noteImageService *service.NoteImageService
var fileService *service.FileService
var attachService *service.AttachService
var configService *service.ConfigService
@@ -33,31 +33,32 @@ var themeService *service.ThemeService
// 拦截器
// 不需要拦截的url
// Index 除了Note之外都不需要
-var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": true,
- "Login": true,
- "DoLogin": true,
- "Logout": true,
- "Register": true,
- "DoRegister": true,
- "FindPasswword": true,
- "DoFindPassword": true,
- "FindPassword2": true,
- "FindPasswordUpdate": true,
- "Suggestion": true,
- },
+var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": true,
+ "Login": true,
+ "DoLogin": true,
+ "Logout": true,
+ "Register": true,
+ "DoRegister": true,
+ "FindPasswword": true,
+ "DoFindPassword": true,
+ "FindPassword2": true,
+ "FindPasswordUpdate": true,
+ "Suggestion": true,
+},
"Blog": map[string]bool{"Index": true,
- "View": true,
- "AboutMe": true,
+ "View": true,
+ "AboutMe": true,
"SearchBlog": true,
- },
+ },
// 用户的激活与修改邮箱都不需要登录, 通过链接地址
"User": map[string]bool{"UpdateEmail": true,
- "ActiveEmail":true,
- },
- "Oauth": map[string]bool{"GithubCallback": true},
- "File": map[string]bool{"OutputImage": true, "OutputFile": true},
+ "ActiveEmail": true,
+ },
+ "Oauth": map[string]bool{"GithubCallback": true},
+ "File": map[string]bool{"OutputImage": true, "OutputFile": true},
"Attach": map[string]bool{"Download": true, "DownloadAll": true},
}
+
func needValidate(controller, method string) bool {
// 在里面
if v, ok := commonUrl[controller]; ok {
@@ -68,33 +69,33 @@ func needValidate(controller, method string) bool {
return true
} else {
// controller不在这里的, 肯定要验证
- return true;
+ return true
}
}
func AuthInterceptor(c *revel.Controller) revel.Result {
// 全部变成首字大写
/*
- var controller = strings.Title(c.Name)
- var method = strings.Title(c.MethodName)
- // 是否需要验证?
- if !needValidate(controller, method) {
- return nil
- }
+ var controller = strings.Title(c.Name)
+ var method = strings.Title(c.MethodName)
+ // 是否需要验证?
+ if !needValidate(controller, method) {
+ return nil
+ }
*/
-
+
// 验证是否已登录
// 必须是管理员
if _, ok := c.Session["Username"]; ok {
return nil // 已登录
}
-
+
// 没有登录, 判断是否是ajax操作
if c.Request.Header.Get("X-Requested-With") == "XMLHttpRequest" {
re := info.NewRe()
re.Msg = "NOTLOGIN"
return c.RenderJson(re)
}
-
+
return c.Redirect("/login")
}
@@ -113,7 +114,7 @@ func InitService() {
tokenService = service.TokenS
noteImageService = service.NoteImageS
fileService = service.FileS
- albumService= service.AlbumS
+ albumService = service.AlbumS
attachService = service.AttachS
pwdService = service.PwdS
suggestionService = service.SuggestionS
@@ -131,4 +132,4 @@ func init() {
revel.InterceptFunc(AuthInterceptor, revel.BEFORE, &MemberGroup{})
revel.OnAppStart(func() {
})
-}
\ No newline at end of file
+}
diff --git a/app/db/Mgo.go b/app/db/Mgo.go
index 958d345..7f8c181 100644
--- a/app/db/Mgo.go
+++ b/app/db/Mgo.go
@@ -2,8 +2,8 @@ package db
import (
"fmt"
- "github.com/revel/revel"
. "github.com/leanote/leanote/app/lea"
+ "github.com/revel/revel"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"strings"
@@ -61,7 +61,7 @@ var Sessions *mgo.Collection
func Init(url, dbname string) {
ok := true
config := revel.Config
- if url == "" {
+ if url == "" {
url, ok = config.String("db.url")
if !ok {
url, ok = config.String("db.urlEnv")
@@ -71,7 +71,7 @@ func Init(url, dbname string) {
} else {
Log("get db conf from db.url: " + url)
}
-
+
if ok {
// get dbname from urlEnv
urls := strings.Split(url, "/")
@@ -81,7 +81,7 @@ func Init(url, dbname string) {
if dbname == "" {
dbname, _ = config.String("db.dbname")
}
-
+
// get db config from host, port, username, password
if !ok {
host, _ := revel.Config.String("db.host")
@@ -124,7 +124,7 @@ func Init(url, dbname string) {
// user
Users = Session.DB(dbname).C("users")
- // group
+ // group
Groups = Session.DB(dbname).C("groups")
GroupUsers = Session.DB(dbname).C("group_users")
@@ -360,15 +360,15 @@ func Err(err error) bool {
// 每个请求之前都要检查!!
func CheckMongoSessionLost() {
// fmt.Println("检查CheckMongoSessionLostErr")
- err := Session.Ping()
- if err != nil {
- Log("Lost connection to db!")
- Session.Refresh()
- err = Session.Ping()
- if err == nil {
- Log("Reconnect to db successful.")
- } else {
- Log("重连失败!!!! 警告")
- }
- }
+ err := Session.Ping()
+ if err != nil {
+ Log("Lost connection to db!")
+ Session.Refresh()
+ err = Session.Ping()
+ if err == nil {
+ Log("Reconnect to db successful.")
+ } else {
+ Log("重连失败!!!! 警告")
+ }
+ }
}
diff --git a/app/i18n/i18n.go b/app/i18n/i18n.go
index 4df311f..8b257d3 100644
--- a/app/i18n/i18n.go
+++ b/app/i18n/i18n.go
@@ -1,17 +1,18 @@
package main
import (
+ "bufio"
+ "encoding/json"
"fmt"
"os"
- "bufio"
"strings"
- "encoding/json"
)
// convert revel msg to js msg
var msgBasePath = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/messages/"
var targetBasePath = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/public/js/i18n/"
+
func parse(filename string) {
file, err := os.Open(msgBasePath + filename)
reader := bufio.NewReader(file)
@@ -22,41 +23,41 @@ func parse(filename string) {
}
for true {
line, _, err := reader.ReadLine()
-
+
if err != nil {
break
}
-
+
if len(line) == 0 {
continue
}
// 对每一行进行处理
if line[0] == '#' || line[1] == '#' {
- continue;
+ continue
}
lineStr := string(line)
-
+
// 找到第一个=位置
pos := strings.Index(lineStr, "=")
-
+
if pos < 0 {
- continue;
+ continue
}
-
+
key := string(line[0:pos])
value := string(line[pos+1:])
-
-// fmt.Println(lineStr)
-// fmt.Println(value)
-
+
+ // fmt.Println(lineStr)
+ // fmt.Println(value)
+
msg[key] = value
}
-
+
// JSON
b, _ := json.Marshal(msg)
str := string(b)
- fmt.Println(str);
-
+ fmt.Println(str)
+
targetName := targetBasePath + filename + ".js"
file2, err2 := os.OpenFile(targetName, os.O_RDWR|os.O_CREATE, 0644)
if err2 != nil {
diff --git a/app/info/Api.go b/app/info/Api.go
index 5b19413..2610c93 100644
--- a/app/info/Api.go
+++ b/app/info/Api.go
@@ -1,20 +1,20 @@
package info
import (
- "time"
"gopkg.in/mgo.v2/bson"
+ "time"
)
//---------
// 数据结构
//---------
type NoteFile struct {
- FileId string // 服务器端Id
+ FileId string // 服务器端Id
LocalFileId string // 客户端Id
- Type string // images/png, doc, xls, 根据fileName确定
- Title string
- HasBody bool // 传过来的值是否要更新内容
- IsAttach bool // 是否是附件, 不是附件就是图片
+ Type string // images/png, doc, xls, 根据fileName确定
+ Title string
+ HasBody bool // 传过来的值是否要更新内容
+ IsAttach bool // 是否是附件, 不是附件就是图片
}
type ApiNote struct {
NoteId string
@@ -22,32 +22,31 @@ type ApiNote struct {
UserId string
Title string
Desc string
-// ImgSrc string
+ // ImgSrc string
Tags []string
Abstract string
Content string
IsMarkdown bool
-// FromUserId string // 为共享而新建
- IsBlog bool // 是否是blog, 更新note不需要修改, 添加note时才有可能用到, 此时需要判断notebook是否设为Blog
- IsTrash bool
- IsDeleted bool
- Usn int
- Files []NoteFile
+ // FromUserId string // 为共享而新建
+ IsBlog bool // 是否是blog, 更新note不需要修改, 添加note时才有可能用到, 此时需要判断notebook是否设为Blog
+ IsTrash bool
+ IsDeleted bool
+ Usn int
+ Files []NoteFile
CreatedTime time.Time
UpdatedTime time.Time
- PublicTime time.Time
+ PublicTime time.Time
}
-
// 内容
type ApiNoteContent struct {
NoteId bson.ObjectId `bson:"_id,omitempty"`
UserId bson.ObjectId `bson:"UserId"`
- Content string `Content`
+ Content string `Content`
-// CreatedTime time.Time `CreatedTime`
-// UpdatedTime time.Time `UpdatedTime`
+ // CreatedTime time.Time `CreatedTime`
+ // UpdatedTime time.Time `UpdatedTime`
}
// 转换
@@ -61,11 +60,11 @@ func NoteToApiNote(note Note, files []NoteFile) ApiNote {
//----------
type ApiUser struct {
- UserId string
+ UserId string
Username string
- Email string
+ Email string
Verified bool
- Logo string
+ Logo string
}
//----------
@@ -81,8 +80,8 @@ type ApiNotebook struct {
IsBlog bool `IsBlog,omitempty` // 是否是Blog 2013/12/29 新加
CreatedTime time.Time `CreatedTime,omitempty`
UpdatedTime time.Time `UpdatedTime,omitempty`
- Usn int `Usn` // UpdateSequenceNum
- IsDeleted bool `IsDeleted`
+ Usn int `Usn` // UpdateSequenceNum
+ IsDeleted bool `IsDeleted`
}
//---------
@@ -91,7 +90,7 @@ type ApiNotebook struct {
// 一般返回
type ApiRe struct {
- Ok bool
+ Ok bool
Msg string
}
@@ -101,19 +100,20 @@ func NewApiRe() ApiRe {
// auth
type AuthOk struct {
- Ok bool
- Token string
- UserId bson.ObjectId
- Email string
+ Ok bool
+ Token string
+ UserId bson.ObjectId
+ Email string
Username string
}
// 供notebook, note, tag更新的返回数据用
type ReUpdate struct {
- Ok bool
+ Ok bool
Msg string
Usn int
}
+
func NewReUpdate() ReUpdate {
return ReUpdate{Ok: false}
-}
\ No newline at end of file
+}
diff --git a/app/info/AttachInfo.go b/app/info/AttachInfo.go
index 4dc39ef..a276d1c 100644
--- a/app/info/AttachInfo.go
+++ b/app/info/AttachInfo.go
@@ -7,15 +7,15 @@ import (
// Attach belongs to note
type Attach struct {
- AttachId bson.ObjectId `bson:"_id,omitempty"` //
- NoteId bson.ObjectId `bson:"NoteId"` //
- UploadUserId bson.ObjectId `bson:"UploadUserId"` // 可以不是note owner, 协作者userId
- Name string `Name` // file name, md5, such as 13232312.doc
- Title string `Title` // raw file name
- Size int64 `Size` // file size (byte)
- Type string `Type` // file type, "doc" = word
- Path string `Path` // the file path such as: files/userId/attachs/adfadf.doc
- CreatedTime time.Time `CreatedTime`
-
+ AttachId bson.ObjectId `bson:"_id,omitempty"` //
+ NoteId bson.ObjectId `bson:"NoteId"` //
+ UploadUserId bson.ObjectId `bson:"UploadUserId"` // 可以不是note owner, 协作者userId
+ Name string `Name` // file name, md5, such as 13232312.doc
+ Title string `Title` // raw file name
+ Size int64 `Size` // file size (byte)
+ Type string `Type` // file type, "doc" = word
+ Path string `Path` // the file path such as: files/userId/attachs/adfadf.doc
+ CreatedTime time.Time `CreatedTime`
+
// FromFileId bson.ObjectId `bson:"FromFileId,omitempty"` // copy from fileId, for collaboration
}
diff --git a/app/info/BlogCustom.go b/app/info/BlogCustom.go
index aed4b24..6853465 100644
--- a/app/info/BlogCustom.go
+++ b/app/info/BlogCustom.go
@@ -7,51 +7,52 @@ import (
// 仅仅为了博客的主题
type BlogInfoCustom struct {
- UserId string
- Username string
- UserLogo string
- Title string
- SubTitle string
- Logo string
+ UserId string
+ Username string
+ UserLogo string
+ Title string
+ SubTitle string
+ Logo string
OpenComment bool
CommentType string
- ThemeId string
- SubDomain string
- Domain string
+ ThemeId string
+ SubDomain string
+ Domain string
}
type Post struct {
- NoteId string
- Title string
- UrlTitle string
- ImgSrc string
+ NoteId string
+ Title string
+ UrlTitle string
+ ImgSrc string
CreatedTime time.Time
UpdatedTime time.Time
- PublicTime time.Time
- Desc string
- Abstract string
- Content string
- Tags []string
- CommentNum int
- ReadNum int
- LikeNum int
- IsMarkdown bool
+ PublicTime time.Time
+ Desc string
+ Abstract string
+ Content string
+ Tags []string
+ CommentNum int
+ ReadNum int
+ LikeNum int
+ IsMarkdown bool
}
+
// 归档
type ArchiveMonth struct {
Month int
Posts []*Post
}
type Archive struct {
- Year int
+ Year int
MonthAchives []ArchiveMonth
- Posts []*Post
+ Posts []*Post
}
type Cate struct {
- CateId string
+ CateId string
ParentCateId string
- Title string
- UrlTitle string
- Children []*Cate
+ Title string
+ UrlTitle string
+ Children []*Cate
}
diff --git a/app/info/BlogInfo.go b/app/info/BlogInfo.go
index 24dafae..4be64c8 100644
--- a/app/info/BlogInfo.go
+++ b/app/info/BlogInfo.go
@@ -9,17 +9,17 @@ import (
type BlogItem struct {
Note
- Abstract string
- Content string // 可能是content的一部分, 截取. 点击more后就是整个信息了
- HasMore bool // 是否是否还有
- User User // 用户信息
+ Abstract string
+ Content string // 可能是content的一部分, 截取. 点击more后就是整个信息了
+ HasMore bool // 是否是否还有
+ User User // 用户信息
}
type UserBlogBase struct {
Logo string `Logo`
Title string `Title` // 标题
SubTitle string `SubTitle` // 副标题
-// AboutMe string `AboutMe` // 关于我
+ // AboutMe string `AboutMe` // 关于我
}
type UserBlogComment struct {
@@ -49,32 +49,32 @@ type UserBlog struct {
Style string `Style` // 风格
Css string `Css` // 自定义css
- ThemeId bson.ObjectId `ThemeId,omitempty` // 主题Id
- ThemePath string `bson:"ThemePath" json:"-"` // 不存值, 从Theme中获取, 相对路径 public/
+ ThemeId bson.ObjectId `ThemeId,omitempty` // 主题Id
+ ThemePath string `bson:"ThemePath" json:"-"` // 不存值, 从Theme中获取, 相对路径 public/
CateIds []string `CateIds,omitempty` // 分类Id, 排序好的
- Singles []map[string]string `Singles,omitempty` // 单页, 排序好的, map包含: ["Title"], ["SingleId"]
-
- PerPageSize int `PerPageSize,omitempty`
- SortField string `SortField` // 排序字段
- IsAsc bool `IsAsc,omitempty` // 排序类型, 降序, 升序, 默认是false, 表示降序
+ Singles []map[string]string `Singles,omitempty` // 单页, 排序好的, map包含: ["Title"], ["SingleId"]
+
+ PerPageSize int `PerPageSize,omitempty`
+ SortField string `SortField` // 排序字段
+ IsAsc bool `IsAsc,omitempty` // 排序类型, 降序, 升序, 默认是false, 表示降序
SubDomain string `SubDomain` // 二级域名
Domain string `Domain` // 自定义域名
-
+
}
// 博客统计信息
type BlogStat struct {
- NoteId bson.ObjectId `bson:"_id,omitempty"`
- ReadNum int `ReadNum,omitempty` // 阅读次数 2014/9/28
- LikeNum int `LikeNum,omitempty` // 点赞次数 2014/9/28
- CommentNum int `CommentNum,omitempty` // 评论次数 2014/9/28
+ NoteId bson.ObjectId `bson:"_id,omitempty"`
+ ReadNum int `ReadNum,omitempty` // 阅读次数 2014/9/28
+ LikeNum int `LikeNum,omitempty` // 点赞次数 2014/9/28
+ CommentNum int `CommentNum,omitempty` // 评论次数 2014/9/28
}
// 单页
type BlogSingle struct {
- SingleId bson.ObjectId `bson:"_id,omitempty"`
+ SingleId bson.ObjectId `bson:"_id,omitempty"`
UserId bson.ObjectId `UserId`
Title string `Title`
UrlTitle string `UrlTitle` // 2014/11/11
@@ -117,12 +117,12 @@ type BlogCommentPublic struct {
}
type BlogUrls struct {
- IndexUrl string
- CateUrl string
- SearchUrl string
- SingleUrl string
- PostUrl string
- ArchiveUrl string
- TagsUrl string
+ IndexUrl string
+ CateUrl string
+ SearchUrl string
+ SingleUrl string
+ PostUrl string
+ ArchiveUrl string
+ TagsUrl string
TagPostsUrl string
}
diff --git a/app/info/Configinfo.go b/app/info/Configinfo.go
index 1fbecd5..7ddf4b8 100644
--- a/app/info/Configinfo.go
+++ b/app/info/Configinfo.go
@@ -10,9 +10,9 @@ type Config struct {
ConfigId bson.ObjectId `bson:"_id"`
UserId bson.ObjectId `UserId`
Key string `Key`
- ValueStr string `ValueStr,omitempty` // "1"
- ValueArr []string `ValueArr,omitempty` // ["1","b","c"]
- ValueMap map[string]string `ValueMap,omitempty` // {"a":"bb", "CC":"xx"}
+ ValueStr string `ValueStr,omitempty` // "1"
+ ValueArr []string `ValueArr,omitempty` // ["1","b","c"]
+ ValueMap map[string]string `ValueMap,omitempty` // {"a":"bb", "CC":"xx"}
ValueArrMap []map[string]string `ValueArrMap,omitempty` // [{"a":"B"}, {}, {}]
IsArr bool `IsArr` // 是否是数组
IsMap bool `IsMap` // 是否是Map
diff --git a/app/info/NoteImage.go b/app/info/NoteImage.go
index 38643cf..3ad349c 100644
--- a/app/info/NoteImage.go
+++ b/app/info/NoteImage.go
@@ -9,4 +9,4 @@ type NoteImage struct {
NoteImageId bson.ObjectId `bson:"_id,omitempty"` // 必须要设置bson:"_id" 不然mgo不会认为是主键
NoteId bson.ObjectId `bson:"NoteId"` // 笔记
ImageId bson.ObjectId `bson:"ImageId"` // 图片fileId
-}
\ No newline at end of file
+}
diff --git a/app/info/NoteInfo.go b/app/info/NoteInfo.go
index 1dd31f5..01eaa15 100644
--- a/app/info/NoteInfo.go
+++ b/app/info/NoteInfo.go
@@ -34,15 +34,15 @@ type Note struct {
IsMarkdown bool `IsMarkdown` // 是否是markdown笔记, 默认是false
AttachNum int `AttachNum` // 2014/9/21, attachments num
-
+
CreatedTime time.Time `CreatedTime`
UpdatedTime time.Time `UpdatedTime`
RecommendTime time.Time `RecommendTime,omitempty` // 推荐时间
PublicTime time.Time `PublicTime,omitempty` // 发表时间, 公开为博客则设置
UpdatedUserId bson.ObjectId `bson:"UpdatedUserId"` // 如果共享了, 并可写, 那么可能是其它他修改了
-
+
// 2015/1/15, 更新序号
- Usn int `Usn` // UpdateSequenceNum
+ Usn int `Usn` // UpdateSequenceNum
IsDeleted bool `IsDeleted` // 删除位
}
diff --git a/app/info/NotebookInfo.go b/app/info/NotebookInfo.go
index baeb2a0..39719da 100644
--- a/app/info/NotebookInfo.go
+++ b/app/info/NotebookInfo.go
@@ -19,9 +19,9 @@ type Notebook struct {
IsBlog bool `IsBlog,omitempty` // 是否是Blog 2013/12/29 新加
CreatedTime time.Time `CreatedTime,omitempty`
UpdatedTime time.Time `UpdatedTime,omitempty`
-
+
// 2015/1/15, 更新序号
- Usn int `Usn` // UpdateSequenceNum
+ Usn int `Usn` // UpdateSequenceNum
IsDeleted bool `IsDeleted`
}
diff --git a/app/info/Re.go b/app/info/Re.go
index 19951a8..a415edd 100644
--- a/app/info/Re.go
+++ b/app/info/Re.go
@@ -1,18 +1,17 @@
package info
-import (
-)
+import ()
// controller ajax返回
type Re struct {
- Ok bool
+ Ok bool
Code int
- Msg string
- Id string
+ Msg string
+ Id string
List interface{}
Item interface{}
}
func NewRe() Re {
return Re{Ok: false}
-}
\ No newline at end of file
+}
diff --git a/app/info/SessionInfo.go b/app/info/SessionInfo.go
index d08386d..d054c31 100644
--- a/app/info/SessionInfo.go
+++ b/app/info/SessionInfo.go
@@ -13,8 +13,8 @@ type Session struct {
LoginTimes int `LoginTimes` // 登录错误时间
Captcha string `Captcha` // 验证码
-
- UserId string `UserId` // API时有值UserId
+
+ UserId string `UserId` // API时有值UserId
CreatedTime time.Time `CreatedTime`
UpdatedTime time.Time `UpdatedTime` // 更新时间, expire这个时间会自动清空
diff --git a/app/info/TagInfo.go b/app/info/TagInfo.go
index c7e67de..fe96dda 100644
--- a/app/info/TagInfo.go
+++ b/app/info/TagInfo.go
@@ -18,28 +18,28 @@ type TagNote struct {
// 每个用户一条记录, 存储用户的所有tags
type Tag struct {
- UserId bson.ObjectId `bson:"_id"`
- Tags []string `Tags`
+ UserId bson.ObjectId `bson:"_id"`
+ Tags []string `Tags`
}
// v2 版标签
type NoteTag struct {
- TagId bson.ObjectId `bson:"_id"`
- UserId bson.ObjectId `UserId` // 谁的
- Tag string `Tag` // UserId, Tag是唯一索引
- Usn int `Usn` // Update Sequence Number
- Count int `Count` // 笔记数
- CreatedTime time.Time `CreatedTime`
- UpdatedTime time.Time `UpdatedTime`
- IsDeleted bool `IsDeleted` // 删除位
+ TagId bson.ObjectId `bson:"_id"`
+ UserId bson.ObjectId `UserId` // 谁的
+ Tag string `Tag` // UserId, Tag是唯一索引
+ Usn int `Usn` // Update Sequence Number
+ Count int `Count` // 笔记数
+ CreatedTime time.Time `CreatedTime`
+ UpdatedTime time.Time `UpdatedTime`
+ IsDeleted bool `IsDeleted` // 删除位
}
type TagCount struct {
TagCountId bson.ObjectId `bson:"_id,omitempty"`
- UserId bson.ObjectId `UserId` // 谁的
- Tag string `Tag`
- IsBlog bool `IsBlog` // 是否是博客的tag统计
- Count int `Count` // 统计数量
+ UserId bson.ObjectId `UserId` // 谁的
+ Tag string `Tag`
+ IsBlog bool `IsBlog` // 是否是博客的tag统计
+ Count int `Count` // 统计数量
}
/*
diff --git a/app/info/ThemeInfo.go b/app/info/ThemeInfo.go
index 2f96f72..5ab1013 100644
--- a/app/info/ThemeInfo.go
+++ b/app/info/ThemeInfo.go
@@ -18,7 +18,7 @@ type Theme struct {
Info map[string]interface{} `Info` // 所有信息
IsActive bool `IsActive` // 是否在用
- IsDefault bool `IsDefault` // leanote默认主题, 如果用户修改了默认主题, 则先copy之. 也是admin用户的主题
+ IsDefault bool `IsDefault` // leanote默认主题, 如果用户修改了默认主题, 则先copy之. 也是admin用户的主题
Style string `Style,omitempty` // 之前的, 只有default的用户才有blog_default, blog_daqi, blog_left_fixed
CreatedTime time.Time `CreatedTime`
diff --git a/app/info/TokenInfo.go b/app/info/TokenInfo.go
index a27a58b..c43b295 100644
--- a/app/info/TokenInfo.go
+++ b/app/info/TokenInfo.go
@@ -18,7 +18,7 @@ const (
// 过期时间
const (
- PwdOverHours = 2.0
+ PwdOverHours = 2.0
ActiveEmailOverHours = 48.0
UpdateEmailOverHours = 2.0
)
@@ -29,4 +29,4 @@ type Token struct {
Token string `Token`
Type int `Type`
CreatedTime time.Time `CreatedTime`
-}
\ No newline at end of file
+}
diff --git a/app/info/UserInfo.go b/app/info/UserInfo.go
index 11d83e2..c4b5df0 100644
--- a/app/info/UserInfo.go
+++ b/app/info/UserInfo.go
@@ -73,8 +73,8 @@ type UserAccount struct {
// note主页需要
type UserAndBlogUrl struct {
User
- BlogUrl string `BlogUrl`
- PostUrl string `PostUrl`
+ BlogUrl string `BlogUrl`
+ PostUrl string `PostUrl`
}
// 用户与博客信息结合, 公开
diff --git a/app/info/common.go b/app/info/common.go
index 25ef0e0..0e05447 100644
--- a/app/info/common.go
+++ b/app/info/common.go
@@ -4,14 +4,13 @@ import (
"math"
)
-
// 分页数据
type Page struct {
- CurPage int // 当前页码
- TotalPage int // 总页
+ CurPage int // 当前页码
+ TotalPage int // 总页
PerPageSize int
- Count int // 总记录数
- List interface{}
+ Count int // 总记录数
+ List interface{}
}
func NewPage(page, perPageSize, count int, list interface{}) Page {
diff --git a/app/init.go b/app/init.go
index 0adf5b3..1bf7c62 100644
--- a/app/init.go
+++ b/app/init.go
@@ -1,77 +1,77 @@
package app
import (
- "github.com/revel/revel"
- . "github.com/leanote/leanote/app/lea"
- "github.com/leanote/leanote/app/service"
- "github.com/leanote/leanote/app/db"
+ "encoding/json"
+ "fmt"
"github.com/leanote/leanote/app/controllers"
- "github.com/leanote/leanote/app/controllers/api"
"github.com/leanote/leanote/app/controllers/admin"
+ "github.com/leanote/leanote/app/controllers/api"
"github.com/leanote/leanote/app/controllers/member"
+ "github.com/leanote/leanote/app/db"
+ . "github.com/leanote/leanote/app/lea"
_ "github.com/leanote/leanote/app/lea/binder"
"github.com/leanote/leanote/app/lea/route"
- "reflect"
- "fmt"
+ "github.com/leanote/leanote/app/service"
+ "github.com/revel/revel"
"html/template"
"math"
- "strings"
- "strconv"
- "time"
- "encoding/json"
"net/url"
+ "reflect"
+ "strconv"
+ "strings"
+ "time"
)
func init() {
// Filters is the default set of global filters.
revel.Filters = []revel.Filter{
- revel.PanicFilter, // Recover from panics and display an error page instead.
+ revel.PanicFilter, // Recover from panics and display an error page instead.
route.RouterFilter,
// revel.RouterFilter, // Use the routing table to select the right Action
// AuthFilter, // Invoke the action.
revel.FilterConfiguringFilter, // A hook for adding or removing per-Action filters.
revel.ParamsFilter, // Parse parameters into Controller.Params.
revel.SessionFilter, // Restore and write the session cookie.
-
+
// 使用SessionFilter标准版从cookie中得到sessionID, 然后通过MssessionFilter从Memcache中得到
// session, 之后MSessionFilter将session只存sessionID然后返回给SessionFilter返回到web
- // session.SessionFilter, // leanote session
- // session.MSessionFilter, // leanote memcache session
-
- revel.FlashFilter, // Restore and write the flash cookie.
- revel.ValidationFilter, // Restore kept validation errors and save new ones from cookie.
- revel.I18nFilter, // Resolve the requested language
- revel.InterceptorFilter, // Run interceptors around the action.
- revel.CompressFilter, // Compress the result.
- revel.ActionInvoker, // Invoke the action.
+ // session.SessionFilter, // leanote session
+ // session.MSessionFilter, // leanote memcache session
+
+ revel.FlashFilter, // Restore and write the flash cookie.
+ revel.ValidationFilter, // Restore kept validation errors and save new ones from cookie.
+ revel.I18nFilter, // Resolve the requested language
+ revel.InterceptorFilter, // Run interceptors around the action.
+ revel.CompressFilter, // Compress the result.
+ revel.ActionInvoker, // Invoke the action.
}
-
+
revel.TemplateFuncs["raw"] = func(str string) template.HTML {
return template.HTML(str)
}
revel.TemplateFuncs["trim"] = func(str string) string {
str = strings.Trim(str, " ")
str = strings.Trim(str, " ")
-
+
str = strings.Trim(str, "\n")
str = strings.Trim(str, " ")
-
+
// 以下两个空格不一样
str = strings.Trim(str, " ")
str = strings.Trim(str, " ")
return str
}
revel.TemplateFuncs["add"] = func(i int) string {
- i = i + 1;
+ i = i + 1
return fmt.Sprintf("%v", i)
}
revel.TemplateFuncs["sub"] = func(i int) int {
- i = i - 1;
+ i = i - 1
return i
}
// 增加或减少
revel.TemplateFuncs["incr"] = func(n, i int) int {
- n = n + i;
+ n = n + i
return n
}
revel.TemplateFuncs["join"] = func(arr []string) template.HTML {
@@ -95,11 +95,11 @@ func init() {
return v.Get("a")
}
revel.TemplateFuncs["json"] = func(i interface{}) string {
- b, _ := json.Marshal(i)
+ b, _ := json.Marshal(i)
return string(b)
}
revel.TemplateFuncs["jsonJs"] = func(i interface{}) template.JS {
- b, _ := json.Marshal(i)
+ b, _ := json.Marshal(i)
return template.JS(string(b))
}
revel.TemplateFuncs["datetime"] = func(t time.Time) template.HTML {
@@ -113,10 +113,10 @@ func init() {
t := time.Unix(int64(sec), 0)
return template.HTML(t.Format("2006-01-02 15:04:05"))
}
-
+
// interface是否有该字段
revel.TemplateFuncs["has"] = func(i interface{}, key string) bool {
- t := reflect.TypeOf(i)
+ t := reflect.TypeOf(i)
_, ok := t.FieldByName(key)
return ok
}
@@ -130,9 +130,9 @@ func init() {
locale, _ := renderArgs[revel.CurrentLocaleRenderArg].(string)
tagStr := ""
lenTags := len(tags)
-
+
tagPostUrl, _ := renderArgs["tagPostsUrl"].(string)
-
+
for i, tag := range tags {
str := revel.Message(locale, tag)
var classes = "label"
@@ -144,24 +144,24 @@ func init() {
} else {
classes += " label-default"
}
-
+
classes += " label-post"
var url = tagPostUrl + "/" + url.QueryEscape(tag)
- tagStr += "" + str + "";
- if i != lenTags - 1 {
+ tagStr += "" + str + ""
+ if i != lenTags-1 {
tagStr += " "
}
}
return template.HTML(tagStr)
}
-
+
revel.TemplateFuncs["blogTagsForExport"] = func(renderArgs map[string]interface{}, tags []string) template.HTML {
if tags == nil || len(tags) == 0 {
return ""
}
tagStr := ""
lenTags := len(tags)
-
+
for i, tag := range tags {
str := tag
var classes = "label"
@@ -170,16 +170,16 @@ func init() {
} else {
classes += " label-default"
}
-
+
classes += " label-post"
- tagStr += "" + str + "";
- if i != lenTags - 1 {
+ tagStr += "" + str + ""
+ if i != lenTags-1 {
tagStr += " "
}
}
return template.HTML(tagStr)
}
-
+
// 不用revel的msg
revel.TemplateFuncs["leaMsg"] = func(renderArgs map[string]interface{}, key string) template.HTML {
locale, _ := renderArgs[revel.CurrentLocaleRenderArg].(string)
@@ -187,7 +187,7 @@ func init() {
if strings.HasPrefix(str, "???") {
str = key
}
- return template.HTML(str);
+ return template.HTML(str)
}
// lea++
@@ -198,16 +198,16 @@ func init() {
locale, _ := renderArgs[revel.CurrentLocaleRenderArg].(string)
tagStr := ""
lenTags := len(tags)
-
+
tagPostUrl := "http://lea.leanote.com/"
if typeStr == "recommend" {
- tagPostUrl += "?tag=";
+ tagPostUrl += "?tag="
} else if typeStr == "latest" {
- tagPostUrl += "latest?tag=";
+ tagPostUrl += "latest?tag="
} else {
- tagPostUrl += "subscription?tag=";
+ tagPostUrl += "subscription?tag="
}
-
+
for i, tag := range tags {
str := revel.Message(locale, tag)
var classes = "label"
@@ -221,66 +221,66 @@ func init() {
}
classes += " label-post"
var url = tagPostUrl + url.QueryEscape(tag)
- tagStr += "" + str + "";
- if i != lenTags - 1 {
+ tagStr += "" + str + ""
+ if i != lenTags-1 {
tagStr += " "
}
}
return template.HTML(tagStr)
}
-
+
/*
- revel.TemplateFuncs["blogTags"] = func(tags []string) template.HTML {
- if tags == nil || len(tags) == 0 {
- return ""
- }
- // TODO 这里判断语言, 从语言包中拿
- tagMap := map[string]string{"red": "红色", "yellow": "黄色", "blue": "蓝色", "green": "绿色"}
- tagStr := ""
- lenTags := len(tags)
- for i, tag := range tags {
- if text, ok := tagMap[tag]; ok {
- tagStr += text
- } else {
- tagStr += tag
+ revel.TemplateFuncs["blogTags"] = func(tags []string) template.HTML {
+ if tags == nil || len(tags) == 0 {
+ return ""
}
- if i != lenTags - 1 {
- tagStr += ","
+ // TODO 这里判断语言, 从语言包中拿
+ tagMap := map[string]string{"red": "红色", "yellow": "黄色", "blue": "蓝色", "green": "绿色"}
+ tagStr := ""
+ lenTags := len(tags)
+ for i, tag := range tags {
+ if text, ok := tagMap[tag]; ok {
+ tagStr += text
+ } else {
+ tagStr += tag
+ }
+ if i != lenTags - 1 {
+ tagStr += ","
+ }
}
+ return template.HTML(tagStr)
}
- return template.HTML(tagStr)
- }
*/
revel.TemplateFuncs["li"] = func(a string) string {
return ""
}
// str连接
- revel.TemplateFuncs["urlConcat"] = func(url string, v... interface{}) string {
+ revel.TemplateFuncs["urlConcat"] = func(url string, v ...interface{}) string {
html := ""
for i := 0; i < len(v); i = i + 2 {
item := v[i]
if i+1 == len(v) {
- break;
+ break
}
value := v[i+1]
if item != nil && value != nil {
- keyStr, _ := item.(string)
- valueStr, err := value.(string)
- if !err {
- valueInt, _ := value.(int)
- valueStr = strconv.Itoa(valueInt)
- }
- if keyStr != "" && valueStr != "" {
- s := keyStr + "=" + valueStr
- if html != "" {
- html += "&" + s
- } else {
- html += s
- }
- }
- }
+ keyStr, _ := item.(string)
+ valueStr, err := value.(string)
+ if !err {
+ valueInt, _ := value.(int)
+ valueStr = strconv.Itoa(valueInt)
+ }
+ if keyStr != "" && valueStr != "" {
+ s := keyStr + "=" + valueStr
+ if html != "" {
+ html += "&" + s
+ } else {
+ html += s
+ }
+ }
+ }
}
-
+
if html != "" {
if strings.Index(url, "?") >= 0 {
return url + "&" + html
@@ -290,11 +290,11 @@ func init() {
}
return url
}
-
+
revel.TemplateFuncs["urlCond"] = func(url string, sorterI, keyords interface{}) template.HTML {
return ""
}
-
+
// http://stackoverflow.com/questions/14226416/go-lang-templates-always-quotes-a-string-and-removes-comments
revel.TemplateFuncs["rawMsg"] = func(renderArgs map[string]interface{}, message string, args ...interface{}) template.JS {
str, ok := renderArgs[revel.CurrentLocaleRenderArg].(string)
@@ -303,38 +303,38 @@ func init() {
}
return template.JS(revel.Message(str, message, args...))
}
-
+
// 为后台管理sorter th使用
// 必须要返回HTMLAttr, 返回html, golang 会执行安全检查返回ZgotmplZ
// sorterI 可能是nil, 所以用interfalce{}来接收
/*
- data-url="/adminUser/index"
- data-sorter="email"
- class="th-sortable {{if eq .sorter "email-up"}}th-sort-up{{else}}{{if eq .sorter "email-down"}}th-sort-down{{end}}{{end}}"
+ data-url="/adminUser/index"
+ data-sorter="email"
+ class="th-sortable {{if eq .sorter "email-up"}}th-sort-up{{else}}{{if eq .sorter "email-down"}}th-sort-down{{end}}{{end}}"
*/
revel.TemplateFuncs["sorterTh"] = func(url, sorterField string, sorterI interface{}) template.HTMLAttr {
sorter := ""
if sorterI != nil {
sorter, _ = sorterI.(string)
}
- html := "data-url=\"" + url + "\" data-sorter=\"" + sorterField + "\"";
- html += " class=\"th-sortable ";
- if sorter == sorterField + "-up" {
- html += "th-sort-up\"";
- } else if(sorter == sorterField + "-down") {
- html += "th-sort-down";
+ html := "data-url=\"" + url + "\" data-sorter=\"" + sorterField + "\""
+ html += " class=\"th-sortable "
+ if sorter == sorterField+"-up" {
+ html += "th-sort-up\""
+ } else if sorter == sorterField+"-down" {
+ html += "th-sort-down"
}
- html += "\"";
+ html += "\""
return template.HTMLAttr(html)
}
-
+
// pagination
revel.TemplateFuncs["page"] = func(urlBase string, page, pageSize, count int) template.HTML {
if count == 0 {
- return "";
+ return ""
}
- totalPage := int(math.Ceil(float64(count)/float64(pageSize)))
-
+ totalPage := int(math.Ceil(float64(count) / float64(pageSize)))
+
preClass := ""
prePage := page - 1
if prePage == 0 {
@@ -343,10 +343,10 @@ func init() {
nextClass := ""
nextPage := page + 1
var preUrl, nextUrl string
-
- preUrl = urlBase + "?page=" + strconv.Itoa(prePage)
+
+ preUrl = urlBase + "?page=" + strconv.Itoa(prePage)
nextUrl = urlBase + "?page=" + strconv.Itoa(nextPage)
-
+
// 没有上一页了
if page == 1 {
preClass = "disabled"
@@ -364,49 +364,49 @@ func init() {
// http://play.golang.org/p/snygrVpQva
// http://grokbase.com/t/gg/golang-nuts/142a6dhfh3/go-nuts-text-template-using-comparison-operators-eq-gt-etc-on-non-existent-variable-causes-the-template-to-stop-outputting-but-with-no-error-correct-behaviour
/*
- revel.TemplateFuncs["gt"] = func(a1, a2 interface{}) bool {
- switch a1.(type) {
- case string:
- switch a2.(type) {
+ revel.TemplateFuncs["gt"] = func(a1, a2 interface{}) bool {
+ switch a1.(type) {
case string:
- return reflect.ValueOf(a1).String() > reflect.ValueOf(a2).String()
- }
- case int, int8, int16, int32, int64:
- switch a2.(type) {
+ switch a2.(type) {
+ case string:
+ return reflect.ValueOf(a1).String() > reflect.ValueOf(a2).String()
+ }
case int, int8, int16, int32, int64:
- return reflect.ValueOf(a1).Int() > reflect.ValueOf(a2).Int()
- }
- case uint, uint8, uint16, uint32, uint64:
- switch a2.(type) {
+ switch a2.(type) {
+ case int, int8, int16, int32, int64:
+ return reflect.ValueOf(a1).Int() > reflect.ValueOf(a2).Int()
+ }
case uint, uint8, uint16, uint32, uint64:
- return reflect.ValueOf(a1).Uint() > reflect.ValueOf(a2).Uint()
- }
- case float32, float64:
- switch a2.(type) {
+ switch a2.(type) {
+ case uint, uint8, uint16, uint32, uint64:
+ return reflect.ValueOf(a1).Uint() > reflect.ValueOf(a2).Uint()
+ }
case float32, float64:
- return reflect.ValueOf(a1).Float() > reflect.ValueOf(a2).Float()
+ switch a2.(type) {
+ case float32, float64:
+ return reflect.ValueOf(a1).Float() > reflect.ValueOf(a2).Float()
+ }
}
+ return false
}
- return false
- }
*/
-
+
/*
- {{range $i := N 1 10}}
-