mirror of
https://github.com/eiblog/eiblog.git
synced 2026-02-04 13:52:26 +08:00
add comments
This commit is contained in:
13
api.go
13
api.go
@@ -16,11 +16,15 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
// 成功
|
||||
NOTICE_SUCCESS = "success"
|
||||
NOTICE_NOTICE = "notice"
|
||||
NOTICE_ERROR = "error"
|
||||
// 注意
|
||||
NOTICE_NOTICE = "notice"
|
||||
// 错误
|
||||
NOTICE_ERROR = "error"
|
||||
)
|
||||
|
||||
// 全局 API
|
||||
var APIs = make(map[string]func(c *gin.Context))
|
||||
|
||||
func init() {
|
||||
@@ -61,6 +65,7 @@ func apiAccount(c *gin.Context) {
|
||||
responseNotice(c, NOTICE_NOTICE, "参数错误", "")
|
||||
return
|
||||
}
|
||||
|
||||
err := UpdateAccountField(bson.M{"$set": bson.M{"email": e, "phonen": pn, "address": ad}})
|
||||
if err != nil {
|
||||
responseNotice(c, NOTICE_NOTICE, err.Error(), "")
|
||||
@@ -83,6 +88,7 @@ func apiBlog(c *gin.Context) {
|
||||
responseNotice(c, NOTICE_NOTICE, "参数错误", "")
|
||||
return
|
||||
}
|
||||
|
||||
err := UpdateAccountField(bson.M{"$set": bson.M{"blogger.blogname": bn, "blogger.btitle": bt, "blogger.beian": ba, "blogger.subtitle": st, "blogger.seriessay": ss, "blogger.archivessay": as}})
|
||||
if err != nil {
|
||||
responseNotice(c, NOTICE_NOTICE, err.Error(), "")
|
||||
@@ -117,6 +123,7 @@ func apiPassword(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
newPwd := EncryptPasswd(Ei.Username, nw)
|
||||
|
||||
err := UpdateAccountField(bson.M{"$set": bson.M{"password": newPwd}})
|
||||
if err != nil {
|
||||
responseNotice(c, NOTICE_NOTICE, err.Error(), "")
|
||||
@@ -136,6 +143,7 @@ func apiPostDelete(c *gin.Context) {
|
||||
}
|
||||
responseNotice(c, NOTICE_SUCCESS, "删除成功", "")
|
||||
}()
|
||||
|
||||
err = c.Request.ParseForm()
|
||||
if err != nil {
|
||||
return
|
||||
@@ -187,6 +195,7 @@ func apiPostAdd(c *gin.Context) {
|
||||
c.Redirect(http.StatusFound, "/admin/manage-posts")
|
||||
}
|
||||
}()
|
||||
|
||||
do = c.PostForm("do") // auto or save or publish
|
||||
slug := c.PostForm("slug")
|
||||
title := c.PostForm("title")
|
||||
|
||||
5
back.go
5
back.go
@@ -25,6 +25,7 @@ func isLogin(c *gin.Context) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// 登陆过滤
|
||||
func AuthFilter() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
if !isLogin(c) {
|
||||
@@ -51,6 +52,7 @@ func HandleLogin(c *gin.Context) {
|
||||
RenderHTMLBack(c, "login.html", gin.H{"BTitle": Ei.BTitle})
|
||||
}
|
||||
|
||||
// 登陆接口
|
||||
func HandleLoginPost(c *gin.Context) {
|
||||
user := c.PostForm("user")
|
||||
pwd := c.PostForm("password")
|
||||
@@ -120,6 +122,7 @@ func HandlePost(c *gin.Context) {
|
||||
RenderHTMLBack(c, "admin-post", h)
|
||||
}
|
||||
|
||||
// 删除草稿
|
||||
func HandleDraftDelete(c *gin.Context) {
|
||||
id, err := strconv.Atoi(c.Query("cid"))
|
||||
if err != nil || id < 1 {
|
||||
@@ -184,6 +187,7 @@ func HandleSeries(c *gin.Context) {
|
||||
RenderHTMLBack(c, "admin-series", h)
|
||||
}
|
||||
|
||||
// 编辑专题
|
||||
func HandleSerie(c *gin.Context) {
|
||||
h := GetBack()
|
||||
id, err := strconv.Atoi(c.Query("mid"))
|
||||
@@ -276,6 +280,7 @@ func HandleAPI(c *gin.Context) {
|
||||
api(c)
|
||||
}
|
||||
|
||||
// 渲染 html
|
||||
func RenderHTMLBack(c *gin.Context, name string, data gin.H) {
|
||||
if name == "login.html" {
|
||||
err := Tmpl.ExecuteTemplate(c.Writer, name, data)
|
||||
|
||||
7
check.go
7
check.go
@@ -6,25 +6,30 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// 检查 email
|
||||
func CheckEmail(e string) bool {
|
||||
reg := regexp.MustCompile(`^(\w)+([\.\-]\w+)*@(\w)+((\.\w+)+)$`)
|
||||
return reg.MatchString(e)
|
||||
}
|
||||
|
||||
// 检查 domain
|
||||
func CheckDomain(domain string) bool {
|
||||
reg := regexp.MustCompile(`^(http://|https://)?[0-9a-zA-Z]+[0-9a-zA-Z\.-]*\.[a-zA-Z]{2,4}$`)
|
||||
return reg.MatchString(domain)
|
||||
}
|
||||
|
||||
// 检查 sms
|
||||
func CheckSMS(sms string) bool {
|
||||
reg := regexp.MustCompile(`^\+\d+$`)
|
||||
return reg.MatchString(sms)
|
||||
}
|
||||
|
||||
// 检查 password
|
||||
func CheckPwd(pwd string) bool {
|
||||
return len(pwd) > 5 && len(pwd) < 19
|
||||
}
|
||||
|
||||
// 检查日期
|
||||
func CheckDate(date string) time.Time {
|
||||
if t, err := time.ParseInLocation("2006-01-02 15:04", date, time.Local); err == nil {
|
||||
return t
|
||||
@@ -32,6 +37,7 @@ func CheckDate(date string) time.Time {
|
||||
return time.Now()
|
||||
}
|
||||
|
||||
// 检查 id
|
||||
func CheckSerieID(sid string) int32 {
|
||||
if id, err := strconv.Atoi(sid); err == nil {
|
||||
return int32(id)
|
||||
@@ -39,6 +45,7 @@ func CheckSerieID(sid string) int32 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// bool
|
||||
func CheckBool(str string) bool {
|
||||
return str == "true" || str == "1"
|
||||
}
|
||||
|
||||
3
db.go
3
db.go
@@ -273,6 +273,7 @@ func PageList(p, n int) (prev int, next int, artcs []*Article) {
|
||||
return
|
||||
}
|
||||
|
||||
// 管理 tag
|
||||
func ManageTagsArticle(artc *Article, s bool, do string) {
|
||||
switch do {
|
||||
case ADD:
|
||||
@@ -297,6 +298,7 @@ func ManageTagsArticle(artc *Article, s bool, do string) {
|
||||
}
|
||||
}
|
||||
|
||||
// 管理专题
|
||||
func ManageSeriesArticle(artc *Article, s bool, do string) {
|
||||
switch do {
|
||||
case ADD:
|
||||
@@ -325,6 +327,7 @@ func ManageSeriesArticle(artc *Article, s bool, do string) {
|
||||
}
|
||||
}
|
||||
|
||||
// 管理归档
|
||||
func ManageArchivesArticle(artc *Article, s bool, do string) {
|
||||
switch do {
|
||||
case ADD:
|
||||
|
||||
@@ -152,11 +152,8 @@ func (s *ElasticService) Do(req *http.Request) (interface{}, error) {
|
||||
return b, nil
|
||||
case "HEAD":
|
||||
return resp.StatusCode, nil
|
||||
|
||||
default:
|
||||
return nil, errors.New("unknown methods")
|
||||
}
|
||||
return nil, nil
|
||||
return nil, errors.New("unknown methods")
|
||||
}
|
||||
|
||||
func CreateIndexAndMappings(index, typ string, mappings []byte) (err error) {
|
||||
|
||||
13
front.go
13
front.go
@@ -91,6 +91,7 @@ func GetBase() gin.H {
|
||||
}
|
||||
}
|
||||
|
||||
// not found
|
||||
func HandleNotFound(c *gin.Context) {
|
||||
h := GetBase()
|
||||
h["Version"] = StaticVersion(c)
|
||||
@@ -101,6 +102,7 @@ func HandleNotFound(c *gin.Context) {
|
||||
RenderHTMLFront(c, "notfound", h)
|
||||
}
|
||||
|
||||
// 首页
|
||||
func HandleHomePage(c *gin.Context) {
|
||||
h := GetBase()
|
||||
h["Version"] = StaticVersion(c)
|
||||
@@ -117,6 +119,7 @@ func HandleHomePage(c *gin.Context) {
|
||||
RenderHTMLFront(c, "home", h)
|
||||
}
|
||||
|
||||
// 专题页
|
||||
func HandleSeriesPage(c *gin.Context) {
|
||||
h := GetBase()
|
||||
h["Version"] = StaticVersion(c)
|
||||
@@ -129,6 +132,7 @@ func HandleSeriesPage(c *gin.Context) {
|
||||
RenderHTMLFront(c, "series", h)
|
||||
}
|
||||
|
||||
// 归档页
|
||||
func HandleArchivesPage(c *gin.Context) {
|
||||
h := GetBase()
|
||||
h["Version"] = StaticVersion(c)
|
||||
@@ -141,6 +145,7 @@ func HandleArchivesPage(c *gin.Context) {
|
||||
RenderHTMLFront(c, "archives", h)
|
||||
}
|
||||
|
||||
// 文章
|
||||
func HandleArticlePage(c *gin.Context) {
|
||||
path := c.Param("slug")
|
||||
if !strings.HasSuffix(path, ".html") || Ei.MapArticles[path[:len(path)-5]] == nil {
|
||||
@@ -178,6 +183,7 @@ func HandleArticlePage(c *gin.Context) {
|
||||
RenderHTMLFront(c, name, h)
|
||||
}
|
||||
|
||||
// 搜索页
|
||||
func HandleSearchPage(c *gin.Context) {
|
||||
h := GetBase()
|
||||
h["Version"] = StaticVersion(c)
|
||||
@@ -220,6 +226,7 @@ func HandleSearchPage(c *gin.Context) {
|
||||
RenderHTMLFront(c, "search", h)
|
||||
}
|
||||
|
||||
// 评论页
|
||||
func HandleDisqusFrom(c *gin.Context) {
|
||||
params := strings.Split(c.Param("slug"), "|")
|
||||
if len(params) != 4 || params[1] == "" {
|
||||
@@ -240,26 +247,32 @@ func HandleDisqusFrom(c *gin.Context) {
|
||||
c.Header("Content-Type", "text/html; charset=utf-8")
|
||||
}
|
||||
|
||||
// feed
|
||||
func HandleFeed(c *gin.Context) {
|
||||
http.ServeFile(c.Writer, c.Request, "static/feed.xml")
|
||||
}
|
||||
|
||||
// opensearch
|
||||
func HandleOpenSearch(c *gin.Context) {
|
||||
http.ServeFile(c.Writer, c.Request, "static/opensearch.xml")
|
||||
}
|
||||
|
||||
// robots
|
||||
func HandleRobots(c *gin.Context) {
|
||||
http.ServeFile(c.Writer, c.Request, "static/robots.txt")
|
||||
}
|
||||
|
||||
// sitemap
|
||||
func HandleSitemap(c *gin.Context) {
|
||||
http.ServeFile(c.Writer, c.Request, "static/sitemap.xml")
|
||||
}
|
||||
|
||||
// cross domain
|
||||
func HandleCrossDomain(c *gin.Context) {
|
||||
http.ServeFile(c.Writer, c.Request, "static/crossdomain.xml")
|
||||
}
|
||||
|
||||
// favicon
|
||||
func HandleFavicon(c *gin.Context) {
|
||||
http.ServeFile(c.Writer, c.Request, "static/favicon.ico")
|
||||
}
|
||||
|
||||
@@ -43,14 +43,17 @@ func EncryptPasswd(name, pass string) string {
|
||||
return fmt.Sprintf("%x", h.Sum(nil))
|
||||
}
|
||||
|
||||
// 验证密码
|
||||
func VerifyPasswd(origin, name, input string) bool {
|
||||
return origin == EncryptPasswd(name, input)
|
||||
}
|
||||
|
||||
// 随机 uuid
|
||||
func RandUUIDv4() string {
|
||||
return uuid.NewV4().String()
|
||||
}
|
||||
|
||||
// 读取目录
|
||||
func ReadDir(dir string, filter func(name string) bool) (files []string) {
|
||||
fis, err := ioutil.ReadDir(dir)
|
||||
if err != nil {
|
||||
@@ -69,6 +72,7 @@ func ReadDir(dir string, filter func(name string) bool) (files []string) {
|
||||
return
|
||||
}
|
||||
|
||||
// 去掉 html tag
|
||||
func IgnoreHtmlTag(src string) string {
|
||||
// 去除所有尖括号内的HTML代码
|
||||
re, _ := regexp.Compile(`<[\S\s]+?>`)
|
||||
@@ -79,6 +83,7 @@ func IgnoreHtmlTag(src string) string {
|
||||
return re.ReplaceAllString(src, "")
|
||||
}
|
||||
|
||||
// 获取第一张图片
|
||||
func PickFirstImage(html string) string {
|
||||
re, _ := regexp.Compile(`data-src="(.*?)"`)
|
||||
sli := re.FindAllStringSubmatch(html, 1)
|
||||
@@ -98,6 +103,7 @@ const (
|
||||
YEARS_AGO = "%d年前"
|
||||
)
|
||||
|
||||
// 时间转换为间隔
|
||||
func ConvertStr(str string) string {
|
||||
t, err := time.ParseInLocation("2006-01-02T15:04:05", str, time.UTC)
|
||||
if err != nil {
|
||||
|
||||
2
qiniu.go
2
qiniu.go
@@ -39,6 +39,7 @@ func onProgress(fsize, uploaded int64) {
|
||||
}
|
||||
}
|
||||
|
||||
// 上传文件
|
||||
func FileUpload(name string, size int64, data io.Reader) (string, error) {
|
||||
if setting.Conf.Kodo.AccessKey == "" || setting.Conf.Kodo.SecretKey == "" {
|
||||
return "", errors.New("qiniu config error")
|
||||
@@ -76,6 +77,7 @@ func FileUpload(name string, size int64, data io.Reader) (string, error) {
|
||||
return url, nil
|
||||
}
|
||||
|
||||
// 删除文件
|
||||
func FileDelete(name string) error {
|
||||
// new一个Bucket管理对象
|
||||
c := kodo.New(0, qiniu_cfg)
|
||||
|
||||
@@ -7,11 +7,13 @@ import (
|
||||
)
|
||||
|
||||
func TestUpload(t *testing.T) {
|
||||
path := "/Users/chen/Desktop/png-MicroService-by-StuQ.png"
|
||||
path := "qiniu.go"
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
info, _ := file.Stat()
|
||||
url, err := FileUpload(info.Name(), info.Size(), file)
|
||||
if err != nil {
|
||||
|
||||
@@ -90,6 +90,7 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
// 开始运行
|
||||
func Run() {
|
||||
var (
|
||||
endRunning = make(chan bool, 1)
|
||||
|
||||
5
xml.go
5
xml.go
@@ -32,6 +32,7 @@ func init() {
|
||||
doCrossdomain()
|
||||
}
|
||||
|
||||
// 定时更新 feed
|
||||
func doFeed() {
|
||||
tpl := tpls.Lookup("feedTpl.xml")
|
||||
if tpl == nil {
|
||||
@@ -63,6 +64,7 @@ func doFeed() {
|
||||
time.AfterFunc(time.Hour*4, doFeed)
|
||||
}
|
||||
|
||||
// 定时更新 sitemap
|
||||
func doSitemap() {
|
||||
tpl := tpls.Lookup("sitemapTpl.xml")
|
||||
if tpl == nil {
|
||||
@@ -84,6 +86,7 @@ func doSitemap() {
|
||||
time.AfterFunc(time.Hour*24, doFeed)
|
||||
}
|
||||
|
||||
// 渲染 opensearch
|
||||
func doOpensearch() {
|
||||
tpl := tpls.Lookup("opensearchTpl.xml")
|
||||
if tpl == nil {
|
||||
@@ -108,6 +111,7 @@ func doOpensearch() {
|
||||
}
|
||||
}
|
||||
|
||||
// 渲染 robots
|
||||
func doRobots() {
|
||||
tpl := tpls.Lookup("robotsTpl.xml")
|
||||
if tpl == nil {
|
||||
@@ -130,6 +134,7 @@ func doRobots() {
|
||||
}
|
||||
}
|
||||
|
||||
// 渲染 cross domain
|
||||
func doCrossdomain() {
|
||||
tpl := tpls.Lookup("crossdomainTpl.xml")
|
||||
if tpl == nil {
|
||||
|
||||
Reference in New Issue
Block a user