fmt all go file

This commit is contained in:
lealife committed 2015-11-13 17:58:41 +08:00
1 parent cba69444a8
commit 7809d00787
84 files changed
+935 -891

No files matched your search

+3 -3
View File
@@ -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")
// panicOnError(reverr, "Failed to build")
}
+1 -1
View File
@@ -16,7 +16,7 @@ type Album struct {
// 图片管理, iframe
func (c Album) Index() revel.Result {
c.SetLocale();
c.SetLocale()
return c.RenderTemplate("album/index.html")
}
+17 -17
View File
@@ -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"
)
// 附件
@@ -57,11 +57,11 @@ func (c Attach) uploadAttach(noteId string) (re info.Re) {
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
}
@@ -77,7 +77,7 @@ 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
@@ -97,7 +97,7 @@ func (c Attach) uploadAttach(noteId string) (re info.Re) {
Type: fileType,
Size: filesize}
id := bson.NewObjectId();
id := bson.NewObjectId()
fileInfo.AttachId = id
fileId = id.Hex()
Ok, resultMsg = attachService.AddAttach(fileInfo, false)
@@ -105,7 +105,7 @@ func (c Attach) uploadAttach(noteId string) (re info.Re) {
resultMsg = c.Message(resultMsg)
}
fileInfo.Path = ""; // 不要返回
fileInfo.Path = "" // 不要返回
if Ok {
resultMsg = "success"
}
@@ -130,7 +130,7 @@ 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("")
@@ -210,10 +210,10 @@ func (c Attach) DownloadAll(noteId string) revel.Result {
}
} // for
// tw.Close()
// gw.Close()
// fw.Close()
// file, _ := os.Open(dir + "/" + filename)
// 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
}
+13 -10
View File
@@ -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"
)
// 用户登录/注销/找回密码
@@ -51,7 +51,7 @@ func (c Auth) doLogin(email, pwd string) revel.Result {
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()
@@ -73,8 +73,9 @@ func (c Auth) DoLogin(email, pwd string, captcha string) revel.Result {
}
}
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()
@@ -117,13 +118,13 @@ func (c Auth) DoRegister(email, pwd, iu string) revel.Result {
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)
}
// 注册
@@ -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,7 +159,7 @@ 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")
}
@@ -168,12 +170,13 @@ func (c Auth) FindPassword2(token string) revel.Result {
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)
}
// 修改之
+19 -19
View File
@@ -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,7 +56,7 @@ 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"])
@@ -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{}
}
@@ -139,7 +139,7 @@ func (c BaseController) UpdateSession(key, value string) {
// 返回json
func (c BaseController) Json(i interface{}) string {
// b, _ := json.MarshalIndent(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,10 +187,10 @@ 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()
@@ -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
@@ -225,7 +225,7 @@ func (c BaseController) RenderTemplateStr(templatePath string) string {
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])
+10 -9
View File
@@ -59,7 +59,7 @@ func (c Blog) render(templateName string, themePath string) revel.Result {
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)
}
@@ -235,8 +235,8 @@ func (c Blog) getCates(userBlog info.UserBlog) {
}
}
// LogJ(">>")
// LogJ(cates)
// LogJ(">>")
// LogJ(cates)
// 建立层级
hasParent := map[string]bool{} // 有父的cate
@@ -244,9 +244,9 @@ func (c Blog) getCates(userBlog info.UserBlog) {
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 {
@@ -349,9 +349,9 @@ 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) {
// 自定义域名
+15 -14
View File
@@ -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,6 +22,7 @@ type Captcha struct {
}
type Ca string
func (r Ca) Apply(req *revel.Request, resp *revel.Response) {
resp.WriteHeader(http.StatusOK, "image/png")
}
@@ -32,11 +33,11 @@ func (c Captcha) Get() revel.Result {
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()
+13 -13
View File
@@ -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,7 +22,7 @@ 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
@@ -34,7 +34,7 @@ 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)
@@ -57,7 +57,7 @@ func (c File) PasteImage(noteId string) revel.Result {
// 头像设置
func (c File) UploadAvatar() revel.Result {
re := c.uploadImage("logo", "");
re := c.uploadImage("logo", "")
c.RenderArgs["fileUrlPath"] = re.Id
c.RenderArgs["resultCode"] = re.Code
@@ -66,7 +66,7 @@ func (c File) UploadAvatar() revel.Result {
if re.Ok {
re.Ok = userService.UpdateAvatar(c.GetUserId(), re.Id)
if re.Ok {
c.UpdateSession("Logo", re.Id);
c.UpdateSession("Logo", re.Id)
}
}
@@ -106,7 +106,7 @@ func (c File) uploadImage(from, albumId string) (re info.Re) {
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"
@@ -181,7 +181,7 @@ func (c File) uploadImage(from, albumId string) (re info.Re) {
fileInfo.FileId = id
fileId = id.Hex()
if(from == "logo" || from == "blogLogo") {
if from == "logo" || from == "blogLogo" {
fileId = fileUrlPath
}
@@ -217,7 +217,7 @@ 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("")
}
@@ -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)
+8 -7
View File
@@ -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,12 +13,13 @@ 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()
@@ -26,7 +27,7 @@ func (c Index) Index() revel.Result {
c.RenderArgs["openRegister"] = configService.GlobalStringConfigs["openRegister"]
c.SetLocale()
return c.RenderTemplate("home/index.html");
return c.RenderTemplate("home/index.html")
}
// 建议
@@ -36,8 +37,8 @@ func (c Index) Suggestion(addr, suggestion string) revel.Result {
// 发给我
go func() {
emailService.SendEmail("leanote@leanote.com", "建议", "UserId: " + c.GetUserId() + " <br /> Suggestions: " + suggestion)
}();
emailService.SendEmail("leanote@leanote.com", "建议", "UserId: "+c.GetUserId()+" <br /> Suggestions: "+suggestion)
}()
return c.RenderJson(re)
}
+17 -16
View File
@@ -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"
@@ -67,13 +67,13 @@ func (c Note) Index(noteId, online string) revel.Result {
// 不要获取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)
@@ -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++
@@ -96,14 +96,14 @@ 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()
@@ -180,12 +180,13 @@ type NoteOrContent struct {
FromUserId string // 为共享而新建
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)
@@ -200,12 +201,12 @@ func (c Note) UpdateNoteOrContent(noteOrContent NoteOrContent) revel.Result {
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};
Abstract: noteOrContent.Abstract}
note = noteService.AddNoteAndContentForController(note, noteContent, c.GetUserId())
return c.RenderJson(note)
@@ -217,20 +218,20 @@ func (c Note) UpdateNoteOrContent(noteOrContent NoteOrContent) revel.Result {
// 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端不控制
@@ -244,8 +245,8 @@ func (c Note) UpdateNoteOrContent(noteOrContent NoteOrContent) revel.Result {
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)
}
+7 -5
View File
@@ -1,12 +1,12 @@
package controllers
import (
"github.com/revel/revel"
"encoding/json"
"github.com/leanote/leanote/app/info"
"github.com/revel/revel"
"gopkg.in/mgo.v2/bson"
// . "github.com/leanote/leanote/app/lea"
// "io/ioutil"
// . "github.com/leanote/leanote/app/lea"
// "io/ioutil"
)
type Notebook struct {
@@ -34,18 +34,19 @@ func (c Notebook) AddNotebook(notebookId, title, parentNotebookId string) revel.
Title: title,
Seq: -1,
UserId: c.GetObjectUserId()}
if(parentNotebookId != "") {
if parentNotebookId != "" {
notebook.ParentNotebookId = bson.ObjectIdHex(parentNotebookId)
}
re, notebook := notebookService.AddNotebook(notebook)
if(re) {
if re {
return c.RenderJson(notebook)
} else {
return c.RenderJson(false)
}
}
// 修改标题
func (c Notebook) UpdateNotebookTitle(notebookId, title string) revel.Result {
return c.RenderJson(notebookService.UpdateNotebookTitle(notebookId, c.GetUserId(), title))
@@ -63,6 +64,7 @@ type DragNotebooksInfo struct {
ParentNotebookId string
Siblings []string
}
// 传过来的data是JSON.stringfy数据
func (c Notebook) DragNotebooks(data string) revel.Result {
info := DragNotebooksInfo{}
+16 -16
View File
@@ -2,13 +2,13 @@ package controllers
import (
"github.com/revel/revel"
// "strings"
// "time"
// "strings"
// "time"
// "encoding/json"
// "github.com/leanote/leanote/app/info"
// . "github.com/leanote/leanote/app/lea"
// "github.com/leanote/leanote/app/lea/blog"
// "gopkg.in/mgo.v2/bson"
// "github.com/leanote/leanote/app/info"
// . "github.com/leanote/leanote/app/lea"
// "github.com/leanote/leanote/app/lea/blog"
// "gopkg.in/mgo.v2/bson"
// "github.com/leanote/leanote/app/types"
// "io/ioutil"
// "math"
@@ -47,7 +47,7 @@ func (c Preview) Index(userIdOrEmail string, themeId string) revel.Result {
return c.E404()
}
return c.Blog.Index(c.GetUserId())
// return blog.RenderTemplate("index.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(themeId))
// return blog.RenderTemplate("index.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(themeId))
}
func (c Preview) Tag(userIdOrEmail, tag string) revel.Result {
@@ -61,43 +61,43 @@ func (c Preview) Tags(userIdOrEmail string) revel.Result {
return c.E404()
}
return c.Blog.Tags(c.GetUserId())
// if tag == "" {
// return blog.RenderTemplate("tags.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
// }
// return blog.RenderTemplate("tag_posts.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
// if tag == "" {
// return blog.RenderTemplate("tags.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
// }
// return blog.RenderTemplate("tag_posts.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
}
func (c Preview) Archives(userIdOrEmail string, notebookId string, year, month int) revel.Result {
if !c.getPreviewThemeAbsolutePath("") {
return c.E404()
}
return c.Blog.Archives(c.GetUserId(), notebookId, year, month)
// return blog.RenderTemplate("archive.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
// return blog.RenderTemplate("archive.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
}
func (c Preview) Cate(userIdOrEmail, notebookId string) revel.Result {
if !c.getPreviewThemeAbsolutePath("") {
return c.E404()
}
return c.Blog.Cate(userIdOrEmail, notebookId)
// return blog.RenderTemplate("cate.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
// return blog.RenderTemplate("cate.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
}
func (c Preview) Post(userIdOrEmail, noteId string) revel.Result {
if !c.getPreviewThemeAbsolutePath("") {
return c.E404()
}
return c.Blog.Post(userIdOrEmail, noteId)
// return blog.RenderTemplate("view.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
// return blog.RenderTemplate("view.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
}
func (c Preview) Single(userIdOrEmail, singleId string) revel.Result {
if !c.getPreviewThemeAbsolutePath("") {
return c.E404()
}
return c.Blog.Single(userIdOrEmail, singleId)
// return blog.RenderTemplate("single.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
// return blog.RenderTemplate("single.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
}
func (c Preview) Search(userIdOrEmail, keywords string) revel.Result {
if !c.getPreviewThemeAbsolutePath("") {
return c.E404()
}
return c.Blog.Search(c.GetUserId(), keywords)
// return blog.RenderTemplate("search.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
// return blog.RenderTemplate("search.html", c.RenderArgs, c.getPreviewThemeAbsolutePath(""))
}
+39 -35
View File
@@ -2,13 +2,13 @@ package controllers
import (
"github.com/revel/revel"
// "encoding/json"
// "gopkg.in/mgo.v2/bson"
. "github.com/leanote/leanote/app/lea"
// "encoding/json"
// "gopkg.in/mgo.v2/bson"
"github.com/leanote/leanote/app/info"
// "github.com/leanote/leanote/app/types"
// "io/ioutil"
// "fmt"
. "github.com/leanote/leanote/app/lea"
// "github.com/leanote/leanote/app/types"
// "io/ioutil"
// "fmt"
)
type Share struct {
@@ -19,13 +19,13 @@ type Share struct {
func (c Share) AddShareNote(noteId string, emails []string, perm int) revel.Result {
status := make(map[string]info.Re, len(emails))
// 自己不能给自己添加共享
myEmail := c.GetEmail();
myEmail := c.GetEmail()
for _, email := range emails {
if email == "" {
continue;
continue
}
if(myEmail != email) {
ok, msg, userId := shareService.AddShareNote(noteId, perm, c.GetUserId(), email);
if myEmail != email {
ok, msg, userId := shareService.AddShareNote(noteId, perm, c.GetUserId(), email)
status[email] = info.Re{Ok: ok, Msg: msg, Id: userId}
} else {
@@ -40,13 +40,13 @@ func (c Share) AddShareNote(noteId string, emails []string, perm int) revel.Resu
func (c Share) AddShareNotebook(notebookId string, emails []string, perm int) revel.Result {
status := make(map[string]info.Re, len(emails))
// 自己不能给自己添加共享
myEmail := c.GetEmail();
myEmail := c.GetEmail()
for _, email := range emails {
if email == "" {
continue;
continue
}
if(myEmail != email) {
ok, msg, userId := shareService.AddShareNotebook(notebookId, perm, c.GetUserId(), email);
if myEmail != email {
ok, msg, userId := shareService.AddShareNotebook(notebookId, perm, c.GetUserId(), email)
status[email] = info.Re{Ok: ok, Msg: msg, Id: userId}
} else {
status[email] = info.Re{Ok: false, Msg: "不能分享给自己"}
@@ -62,11 +62,11 @@ func (c Share) ListShareNotes(notebookId, userId string) revel.Result {
// 表示是默认笔记本, 不是某个特定notebook的共享
var notes []info.ShareNoteWithPerm
if notebookId == "" {
notes = shareService.ListShareNotes(c.GetUserId(), userId, c.GetPage(), pageSize, defaultSortField, false);
notes = shareService.ListShareNotes(c.GetUserId(), userId, c.GetPage(), pageSize, defaultSortField, false)
return c.RenderJson(notes)
} else {
// 有notebookId的
return c.RenderJson(shareService.ListShareNotesByNotebookId(notebookId, c.GetUserId(), userId, c.GetPage(), pageSize, defaultSortField, false));
return c.RenderJson(shareService.ListShareNotesByNotebookId(notebookId, c.GetUserId(), userId, c.GetPage(), pageSize, defaultSortField, false))
}
}
@@ -90,7 +90,7 @@ func (c Share) ListNoteShareUserInfo(noteId string) revel.Result {
c.RenderArgs["noteOrNotebookShareGroupInfos"] = shareService.GetNoteShareGroups(noteId, c.GetUserId())
c.RenderArgs["isNote"] = true
c.RenderArgs["noteOrNotebookId"] = note.NoteId.Hex();
c.RenderArgs["noteOrNotebookId"] = note.NoteId.Hex()
c.RenderArgs["title"] = note.Title
return c.RenderTemplate("share/note_notebook_share_user_infos.html")
@@ -105,7 +105,7 @@ func (c Share) ListNotebookShareUserInfo(notebookId string) revel.Result {
LogJ(c.RenderArgs["noteOrNotebookShareGroupInfos"])
c.RenderArgs["isNote"] = false
c.RenderArgs["noteOrNotebookId"] = notebook.NotebookId.Hex();
c.RenderArgs["noteOrNotebookId"] = notebook.NotebookId.Hex()
c.RenderArgs["title"] = notebook.Title
return c.RenderTemplate("share/note_notebook_share_user_infos.html")
@@ -114,74 +114,78 @@ func (c Share) ListNotebookShareUserInfo(notebookId string) revel.Result {
//------------
// 改变share note 权限
func (c Share) UpdateShareNotePerm(noteId string, perm int, toUserId string) revel.Result {
return c.RenderJson(shareService.UpdateShareNotePerm(noteId, perm, c.GetUserId(), toUserId));
return c.RenderJson(shareService.UpdateShareNotePerm(noteId, perm, c.GetUserId(), toUserId))
}
// 改变share notebook 权限
func (c Share) UpdateShareNotebookPerm(notebookId string, perm int, toUserId string) revel.Result {
return c.RenderJson(shareService.UpdateShareNotebookPerm(notebookId, perm, c.GetUserId(), toUserId));
return c.RenderJson(shareService.UpdateShareNotebookPerm(notebookId, perm, c.GetUserId(), toUserId))
}
//---------------
// 删除share note
func (c Share) DeleteShareNote(noteId string, toUserId string) revel.Result {
return c.RenderJson(shareService.DeleteShareNote(noteId, c.GetUserId(), toUserId));
return c.RenderJson(shareService.DeleteShareNote(noteId, c.GetUserId(), toUserId))
}
// 删除share notebook
func (c Share) DeleteShareNotebook(notebookId string, toUserId string) revel.Result {
return c.RenderJson(shareService.DeleteShareNotebook(notebookId, c.GetUserId(), toUserId));
return c.RenderJson(shareService.DeleteShareNotebook(notebookId, c.GetUserId(), toUserId))
}
// 删除share note, 被共享方删除
func (c Share) DeleteShareNoteBySharedUser(noteId string, fromUserId string) revel.Result {
return c.RenderJson(shareService.DeleteShareNote(noteId, fromUserId, c.GetUserId()));
return c.RenderJson(shareService.DeleteShareNote(noteId, fromUserId, c.GetUserId()))
}
// 删除share notebook, 被共享方删除
func (c Share) DeleteShareNotebookBySharedUser(notebookId string, fromUserId string) revel.Result {
return c.RenderJson(shareService.DeleteShareNotebook(notebookId, fromUserId, c.GetUserId()));
return c.RenderJson(shareService.DeleteShareNotebook(notebookId, fromUserId, c.GetUserId()))
}
// 删除fromUserId分享给我的所有note, notebook
func (c Share) DeleteUserShareNoteAndNotebook(fromUserId string) revel.Result {
return c.RenderJson(shareService.DeleteUserShareNoteAndNotebook(fromUserId, c.GetUserId()));
return c.RenderJson(shareService.DeleteUserShareNoteAndNotebook(fromUserId, c.GetUserId()))
}
//-------------
// 用户组
// 将笔记分享给分组
func (c Share) AddShareNoteGroup(noteId, groupId string, perm int) revel.Result {
re := info.NewRe()
re.Ok = shareService.AddShareNoteGroup(c.GetUserId(), noteId, groupId, perm);
return c.RenderJson(re);
re.Ok = shareService.AddShareNoteGroup(c.GetUserId(), noteId, groupId, perm)
return c.RenderJson(re)
}
// 删除
func (c Share) DeleteShareNoteGroup(noteId, groupId string) revel.Result {
re := info.NewRe()
re.Ok = shareService.DeleteShareNoteGroup(c.GetUserId(), noteId, groupId);
return c.RenderJson(re);
re.Ok = shareService.DeleteShareNoteGroup(c.GetUserId(), noteId, groupId)
return c.RenderJson(re)
}
// 更新, 也是一样, 先删后加
func (c Share) UpdateShareNoteGroupPerm(noteId, groupId string, perm int) revel.Result {
return c.AddShareNoteGroup(noteId, groupId, perm)
}
//------
// 将笔记分享给分组
func (c Share) AddShareNotebookGroup(notebookId, groupId string, perm int) revel.Result {
re := info.NewRe()
re.Ok = shareService.AddShareNotebookGroup(c.GetUserId(), notebookId, groupId, perm);
return c.RenderJson(re);
re.Ok = shareService.AddShareNotebookGroup(c.GetUserId(), notebookId, groupId, perm)
return c.RenderJson(re)
}
// 删除
func (c Share) DeleteShareNotebookGroup(notebookId, groupId string) revel.Result {
re := info.NewRe()
re.Ok = shareService.DeleteShareNotebookGroup(c.GetUserId(), notebookId, groupId);
return c.RenderJson(re);
re.Ok = shareService.DeleteShareNotebookGroup(c.GetUserId(), notebookId, groupId)
return c.RenderJson(re)
}
// 更新, 也是一样, 先删后加
func (c Share) UpdateShareNotebookGroupPerm(notebookId, groupId string, perm int) revel.Result {
return c.AddShareNotebookGroup(notebookId, groupId, perm)
+4 -4
View File
@@ -2,11 +2,11 @@ package controllers
import (
"github.com/revel/revel"
// "encoding/json"
// "gopkg.in/mgo.v2/bson"
// . "github.com/leanote/leanote/app/lea"
// "encoding/json"
// "gopkg.in/mgo.v2/bson"
// . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/info"
// "os/exec"
// "os/exec"
)
type Tag struct {
+34 -34
View File
@@ -2,16 +2,16 @@ package controllers
import (
"github.com/revel/revel"
// "encoding/json"
// "gopkg.in/mgo.v2/bson"
. "github.com/leanote/leanote/app/lea"
// "encoding/json"
// "gopkg.in/mgo.v2/bson"
"github.com/leanote/leanote/app/info"
// "github.com/leanote/leanote/app/types"
// "io/ioutil"
// "fmt"
// "math"
// "os"
// "path"
. "github.com/leanote/leanote/app/lea"
// "github.com/leanote/leanote/app/types"
// "io/ioutil"
// "fmt"
// "math"
// "os"
// "path"
"strconv"
)
@@ -32,18 +32,18 @@ func (c User) UpdateUsername(username string) revel.Result {
re := info.NewRe()
if c.GetUserId() == configService.GetGlobalStringConfig("demoUserId") {
re.Msg = "cannotUpdateDemo"
return c.RenderRe(re);
return c.RenderRe(re)
}
if re.Ok, re.Msg = Vd("username", username); !re.Ok {
return c.RenderRe(re);
return c.RenderRe(re)
}
re.Ok, re.Msg = userService.UpdateUsername(c.GetUserId(), username)
if(re.Ok) {
if re.Ok {
c.UpdateSession("Username", username)
}
return c.RenderRe(re);
return c.RenderRe(re)
}
// 修改密码
@@ -51,37 +51,37 @@ func (c User) UpdatePwd(oldPwd, pwd string) revel.Result {
re := info.NewRe()
if c.GetUserId() == configService.GetGlobalStringConfig("demoUserId") {
re.Msg = "cannotUpdateDemo"
return c.RenderRe(re);
return c.RenderRe(re)
}
if re.Ok, re.Msg = Vd("password", oldPwd); !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 = userService.UpdatePwd(c.GetUserId(), oldPwd, pwd)
return c.RenderRe(re);
return c.RenderRe(re)
}
// 更新主题
func (c User) UpdateTheme(theme string) revel.Result {
re := info.NewRe();
re := info.NewRe()
re.Ok = userService.UpdateTheme(c.GetUserId(), theme)
if re.Ok {
c.UpdateSession("Theme", theme)
}
return c.RenderJson(re);
return c.RenderJson(re)
}
// 发送邀请链接
func (c User) SendRegisterEmail(content, toEmail string) revel.Result {
re := info.NewRe()
if content == "" || !IsEmail(toEmail) {
return c.RenderJson(re);
return c.RenderJson(re)
}
re.Ok = emailService.SendInviteEmail(c.GetUserInfo(), toEmail, content)
return c.RenderJson(re);
return c.RenderJson(re)
}
//---------------------------
@@ -98,10 +98,10 @@ func (c User) updateEmailSendActiveEmail(email, pwd string) revel.Result {
re := info.NewRe()
if c.GetUserId() == configService.GetGlobalStringConfig("demoUserId") {
re.Msg = "cannotUpdateDemo"
return c.RenderJson(re);
return c.RenderJson(re)
}
if re.Ok, re.Msg = Vd("email", email); !re.Ok {
return c.RenderRe(re);
return c.RenderRe(re)
}
re.Ok, re.Msg = emailService.UpdateEmailSendActiveEmail(c.GetUserInfo(), email)
@@ -111,7 +111,7 @@ func (c User) updateEmailSendActiveEmail(email, pwd string) revel.Result {
// 通过点击链接
// 修改邮箱
func (c User) UpdateEmail(token string) revel.Result {
c.SetUserInfo();
c.SetUserInfo()
ok, msg, email := userService.UpdateEmail(token)
@@ -130,13 +130,13 @@ func (c User) UpdateEmail(token string) revel.Result {
// 注册后激活邮箱
func (c User) ActiveEmail(token string) revel.Result {
c.SetUserInfo();
c.SetUserInfo()
ok, msg, email := userService.ActiveEmail(token)
// 需要修改session
if ok {
c.UpdateSession("Verified", "1");
c.UpdateSession("Verified", "1")
}
c.RenderArgs["title"] = "验证邮箱"
@@ -153,16 +153,16 @@ func (c User) AddAccount(email, pwd string) revel.Result {
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 = userService.ThirdAddUser(c.GetUserId(), email, pwd)
if re.Ok {
c.UpdateSession("Email", email);
c.UpdateSession("Email", email)
}
return c.RenderRe(re)
@@ -174,9 +174,9 @@ func (c User) UpdateColumnWidth(notebookWidth, noteListWidth, mdEditorWidth int)
re := info.NewRe()
re.Ok = userService.UpdateColumnWidth(c.GetUserId(), notebookWidth, noteListWidth, mdEditorWidth)
if re.Ok {
c.UpdateSession("NotebookWidth", strconv.Itoa(notebookWidth));
c.UpdateSession("NoteListWidth", strconv.Itoa(noteListWidth));
c.UpdateSession("MdEditorWidth", strconv.Itoa(mdEditorWidth));
c.UpdateSession("NotebookWidth", strconv.Itoa(notebookWidth))
c.UpdateSession("NoteListWidth", strconv.Itoa(noteListWidth))
c.UpdateSession("MdEditorWidth", strconv.Itoa(mdEditorWidth))
LogJ(c.Session)
}
@@ -187,9 +187,9 @@ func (c User) UpdateLeftIsMin(leftIsMin bool) revel.Result {
re.Ok = userService.UpdateLeftIsMin(c.GetUserId(), leftIsMin)
if re.Ok {
if leftIsMin {
c.UpdateSession("LeftIsMin", "1");
c.UpdateSession("LeftIsMin", "1")
} else {
c.UpdateSession("LeftIsMin", "0");
c.UpdateSession("LeftIsMin", "0")
}
}
return c.RenderJson(re)
+13 -13
View File
@@ -1,15 +1,15 @@
package admin
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,23 +20,23 @@ type AdminBaseController struct {
// 得到sorterField 和 isAsc
// okSorter = ['email', 'username']
func (c AdminBaseController) getSorter(sorterField string, isAsc bool, okSorter []string) (string, bool){
func (c AdminBaseController) 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
}
}
@@ -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) {
+5 -5
View File
@@ -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)
}
+2 -2
View File
@@ -21,7 +21,7 @@ func (c Admin) Index() revel.Result {
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);
return c.RenderTemplate("admin/" + view)
}
+6 -6
View File
@@ -1,13 +1,13 @@
package admin
import (
"github.com/revel/revel"
. "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/info"
"archive/tar"
"compress/gzip"
"os"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"github.com/revel/revel"
"io"
"os"
"time"
)
@@ -22,12 +22,12 @@ 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 {
+20 -21
View File
@@ -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,7 +25,7 @@ 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()
@@ -41,7 +41,7 @@ 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()
@@ -51,7 +51,7 @@ func (c AdminEmail) DoDemo(demoUsername, demoPassword string) revel.Result {
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)
}
@@ -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()
@@ -132,13 +132,13 @@ func (c AdminEmail) SendEmailToEmails(sendEmails, latestEmailSubject, latestEmai
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)
}
@@ -156,7 +156,7 @@ func (c AdminEmail) SendToUsers2(emails, latestEmailSubject, latestEmailBody str
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)
@@ -165,14 +165,13 @@ func (c AdminEmail) SendToUsers2(emails, latestEmailSubject, latestEmailBody str
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")
@@ -180,7 +179,7 @@ func (c AdminEmail) SendEmailDialog(emails string) revel.Result{
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 {
@@ -196,19 +195,19 @@ func (c AdminEmail) SendToUsers(userFilterEmail, userFilterWhiteList, userFilter
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)
}
@@ -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");
return c.RenderTemplate("admin/email/list.html")
}
@@ -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,7 +25,7 @@ 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()
@@ -42,7 +42,7 @@ func (c AdminSetting) ShareNote(registerSharedUserId string,
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,7 +51,7 @@ 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()
@@ -62,7 +62,7 @@ func (c AdminSetting) DoDemo(demoUsername, demoPassword string) revel.Result {
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)
}
@@ -88,7 +88,7 @@ func (c AdminSetting) SubDomain() revel.Result {
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()
@@ -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 {
+13 -12
View File
@@ -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,32 +15,33 @@ 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)
}
// 注册
@@ -53,13 +54,13 @@ 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)
+8 -7
View File
@@ -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
@@ -42,7 +42,7 @@ var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": tru
"FindPassword2": true,
"FindPasswordUpdate": true,
"Suggestion": true,
},
},
"Blog": map[string]bool{"Index": true,
"View": true,
"AboutMe": true,
@@ -50,12 +50,13 @@ var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": tru
},
// 用户的激活与修改邮箱都不需要登录, 通过链接地址
"User": map[string]bool{"UpdateEmail": true,
"ActiveEmail":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,7 +67,7 @@ func needValidate(controller, method string) bool {
return true
} else {
// controller不在这里的, 肯定要验证
return true;
return true
}
}
func AuthInterceptor(c *revel.Controller) revel.Result {
@@ -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
+10 -10
View File
@@ -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,7 +43,7 @@ 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()
// 判断是否有权限为笔记添加附件
// 如果笔记还没有添加是不是会有问题
@@ -64,11 +64,11 @@ func (c ApiBaseContrller) uploadAttach(name string, noteId string) (ok bool, msg
return
}
// > 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) {
msg = "fileIsTooLarge"
return
}
@@ -86,7 +86,7 @@ func (c ApiBaseContrller) uploadAttach(name string, noteId string) (ok bool, msg
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
@@ -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
}
@@ -151,18 +151,18 @@ func (c ApiBaseContrller) upload(name string, noteId string, isAttach bool) (ok
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
+12 -13
View File
@@ -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"
"io"
"time"
"strings"
"archive/tar"
"compress/gzip"
"io"
"strings"
"time"
)
// 文件操作, 图片, 头像上传, 输出
@@ -73,7 +73,7 @@ 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")
@@ -154,11 +154,10 @@ func (c ApiFile) GetAllAttachs(noteId string) revel.Result {
}
} // for
// tw.Close()
// gw.Close()
// fw.Close()
// file, _ := os.Open(dir + "/" + filename)
// 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
}
+24 -24
View File
@@ -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"
@@ -156,9 +156,9 @@ 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="},
@@ -172,7 +172,7 @@ func (c ApiNote) fixContent(content string) string {
// 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 "]]
@@ -181,8 +181,8 @@ func (c ApiNote) fixContent(content string) string {
if len(eachFind) == 4 {
content = strings.Replace(content,
eachFind[0],
eachPattern["src"] + "=\"" + baseUrl + "/api/file/" + eachPattern["to"] + eachFind[2] + "\"",
1);
eachPattern["src"]+"=\""+baseUrl+"/api/file/"+eachPattern["to"]+eachFind[2]+"\"",
1)
}
}
@@ -196,13 +196,13 @@ func (c ApiNote) fixContent(content string) string {
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) // 查找所有的
// [[![](http://leanote.com/file/outputImage?fileId=5503537b38f4111dcb0000d1) 5503537b38f4111dcb0000d1] [![你好啊, 我很好, 为什么?](http://leanote.com/file/outputImage?fileId=5503537b38f4111dcb0000d1) 5503537b38f4111dcb0000d1]]
for _, eachFind := range findsImageMarkdown {
// [![你好啊, 我很好, 为什么?](http://leanote.com/file/outputImage?fileId=5503537b38f4111dcb0000d1) 你好啊, 我很好, 为什么? 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)
}
}
}
@@ -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)
}
}
}
@@ -315,8 +315,8 @@ func (c ApiNote) AddNote(noteOrContent info.ApiNote) revel.Result {
c.fixPostNotecontent(&noteOrContent)
// 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,
@@ -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)
@@ -415,9 +415,9 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
Log(v)
}
*/
// Log(c.Has("Files[0]"))
// Log(c.Has("Files[0]"))
if c.Has("Files[0][LocalFileId]") {
// LogJ(c.Params.Files)
// LogJ(c.Params.Files)
if noteOrContent.Files != nil && len(noteOrContent.Files) > 0 {
for i, file := range noteOrContent.Files {
if file.HasBody {
@@ -445,8 +445,8 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
}
}
// Log("after upload")
// LogJ(noteOrContent.Files)
// Log("after upload")
// LogJ(noteOrContent.Files)
}
// 移到外面来, 删除最后一个file时也要处理, 不然总删不掉
@@ -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)
@@ -635,7 +635,7 @@ 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 + "\""
+10 -10
View File
@@ -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,15 +30,15 @@ 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,
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,
}
+1 -1
View File
@@ -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"
)
+1 -2
View File
@@ -3,9 +3,9 @@ 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"
@@ -82,7 +82,6 @@ func (c ApiUser) GetSyncState() revel.Result {
return c.RenderJson(ret)
}
// 头像设置
// 参数file=文件
// 成功返回{Logo: url} 头像新url
+3 -3
View File
@@ -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,7 +46,7 @@ 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,
@@ -90,7 +90,7 @@ 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
+3 -3
View File
@@ -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 {
+13 -13
View File
@@ -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,23 +20,23 @@ 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
}
}
@@ -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) {
@@ -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")
}
// 添加分组
@@ -20,7 +20,7 @@ func (c MemberIndex) Index() revel.Result {
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);
return c.RenderTemplate("admin/" + view)
}
@@ -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");
return c.RenderTemplate("member/user/add_account.html")
}
+8 -7
View File
@@ -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
@@ -44,7 +44,7 @@ var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": tru
"FindPassword2": true,
"FindPasswordUpdate": true,
"Suggestion": true,
},
},
"Blog": map[string]bool{"Index": true,
"View": true,
"AboutMe": true,
@@ -52,12 +52,13 @@ var commonUrl = map[string]map[string]bool{"Index": map[string]bool{"Index": tru
},
// 用户的激活与修改邮箱都不需要登录, 通过链接地址
"User": map[string]bool{"UpdateEmail": true,
"ActiveEmail":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,7 +69,7 @@ func needValidate(controller, method string) bool {
return true
} else {
// controller不在这里的, 肯定要验证
return true;
return true
}
}
func AuthInterceptor(c *revel.Controller) revel.Result {
@@ -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
+1 -1
View File
@@ -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"
+8 -7
View File
@@ -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)
@@ -32,7 +33,7 @@ func parse(filename string) {
}
// 对每一行进行处理
if line[0] == '#' || line[1] == '#' {
continue;
continue
}
lineStr := string(line)
@@ -40,14 +41,14 @@ func parse(filename string) {
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
}
@@ -55,7 +56,7 @@ func parse(filename string) {
// 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)
+6 -6
View File
@@ -1,8 +1,8 @@
package info
import (
"time"
"gopkg.in/mgo.v2/bson"
"time"
)
//---------
@@ -22,12 +22,12 @@ type ApiNote struct {
UserId string
Title string
Desc string
// ImgSrc string
// ImgSrc string
Tags []string
Abstract string
Content string
IsMarkdown bool
// FromUserId string // 为共享而新建
// FromUserId string // 为共享而新建
IsBlog bool // 是否是blog, 更新note不需要修改, 添加note时才有可能用到, 此时需要判断notebook是否设为Blog
IsTrash bool
IsDeleted bool
@@ -38,7 +38,6 @@ type ApiNote struct {
PublicTime time.Time
}
// 内容
type ApiNoteContent struct {
NoteId bson.ObjectId `bson:"_id,omitempty"`
@@ -46,8 +45,8 @@ type ApiNoteContent struct {
Content string `Content`
// CreatedTime time.Time `CreatedTime`
// UpdatedTime time.Time `UpdatedTime`
// CreatedTime time.Time `CreatedTime`
// UpdatedTime time.Time `UpdatedTime`
}
// 转换
@@ -114,6 +113,7 @@ type ReUpdate struct {
Msg string
Usn int
}
func NewReUpdate() ReUpdate {
return ReUpdate{Ok: false}
}
+1
View File
@@ -37,6 +37,7 @@ type Post struct {
LikeNum int
IsMarkdown bool
}
// 归档
type ArchiveMonth struct {
Month int
+1 -1
View File
@@ -19,7 +19,7 @@ type UserBlogBase struct {
Logo string `Logo`
Title string `Title` // 标题
SubTitle string `SubTitle` // 副标题
// AboutMe string `AboutMe` // 关于我
// AboutMe string `AboutMe` // 关于我
}
type UserBlogComment struct {
+1 -2
View File
@@ -1,7 +1,6 @@
package info
import (
)
import ()
// controller ajax返回
type Re struct {
-1
View File
@@ -4,7 +4,6 @@ import (
"math"
)
// 分页数据
type Page struct {
CurPage int // 当前页码
+35 -35
View File
@@ -1,25 +1,25 @@
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() {
@@ -62,16 +62,16 @@ func init() {
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 {
@@ -147,8 +147,8 @@ func init() {
classes += " label-post"
var url = tagPostUrl + "/" + url.QueryEscape(tag)
tagStr += "<a class=\"" + classes + "\" href=\"" + url + "\">" + str + "</a>";
if i != lenTags - 1 {
tagStr += "<a class=\"" + classes + "\" href=\"" + url + "\">" + str + "</a>"
if i != lenTags-1 {
tagStr += " "
}
}
@@ -172,8 +172,8 @@ func init() {
}
classes += " label-post"
tagStr += "<span class=\"" + classes + "\" >" + str + "</span>";
if i != lenTags - 1 {
tagStr += "<span class=\"" + classes + "\" >" + str + "</span>"
if i != lenTags-1 {
tagStr += " "
}
}
@@ -187,7 +187,7 @@ func init() {
if strings.HasPrefix(str, "???") {
str = key
}
return template.HTML(str);
return template.HTML(str)
}
// lea++
@@ -201,11 +201,11 @@ func init() {
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 {
@@ -221,8 +221,8 @@ func init() {
}
classes += " label-post"
var url = tagPostUrl + url.QueryEscape(tag)
tagStr += "<a class=\"" + classes + "\" href=\"" + url + "\">" + str + "</a>";
if i != lenTags - 1 {
tagStr += "<a class=\"" + classes + "\" href=\"" + url + "\">" + str + "</a>"
if i != lenTags-1 {
tagStr += " "
}
}
@@ -255,12 +255,12 @@ func init() {
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 {
@@ -317,23 +317,23 @@ func init() {
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
+1 -1
View File
@@ -2,8 +2,8 @@ package lea
import (
"encoding/json"
"github.com/revel/revel"
"fmt"
"github.com/revel/revel"
)
func Log(i interface{}) {
+8 -6
View File
@@ -1,10 +1,11 @@
package lea
import (
"github.com/revel/revel"
"net/smtp"
"strings"
"github.com/revel/revel"
)
// 发送邮件
var host = "smtp.ym.163.com"
var port = "25"
@@ -12,7 +13,7 @@ var username = "noreply@leanote.com"
var password = "---"
func InitEmail() {
config := revel.Config;
config := revel.Config
host, _ = config.String("email.host")
port, _ = config.String("email.port")
username, _ = config.String("email.username")
@@ -56,6 +57,7 @@ var bodyTpl = `
</body>
</html>
`
func SendEmailOld(to, subject, body string) bool {
hp := strings.Split(host, ":")
auth := smtp.PlainAuth("", username, password, hp[0])
@@ -64,15 +66,15 @@ func SendEmailOld(to, subject, body string) bool {
mailtype := "html"
if mailtype == "html" {
content_type = "Content-Type: text/"+ mailtype + "; charset=UTF-8"
} else{
content_type = "Content-Type: text/" + mailtype + "; charset=UTF-8"
} else {
content_type = "Content-Type: text/plain" + "; charset=UTF-8"
}
//body = strings.Replace(bodyTpl, "$body", body, 1)
//body = strings.Replace(body, "$title", title, 1)
msg := []byte("To: " + to + "\r\nFrom: " + username + "<"+ username +">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
msg := []byte("To: " + to + "\r\nFrom: " + username + "<" + username + ">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
send_to := strings.Split(to, ";")
err := smtp.SendMail(host+":"+port, auth, username, send_to, msg)
@@ -85,5 +87,5 @@ func SendEmailOld(to, subject, body string) bool {
func SendToLeanoteOld(subject, title, body string) {
to := "leanote@leanote.com"
SendEmailOld(to, subject, body);
SendEmailOld(to, subject, body)
}
+2 -2
View File
@@ -116,13 +116,13 @@ func CopyDir(source string, dest string) (err error) {
// create sub-directories - recursively
err = CopyDir(sourcefilepointer, destinationfilepointer)
if err != nil {
// fmt.Println(err)
// fmt.Println(err)
}
} else {
// perform copy
_, err = CopyFile(sourcefilepointer, destinationfilepointer)
if err != nil {
// fmt.Println(err)
// fmt.Println(err)
}
}
}
+18 -18
View File
@@ -1,19 +1,19 @@
package lea
import (
"fmt"
"regexp"
"bytes"
"crypto/md5"
"crypto/rand"
"encoding/base64"
"encoding/hex"
"io"
"gopkg.in/mgo.v2/bson"
"time"
"strings"
"fmt"
"github.com/PuerkitoBio/goquery"
"bytes"
"gopkg.in/mgo.v2/bson"
"io"
math_rand "math/rand"
"regexp"
"strings"
"time"
)
// 字符串
@@ -31,14 +31,14 @@ func Digest3(str string) string {
for _, k := range str {
b += k
}
return fmt.Sprintf("%d", b % 1000)
return fmt.Sprintf("%d", b%1000)
}
func Digest2(str string) string {
var b rune = 0
for _, k := range str {
b += k
}
return fmt.Sprintf("%d", b % 100)
return fmt.Sprintf("%d", b%100)
}
// Guid
@@ -161,7 +161,7 @@ func SubStringHTMLToRaw(param string, length int) string {
continue
} else if temp == '>' {
isCode = false
resultRune[n] = ' ';
resultRune[n] = ' '
n++
if n >= length {
@@ -170,7 +170,7 @@ func SubStringHTMLToRaw(param string, length int) string {
continue
}
if !isCode {
resultRune[n] = temp;
resultRune[n] = temp
// s += string(temp)
n++
if n >= length {
@@ -198,7 +198,7 @@ func fixHtml(result string) string {
p, _ := regexp.Compile("<(/?[a-zA-Z]+)[^<>]*>") // 得到所有的<div>, </div>...
strs := p.FindAllString(tempResult, -1)
// fmt.Println(strs)
// fmt.Println(strs)
stack := make([]string, len(strs))
stackP := -1
for _, each := range strs {
@@ -244,7 +244,7 @@ func SubStringHTML(param string, length int, end string) string {
var temp rune // 中文问题, 用rune来解决
isCode := false //是不是HTML代码
isHTML := false //是不是HTML特殊字符,如&nbsp;
var i = 0;
var i = 0
for ; i < lenStr; i++ {
temp = rStr[i]
if temp == '<' {
@@ -305,7 +305,7 @@ func IsGoodPwd(pwd string) (bool, string) {
// 是否是email
func IsEmail(email string) bool {
if email == "" {
return false;
return false
}
ok, _ := regexp.MatchString(`^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[_a-z\-A-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9\-]+\.[0-9a-zA-Z]{2,6}$`, email)
return ok
@@ -314,7 +314,7 @@ func IsEmail(email string) bool {
// 是否只包含数字, 字母 -, _
func IsUsername(username string) bool {
if username == "" {
return false;
return false
}
ok, _ := regexp.MatchString(`[^0-9a-zA-Z_\-]`, username)
return !ok
@@ -351,7 +351,7 @@ func RandomPwd(num int) string {
chars[j] = byte(i)
j++
}
j--;
j--
str := ""
math_rand.Seed(time.Now().UnixNano())
@@ -379,14 +379,14 @@ func InArray(arr []string, str string) bool {
func FixFilename(filename string) string {
if filename != "" {
// 把特殊字段给替换掉
// str := `life "%&()+,/:;<>=?@\|`
// str := `life "%&()+,/:;<>=?@\|`
// . == \\.
// $ === \\$
reg, _ := regexp.Compile("\\.|/|#|\\$|!|\\^|\\*|'| |\"|%|&|\\(|\\)|\\+|\\,|/|:|;|<|>|=|\\?|@|\\||\\\\")
filename = reg.ReplaceAllString(filename, "-")
filename = strings.Trim(filename, "-") // 左右单独的-去掉
// 把空格替换成-
// filename = strings.Replace(filename, " ", "-", -1)
// filename = strings.Replace(filename, " ", "-", -1)
for strings.Index(filename, "--") >= 0 { // 防止出现连续的--
filename = strings.Replace(filename, "--", "-", -1)
}
+11 -11
View File
@@ -2,8 +2,8 @@ package lea
import (
"encoding/json"
"strconv"
"regexp"
"strconv"
)
// 验证
@@ -38,15 +38,15 @@ var rulesStr = `{
`
var rulesMap map[string][]map[string]string
var rules = map[string]func(string, map[string]string)(bool, string) {
"required": func(value string, rule map[string]string)(ok bool, msg string) {
var rules = map[string]func(string, map[string]string) (bool, string){
"required": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
return
}
ok = true
return
},
"minLength": func(value string, rule map[string]string)(ok bool, msg string) {
"minLength": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
return
}
@@ -55,7 +55,7 @@ var rules = map[string]func(string, map[string]string)(bool, string) {
ok = len(value) >= dataI
return
},
"min": func(value string, rule map[string]string)(ok bool, msg string) {
"min": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
return
}
@@ -66,7 +66,7 @@ var rules = map[string]func(string, map[string]string)(bool, string) {
return
},
"sortField": func(value string, rule map[string]string)(ok bool, msg string) {
"sortField": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
return
}
@@ -75,21 +75,21 @@ var rules = map[string]func(string, map[string]string)(bool, string) {
return
},
"password": func(value string, rule map[string]string)(ok bool, msg string) {
"password": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
return
}
ok = len(value) >= 6
return
},
"email": func(value string, rule map[string]string)(ok bool, msg string) {
"email": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
return
}
ok = IsEmail(value)
return
},
"noSpecialChars": func(value string, rule map[string]string)(ok bool, msg string) {
"noSpecialChars": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
return
}
@@ -98,7 +98,7 @@ var rules = map[string]func(string, map[string]string)(bool, string) {
},
// www.baidu.com
//
"domain": func(value string, rule map[string]string)(ok bool, msg string) {
"domain": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
ok = true
return // 可为空
@@ -112,7 +112,7 @@ var rules = map[string]func(string, map[string]string)(bool, string) {
return
},
// abcd
"subDomain": func(value string, rule map[string]string)(ok bool, msg string) {
"subDomain": func(value string, rule map[string]string) (ok bool, msg string) {
if value == "" {
ok = true
return // 可为空
+14 -14
View File
@@ -28,7 +28,7 @@ func main() {
//UnTarGz("/home/ty4z2008/1.tar.gz", "/home/ty4z2008") //解压
os.RemoveAll("/home/ty4z2008/tar")
*/
// TaZip("/Users/life/Desktop/j", "/Users/life/Desktop/aaa.tar.gz")
// TaZip("/Users/life/Desktop/j", "/Users/life/Desktop/aaa.tar.gz")
Zip("/Users/life/Desktop/j", "/Users/life/Desktop/aaa.zip")
fmt.Println("ok")
}
@@ -67,11 +67,11 @@ func TarGz(srcDirPath string, destFilePath string) (ok bool) {
}
if fi.IsDir() {
// handle source directory
// fmt.Println("Cerating tar.gz from directory...")
// fmt.Println("Cerating tar.gz from directory...")
tarGzDir(srcDirPath, path.Base(srcDirPath), tw)
} else {
// handle file directly
// fmt.Println("Cerating tar.gz from " + fi.Name() + "...")
// fmt.Println("Cerating tar.gz from " + fi.Name() + "...")
tarGzFile(srcDirPath, fi.Name(), tw, fi)
}
ok = true
@@ -102,11 +102,11 @@ func tarGzDir(srcDirPath string, recPath string, tw *tar.Writer) {
if fi.IsDir() {
// Directory
// (Directory won't add unitl all subfiles are added)
// fmt.Printf("Adding path...%s\n", curPath)
// fmt.Printf("Adding path...%s\n", curPath)
tarGzDir(curPath, recPath+"/"+fi.Name(), tw)
} else {
// File
// fmt.Printf("Adding file...%s\n", curPath)
// fmt.Printf("Adding file...%s\n", curPath)
}
tarGzFile(curPath, recPath+"/"+fi.Name(), tw, fi)
@@ -116,18 +116,18 @@ func tarGzDir(srcDirPath string, recPath string, tw *tar.Writer) {
// Deal with files
func tarGzFile(srcFile string, recPath string, tw *tar.Writer, fi os.FileInfo) {
if fi.IsDir() {
// fmt.Println("??")
// fmt.Println("??")
// Create tar header
hdr := new(tar.Header)
// if last character of header name is '/' it also can be directory
// but if you don't set Typeflag, error will occur when you untargz
hdr.Name = recPath // + "/"
// fmt.Println(hdr.Name)
// fmt.Println(hdr.Name)
hdr.Typeflag = tar.TypeDir
// hdr.Size = 0
// hdr.Size = 0
//hdr.Mode = 0755 | c_ISDIR
// hdr.Mode = int64(fi.Mode()) // 加这个会有错误!!!
// hdr.ModTime = fi.ModTime() // 加这个会有错误!!
// hdr.Mode = int64(fi.Mode()) // 加这个会有错误!!!
// hdr.ModTime = fi.ModTime() // 加这个会有错误!!
// Write hander
err := tw.WriteHeader(hdr)
@@ -145,7 +145,7 @@ func tarGzFile(srcFile string, recPath string, tw *tar.Writer, fi os.FileInfo) {
// Create tar header
hdr := new(tar.Header)
hdr.Name = recPath
// fmt.Println(hdr.Name)
// fmt.Println(hdr.Name)
hdr.Size = fi.Size()
hdr.Mode = int64(fi.Mode())
hdr.ModTime = fi.ModTime()
@@ -167,7 +167,7 @@ func tarGzFile(srcFile string, recPath string, tw *tar.Writer, fi os.FileInfo) {
// Ungzip and untar from source file to destination directory
// you need check file exist before you call this function
func UnTarGz(srcFilePath string, destDirPath string) {
// fmt.Println("UnTarGzing " + srcFilePath + "...")
// fmt.Println("UnTarGzing " + srcFilePath + "...")
// Create destination directory
os.Mkdir(destDirPath, os.ModePerm)
@@ -194,7 +194,7 @@ func UnTarGz(srcFilePath string, destDirPath string) {
break
}
//handleError(err)
// fmt.Println("UnTarGzing file..." + hdr.Name)
// fmt.Println("UnTarGzing file..." + hdr.Name)
// Check if it is diretory or file
if hdr.Typeflag != tar.TypeDir {
// Get files from archive
@@ -211,7 +211,7 @@ func UnTarGz(srcFilePath string, destDirPath string) {
}
}
}
// fmt.Println("Well done!")
// fmt.Println("Well done!")
}
// Copyfile
+15 -15
View File
@@ -3,10 +3,10 @@ package archive
import (
"archive/zip"
"fmt"
"strings"
"io"
"os"
"path"
"strings"
)
// main functions shows how to TarGz a directory/file and
@@ -43,11 +43,11 @@ func Zip(srcDirPath string, destFilePath string) (ok bool) {
}
if fi.IsDir() {
// handle source directory
// fmt.Println("Cerating tar.gz from directory...")
// fmt.Println("Cerating tar.gz from directory...")
zipDir(srcDirPath, path.Base(srcDirPath), tw)
} else {
// handle file directly
// fmt.Println("Cerating tar.gz from " + fi.Name() + "...")
// fmt.Println("Cerating tar.gz from " + fi.Name() + "...")
zipFile(srcDirPath, fi.Name(), tw, fi)
}
ok = true
@@ -78,11 +78,11 @@ func zipDir(srcDirPath string, recPath string, tw *zip.Writer) {
if fi.IsDir() {
// Directory
// (Directory won't add unitl all subfiles are added)
// fmt.Printf("Adding path...%s\n", curPath)
// fmt.Printf("Adding path...%s\n", curPath)
zipDir(curPath, recPath+"/"+fi.Name(), tw)
} else {
// File
// fmt.Printf("Adding file...%s\n", curPath)
// fmt.Printf("Adding file...%s\n", curPath)
}
zipFile(curPath, recPath+"/"+fi.Name(), tw, fi)
@@ -92,7 +92,7 @@ func zipDir(srcDirPath string, recPath string, tw *zip.Writer) {
// Deal with files
func zipFile(srcFile string, recPath string, tw *zip.Writer, fi os.FileInfo) {
if fi.IsDir() {
// fmt.Println("??")
// fmt.Println("??")
// Create tar header
/*
fh, err := zip.FileInfoHeader(fi)
@@ -138,15 +138,15 @@ func Unzip(srcFilePath string, destDirPath string) (ok bool, msg string) {
}()
os.Mkdir(destDirPath, os.ModePerm)
r, err := zip.OpenReader(srcFilePath);
r, err := zip.OpenReader(srcFilePath)
if err != nil {
panic(err)
}
defer r.Close();
defer r.Close()
for _, f := range r.File {
// fmt.Println("FileName : ", f.Name); // j/aaa.zip
rc, err := f.Open();
if err!=nil {
// fmt.Println("FileName : ", f.Name); // j/aaa.zip
rc, err := f.Open()
if err != nil {
panic(err)
}
@@ -155,7 +155,7 @@ func Unzip(srcFilePath string, destDirPath string) (ok bool, msg string) {
prePath := ""
filename := ""
l := len(paths)
// fmt.Println(l)
// fmt.Println(l)
if l > 1 {
// 去掉第1个文件夹
if l == 2 {
@@ -167,16 +167,16 @@ func Unzip(srcFilePath string, destDirPath string) (ok bool, msg string) {
} else {
filename = f.Name
}
// fmt.Println(prePath)
// fmt.Println(prePath)
// 相对于目标文件件下的路径
destPath := destDirPath + "/" + filename
if prePath != "" {
os.MkdirAll(destDirPath + "/" + prePath, os.ModePerm)
os.MkdirAll(destDirPath+"/"+prePath, os.ModePerm)
destPath = destDirPath + "/" + prePath + "/" + filename
}
// Write data to file
// fmt.Println(destPath)
// fmt.Println(destPath)
fw, _ := os.Create(destPath)
if err != nil {
panic(err)
+27 -26
View File
@@ -1,10 +1,10 @@
package binder
import (
"github.com/revel/revel"
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/controllers"
// "github.com/leanote/leanote/app/controllers/api"
"github.com/leanote/leanote/app/info"
"github.com/revel/revel"
// "github.com/leanote/leanote/app/controllers/api"
"fmt"
"reflect"
"strings"
@@ -54,35 +54,36 @@ func nextKey(key string) string {
}
return key[:fieldLen]
}
var leanoteStructBinder = revel.Binder{
// name == "noteOrContent"
Bind: func(params *revel.Params, name string, typ reflect.Type) reflect.Value {
result := reflect.New(typ).Elem() // 创建一个该类型的, 然后其field从所有的param去取
fieldValues := make(map[string]reflect.Value)
// fmt.Println(name)
// fmt.Println(name)
// fmt.Println(typ) // api.NoteFiles
// name = files[0], files[1], noteContent
// fmt.Println(params.Values)
// fmt.Println(params.Values)
/*
map[Title:[test1] METHOD:[POST] NotebookId:[54c4f51705fcd14031000002]
files[1][FileId]:[]
controller:[note]
files[1][LocalFileId]:[54c7ae27d98d0329dd000000] files[1][HasBody]:[true] files[0][FileId]:[] files[0][LocalFileId]:[54c7ae855e94ea2dba000000] action:[addNote] Content:[<p>lifedddddd</p><p><img src="app://leanote/data/54bdc65599c37b0da9000002/images/1422368307147_2.png" alt="" data-mce-src="app://leanote/data/54bdc65599c37b0da9000002/images/1422368307147_2.png" style="display: block; margin-left: auto; margin-right: auto;"></p><p><img src="http://127.0.0.1:8008/api/file/getImage?fileId=54c7ae27d98d0329dd000000" alt="" data-mce-src="http://127.0.0.1:8008/api/file/getImg?fileId=54c7ae27d98d0329dd000000"></p><p><br></p><p><img src="http://127.0.0.1:8008/api/file/getImage?fileId=54c7ae855e94ea2dba000000" alt="" data-mce-src="http://127.0.0.1:8008/api/file/getImage?fileId=54c7ae855e94ea2dba000000" style="display: block; margin-left: auto; margin-right: auto;"></p><p><br></p><p><br></p>] IsBlog:[false] token:[user1]
files[0][HasBody]:[true]]
map[Title:[test1] METHOD:[POST] NotebookId:[54c4f51705fcd14031000002]
files[1][FileId]:[]
controller:[note]
files[1][LocalFileId]:[54c7ae27d98d0329dd000000] files[1][HasBody]:[true] files[0][FileId]:[] files[0][LocalFileId]:[54c7ae855e94ea2dba000000] action:[addNote] Content:[<p>lifedddddd</p><p><img src="app://leanote/data/54bdc65599c37b0da9000002/images/1422368307147_2.png" alt="" data-mce-src="app://leanote/data/54bdc65599c37b0da9000002/images/1422368307147_2.png" style="display: block; margin-left: auto; margin-right: auto;"></p><p><img src="http://127.0.0.1:8008/api/file/getImage?fileId=54c7ae27d98d0329dd000000" alt="" data-mce-src="http://127.0.0.1:8008/api/file/getImg?fileId=54c7ae27d98d0329dd000000"></p><p><br></p><p><img src="http://127.0.0.1:8008/api/file/getImage?fileId=54c7ae855e94ea2dba000000" alt="" data-mce-src="http://127.0.0.1:8008/api/file/getImage?fileId=54c7ae855e94ea2dba000000" style="display: block; margin-left: auto; margin-right: auto;"></p><p><br></p><p><br></p>] IsBlog:[false] token:[user1]
files[0][HasBody]:[true]]
*/
nameIsSlice := strings.Contains(name, "[")
// fmt.Println(params.Values["files[1]"])
// fmt.Println(params.Values["Title"])
for key, _ := range params.Values {// Title, Content, Files
// fmt.Println(params.Values["files[1]"])
// fmt.Println(params.Values["Title"])
for key, _ := range params.Values { // Title, Content, Files
// 这里, 如果没有点, 默认就是a.
// life
// fmt.Println("key:" + key); // files[0][LocalFileId]
// fmt.Println("name:" + name); // files[0][LocalFileId]
// fmt.Println("key:" + key); // files[0][LocalFileId]
// fmt.Println("name:" + name); // files[0][LocalFileId]
var suffix string
var noPrefix = false
if nameIsSlice && strings.HasPrefix(key, name) {
suffix = key[len(name)+1:len(key)-1] // files[0][LocalFileId] 去掉 => LocalFileId
} else if !strings.HasPrefix(key, name + ".") {
suffix = key[len(name)+1 : len(key)-1] // files[0][LocalFileId] 去掉 => LocalFileId
} else if !strings.HasPrefix(key, name+".") {
noPrefix = true
suffix = key
// continue
@@ -91,18 +92,18 @@ files[0][HasBody]:[true]]
// Strip off the prefix. e.g. foo.bar.baz => bar.baz
suffix = key[len(name)+1:]
}
// fmt.Println(suffix);
// fmt.Println(suffix);
fieldName := nextKey(suffix) // e.g. bar => "bar", bar.baz => "bar", bar[0] => "bar"
// fmt.Println(fieldName);
// fmt.Println(fieldName);
fieldLen := len(fieldName)
if _, ok := fieldValues[fieldName]; !ok {
// Time to bind this field. Get it and make sure we can set it.
fieldName = strings.Title(fieldName) // 传过来title, 但struct是Title
// fmt.Println("xx: " + fieldName)
// fmt.Println("xx: " + fieldName)
fieldValue := result.FieldByName(fieldName)
// fmt.Println(fieldValue)
// fmt.Println(fieldValue)
if !fieldValue.IsValid() {
continue
}
@@ -111,14 +112,14 @@ files[0][HasBody]:[true]]
}
var boundVal reflect.Value
// 没有name前缀
if(noPrefix) {
if noPrefix {
// life
// fmt.Println("<<")
// fmt.Println(strings.Title(key[:fieldLen]));
// fmt.Println("<<")
// fmt.Println(strings.Title(key[:fieldLen]));
boundVal = revel.Bind(params, key[:fieldLen], fieldValue.Type())
} else {
// fmt.Println("final")
// fmt.Println(key[:len(name)+1+fieldLen]) // files[0][HasBody
// fmt.Println("final")
// fmt.Println(key[:len(name)+1+fieldLen]) // files[0][HasBody
if nameIsSlice {
fieldLen += 1
}
+5 -7
View File
@@ -6,8 +6,8 @@ import (
"html/template"
"io/ioutil"
// "os"
"fmt"
"bytes"
"fmt"
"io"
"net/http"
"regexp"
@@ -139,7 +139,7 @@ func Init() {
fileBytes, _ := ioutil.ReadFile(revel.ViewsPath + "/Blog/" + path)
fileStr := string(fileBytes)
path := "blog/" + path
// path := path
// path := path
BlogTplObject.PathContent[path] = fileStr
BlogTplObject.Template.New(path).Parse(fileStr) // 以blog为根
}
@@ -157,7 +157,7 @@ func RenderTemplate(name string, args map[string]interface{}, basePath string, i
// 都不会为空的
if basePath == "" {
path := "blog/" + name
// path := name
// path := name
t := BlogTplObject.Template.Lookup(path)
r = &RenderTemplateResult{
Template: t,
@@ -181,7 +181,7 @@ func RenderTemplate(name string, args map[string]interface{}, basePath string, i
files := ListDir(basePath)
for _, t := range files {
if !strings.Contains(t, ".html") {
continue;
continue
}
fileBytes, err := ioutil.ReadFile(basePath + "/" + t)
if err != nil {
@@ -211,11 +211,9 @@ func RenderTemplate(name string, args map[string]interface{}, basePath string, i
return r
}
////////////////////
//
type ErrorResult struct {
RenderArgs map[string]interface{}
Error error
@@ -240,7 +238,7 @@ func (r ErrorResult) Apply(req *revel.Request, resp *revel.Response) {
var err error
templatePath := fmt.Sprintf("errors/%d.%s", status, format)
err = nil
// tmpl, err := revel.MainTemplateLoader.Template("index.html") // 这里找到错误页面主题
// tmpl, err := revel.MainTemplateLoader.Template("index.html") // 这里找到错误页面主题
// This func shows a plaintext error message, in case the template rendering
// doesn't work.
+5 -3
View File
@@ -1,15 +1,16 @@
package captcha
import (
crand "crypto/rand"
"image"
"image/color"
"image/png"
"io"
"math/rand"
crand "crypto/rand"
"time"
"strconv"
"time"
)
const (
stdWidth = 100
stdHeight = 40
@@ -132,7 +133,8 @@ type Image struct {
height int //a digit height
dotsize int
}
func init(){
func init() {
rand.Seed(int64(time.Second))
}
-1
View File
@@ -7,4 +7,3 @@ import (
func Html2Image(userInfo info.User, note info.Note, content, toPath string) bool {
return true
}
+18 -17
View File
@@ -1,12 +1,13 @@
package netutil
import (
"strings"
"os"
// "path/filepath"
"strings"
// "path/filepath"
. "github.com/leanote/leanote/app/lea"
"io/ioutil"
"net"
"net/http"
"io/ioutil"
. "github.com/leanote/leanote/app/lea"
)
// net的util
@@ -16,11 +17,11 @@ import (
// 返回文件的完整目录
func WriteUrl(url string, toPath string) (length int64, newFilename, path string, ok bool) {
if url == "" {
return;
return
}
content, err := GetContent(url)
if err != nil {
return;
return
}
length = int64(len(content))
@@ -31,7 +32,7 @@ func WriteUrl(url string, toPath string) (length int64, newFilename, path string
if toPath == "" {
toPath = "/tmp"
}
// dir := filepath.Dir(toPath)
// dir := filepath.Dir(toPath)
newFilename = NewGuid() + ext
fullPath := toPath + "/" + newFilename
@@ -53,7 +54,7 @@ func GetContent(url string) (content []byte, err error) {
var resp *http.Response
resp, err = http.Get(url)
Log(err)
if(resp != nil && resp.Body != nil) {
if resp != nil && resp.Body != nil {
defer resp.Body.Close()
} else {
}
@@ -63,33 +64,33 @@ func GetContent(url string) (content []byte, err error) {
var buf []byte
buf, err = ioutil.ReadAll(resp.Body)
if(err != nil) {
if err != nil {
Log(err)
return
}
content = buf;
content = buf
err = nil
return
}
// 将url ?, #后面的字符串去掉
func trimQueryParams(url string) string {
pos := strings.Index(url, "?");
pos := strings.Index(url, "?")
if pos != -1 {
url = Substr(url, 0, pos);
url = Substr(url, 0, pos)
}
pos = strings.Index(url, "#");
pos = strings.Index(url, "#")
if pos != -1 {
url = Substr(url, 0, pos);
url = Substr(url, 0, pos)
}
pos = strings.Index(url, "!");
pos = strings.Index(url, "!")
if pos != -1 {
url = Substr(url, 0, pos);
url = Substr(url, 0, pos)
}
return url;
return url
}
// 通过domain得到ip
+4 -4
View File
@@ -1,9 +1,9 @@
package route
import (
"github.com/revel/revel"
"github.com/leanote/leanote/app/db"
// . "github.com/leanote/leanote/app/lea"
"github.com/revel/revel"
// . "github.com/leanote/leanote/app/lea"
"net/url"
"strings"
)
@@ -11,6 +11,7 @@ import (
// overwite revel RouterFilter
// /api/user/Info => ApiUser.Info()
var staticPrefix = []string{"/public", "/favicon.ico", "/css", "/js", "/images", "/tinymce", "/upload", "/fonts"}
func RouterFilter(c *revel.Controller, fc []revel.Filter) {
// 补全controller部分
path := c.Request.Request.URL.Path
@@ -49,7 +50,7 @@ func RouterFilter(c *revel.Controller, fc []revel.Filter) {
// api设置
// leanote.com/api/user/get => ApiUser::Get
//* /api/login ApiAuth.Login, 这里的设置, 其实已经转成了ApiAuth了
if strings.HasPrefix(path, "/api") && !strings.HasPrefix(route.ControllerName, "Api"){
if strings.HasPrefix(path, "/api") && !strings.HasPrefix(route.ControllerName, "Api") {
route.ControllerName = "Api" + route.ControllerName
} else if strings.HasPrefix(path, "/member") && !strings.HasPrefix(route.ControllerName, "Member") {
// member设置
@@ -84,4 +85,3 @@ func RouterFilter(c *revel.Controller, fc []revel.Filter) {
fc[0](c, fc[1:])
}
+17 -17
View File
@@ -2,11 +2,11 @@ package main
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"io/ioutil"
"strings"
// "time"
// "time"
)
/*
@@ -54,13 +54,13 @@ func compressJs(filename string) {
to := base + filename + "-min.js"
cmd := exec.Command(cmdPath, source, "-o", to)
_, err := cmd.CombinedOutput()
fmt.Println(source);
fmt.Println(source)
cmdError(err)
}
func combineJs() {
// 生成一个总文件
cmd := exec.Command("rm", base + "js/all.js")
cmd := exec.Command("rm", base+"js/all.js")
_, err := cmd.CombinedOutput()
cmdError(err)
@@ -70,10 +70,10 @@ func combineJs() {
compressJs(js)
// 每个压缩后的文件放入之
cmd2 := exec.Command("/bin/sh", "-c", "cat " + to + " >> " + base + "js/all.js")
cmd2 := exec.Command("/bin/sh", "-c", "cat "+to+" >> "+base+"js/all.js")
_, err := cmd2.CombinedOutput()
cmdError(err)
cmd2 = exec.Command("/bin/sh", "-c", "cat \n >> " + base + "js/all.js")
cmd2 = exec.Command("/bin/sh", "-c", "cat \n >> "+base+"js/all.js")
_, err = cmd2.CombinedOutput()
cmdError(err)
}
@@ -108,28 +108,28 @@ func dev() {
content = strings.Replace(content, key, value, -1)
}
// var time = time.Now().Unix() % 1000
// var time = time.Now().Unix() % 1000
// content = strings.Replace(content, "-min.js", fmt.Sprintf("-min.js?r=%d", time), -1)
// content = strings.Replace(content, "default{{end}}.css", fmt.Sprintf("default{{end}}.css?r=%d", time), 1)
// content = strings.Replace(content, "writting-overwrite.css", fmt.Sprintf("writting-overwrite.css?r=%d", time), 1)
// content = strings.Replace(content, "-min.js", fmt.Sprintf("-min.js?r=%d", time), -1)
// content = strings.Replace(content, "default{{end}}.css", fmt.Sprintf("default{{end}}.css?r=%d", time), 1)
// content = strings.Replace(content, "writting-overwrite.css", fmt.Sprintf("writting-overwrite.css?r=%d", time), 1)
ioutil.WriteFile(target, []byte(content), os.ModeAppend)
}
// 压缩js成一块
func tinymce() {
// cmdStr := "node_modules/jake/bin/cli.js minify bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]"
// cmd := exec.Command("/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master/node_modules/jake/bin/cli.js", "minify", "bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]")
cmd := exec.Command("/bin/sh", "-c", "grunt minify");
// cmdStr := "node_modules/jake/bin/cli.js minify bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]"
// cmd := exec.Command("/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master/node_modules/jake/bin/cli.js", "minify", "bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]")
cmd := exec.Command("/bin/sh", "-c", "grunt minify")
cmd.Dir = base + "/tinymce_4.1.9"
fmt.Println("正在build tinymce");
fmt.Println("正在build tinymce")
// 必须要先删除
cmd2 := exec.Command("/bin/sh", "-c", "rm " + cmd.Dir + "/js/tinymce/tinymce.dev.js")
cmd2 := exec.Command("/bin/sh", "-c", "rm "+cmd.Dir+"/js/tinymce/tinymce.dev.js")
cmd2.CombinedOutput()
cmd2 = exec.Command("/bin/sh", "-c", "rm " + cmd.Dir + "/js/tinymce/tinymce.jquery.dev.js")
cmd2 = exec.Command("/bin/sh", "-c", "rm "+cmd.Dir+"/js/tinymce/tinymce.jquery.dev.js")
c, _ := cmd2.CombinedOutput()
fmt.Println(string(c))
@@ -141,7 +141,7 @@ func main() {
// 压缩tinymce
// tinymce()
dev();
dev()
// 其它零散的需要压缩的js
otherJss := []string{"js/main", "js/app/page", "js/contextmenu/jquery.contextmenu",
+1 -1
View File
@@ -2,7 +2,7 @@ package service
import (
"github.com/leanote/leanote/app/info"
// . "github.com/leanote/leanote/app/lea"
// . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/db"
"gopkg.in/mgo.v2/bson"
"time"
+1 -1
View File
@@ -123,7 +123,7 @@ func (this *AttachService) DeleteAttach(attachId, userId string) (bool, string)
attach := info.Attach{}
db.Get(db.Attachs, attachId, &attach)
if(attach.AttachId != "") {
if attach.AttachId != "" {
// 判断是否有权限为笔记添加附件
if !shareService.HasUpdateNotePerm(attach.NoteId.Hex(), userId) {
return false, "No Perm"
+42 -33
View File
@@ -1,17 +1,17 @@
package service
import (
"fmt"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/db"
"gopkg.in/mgo.v2/bson"
"github.com/revel/revel"
"time"
"gopkg.in/mgo.v2/bson"
"os"
"os/exec"
"fmt"
"strings"
"strconv"
"strings"
"time"
)
// 配置服务
@@ -27,6 +27,7 @@ type ConfigService struct {
GlobalMapConfigs map[string]map[string]string
GlobalArrMapConfigs map[string][]map[string]string
}
// appStart时 将全局的配置从数据库中得到作为全局
func (this *ConfigService) InitGlobalConfigs() bool {
this.GlobalAllConfigs = map[string]interface{}{}
@@ -70,7 +71,7 @@ func (this *ConfigService) InitGlobalConfigs() bool {
}
func (this *ConfigService) GetSiteUrl() string {
return this.siteUrl;
return this.siteUrl
}
func (this *ConfigService) GetAdminUsername() string {
return this.adminUsername
@@ -92,7 +93,7 @@ func (this *ConfigService) updateGlobalConfig(userId, key string, value interfac
IsArrMap: isArrMap,
UpdatedTime: time.Now(),
}
if(isArr) {
if isArr {
v, _ := value.([]string)
config.ValueArr = v
this.GlobalArrayConfigs[key] = v
@@ -113,7 +114,7 @@ func (this *ConfigService) updateGlobalConfig(userId, key string, value interfac
} else {
i := bson.M{"UpdatedTime": time.Now()}
this.GlobalAllConfigs[key] = value
if(isArr) {
if isArr {
v, _ := value.([]string)
i["ValueArr"] = v
this.GlobalArrayConfigs[key] = v
@@ -177,6 +178,7 @@ func (this *ConfigService) GetGlobalArrMapConfig(key string) []map[string]string
func (this *ConfigService) IsOpenRegister() bool {
return this.GetGlobalStringConfig("openRegister") != ""
}
//-------
// 修改共享笔记的配置
func (this *ConfigService) UpdateShareNoteConfig(registerSharedUserId string,
@@ -188,7 +190,7 @@ func (this *ConfigService) UpdateShareNoteConfig(registerSharedUserId string,
ok = false
msg = fmt.Sprint(err)
}
}();
}()
// 用户是否存在?
if registerSharedUserId == "" {
@@ -222,7 +224,7 @@ func (this *ConfigService) UpdateShareNoteConfig(registerSharedUserId string,
msg = "The user has no such notebook: " + notebookId
return
} else {
perm := "0";
perm := "0"
if registerSharedNotebookPerms[i] == 1 {
perm = "1"
}
@@ -247,7 +249,7 @@ func (this *ConfigService) UpdateShareNoteConfig(registerSharedUserId string,
msg = "The user has no such note: " + noteId
return
} else {
perm := "0";
perm := "0"
if registerSharedNotePerms[i] == 1 {
perm = "1"
}
@@ -298,7 +300,7 @@ func (this *ConfigService) getBackupDirname() string {
}
func (this *ConfigService) Backup(remark string) (ok bool, msg string) {
binPath := configService.GetGlobalStringConfig("mongodumpPath")
config := revel.Config;
config := revel.Config
dbname, _ := config.String("db.dbname")
host, _ := revel.Config.String("db.host")
port, _ := revel.Config.String("db.port")
@@ -320,7 +322,7 @@ func (this *ConfigService) Backup(remark string) (ok bool, msg string) {
}
cmd := exec.Command("/bin/sh", "-c", binPath)
Log(binPath);
Log(binPath)
b, err := cmd.Output()
if err != nil {
msg = fmt.Sprintf("%v", err)
@@ -332,6 +334,7 @@ func (this *ConfigService) Backup(remark string) (ok bool, msg string) {
ok = configService.AddBackup(dir, remark)
return ok, msg
}
// 还原
func (this *ConfigService) Restore(createdTime string) (ok bool, msg string) {
backups := this.GetGlobalArrMapConfig("backups") // [{}, {}]
@@ -339,7 +342,7 @@ func (this *ConfigService) Restore(createdTime string) (ok bool, msg string) {
var backup map[string]string
for i, backup = range backups {
if backup["createdTime"] == createdTime {
break;
break
}
}
if i == len(backups) {
@@ -347,14 +350,14 @@ func (this *ConfigService) Restore(createdTime string) (ok bool, msg string) {
}
// 先备份当前
ok, msg = this.Backup("Auto backup when restore from " + backup["createdTime"] )
ok, msg = this.Backup("Auto backup when restore from " + backup["createdTime"])
if !ok {
return
}
// mongorestore -h localhost -d leanote --directoryperdb /home/user1/gopackage/src/github.com/leanote/leanote/mongodb_backup/leanote_install_data/
binPath := configService.GetGlobalStringConfig("mongorestorePath")
config := revel.Config;
config := revel.Config
dbname, _ := config.String("db.dbname")
host, _ := revel.Config.String("db.host")
port, _ := revel.Config.String("db.port")
@@ -375,7 +378,7 @@ func (this *ConfigService) Restore(createdTime string) (ok bool, msg string) {
binPath += " " + path
cmd := exec.Command("/bin/sh", "-c", binPath)
Log(binPath);
Log(binPath)
b, err := cmd.Output()
if err != nil {
msg = fmt.Sprintf("%v", err)
@@ -393,7 +396,7 @@ func (this *ConfigService) DeleteBackup(createdTime string) (bool, string) {
var backup map[string]string
for i, backup = range backups {
if backup["createdTime"] == createdTime {
break;
break
}
}
if i == len(backups) {
@@ -419,13 +422,13 @@ func (this *ConfigService) UpdateBackupRemark(createdTime, remark string) (bool,
var backup map[string]string
for i, backup = range backups {
if backup["createdTime"] == createdTime {
break;
break
}
}
if i == len(backups) {
return false, "Backup Not Found"
}
backup["remark"] = remark;
backup["remark"] = remark
ok := this.UpdateGlobalArrMapConfig(this.adminUserId, "backups", backups)
return ok, ""
@@ -438,7 +441,7 @@ func (this *ConfigService) GetBackup(createdTime string) (map[string]string, boo
var backup map[string]string
for i, backup = range backups {
if backup["createdTime"] == createdTime {
break;
break
}
}
if i == len(backups) {
@@ -487,49 +490,53 @@ func init() {
}
func (this *ConfigService) GetSchema() string {
return schema;
return schema
}
// 默认
func (this *ConfigService) GetDefaultDomain() string {
return defaultDomain
}
// 包含http://
func (this *ConfigService) GetDefaultUrl() string {
return schema + defaultDomain
}
// note
func (this *ConfigService) GetNoteDomain() string {
subDomain := this.GetGlobalStringConfig("noteSubDomain");
subDomain := this.GetGlobalStringConfig("noteSubDomain")
if subDomain != "" {
return subDomain + port
}
return this.GetDefaultDomain() + "/note"
}
func (this *ConfigService) GetNoteUrl() string {
return schema + this.GetNoteDomain();
return schema + this.GetNoteDomain()
}
// blog
func (this *ConfigService) GetBlogDomain() string {
subDomain := this.GetGlobalStringConfig("blogSubDomain");
subDomain := this.GetGlobalStringConfig("blogSubDomain")
if subDomain != "" {
return subDomain + port
}
return this.GetDefaultDomain() + "/blog"
}
func (this *ConfigService) GetBlogUrl() string {
return schema + this.GetBlogDomain();
return schema + this.GetBlogDomain()
}
// lea
func (this *ConfigService) GetLeaDomain() string {
subDomain := this.GetGlobalStringConfig("leaSubDomain");
subDomain := this.GetGlobalStringConfig("leaSubDomain")
if subDomain != "" {
return subDomain + port
}
return this.GetDefaultDomain() + "/lea"
}
func (this *ConfigService) GetLeaUrl() string {
return schema + this.GetLeaDomain();
return schema + this.GetLeaDomain()
}
func (this *ConfigService) GetUserUrl(domain string) string {
@@ -543,6 +550,7 @@ func (this *ConfigService) GetUserSubUrl(subDomain string) string {
func (this *ConfigService) AllowCustomDomain() bool {
return configService.GetGlobalStringConfig("allowCustomDomain") != ""
}
// 是否是好的自定义域名
func (this *ConfigService) IsGoodCustomDomain(domain string) bool {
blacks := this.GetGlobalArrayConfig("blackCustomDomains")
@@ -567,20 +575,21 @@ func (this *ConfigService) IsGoodSubDomain(domain string) bool {
// 上传大小
func (this *ConfigService) GetUploadSize(key string) float64 {
f, _ := strconv.ParseFloat(this.GetGlobalStringConfig(key), 64)
return f;
return f
}
func (this *ConfigService) GetUploadSizeLimit() map[string]float64 {
return map[string]float64{
"uploadImageSize": this.GetUploadSize("uploadImageSize"),
"uploadBlogLogoSize":this.GetUploadSize("uploadBlogLogoSize"),
"uploadAttachSize":this.GetUploadSize("uploadAttachSize"),
"uploadAvatarSize":this.GetUploadSize("uploadAvatarSize"),
"uploadBlogLogoSize": this.GetUploadSize("uploadBlogLogoSize"),
"uploadAttachSize": this.GetUploadSize("uploadAttachSize"),
"uploadAvatarSize": this.GetUploadSize("uploadAvatarSize"),
}
}
// 为用户得到全局的配置
// NoteController调用
func (this *ConfigService) GetGlobalConfigForUser() map[string]interface{} {
uploadSizeConfigs := this.GetUploadSizeLimit();
uploadSizeConfigs := this.GetUploadSizeLimit()
config := map[string]interface{}{}
for k, v := range uploadSizeConfigs {
config[k] = v
+46 -46
View File
@@ -1,17 +1,17 @@
package service
import (
"github.com/leanote/leanote/app/info"
"bytes"
"fmt"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"time"
"strings"
"html/template"
"net/smtp"
"strconv"
"fmt"
"html/template"
"bytes"
"strings"
"time"
)
// 发送邮件
@@ -20,7 +20,7 @@ type EmailService struct {
tpls map[string]*template.Template
}
func NewEmailService() (*EmailService) {
func NewEmailService() *EmailService {
return &EmailService{tpls: map[string]*template.Template{}}
}
@@ -50,12 +50,12 @@ func (this *EmailService) SendEmail(to, subject, body string) (ok bool, e string
mailtype := "html"
if mailtype == "html" {
content_type = "Content-Type: text/"+ mailtype + "; charset=UTF-8"
} else{
content_type = "Content-Type: text/" + mailtype + "; charset=UTF-8"
} else {
content_type = "Content-Type: text/plain" + "; charset=UTF-8"
}
msg := []byte("To: " + to + "\r\nFrom: " + username + "<"+ username +">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
msg := []byte("To: " + to + "\r\nFrom: " + username + "<" + username + ">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
send_to := strings.Split(to, ";")
err := smtp.SendMail(host+":"+emailPort, auth, username, send_to, msg)
@@ -75,10 +75,10 @@ func (this *EmailService) RegisterSendActiveEmail(userInfo info.User, email stri
return false
}
subject := configService.GetGlobalStringConfig("emailTemplateRegisterSubject");
tpl := configService.GetGlobalStringConfig("emailTemplateRegister");
subject := configService.GetGlobalStringConfig("emailTemplateRegisterSubject")
tpl := configService.GetGlobalStringConfig("emailTemplateRegister")
if(tpl == "") {
if tpl == "" {
return false
}
@@ -118,8 +118,8 @@ func (this *EmailService) UpdateEmailSendActiveEmail(userInfo info.User, email s
return
}
subject := configService.GetGlobalStringConfig("emailTemplateUpdateEmailSubject");
tpl := configService.GetGlobalStringConfig("emailTemplateUpdateEmail");
subject := configService.GetGlobalStringConfig("emailTemplateUpdateEmailSubject")
tpl := configService.GetGlobalStringConfig("emailTemplateUpdateEmail")
// 发送邮件
tokenUrl := configService.GetSiteUrl() + "/user/updateEmail?token=" + token
@@ -144,8 +144,8 @@ func (this *EmailService) UpdateEmailSendActiveEmail(userInfo info.User, email s
}
func (this *EmailService) FindPwdSendEmail(token, email string) (ok bool, msg string) {
subject := configService.GetGlobalStringConfig("emailTemplateFindPasswordSubject");
tpl := configService.GetGlobalStringConfig("emailTemplateFindPassword");
subject := configService.GetGlobalStringConfig("emailTemplateFindPasswordSubject")
tpl := configService.GetGlobalStringConfig("emailTemplateFindPassword")
// 发送邮件
tokenUrl := configService.GetSiteUrl() + "/findPassword/" + token
@@ -164,8 +164,8 @@ func (this *EmailService) FindPwdSendEmail(token, email string) (ok bool, msg st
// 发送邀请链接
func (this *EmailService) SendInviteEmail(userInfo info.User, email, content string) bool {
subject := configService.GetGlobalStringConfig("emailTemplateInviteSubject");
tpl := configService.GetGlobalStringConfig("emailTemplateInvite");
subject := configService.GetGlobalStringConfig("emailTemplateInviteSubject")
tpl := configService.GetGlobalStringConfig("emailTemplateInvite")
token2Value := map[string]interface{}{"siteUrl": configService.GetSiteUrl(),
"registerUrl": configService.GetSiteUrl() + "/register?from=" + userInfo.Username,
@@ -187,8 +187,8 @@ func (this *EmailService) SendInviteEmail(userInfo info.User, email, content str
// 发送评论
func (this *EmailService) SendCommentEmail(note info.Note, comment info.BlogComment, userId, content string) bool {
subject := configService.GetGlobalStringConfig("emailTemplateCommentSubject");
tpl := configService.GetGlobalStringConfig("emailTemplateComment");
subject := configService.GetGlobalStringConfig("emailTemplateCommentSubject")
tpl := configService.GetGlobalStringConfig("emailTemplateComment")
// title := "评论提醒"
@@ -257,17 +257,16 @@ func (this *EmailService) SendCommentEmail(note info.Note, comment info.BlogComm
return ok
}
// 验证模板是否正确
func (this *EmailService) ValidTpl(str string) (ok bool, msg string){
func (this *EmailService) ValidTpl(str string) (ok bool, msg string) {
defer func() {
if err := recover(); err != nil {
ok = false
msg = fmt.Sprint(err)
}
}();
header := configService.GetGlobalStringConfig("emailTemplateHeader");
footer := configService.GetGlobalStringConfig("emailTemplateFooter");
}()
header := configService.GetGlobalStringConfig("emailTemplateHeader")
footer := configService.GetGlobalStringConfig("emailTemplateFooter")
str = strings.Replace(str, "{{header}}", header, -1)
str = strings.Replace(str, "{{footer}}", footer, -1)
_, err := template.New("tpl name").Parse(str)
@@ -280,13 +279,13 @@ func (this *EmailService) ValidTpl(str string) (ok bool, msg string){
}
// ok, msg, subject, tpl
func (this *EmailService) getTpl(str string) (ok bool, msg string, tpl *template.Template){
func (this *EmailService) getTpl(str string) (ok bool, msg string, tpl *template.Template) {
defer func() {
if err := recover(); err != nil {
ok = false
msg = fmt.Sprint(err)
}
}();
}()
var err error
var has bool
@@ -312,16 +311,16 @@ func (this *EmailService) renderEmail(subject, body string, values map[string]in
ok = false
msg = fmt.Sprint(err) // 这里的err其实就是panic传入的内容,
}
}();
}()
var tpl *template.Template
values["siteUrl"] = configService.GetSiteUrl();
values["siteUrl"] = configService.GetSiteUrl()
// subject
if subject != "" {
ok, msg, tpl = this.getTpl(subject)
if(!ok) {
if !ok {
return
}
var buffer bytes.Buffer
@@ -336,13 +335,13 @@ func (this *EmailService) renderEmail(subject, body string, values map[string]in
}
// content
header := configService.GetGlobalStringConfig("emailTemplateHeader");
footer := configService.GetGlobalStringConfig("emailTemplateFooter");
header := configService.GetGlobalStringConfig("emailTemplateHeader")
footer := configService.GetGlobalStringConfig("emailTemplateFooter")
body = strings.Replace(body, "{{header}}", header, -1)
body = strings.Replace(body, "{{footer}}", footer, -1)
values["subject"] = o
ok, msg, tpl = this.getTpl(body)
if(!ok) {
if !ok {
return
}
var buffer2 bytes.Buffer
@@ -359,14 +358,14 @@ func (this *EmailService) renderEmail(subject, body string, values map[string]in
// 发送email给用户
// 需要记录
func (this *EmailService) SendEmailToUsers(users []info.User, subject, body string) (ok bool, msg string) {
if(users == nil || len(users) == 0) {
if users == nil || len(users) == 0 {
msg = "no users"
return
}
// 尝试renderHtml
ok, msg, _, _ = this.renderEmail(subject, body, map[string]interface{}{})
if(!ok) {
if !ok {
Log(msg)
return
}
@@ -381,8 +380,8 @@ func (this *EmailService) SendEmailToUsers(users []info.User, subject, body stri
ok2, msg2, subject2, body2 := this.renderEmail(subject, body, m)
ok = ok2
msg = msg2
if(ok2) {
sendOk, msg := this.SendEmail(user.Email, subject2, body2);
if ok2 {
sendOk, msg := this.SendEmail(user.Email, subject2, body2)
this.AddEmailLog(user.Email, subject, body, sendOk, msg) // 把模板记录下
// 记录到Email Log
if sendOk {
@@ -400,19 +399,19 @@ func (this *EmailService) SendEmailToUsers(users []info.User, subject, body stri
}
func (this *EmailService) SendEmailToEmails(emails []string, subject, body string) (ok bool, msg string) {
if(emails == nil || len(emails) == 0) {
if emails == nil || len(emails) == 0 {
msg = "no emails"
return
}
// 尝试renderHtml
ok, msg, _, _ = this.renderEmail(subject, body, map[string]interface{}{})
if(!ok) {
if !ok {
Log(msg)
return
}
// go func() {
// go func() {
for _, email := range emails {
if email == "" {
continue
@@ -420,8 +419,8 @@ func (this *EmailService) SendEmailToEmails(emails []string, subject, body strin
m := map[string]interface{}{}
m["email"] = email
ok, msg, subject, body = this.renderEmail(subject, body, m)
if(ok) {
sendOk, msg := this.SendEmail(email, subject, body);
if ok {
sendOk, msg := this.SendEmail(email, subject, body)
this.AddEmailLog(email, subject, body, sendOk, msg)
// 记录到Email Log
if sendOk {
@@ -430,10 +429,10 @@ func (this *EmailService) SendEmailToEmails(emails []string, subject, body strin
Log("no " + email)
}
} else {
Log(msg);
Log(msg)
}
}
// }()
// }()
return
}
@@ -443,6 +442,7 @@ func (this *EmailService) AddEmailLog(email, subject, body string, ok bool, msg
log := info.EmailLog{LogId: bson.NewObjectId(), Email: email, Subject: subject, Body: body, Ok: ok, Msg: msg, CreatedTime: time.Now()}
db.Insert(db.EmailLogs, log)
}
// 展示邮件日志
func (this *EmailService) DeleteEmails(ids []string) bool {
@@ -461,7 +461,7 @@ func (this *EmailService) ListEmailLogs(pageNumber, pageSize int, sortField stri
if email != "" {
query["Email"] = bson.M{"$regex": bson.RegEx{".*?" + email + ".*", "i"}}
}
q := db.EmailLogs.Find(query);
q := db.EmailLogs.Find(query)
// 总记录数
count, _ := q.Count()
// 列表
+9 -9
View File
@@ -43,7 +43,7 @@ func (this *FileService) ListImagesWithPage(userId, albumId, key string, pageNum
q := bson.M{"UserId": bson.ObjectIdHex(userId), "Type": ""} // life
if albumId != "" {
q["AlbumId"] = bson.ObjectIdHex(albumId);
q["AlbumId"] = bson.ObjectIdHex(albumId)
} else {
q["IsDefaultAlbum"] = true
}
@@ -51,9 +51,9 @@ func (this *FileService) ListImagesWithPage(userId, albumId, key string, pageNum
q["Title"] = bson.M{"$regex": bson.RegEx{".*?" + key + ".*", "i"}}
}
// LogJ(q)
// LogJ(q)
count := db.Count(db.Files, q);
count := db.Count(db.Files, q)
db.Files.
Find(q).
@@ -92,7 +92,7 @@ func (this *FileService) DeleteImage(userId, fileId string) (bool, string) {
file := info.File{}
db.GetByIdAndUserId(db.Files, fileId, userId, &file)
if(file.FileId != "") {
if file.FileId != "" {
if db.DeleteByIdAndUserId(db.Files, fileId, userId) {
// delete image
// TODO
@@ -203,7 +203,7 @@ func (this *FileService) GetFile(userId, fileId string) string {
for _, noteId := range noteIds {
note := noteService.GetNoteById(noteId.Hex())
if shareService.HasReadPerm(note.UserId.Hex(), userId, noteId.Hex()) {
return path;
return path
}
}
/*
@@ -248,7 +248,7 @@ func (this *FileService) CopyImage(userId, fileId, toUserId string) (bool, strin
file2 := info.File{}
db.GetByQ(db.Files, bson.M{"UserId": bson.ObjectIdHex(toUserId), "FromFileId": bson.ObjectIdHex(fileId)}, &file2)
if file2.FileId != "" {
return true, file2.FileId.Hex();
return true, file2.FileId.Hex()
}
// 复制之
@@ -270,7 +270,7 @@ func (this *FileService) CopyImage(userId, fileId, toUserId string) (bool, strin
return false, ""
}
_, err = CopyFile(revel.BasePath + "/" + file.Path, revel.BasePath + "/" + filePath)
_, err = CopyFile(revel.BasePath+"/"+file.Path, revel.BasePath+"/"+filePath)
if err != nil {
Log(err)
return false, ""
@@ -281,7 +281,7 @@ func (this *FileService) CopyImage(userId, fileId, toUserId string) (bool, strin
Path: filePath,
Size: file.Size,
FromFileId: file.FileId}
id := bson.NewObjectId();
id := bson.NewObjectId()
fileInfo.FileId = id
fileId = id.Hex()
Ok, _ := this.AddImage(fileInfo, "", toUserId, false)
@@ -296,7 +296,7 @@ func (this *FileService) CopyImage(userId, fileId, toUserId string) (bool, strin
func (this *FileService) IsMyFile(userId, fileId string) bool {
// 如果有问题会panic
if !bson.IsObjectIdHex(fileId) || !bson.IsObjectIdHex(userId) {
return false;
return false
}
return db.Has(db.Files, bson.M{"UserId": bson.ObjectIdHex(userId), "_id": bson.ObjectIdHex(fileId)})
}
+19 -17
View File
@@ -1,12 +1,12 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
// . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/info"
// . "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"time"
// "strings"
// "strings"
)
// 用户组, 用户组用户管理
@@ -16,7 +16,7 @@ type GroupService struct {
// 添加分组
func (this *GroupService) AddGroup(userId, title string) (bool, info.Group) {
group := info.Group {
group := info.Group{
GroupId: bson.NewObjectId(),
UserId: bson.ObjectIdHex(userId),
Title: title,
@@ -24,6 +24,7 @@ func (this *GroupService) AddGroup(userId, title string) (bool, info.Group) {
}
return db.Insert(db.Groups, group), group
}
// 删除分组
// 判断是否有好友
func (this *GroupService) DeleteGroup(userId, groupId string) (ok bool, msg string) {
@@ -38,8 +39,8 @@ func (this *GroupService) DeleteGroup(userId, groupId string) (ok bool, msg stri
// 删除分组后, 需要删除所有用户分享到该组的笔记本, 笔记
shareService.DeleteAllShareNotebookGroup(groupId);
shareService.DeleteAllShareNoteGroup(groupId);
shareService.DeleteAllShareNotebookGroup(groupId)
shareService.DeleteAllShareNoteGroup(groupId)
db.DeleteAll(db.GroupUsers, bson.M{"GroupId": bson.ObjectIdHex(groupId)})
return db.DeleteByIdAndUserId(db.Groups, groupId, userId), ""
@@ -53,14 +54,14 @@ func (this *GroupService) UpdateGroupTitle(userId, groupId, title string) (ok bo
}
// 得到用户的所有分组(包括下的所有用户)
func (this *GroupService) GetGroupsAndUsers(userId string) ([]info.Group) {
/*
func (this *GroupService) GetGroupsAndUsers(userId string) []info.Group {
/*
// 得到我的分组
groups := []info.Group{}
db.ListByQ(db.Groups, bson.M{"UserId": bson.ObjectIdHex(userId)}, &groups)
*/
*/
// 我的分组, 及我所属的分组
groups := this.GetGroupsContainOf(userId);
groups := this.GetGroupsContainOf(userId)
// 得到其下的用户
for i, group := range groups {
@@ -69,8 +70,9 @@ func (this *GroupService) GetGroupsAndUsers(userId string) ([]info.Group) {
}
return groups
}
// 仅仅得到所有分组
func (this *GroupService) GetGroups(userId string) ([]info.Group) {
func (this *GroupService) GetGroups(userId string) []info.Group {
// 得到分组s
groups := []info.Group{}
db.ListByQ(db.Groups, bson.M{"UserId": bson.ObjectIdHex(userId)}, &groups)
@@ -78,7 +80,7 @@ func (this *GroupService) GetGroups(userId string) ([]info.Group) {
}
// 得到我的和我所属组的ids
func (this *GroupService) GetMineAndBelongToGroupIds(userId string) ([]bson.ObjectId) {
func (this *GroupService) GetMineAndBelongToGroupIds(userId string) []bson.ObjectId {
// 所属组
groupIds := this.GetBelongToGroupIds(userId)
@@ -126,7 +128,7 @@ func (this *GroupService) GetGroupsContainOf(userId string) []info.Group {
}
// 得到分组, shareService用
func (this *GroupService) GetGroup(userId, groupId string) (info.Group) {
func (this *GroupService) GetGroup(userId, groupId string) info.Group {
// 得到分组s
group := info.Group{}
db.GetByIdAndUserId(db.Groups, groupId, userId, &group)
@@ -134,7 +136,7 @@ func (this *GroupService) GetGroup(userId, groupId string) (info.Group) {
}
// 得到某分组下的用户
func (this *GroupService) GetUsers(groupId string) ([]info.User) {
func (this *GroupService) GetUsers(groupId string) []info.User {
// 得到UserIds
groupUsers := []info.GroupUser{}
db.ListByQWithFields(db.GroupUsers, bson.M{"GroupId": bson.ObjectIdHex(groupId)}, []string{"UserId"}, &groupUsers)
@@ -150,7 +152,7 @@ func (this *GroupService) GetUsers(groupId string) ([]info.User) {
}
// 得到我所属的所有分组ids
func (this *GroupService) GetBelongToGroupIds(userId string) ([]bson.ObjectId) {
func (this *GroupService) GetBelongToGroupIds(userId string) []bson.ObjectId {
// 得到UserIds
groupUsers := []info.GroupUser{}
db.ListByQWithFields(db.GroupUsers, bson.M{"UserId": bson.ObjectIdHex(userId)}, []string{"GroupId"}, &groupUsers)
@@ -216,8 +218,8 @@ func (this *GroupService) DeleteUser(ownUserId, groupId, userId string) (ok bool
}
// 删除该用户分享到本组的笔记本, 笔记
shareService.DeleteShareNotebookGroupWhenDeleteGroupUser(userId, groupId);
shareService.DeleteShareNoteGroupWhenDeleteGroupUser(userId, groupId);
shareService.DeleteShareNotebookGroupWhenDeleteGroupUser(userId, groupId)
shareService.DeleteShareNoteGroupWhenDeleteGroupUser(userId, groupId)
return db.Delete(db.GroupUsers, bson.M{"GroupId": bson.ObjectIdHex(groupId), "UserId": bson.ObjectIdHex(userId)}), ""
}
+3 -3
View File
@@ -1,11 +1,11 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
// . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/info"
// . "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
// "time"
// "time"
)
// 历史记录
+5 -5
View File
@@ -1,19 +1,19 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"regexp"
// "time"
// "time"
)
type NoteImageService struct {
}
// 通过id, userId得到noteIds
func (this *NoteImageService) GetNoteIds(imageId string) ([]bson.ObjectId) {
func (this *NoteImageService) GetNoteIds(imageId string) []bson.ObjectId {
noteImages := []info.NoteImage{}
db.ListByQWithFields(db.NoteImages, bson.M{"ImageId": bson.ObjectIdHex(imageId)}, []string{"NoteId"}, &noteImages)
@@ -123,9 +123,9 @@ func (this *NoteImageService) CopyNoteImages(fromNoteId, fromUserId, newNoteId,
return "getImage?fileId=" + replaceFileId
}
return each
});
})
return content;
return content
}
//
+50 -45
View File
@@ -1,8 +1,8 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"time"
@@ -17,6 +17,7 @@ func (this *NoteService) GetNote(noteId, userId string) (note info.Note) {
db.GetByIdAndUserId(db.Notes, noteId, userId, &note)
return
}
// fileService调用
// 不能是已经删除了的, life bug, 客户端删除后, 竟然还能在web上打开
func (this *NoteService) GetNoteById(noteId string) (note info.Note) {
@@ -35,6 +36,7 @@ func (this *NoteService) GetNoteByIdAndUserId(noteId, userId string) (note info.
db.GetByQ(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId), "UserId": bson.ObjectIdHex(userId), "IsDeleted": false}, &note)
return
}
// 得到blog, blogService用
// 不要传userId, 因为是公开的
func (this *NoteService) GetBlogNote(noteId string) (note info.Note) {
@@ -43,6 +45,7 @@ func (this *NoteService) GetBlogNote(noteId string) (note info.Note) {
"IsBlog": true, "IsTrash": false, "IsDeleted": false}, &note)
return
}
// 通过id, userId得到noteContent
func (this *NoteService) GetNoteContent(noteContentId, userId string) (noteContent info.NoteContent) {
noteContent = info.NoteContent{}
@@ -64,7 +67,7 @@ func (this *NoteService) GetSyncNotes(userId string, afterUsn, maxEntry int) []i
q := db.Notes.Find(bson.M{
"UserId": bson.ObjectIdHex(userId),
"Usn": bson.M{"$gt": afterUsn},
});
})
q.Sort("Usn").Limit(maxEntry).All(&notes)
return this.ToApiNotes(notes)
@@ -75,7 +78,7 @@ func (this *NoteService) ToApiNotes(notes []info.Note) []info.ApiNote {
// 2, 得到所有图片, 附件信息
// 查images表, attachs表
if len(notes) > 0 {
noteIds := make([]bson.ObjectId, len(notes));
noteIds := make([]bson.ObjectId, len(notes))
for i, note := range notes {
noteIds[i] = note.NoteId
}
@@ -92,23 +95,22 @@ func (this *NoteService) ToApiNotes(notes []info.Note) []info.ApiNote {
return []info.ApiNote{}
}
// note与apiNote的转换
func (this *NoteService) ToApiNote(note *info.Note, files []info.NoteFile) info.ApiNote {
apiNote := info.ApiNote{
NoteId: note.NoteId.Hex(),
NotebookId: note.NotebookId.Hex(),
UserId : note.UserId.Hex(),
Title : note.Title,
Tags : note.Tags,
IsMarkdown : note.IsMarkdown,
IsBlog : note.IsBlog,
IsTrash : note.IsTrash,
IsDeleted : note.IsDeleted,
Usn : note.Usn,
CreatedTime : note.CreatedTime,
UpdatedTime : note.UpdatedTime,
PublicTime : note.PublicTime,
UserId: note.UserId.Hex(),
Title: note.Title,
Tags: note.Tags,
IsMarkdown: note.IsMarkdown,
IsBlog: note.IsBlog,
IsTrash: note.IsTrash,
IsDeleted: note.IsDeleted,
Usn: note.Usn,
CreatedTime: note.CreatedTime,
UpdatedTime: note.UpdatedTime,
PublicTime: note.PublicTime,
Files: files,
}
return apiNote
@@ -121,7 +123,7 @@ func (this *NoteService) ToApiNote(note *info.Note, files []info.NoteFile) info.
// 查images表, attachs表
// [待测]
func (this *NoteService) getFiles(noteIds []bson.ObjectId) map[string][]info.NoteFile {
noteImages := noteImageService.getImagesByNoteIds(noteIds);
noteImages := noteImageService.getImagesByNoteIds(noteIds)
noteAttachs := attachService.getAttachsByNoteIds(noteIds)
noteFilesMap := map[string][]info.NoteFile{}
@@ -135,7 +137,7 @@ func (this *NoteService) getFiles(noteIds []bson.ObjectId) map[string][]info.Not
noteFiles = append(noteFiles, info.NoteFile{
FileId: image.FileId.Hex(),
Type: image.Type,
});
})
}
}
@@ -147,7 +149,7 @@ func (this *NoteService) getFiles(noteIds []bson.ObjectId) map[string][]info.Not
Type: attach.Type,
Title: attach.Title,
IsAttach: true,
});
})
}
}
@@ -173,7 +175,7 @@ func (this *NoteService) ListNotes(userId, notebookId string,
query["NotebookId"] = bson.ObjectIdHex(notebookId)
}
q := db.Notes.Find(query);
q := db.Notes.Find(query)
// 总记录数
count, _ = q.Count()
@@ -201,6 +203,7 @@ func (this *NoteService) ListNotesByNoteIdsWithPageSort(noteIds []bson.ObjectId,
All(&notes)
return
}
// shareService调用
func (this *NoteService) ListNotesByNoteIds(noteIds []bson.ObjectId) (notes []info.Note) {
notes = []info.Note{}
@@ -210,6 +213,7 @@ func (this *NoteService) ListNotesByNoteIds(noteIds []bson.ObjectId) (notes []in
All(&notes)
return
}
// blog需要
func (this *NoteService) ListNoteContentsByNoteIds(noteIds []bson.ObjectId) (notes []info.NoteContent) {
notes = []info.NoteContent{}
@@ -219,6 +223,7 @@ func (this *NoteService) ListNoteContentsByNoteIds(noteIds []bson.ObjectId) (not
All(&notes)
return
}
// 只得到abstract, 不需要content
func (this *NoteService) ListNoteAbstractsByNoteIds(noteIds []bson.ObjectId) (notes []info.NoteContent) {
notes = []info.NoteContent{}
@@ -236,9 +241,9 @@ func (this *NoteService) ListNoteContentByNoteIds(noteIds []bson.ObjectId) (note
// [ok]
func (this *NoteService) AddNote(note info.Note, fromApi bool) info.Note {
if(note.NoteId.Hex() == "") {
noteId := bson.NewObjectId();
note.NoteId = noteId;
if note.NoteId.Hex() == "" {
noteId := bson.NewObjectId()
note.NoteId = noteId
}
note.CreatedTime = time.Now()
note.UpdatedTime = note.CreatedTime
@@ -254,9 +259,9 @@ func (this *NoteService) AddNote(note info.Note, fromApi bool) info.Note {
// 设为blog
note.IsBlog = notebookService.IsBlog(notebookId)
}
// if note.IsBlog {
// if note.IsBlog {
note.PublicTime = note.UpdatedTime
// }
// }
db.Insert(db.Notes, note)
@@ -279,7 +284,6 @@ func (this *NoteService) AddSharedNote(note info.Note, myUserId bson.ObjectId) i
return info.Note{}
}
// 添加笔记本内容
// [ok]
func (this *NoteService) AddNoteContent(noteContent info.NoteContent) info.NoteContent {
@@ -291,7 +295,7 @@ func (this *NoteService) AddNoteContent(noteContent info.NoteContent) info.NoteC
// 更新笔记图片
noteImageService.UpdateNoteImages(noteContent.UserId.Hex(), noteContent.NoteId.Hex(), "", noteContent.Content)
return noteContent;
return noteContent
}
// API, abstract, desc需要这里获取
@@ -348,10 +352,10 @@ func (this *NoteService) AddNoteAndContentForController(note info.Note, noteCont
Log("HAS AUTH -----------")
}
}
return this.AddNoteAndContent(note, noteContent, bson.ObjectIdHex(updatedUserId));
return this.AddNoteAndContent(note, noteContent, bson.ObjectIdHex(updatedUserId))
}
func (this *NoteService) AddNoteAndContent(note info.Note, noteContent info.NoteContent, myUserId bson.ObjectId) info.Note {
if(note.NoteId.Hex() == "") {
if note.NoteId.Hex() == "" {
noteId := bson.NewObjectId()
note.NoteId = noteId
}
@@ -368,7 +372,7 @@ func (this *NoteService) AddNoteAndContent(note info.Note, noteContent info.Note
}
func (this *NoteService) AddNoteAndContentApi(note info.Note, noteContent info.NoteContent, myUserId bson.ObjectId) info.Note {
if(note.NoteId.Hex() == "") {
if note.NoteId.Hex() == "" {
noteId := bson.NewObjectId()
note.NoteId = noteId
}
@@ -414,9 +418,9 @@ func (this *NoteService) UpdateNote(updatedUserId, noteId string, needUpdate bso
delete(needUpdate, "Desc")
}
needUpdate["UpdatedUserId"] = bson.ObjectIdHex(updatedUserId);
needUpdate["UpdatedTime"] = time.Now();
afterUsn := userService.IncrUsn(userId);
needUpdate["UpdatedUserId"] = bson.ObjectIdHex(updatedUserId)
needUpdate["UpdatedTime"] = time.Now()
afterUsn := userService.IncrUsn(userId)
needUpdate["Usn"] = afterUsn
// 添加tag2
@@ -430,7 +434,7 @@ func (this *NoteService) UpdateNote(updatedUserId, noteId string, needUpdate bso
if isBlog, ok := needUpdate["IsBlog"]; ok {
isBlog2 := isBlog.(bool)
if note.IsBlog != isBlog2 {
this.UpdateNoteContentIsBlog(noteId, userId, isBlog2);
this.UpdateNoteContentIsBlog(noteId, userId, isBlog2)
// 重新发布成博客
if !note.IsBlog {
@@ -589,7 +593,7 @@ func (this *NoteService) ToBlog(userId, noteId string, isBlog, isTop bool) bool
ok := db.UpdateByIdAndUserIdMap(db.Notes, noteId, userId, noteUpdate)
// 重新计算tags
go (func() {
this.UpdateNoteContentIsBlog(noteId, userId, isBlog);
this.UpdateNoteContentIsBlog(noteId, userId, isBlog)
blogService.ReCountBlogTags(userId)
})()
@@ -623,7 +627,7 @@ func (this *NoteService) MoveNote(noteId, notebookId, userId string) info.Note {
}
}
return this.GetNote(noteId, userId);
return this.GetNote(noteId, userId)
}
return info.Note{}
}
@@ -643,10 +647,11 @@ func (this *NoteService) updateToNotebookBlog(noteId, notebookId, userId string)
}
return false
}
// 判断是否是blog
func (this *NoteService) IsBlog(noteId string) bool {
note := info.Note{}
db.GetByQWithFields(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId)}, []string{"IsBlog"}, &note);
db.GetByQWithFields(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId)}, []string{"IsBlog"}, &note)
return note.IsBlog
}
@@ -660,11 +665,11 @@ func (this *NoteService) CopyNote(noteId, notebookId, userId string) info.Note {
noteContent := this.GetNoteContent(noteId, userId)
// 重新生成noteId
note.NoteId = bson.NewObjectId();
note.NoteId = bson.NewObjectId()
note.NotebookId = bson.ObjectIdHex(notebookId)
noteContent.NoteId = note.NoteId
note = this.AddNoteAndContent(note, noteContent, note.UserId);
note = this.AddNoteAndContent(note, noteContent, note.UserId)
// 更新blog状态
isBlog := this.updateToNotebookBlog(note.NoteId.Hex(), notebookId, userId)
@@ -693,7 +698,7 @@ func (this *NoteService) CopySharedNote(noteId, notebookId, fromUserId, myUserId
noteContent := this.GetNoteContent(noteId, fromUserId)
// 重新生成noteId
note.NoteId = bson.NewObjectId();
note.NoteId = bson.NewObjectId()
note.NotebookId = bson.ObjectIdHex(notebookId)
note.UserId = bson.ObjectIdHex(myUserId)
note.IsTop = false
@@ -712,7 +717,7 @@ func (this *NoteService) CopySharedNote(noteId, notebookId, fromUserId, myUserId
attachService.CopyAttachs(noteId, note.NoteId.Hex(), myUserId)
// 添加之
note = this.AddNoteAndContent(note, noteContent, note.UserId);
note = this.AddNoteAndContent(note, noteContent, note.UserId)
// 更新blog状态
isBlog := this.updateToNotebookBlog(note.NoteId.Hex(), notebookId, myUserId)
@@ -758,7 +763,7 @@ func (this *NoteService) SearchNote(key, userId string, pageNumber, pageSize int
if isBlog {
query["IsBlog"] = true
}
q := db.Notes.Find(query);
q := db.Notes.Find(query)
// 总记录数
count, _ = q.Count()
@@ -794,7 +799,7 @@ func (this *NoteService) searchNoteFromContent(notes []info.Note, userId, key st
Select(bson.M{"_id": true}).
All(&noteContents)
var lenContent = len(noteContents)
if(lenContent == 0) {
if lenContent == 0 {
return notes
}
@@ -823,7 +828,7 @@ func (this *NoteService) SearchNoteByTags(tags []string, userId string, pageNumb
"IsTrash": false,
"Tags": bson.M{"$all": tags}}
q := db.Notes.Find(query);
q := db.Notes.Find(query)
// 总记录数
count, _ = q.Count()
@@ -858,7 +863,7 @@ func (this *NoteService) CountNoteByTag(userId string, tag string) int {
return 0
}
query := bson.M{"UserId": bson.ObjectIdHex(userId),
// "IsTrash": false,
// "IsTrash": false,
"IsDeleted": false,
"Tags": bson.M{"$in": []string{tag}}}
return db.Count(db.Notes, query)
@@ -881,7 +886,7 @@ func (this *NoteService) UpdateNoteToDeleteTag(userId string, targetTag string)
if tag == targetTag {
tags = tags
tags = append(tags[:i], tags[i+1:]...)
break;
break
}
}
usn := userService.IncrUsn(userId)
+23 -22
View File
@@ -1,15 +1,15 @@
package service
import (
// "fmt"
"gopkg.in/mgo.v2/bson"
// "fmt"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"sort"
"time"
"strings"
// "html"
"time"
// "html"
)
// 笔记本
@@ -42,8 +42,8 @@ func ParseAndSortNotebooks(userNotebooks []info.Notebook, noParentDelete, needSo
for _, each := range userNotebooks {
newNotebooks := info.Notebooks{Subs: info.SubNotebooks{}}
newNotebooks.NotebookId = each.NotebookId
newNotebooks.Title = each.Title;
// newNotebooks.Title = html.EscapeString(each.Title)
newNotebooks.Title = each.Title
// newNotebooks.Title = html.EscapeString(each.Title)
newNotebooks.Title = strings.Replace(strings.Replace(each.Title, "<script>", "", -1), "</script", "", -1)
newNotebooks.Seq = each.Seq
newNotebooks.UserId = each.UserId
@@ -116,9 +116,9 @@ func (this *NotebookService) GetNotebookByUserIdAndUrlTitle(userId, notebookIdOr
}
// 同步的方法
func (this *NotebookService) GeSyncNotebooks(userId string, afterUsn, maxEntry int) ([]info.Notebook) {
func (this *NotebookService) GeSyncNotebooks(userId string, afterUsn, maxEntry int) []info.Notebook {
notebooks := []info.Notebook{}
q := db.Notebooks.Find(bson.M{"UserId": bson.ObjectIdHex(userId), "Usn": bson.M{"$gt": afterUsn}});
q := db.Notebooks.Find(bson.M{"UserId": bson.ObjectIdHex(userId), "Usn": bson.M{"$gt": afterUsn}})
q.Sort("Usn").Limit(maxEntry).All(&notebooks)
return notebooks
}
@@ -169,6 +169,7 @@ func (this *NotebookService) AddNotebook(notebook info.Notebook) (bool, info.Not
}
return true, notebook
}
// 更新笔记, api
func (this *NotebookService) UpdateNotebookApi(userId, notebookId, title, parentNotebookId string, seq, usn int) (bool, string, info.Notebook) {
if notebookId == "" {
@@ -183,16 +184,16 @@ func (this *NotebookService) UpdateNotebookApi(userId, notebookId, title, parent
} else if notebook.Usn != usn {
return false, "conflict", notebook
}
notebook.Usn = userService.IncrUsn(userId);
notebook.Title = title;
notebook.Usn = userService.IncrUsn(userId)
notebook.Title = title
updates := bson.M{"Title": title, "Usn": notebook.Usn, "Seq": seq, "UpdatedTime": time.Now()};
if(parentNotebookId != "" && bson.IsObjectIdHex(parentNotebookId)) {
updates["ParentNotebookId"] = bson.ObjectIdHex(parentNotebookId);
updates := bson.M{"Title": title, "Usn": notebook.Usn, "Seq": seq, "UpdatedTime": time.Now()}
if parentNotebookId != "" && bson.IsObjectIdHex(parentNotebookId) {
updates["ParentNotebookId"] = bson.ObjectIdHex(parentNotebookId)
} else {
updates["ParentNotebookId"] = "";
updates["ParentNotebookId"] = ""
}
ok := db.UpdateByIdAndUserIdMap(db.Notebooks, notebookId, userId, updates);
ok := db.UpdateByIdAndUserIdMap(db.Notebooks, notebookId, userId, updates)
if ok {
return ok, "", this.GetNotebookById(notebookId)
}
@@ -202,7 +203,7 @@ func (this *NotebookService) UpdateNotebookApi(userId, notebookId, title, parent
// 判断是否是blog
func (this *NotebookService) IsBlog(notebookId string) bool {
notebook := info.Notebook{}
db.GetByQWithFields(db.Notebooks, bson.M{"_id": bson.ObjectIdHex(notebookId)}, []string{"IsBlog"}, &notebook);
db.GetByQWithFields(db.Notebooks, bson.M{"_id": bson.ObjectIdHex(notebookId)}, []string{"IsBlog"}, &notebook)
return notebook.IsBlog
}
@@ -228,13 +229,13 @@ func (this *NotebookService) UpdateNotebookTitle(notebookId, userId, title strin
// 更新notebook
func (this *NotebookService) UpdateNotebook(userId, notebookId string, needUpdate bson.M) bool {
needUpdate["UpdatedTime"] = time.Now();
needUpdate["UpdatedTime"] = time.Now()
needUpdate["Usn"] = userService.IncrUsn(userId)
return db.UpdateByIdAndUserIdMap(db.Notebooks, notebookId, userId, needUpdate)
}
// ToBlog or Not
func (this *NotebookService) ToBlog(userId, notebookId string, isBlog bool) (bool) {
func (this *NotebookService) ToBlog(userId, notebookId string, isBlog bool) bool {
updates := bson.M{"IsBlog": isBlog, "Usn": userService.IncrUsn(userId)}
// 笔记本
db.UpdateByIdAndUserIdMap(db.Notebooks, notebookId, userId, updates)
@@ -287,7 +288,7 @@ func (this *NotebookService) DeleteNotebook(userId, notebookId string) (bool, st
// 不是真删除 1/20, 为了同步笔记本
ok := db.UpdateByQMap(db.Notebooks, bson.M{"_id": bson.ObjectIdHex(notebookId)}, bson.M{"IsDeleted": true, "Usn": userService.IncrUsn(userId)})
return ok, ""
// return db.DeleteByIdAndUserId(db.Notebooks, notebookId, userId), ""
// return db.DeleteByIdAndUserId(db.Notebooks, notebookId, userId), ""
}
return false, "笔记本下有笔记"
} else {
@@ -329,10 +330,10 @@ func (this *NotebookService) SortNotebooks(userId string, notebookId2Seqs map[st
func (this *NotebookService) DragNotebooks(userId string, curNotebookId string, parentNotebookId string, siblings []string) bool {
ok := false
// 如果没parentNotebookId, 则parentNotebookId设空
if(parentNotebookId == "") {
ok = db.UpdateByIdAndUserIdMap(db.Notebooks, curNotebookId, userId, bson.M{"ParentNotebookId": "", "Usn": userService.IncrUsn(userId)});
if parentNotebookId == "" {
ok = db.UpdateByIdAndUserIdMap(db.Notebooks, curNotebookId, userId, bson.M{"ParentNotebookId": "", "Usn": userService.IncrUsn(userId)})
} else {
ok = db.UpdateByIdAndUserIdMap(db.Notebooks, curNotebookId, userId, bson.M{"ParentNotebookId": bson.ObjectIdHex(parentNotebookId), "Usn": userService.IncrUsn(userId)});
ok = db.UpdateByIdAndUserIdMap(db.Notebooks, curNotebookId, userId, bson.M{"ParentNotebookId": bson.ObjectIdHex(parentNotebookId), "Usn": userService.IncrUsn(userId)})
}
if !ok {
+2 -2
View File
@@ -1,10 +1,10 @@
package service
import (
"gopkg.in/mgo.v2/bson"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
)
// 找回密码
@@ -47,7 +47,7 @@ func (this *PwdService) UpdatePwd(token, pwd string) (bool, string) {
}
digest, err := GenerateHash(pwd)
if err != nil {
return false,"GenerateHash error"
return false, "GenerateHash error"
}
passwd := string(digest)
// 修改密码之
+6 -3
View File
@@ -1,12 +1,12 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"time"
// "strings"
// "strings"
)
// Session存储到mongodb中
@@ -17,6 +17,7 @@ func (this *SessionService) Update(sessionId, key string, value interface{}) boo
return db.UpdateByQMap(db.Sessions, bson.M{"SessionId": sessionId},
bson.M{key: value, "UpdatedTime": time.Now()})
}
// 注销时清空session
func (this *SessionService) Clear(sessionId string) bool {
return db.Delete(db.Sessions, bson.M{"SessionId": sessionId})
@@ -45,14 +46,16 @@ func (this *SessionService) LoginTimesIsOver(sessionId string) bool {
session := this.Get(sessionId)
return session.LoginTimes > 5
}
// 登录成功后清空错误次数
func (this *SessionService) ClearLoginTimes(sessionId string) bool {
return this.Update(sessionId, "LoginTimes", 0)
}
// 增加错误次数
func (this *SessionService) IncrLoginTimes(sessionId string) bool {
session := this.Get(sessionId)
return this.Update(sessionId, "LoginTimes", session.LoginTimes + 1)
return this.Update(sessionId, "LoginTimes", session.LoginTimes+1)
}
//----------
+52 -51
View File
@@ -1,12 +1,12 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"time"
"sort"
"time"
)
// 共享Notebook, Note服务
@@ -45,7 +45,7 @@ func (this *ShareService) getOrQ(userId string) bson.M {
// 不是trash的
q["$or"] = orQ
} else {
q["ToUserId"] = bson.ObjectIdHex(userId);
q["ToUserId"] = bson.ObjectIdHex(userId)
}
return q
}
@@ -68,12 +68,12 @@ func (this *ShareService) GetShareNotebooks(userId string) (info.ShareNotebooksB
userIds := append(userIds1, userIds2...)
userInfos := userService.GetUserInfosOrderBySeq(userIds);
userInfos := userService.GetUserInfosOrderBySeq(userIds)
// 不要我的id
for i, userInfo := range userInfos {
if userInfo.UserId.Hex() == myUserId {
userInfos = append(userInfos[:i], userInfos[i+1:]...)
break;
break
}
}
@@ -109,13 +109,13 @@ func (this *ShareService) GetShareNotebooks(userId string) (info.ShareNotebooksB
subShareNotebooks := this.parseToSubShareNotebooks(&subNotebooks, &shareNotebooksMap)
// 3 按用户进行分组成ShareNotebooksByUser
shareNotebooksByUsersMap := map[bson.ObjectId] []info.ShareNotebooks{}
shareNotebooksByUsersMap := map[bson.ObjectId][]info.ShareNotebooks{}
// 先建立userId => []
for _, eachSub := range subShareNotebooks {
userId := eachSub.Notebook.UserId
// 我自己的, 算了
if userId.Hex() == myUserId {
continue;
continue
}
if _, ok := shareNotebooksByUsersMap[userId]; ok {
@@ -124,7 +124,7 @@ func (this *ShareService) GetShareNotebooks(userId string) (info.ShareNotebooksB
shareNotebooksByUsersMap[userId] = []info.ShareNotebooks{eachSub}
}
}
shareNotebooksByUser := info.ShareNotebooksByUser{};
shareNotebooksByUser := info.ShareNotebooksByUser{}
for userId, eachShareNotebooks := range shareNotebooksByUsersMap {
// 4, 按用户排序
shareNotebooksByUser[userId.Hex()] = sortSubShareNotebooks(eachShareNotebooks)
@@ -173,11 +173,11 @@ func (this *ShareService) parseToSubShareNotebooks(subNotebooks *info.SubNoteboo
// 得到共享笔记本下的notes
func (this *ShareService) ListShareNotesByNotebookId(notebookId, myUserId, sharedUserId string,
page, pageSize int, sortField string, isAsc bool) ([]info.ShareNoteWithPerm) {
page, pageSize int, sortField string, isAsc bool) []info.ShareNoteWithPerm {
// 1 首先判断是否真的sharedUserId 共享了 notebookId 给 myUserId
q := this.getOrQ(myUserId)
q["NotebookId"] = bson.ObjectIdHex(notebookId);
q["UserId"] = bson.ObjectIdHex(sharedUserId);
q["NotebookId"] = bson.ObjectIdHex(notebookId)
q["UserId"] = bson.ObjectIdHex(sharedUserId)
shareNotebook := info.ShareNotebook{}
db.GetByQ(db.ShareNotebooks,
q,
@@ -190,7 +190,7 @@ func (this *ShareService) ListShareNotesByNotebookId(notebookId, myUserId, share
perm := shareNotebook.Perm
// 2 得到该notebook下分页显示所有的notes
_, notes := noteService.ListNotes(sharedUserId, notebookId, false, page, pageSize, sortField, isAsc, false);
_, notes := noteService.ListNotes(sharedUserId, notebookId, false, page, pageSize, sortField, isAsc, false)
// 3 添加权限信息
// 3.1 如果该notebook自己有其它权限信息, 比如1, 那么覆盖notebook的权限信息
@@ -210,12 +210,12 @@ func (this *ShareService) ListShareNotesByNotebookId(notebookId, myUserId, share
}
}
Log("笔记权限")
LogJ(notePerms);
LogJ(notePerms)
// 3.2 组合
notesWithPerm := make([]info.ShareNoteWithPerm, len(notes))
for i, each := range notes {
thisPerm := perm;
thisPerm := perm
if selfPerm, ok := notePerms[each.NoteId]; ok {
thisPerm = selfPerm
}
@@ -247,13 +247,13 @@ func (this *ShareService) ListShareNotesByNotebookId(notebookId, myUserId, share
// 可以这样! 到时将零散的共享noteId放在用户基本数据中
// 这里不好排序
func (this *ShareService) ListShareNotes(myUserId, sharedUserId string,
pageNumber, pageSize int, sortField string, isAsc bool) ([]info.ShareNoteWithPerm) {
pageNumber, pageSize int, sortField string, isAsc bool) []info.ShareNoteWithPerm {
skipNum, _ := parsePageAndSort(pageNumber, pageSize, sortField, isAsc)
shareNotes := []info.ShareNote{}
q := this.getOrQ(myUserId)
q["UserId"] = bson.ObjectIdHex(sharedUserId);
q["UserId"] = bson.ObjectIdHex(sharedUserId)
db.ShareNotes.
Find(q).
@@ -297,7 +297,7 @@ func (this *ShareService) notes2NotesWithPerm(notes []info.Note) {
// [ok]
func (this *ShareService) AddShareNotebook1(shareNotebook info.ShareNotebook) bool {
// 添加一条记录说明两者存在关系
this.AddHasShareNote(shareNotebook.UserId.Hex(), shareNotebook.ToUserId.Hex());
this.AddHasShareNote(shareNotebook.UserId.Hex(), shareNotebook.ToUserId.Hex())
shareNotebook.CreatedTime = time.Now()
return db.Insert(db.ShareNotebooks, shareNotebook)
@@ -316,13 +316,13 @@ func (this *ShareService) AddShareNotebook(notebookId string, perm int, userId,
// 第三方注册时没有email
func (this *ShareService) AddShareNotebookToUserId(notebookId string, perm int, userId, toUserId string) (bool, string, string) {
// 添加一条记录说明两者存在关系
this.AddHasShareNote(userId, toUserId);
this.AddHasShareNote(userId, toUserId)
// 先删除之
db.Delete(db.ShareNotebooks, bson.M{"NotebookId": bson.ObjectIdHex(notebookId),
"UserId": bson.ObjectIdHex(userId),
"ToUserId": bson.ObjectIdHex(toUserId),
});
})
shareNotebook := info.ShareNotebook{NotebookId: bson.ObjectIdHex(notebookId),
UserId: bson.ObjectIdHex(userId),
@@ -353,13 +353,13 @@ func (this *ShareService) AddShareNote(noteId string, perm int, userId, email st
// 第三方测试没有userId
func (this *ShareService) AddShareNoteToUserId(noteId string, perm int, userId, toUserId string) (bool, string, string) {
// 添加一条记录说明两者存在关系
this.AddHasShareNote(userId, toUserId);
this.AddHasShareNote(userId, toUserId)
// 先删除之
db.Delete(db.ShareNotes, bson.M{"NoteId": bson.ObjectIdHex(noteId),
"UserId": bson.ObjectIdHex(userId),
"ToUserId": bson.ObjectIdHex(toUserId),
});
})
shareNote := info.ShareNote{NoteId: bson.ObjectIdHex(noteId),
UserId: bson.ObjectIdHex(userId),
@@ -370,7 +370,6 @@ func (this *ShareService) AddShareNoteToUserId(noteId string, perm int, userId,
return db.Insert(db.ShareNotes, shareNote), "", toUserId
}
// updatedUserId是否有查看userId noteId的权限?
// userId是所有者
func (this *ShareService) HasReadPerm(userId, updatedUserId, noteId string) bool {
@@ -443,13 +442,14 @@ func (this *ShareService) HasUpdateNotebookPerm(userId, updatedUserId, notebookI
// 共享note, notebook时使用
func (this *ShareService) AddHasShareNote(userId, toUserId string) bool {
db.Insert(db.HasShareNotes, info.HasShareNote{UserId: bson.ObjectIdHex(userId), ToUserId: bson.ObjectIdHex(toUserId)})
return true;
return true
}
// userId是否被共享了noteId
func (this *ShareService) HasSharedNote(noteId, myUserId string) bool {
return db.Has(db.ShareNotes, bson.M{"ToUserId": bson.ObjectIdHex(myUserId), "NoteId": bson.ObjectIdHex(noteId)})
}
// noteId的notebook是否共享了给我
func (this *ShareService) HasSharedNotebook(noteId, myUserId, sharedUserId string) bool {
notebookId := noteService.GetNotebookId(noteId)
@@ -468,11 +468,11 @@ func (this *ShareService) GetShareNoteContent(noteId, myUserId, sharedUserId str
noteContent = info.NoteContent{}
// 是否单独共享了该notebook
// 或者, 其notebook共享了我
// Log(this.HasSharedNote(noteId, myUserId))
// Log(this.HasSharedNotebook(noteId, myUserId, sharedUserId))
// Log(this.HasSharedNote(noteId, myUserId))
// Log(this.HasSharedNotebook(noteId, myUserId, sharedUserId))
Log(this.HasReadPerm(sharedUserId, myUserId, noteId))
if this.HasReadPerm(sharedUserId, myUserId, noteId) {
// if this.HasSharedNote(noteId, myUserId) || this.HasSharedNotebook(noteId, myUserId, sharedUserId) {
// if this.HasSharedNote(noteId, myUserId) || this.HasSharedNotebook(noteId, myUserId, sharedUserId) {
db.Get(db.NoteContents, noteId, &noteContent)
} else {
}
@@ -493,8 +493,8 @@ func (this *ShareService) ListNoteShareUserInfo(noteId, userId string) []info.Sh
"ToGroupId": bson.M{"$exists": false},
}, &shareNotes, 100)
// Log("<<>>>>")
// Log(len(shareNotes))
// Log("<<>>>>")
// Log(len(shareNotes))
if len(shareNotes) == 0 {
return nil
@@ -591,7 +591,6 @@ func (this *ShareService) ListNotebookShareUserInfo(notebookId, userId string) [
return shareUserInfos
}
//----------------
// 改变note share权限
func (this *ShareService) UpdateShareNotePerm(noteId string, perm int, userId, toUserId string) bool {
@@ -622,6 +621,7 @@ func (this *ShareService) DeleteShareNoteAll(noteId string, userId string) bool
return db.DeleteAll(db.ShareNotes,
bson.M{"NoteId": bson.ObjectIdHex(noteId), "UserId": bson.ObjectIdHex(userId)})
}
// 删除share notebook
func (this *ShareService) DeleteShareNotebook(notebookId string, userId, toUserId string) bool {
return db.DeleteAll(db.ShareNotebooks,
@@ -631,9 +631,9 @@ func (this *ShareService) DeleteShareNotebook(notebookId string, userId, toUserI
// 删除userId分享给toUserId的所有
func (this *ShareService) DeleteUserShareNoteAndNotebook(userId, toUserId string) bool {
query := bson.M{"UserId": bson.ObjectIdHex(userId), "ToUserId": bson.ObjectIdHex(toUserId)}
db.DeleteAll(db.ShareNotebooks, query);
db.DeleteAll(db.ShareNotes, query);
db.DeleteAll(db.HasShareNotes, query);
db.DeleteAll(db.ShareNotebooks, query)
db.DeleteAll(db.ShareNotes, query)
db.DeleteAll(db.HasShareNotes, query)
return true
}
@@ -641,10 +641,10 @@ func (this *ShareService) DeleteUserShareNoteAndNotebook(userId, toUserId string
// 用户userId是否有修改noteId的权限
func (this *ShareService) HasUpdateNotePerm(noteId, userId string) bool {
if noteId == "" || userId == "" {
return false;
return false
}
note := noteService.GetNoteById(noteId)
LogJ(note);
LogJ(note)
if note.UserId != "" {
noteUserId := note.UserId.Hex()
if noteUserId != userId {
@@ -652,20 +652,20 @@ func (this *ShareService) HasUpdateNotePerm(noteId, userId string) bool {
if this.HasUpdatePerm(noteUserId, userId, noteId) {
return true
} else {
return false;
return false
}
} else {
return true
}
} else {
return false;
return false
}
}
// 用户userId是否有查看noteId的权限
func (this *ShareService) HasReadNotePerm(noteId, userId string) bool {
if noteId == "" || userId == "" {
return false;
return false
}
note := noteService.GetNoteById(noteId)
if note.UserId != "" {
@@ -675,13 +675,13 @@ func (this *ShareService) HasReadNotePerm(noteId, userId string) bool {
if this.HasReadPerm(noteUserId, userId, noteId) {
return true
} else {
return false;
return false
}
} else {
return true
}
} else {
return false;
return false
}
}
@@ -695,7 +695,7 @@ func (this *ShareService) GetNoteShareGroups(noteId, userId string) []info.Share
// 得到有分享的分组
shares := []info.ShareNote{}
db.ListByQ(db.ShareNotes,
bson.M{"NoteId": bson.ObjectIdHex(noteId), "UserId": bson.ObjectIdHex(userId), "ToGroupId": bson.M{"$exists":true}}, &shares)
bson.M{"NoteId": bson.ObjectIdHex(noteId), "UserId": bson.ObjectIdHex(userId), "ToGroupId": bson.M{"$exists": true}}, &shares)
mapShares := map[bson.ObjectId]info.ShareNote{}
for _, share := range shares {
mapShares[share.ToGroupId] = share
@@ -708,7 +708,7 @@ func (this *ShareService) GetNoteShareGroups(noteId, userId string) []info.Share
if !ok {
share = info.ShareNote{}
}
share.ToGroup = group;
share.ToGroup = group
shares2[i] = share
}
@@ -716,7 +716,7 @@ func (this *ShareService) GetNoteShareGroups(noteId, userId string) []info.Share
}
// 共享笔记给分组
func (this *ShareService) AddShareNoteGroup(userId, noteId, groupId string, perm int) (bool) {
func (this *ShareService) AddShareNoteGroup(userId, noteId, groupId string, perm int) bool {
if !groupService.IsExistsGroupUser(userId, groupId) {
return false
}
@@ -738,7 +738,7 @@ func (this *ShareService) DeleteShareNoteGroup(userId, noteId, groupId string) b
return db.Delete(db.ShareNotes, bson.M{"NoteId": bson.ObjectIdHex(noteId),
"UserId": bson.ObjectIdHex(userId),
"ToGroupId": bson.ObjectIdHex(groupId),
});
})
}
//-------
@@ -750,7 +750,7 @@ func (this *ShareService) GetNotebookShareGroups(notebookId, userId string) []in
// 得到有分享的分组
shares := []info.ShareNotebook{}
db.ListByQ(db.ShareNotebooks,
bson.M{"NotebookId": bson.ObjectIdHex(notebookId), "UserId": bson.ObjectIdHex(userId), "ToGroupId": bson.M{"$exists":true}}, &shares)
bson.M{"NotebookId": bson.ObjectIdHex(notebookId), "UserId": bson.ObjectIdHex(userId), "ToGroupId": bson.M{"$exists": true}}, &shares)
mapShares := map[bson.ObjectId]info.ShareNotebook{}
for _, share := range shares {
mapShares[share.ToGroupId] = share
@@ -764,14 +764,15 @@ func (this *ShareService) GetNotebookShareGroups(notebookId, userId string) []in
if !ok {
share = info.ShareNotebook{}
}
share.ToGroup = group;
share.ToGroup = group
shares2[i] = share
}
return shares2
}
// 共享笔记给分组
func (this *ShareService) AddShareNotebookGroup(userId, notebookId, groupId string, perm int) (bool) {
func (this *ShareService) AddShareNotebookGroup(userId, notebookId, groupId string, perm int) bool {
if !groupService.IsExistsGroupUser(userId, groupId) {
return false
}
@@ -793,7 +794,7 @@ func (this *ShareService) DeleteShareNotebookGroup(userId, notebookId, groupId s
return db.Delete(db.ShareNotebooks, bson.M{"NotebookId": bson.ObjectIdHex(notebookId),
"UserId": bson.ObjectIdHex(userId),
"ToGroupId": bson.ObjectIdHex(groupId),
});
})
}
//--------------------
@@ -803,12 +804,12 @@ func (this *ShareService) DeleteShareNotebookGroup(userId, notebookId, groupId s
func (this *ShareService) DeleteAllShareNotebookGroup(groupId string) bool {
return db.Delete(db.ShareNotebooks, bson.M{
"ToGroupId": bson.ObjectIdHex(groupId),
});
})
}
func (this *ShareService) DeleteAllShareNoteGroup(groupId string) bool {
return db.Delete(db.ShareNotes, bson.M{
"ToGroupId": bson.ObjectIdHex(groupId),
});
})
}
//--------------------
@@ -819,12 +820,12 @@ func (this *ShareService) DeleteShareNotebookGroupWhenDeleteGroupUser(userId, gr
return db.Delete(db.ShareNotebooks, bson.M{
"UserId": bson.ObjectIdHex(userId),
"ToGroupId": bson.ObjectIdHex(groupId),
});
})
}
func (this *ShareService) DeleteShareNoteGroupWhenDeleteGroupUser(userId, groupId string) bool {
return db.Delete(db.ShareNotes, bson.M{
"UserId": bson.ObjectIdHex(userId),
"ToGroupId": bson.ObjectIdHex(groupId),
});
})
}
+4 -4
View File
@@ -1,12 +1,12 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
// . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/info"
// . "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
// "time"
// "sort"
// "time"
// "sort"
)
type SuggestionService struct {
+8 -8
View File
@@ -1,9 +1,9 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
// . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/info"
// . "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"time"
)
@@ -60,7 +60,7 @@ func (this *TagService) AddOrUpdateTag(userId string, tag string) info.NoteTag {
count := noteService.CountNoteByTag(userId, tag)
noteTag.Count = count
noteTag.UpdatedTime = time.Now()
// noteTag.Usn = userService.IncrUsn(userId), 更新count而已
// noteTag.Usn = userService.IncrUsn(userId), 更新count而已
db.UpdateByIdAndUserId(db.NoteTags, noteTag.TagId.Hex(), userId, noteTag)
return noteTag
}
@@ -83,7 +83,7 @@ func (this *TagService) AddOrUpdateTag(userId string, tag string) info.NoteTag {
func (this *TagService) GetTags(userId string) []info.NoteTag {
tags := []info.NoteTag{}
query := bson.M{"UserId": bson.ObjectIdHex(userId), "IsDeleted": false}
q := db.NoteTags.Find(query);
q := db.NoteTags.Find(query)
sortFieldR := "-UpdatedTime"
q.Sort(sortFieldR).All(&tags)
return tags
@@ -95,7 +95,7 @@ func (this *TagService) GetTags(userId string) []info.NoteTag {
func (this *TagService) DeleteTag(userId string, tag string) map[string]int {
usn := userService.IncrUsn(userId)
if db.UpdateByQMap(db.NoteTags, bson.M{"UserId": bson.ObjectIdHex(userId), "Tag": tag}, bson.M{"Usn": usn, "IsDeleted": true}) {
return noteService.UpdateNoteToDeleteTag(userId, tag);
return noteService.UpdateNoteToDeleteTag(userId, tag)
}
return map[string]int{}
}
@@ -124,14 +124,14 @@ func (this *TagService) reCountTagCount(userId string, tags []string) {
return
}
for _, tag := range tags {
this.AddOrUpdateTag(userId, tag);
this.AddOrUpdateTag(userId, tag)
}
}
// 同步用
func (this *TagService) GeSyncTags(userId string, afterUsn, maxEntry int) ([]info.NoteTag) {
func (this *TagService) GeSyncTags(userId string, afterUsn, maxEntry int) []info.NoteTag {
noteTags := []info.NoteTag{}
q := db.NoteTags.Find(bson.M{"UserId": bson.ObjectIdHex(userId), "Usn": bson.M{"$gt": afterUsn}});
q := db.NoteTags.Find(bson.M{"UserId": bson.ObjectIdHex(userId), "Usn": bson.M{"$gt": afterUsn}})
q.Sort("Usn").Limit(maxEntry).All(&noteTags)
return noteTags
}
+30 -27
View File
@@ -1,20 +1,20 @@
package service
import (
"github.com/revel/revel"
"github.com/leanote/leanote/app/info"
"encoding/json"
"fmt"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/lea/archive"
"github.com/revel/revel"
"gopkg.in/mgo.v2/bson"
"time"
"strings"
"os"
"fmt"
"html/template"
"regexp"
"io/ioutil"
"encoding/json"
"os"
"regexp"
"strings"
"time"
)
// 主题
@@ -29,6 +29,7 @@ var fixedStyle = "blog_left_fixed"
func (this *ThemeService) getDefaultThemeBasePath() string {
return revel.BasePath + "/public/blog/themes"
}
// 默认主题路径
func (this *ThemeService) getDefaultThemePath(style string) string {
if style == elegantStyle {
@@ -39,6 +40,7 @@ func (this *ThemeService) getDefaultThemePath(style string) string {
return this.getDefaultThemeBasePath() + "/default"
}
}
// blogService用
func (this *ThemeService) GetDefaultThemePath(style string) string {
if style == elegantStyle {
@@ -141,7 +143,7 @@ func (this *ThemeService) NewTheme(userId string) (ok bool, themeId string) {
themeService.NewThemeForFirst(userBlog)
}
// 再copy一个默认主题
userBlog.Style = "defaultStyle";
userBlog.Style = "defaultStyle"
ok, themeId = this.CopyDefaultTheme(userBlog)
return
}
@@ -223,11 +225,11 @@ func (this *ThemeService) GetUserThemes(userId string) (theme info.Theme, themes
theme = info.Theme{}
themes = []info.Theme{}
// db.ListByQ(db.Themes, bson.M{"UserId": bson.ObjectIdHex(userId)}, &themes)
// db.ListByQ(db.Themes, bson.M{"UserId": bson.ObjectIdHex(userId)}, &themes)
// 创建时间逆序
query := bson.M{"UserId": bson.ObjectIdHex(userId)}
q := db.Themes.Find(query);
q := db.Themes.Find(query)
q.Sort("-CreatedTime").All(&themes)
if len(themes) == 0 {
userBlog := blogService.GetUserBlog(userId)
@@ -285,6 +287,7 @@ func (this *ThemeService) GetThemePath(userId, themeId string) string {
}
return ""
}
// 更新模板内容
func (this *ThemeService) UpdateTplContent(userId, themeId, filename, content string) (ok bool, msg string) {
basePath := this.GetThemeAbsolutePath(userId, themeId)
@@ -361,7 +364,7 @@ func (this *ThemeService) ActiveTheme(userId, themeId string) (ok bool) {
// 删除主题
func (this *ThemeService) DeleteTheme(userId, themeId string) (ok bool) {
return db.Delete(db.Themes,bson.M{"_id": bson.ObjectIdHex(themeId), "UserId": bson.ObjectIdHex(userId), "IsActive": false})
return db.Delete(db.Themes, bson.M{"_id": bson.ObjectIdHex(themeId), "UserId": bson.ObjectIdHex(userId), "IsActive": false})
}
// 公开主题, 只有管理员才有权限, 之前没公开的变成公开
@@ -375,7 +378,6 @@ func (this *ThemeService) PublicTheme(userId, themeId string) (ok bool) {
return false
}
// 导出主题
func (this *ThemeService) ExportTheme(userId, themeId string) (ok bool, path string) {
theme := this.GetThemeById(themeId)
@@ -406,6 +408,7 @@ func (this *ThemeService) ExportTheme(userId, themeId string) (ok bool, path str
return true, targetName
}
// 导入主题
// path == /llllllll/..../public/upload/.../aa.zip, 绝对路径
func (this *ThemeService) ImportTheme(userId, path string) (ok bool, msg string) {
@@ -525,7 +528,7 @@ func (this *ThemeService) InstallTheme(userId, themeId string) (ok bool) {
ok = db.Insert(db.Themes, theme)
// 激活之
this.ActiveTheme(userId, themeId);
this.ActiveTheme(userId, themeId)
return ok
}
@@ -538,10 +541,10 @@ func (this *ThemeService) ValidateTheme(path string, filename, newContent string
// 建立一个有向图
// 将该path下的所有文件提出, 得到文件的引用情况
files := ListDir(path)
LogJ(files);
LogJ(files)
size := len(files)
if(size > 100) {
ok = false;
if size > 100 {
ok = false
msg = "tooManyFiles"
return
}
@@ -559,7 +562,7 @@ func (this *ThemeService) ValidateTheme(path string, filename, newContent string
// 得到文件内容, 和建立索引, 每个文件都有一个index, 对应数组位置
for _, t := range files {
if !strings.Contains(t, ".html") {
continue;
continue
}
if t != filename {
fileBytes, err := ioutil.ReadFile(path + "/" + t)
@@ -567,7 +570,7 @@ func (this *ThemeService) ValidateTheme(path string, filename, newContent string
continue
}
fileIndexMap[t] = index;
fileIndexMap[t] = index
// html内容
fileStr := string(fileBytes)
fileContent[t] = fileStr
@@ -583,7 +586,7 @@ func (this *ThemeService) ValidateTheme(path string, filename, newContent string
thisIndex := fileIndexMap[filename]
finds := reg.FindAllStringSubmatch(content, -1) // 子匹配
LogJ(finds)
// Log(content)
// Log(content)
if finds != nil && len(finds) > 0 {
for _, includes := range finds {
include := includes[1]
@@ -607,7 +610,7 @@ func (this *ThemeService) ValidateTheme(path string, filename, newContent string
} else {
ok = true
}
return;
return
}
// 检测有向图是否有环, DFS
@@ -616,8 +619,8 @@ func (this *ThemeService) hasRound(vector [][]int, size int) (ok bool) {
visited := make([]int, size)
if this.hasRoundEach(vector, i, size, visited) {
Log(">>")
Log(i);
return true;
Log(i)
return true
}
}
return false
@@ -630,13 +633,13 @@ func (this *ThemeService) hasRoundEach(vector [][]int, index int, size int, visi
Log(index)
return true
}
visited[index] = 1;
visited[index] = 1
// 遍历它的孩子
for i := 0; i < size; i++ {
if vector[index][i] > 0 {
return this.hasRoundEach(vector, i, size, visited);
return this.hasRoundEach(vector, i, size, visited)
}
}
visited[index] = 0;
return false;
visited[index] = 0
return false
}
+1 -1
View File
@@ -1,10 +1,10 @@
package service
import (
"gopkg.in/mgo.v2/bson"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"time"
)
+6 -6
View File
@@ -1,9 +1,9 @@
package service
import (
"gopkg.in/mgo.v2/bson"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
"gopkg.in/mgo.v2/bson"
)
// 回收站
@@ -25,9 +25,9 @@ type TrashService struct {
// 应该放在回收站里
// 有trashService
func (this *TrashService) DeleteNote(noteId, userId string) bool {
note := noteService.GetNote(noteId, userId);
note := noteService.GetNote(noteId, userId)
// 如果是垃圾, 则彻底删除
if (note.IsTrash) {
if note.IsTrash {
return this.DeleteTrash(noteId, userId)
}
@@ -63,12 +63,12 @@ func (this *TrashService) recoverNote(noteId, notebookId, userId string) bool {
bson.M{"$set": bson.M{"IsTrash": false,
"Usn": userService.IncrUsn(userId),
"NotebookId": bson.ObjectIdHex(notebookId)}})
return re;
return re
}
// 删除trash
func (this *TrashService) DeleteTrash(noteId, userId string) bool {
note := noteService.GetNote(noteId, userId);
note := noteService.GetNote(noteId, userId)
if note.NoteId == "" {
return false
}
@@ -80,7 +80,7 @@ func (this *TrashService) DeleteTrash(noteId, userId string) bool {
bson.M{"IsDeleted": true,
"Usn": userService.IncrUsn(userId)})
// delete note
// ok = db.DeleteByIdAndUserId(db.Notes, noteId, userId)
// ok = db.DeleteByIdAndUserId(db.Notes, noteId, userId)
// delete content
ok = db.DeleteByIdAndUserId(db.NoteContents, noteId, userId)
+4 -5
View File
@@ -1,14 +1,13 @@
package service
import (
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/db"
"gopkg.in/mgo.v2/bson"
"time"
)
type UpgradeService struct {
}
@@ -164,17 +163,17 @@ func (this *UpgradeService) Api(userId string) (ok bool, msg string) {
// notebook
db.UpdateByQField(db.Notebooks, bson.M{}, "IsDeleted", false)
this.setNotebookUsn();
this.setNotebookUsn()
// note
// 1-N
db.UpdateByQField(db.Notes, bson.M{}, "IsDeleted", false)
this.setNoteUsn();
this.setNoteUsn()
// tag
// 1-N
/// tag, 要重新插入, 将之前的Tag表迁移到NoteTag中
this.moveTag();
this.moveTag()
configService.UpdateGlobalStringConfig(userId, "UpgradeBetaToBeta4", "1")
+22 -17
View File
@@ -1,12 +1,12 @@
package service
import (
"github.com/leanote/leanote/app/info"
"github.com/leanote/leanote/app/db"
"github.com/leanote/leanote/app/info"
. "github.com/leanote/leanote/app/lea"
"gopkg.in/mgo.v2/bson"
"time"
"strings"
"time"
)
type UserService struct {
@@ -23,7 +23,7 @@ func (this *UserService) IncrUsn(userId string) int {
Log("inc Usn")
db.UpdateByQField(db.Users, query, "Usn", usn)
return usn
// return db.Update(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId)}, bson.M{"$inc": bson.M{"ReadNum": 1}})
// return db.Update(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId)}, bson.M{"$inc": bson.M{"ReadNum": 1}})
}
func (this *UserService) GetUsn(userId string) int {
@@ -47,8 +47,8 @@ func (this *UserService) AddUser(user info.User) bool {
go func() {
emailService.RegisterSendActiveEmail(user, user.Email)
// 发送给我 life@leanote.com
emailService.SendEmail("life@leanote.com", "新增用户", "{header}用户名" + user.Email + "{footer}");
}();
emailService.SendEmail("life@leanote.com", "新增用户", "{header}用户名"+user.Email+"{footer}")
}()
}
return db.Insert(db.Users, user)
@@ -129,6 +129,7 @@ func (this *UserService) GetUserInfo(userId string) info.User {
this.setUserLogo(&user)
return user
}
// 得到用户信息 email
func (this *UserService) GetUserInfoByEmail(email string) info.User {
user := info.User{}
@@ -137,6 +138,7 @@ func (this *UserService) GetUserInfoByEmail(email string) info.User {
this.setUserLogo(&user)
return user
}
// 得到用户信息 username
func (this *UserService) GetUserInfoByUsername(username string) info.User {
user := info.User{}
@@ -163,6 +165,7 @@ func (this *UserService) ListUserInfosByEmails(emails []string) []info.User {
db.ListByQ(db.Users, bson.M{"Email": bson.M{"$in": emails}}, &users)
return users
}
// 用户信息即可
func (this *UserService) MapUserInfoByUserIds(userIds []bson.ObjectId) map[bson.ObjectId]info.User {
users := []info.User{}
@@ -175,6 +178,7 @@ func (this *UserService) MapUserInfoByUserIds(userIds []bson.ObjectId) map[bson.
}
return userMap
}
// 用户信息和博客设置信息
func (this *UserService) MapUserInfoAndBlogInfosByUserIds(userIds []bson.ObjectId) map[bson.ObjectId]info.User {
return this.MapUserInfoByUserIds(userIds)
@@ -249,7 +253,7 @@ func (this *UserService) GetUserAndBlog(userId string) info.UserAndBlog {
// 通过ids得到users, 按id的顺序组织users
func (this *UserService) GetUserInfosOrderBySeq(userIds []bson.ObjectId) []info.User {
users := []info.User{}
db.ListByQ(db.Users, bson.M{"_id": bson.M{"$in": userIds}}, &users);
db.ListByQ(db.Users, bson.M{"_id": bson.M{"$in": userIds}}, &users)
usersMap := map[bson.ObjectId]info.User{}
for _, user := range users {
@@ -257,7 +261,7 @@ func (this *UserService) GetUserInfosOrderBySeq(userIds []bson.ObjectId) []info.
}
hasAppend := map[bson.ObjectId]bool{} // 为了防止userIds有重复的
users2 := []info.User{};
users2 := []info.User{}
for _, userId := range userIds {
if user, ok := usersMap[userId]; ok && !hasAppend[userId] {
hasAppend[userId] = true
@@ -300,7 +304,7 @@ func (this *UserService) UpdateUsername(userId, username string) (bool, string)
}
// 修改头像
func (this *UserService) UpdateAvatar(userId, avatarPath string) (bool) {
func (this *UserService) UpdateAvatar(userId, avatarPath string) bool {
userIdO := bson.ObjectIdHex(userId)
return db.UpdateByQField(db.Users, bson.M{"_id": userIdO}, "Logo", avatarPath)
}
@@ -337,7 +341,7 @@ func (this *UserService) ResetPwd(adminUserId, userId, pwd string) (ok bool, msg
}
// 修改主题
func (this *UserService) UpdateTheme(userId, theme string) (bool) {
func (this *UserService) UpdateTheme(userId, theme string) bool {
ok := db.UpdateByQField(db.Users, bson.M{"_id": bson.ObjectIdHex(userId)}, "Theme", theme)
return ok
}
@@ -432,12 +436,13 @@ func (this *UserService) ThirdAddUser(userId, email, pwd string) (ok bool, msg s
// 偏好设置
// 宽度
func (this *UserService)UpdateColumnWidth(userId string, notebookWidth, noteListWidth, mdEditorWidth int) bool {
func (this *UserService) UpdateColumnWidth(userId string, notebookWidth, noteListWidth, mdEditorWidth int) bool {
return db.UpdateByQMap(db.Users, bson.M{"_id": bson.ObjectIdHex(userId)},
bson.M{"NotebookWidth": notebookWidth, "NoteListWidth": noteListWidth, "MdEditorWidth": mdEditorWidth})
}
// 左侧是否隐藏
func (this *UserService)UpdateLeftIsMin(userId string, leftIsMin bool) bool {
func (this *UserService) UpdateLeftIsMin(userId string, leftIsMin bool) bool {
return db.UpdateByQMap(db.Users, bson.M{"_id": bson.ObjectIdHex(userId)}, bson.M{"LeftIsMin": leftIsMin})
}
@@ -454,7 +459,7 @@ func (this *UserService) ListUsers(pageNumber, pageSize int, sortField string, i
}
query["$or"] = orQ
}
q := db.Users.Find(query);
q := db.Users.Find(query)
// 总记录数
count, _ := q.Count()
// 列表
@@ -479,9 +484,9 @@ func (this *UserService) GetAllUserByFilter(userFilterEmail, userFilterWhiteList
bson.M{"Username": bson.M{"$regex": bson.RegEx{".*?" + userFilterEmail + ".*", "i"}}},
)
}
if(userFilterWhiteList != "") {
if userFilterWhiteList != "" {
userFilterWhiteList = strings.Replace(userFilterWhiteList, "\r", "", -1)
emails := strings.Split(userFilterWhiteList, "\n");
emails := strings.Split(userFilterWhiteList, "\n")
orQ = append(orQ, bson.M{"Email": bson.M{"$in": emails}})
}
if len(orQ) > 0 {
@@ -489,16 +494,16 @@ func (this *UserService) GetAllUserByFilter(userFilterEmail, userFilterWhiteList
}
emailQ := bson.M{}
if(userFilterBlackList != "") {
if userFilterBlackList != "" {
userFilterWhiteList = strings.Replace(userFilterBlackList, "\r", "", -1)
bEmails := strings.Split(userFilterBlackList, "\n");
bEmails := strings.Split(userFilterBlackList, "\n")
emailQ["$nin"] = bEmails
query["Email"] = emailQ
}
LogJ(query)
users := []info.User{}
q := db.Users.Find(query);
q := db.Users.Find(query)
q.All(&users)
Log(len(users))
+1 -2
View File
@@ -1,7 +1,6 @@
package service
import (
)
import ()
// service 通用方法
+5 -5
View File
@@ -1,13 +1,13 @@
package service
import (
"regexp"
"strings"
"net/url"
"strconv"
"gopkg.in/mgo.v2"
"github.com/leanote/leanote/app/db"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"net/url"
"regexp"
"strconv"
"strings"
)
// init service, for share service bettween services
+4 -4
View File
@@ -1,12 +1,12 @@
package tests
import (
"testing"
"github.com/leanote/leanote/app/db"
// . "github.com/leanote/leanote/app/lea"
"testing"
// . "github.com/leanote/leanote/app/lea"
"github.com/leanote/leanote/app/service"
// "gopkg.in/mgo.v2"
// "fmt"
// "gopkg.in/mgo.v2"
// "fmt"
)
func init() {
+5 -5
View File
@@ -1,12 +1,12 @@
package tests
import (
"testing"
"github.com/leanote/leanote/app/db"
// . "github.com/leanote/leanote/app/lea"
// "github.com/leanote/leanote/app/service"
// "gopkg.in/mgo.v2"
// "fmt"
"testing"
// . "github.com/leanote/leanote/app/lea"
// "github.com/leanote/leanote/app/service"
// "gopkg.in/mgo.v2"
// "fmt"
)
func TestDBConnect(t *testing.T) {
+1
View File
@@ -1,3 +1,4 @@
package tests
func a() {
}