You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
572 lines
13 KiB
572 lines
13 KiB
package http |
|
|
|
import ( |
|
"encoding/base64" |
|
"net/http" |
|
"net/url" |
|
"strconv" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/interface/main/creative/model/article" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/net/metadata" |
|
) |
|
|
|
func webArticlePre(c *bm.Context) { |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check user |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mf, err := accSvc.MyInfo(c, mid, ip, time.Now()) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
categories, err := artSvc.Categories(c) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
rc, _ := artSvc.RemainCount(c, mid, ip) |
|
c.JSON(map[string]interface{}{ |
|
"categories": categories, |
|
"myinfo": mf, |
|
"toplimit": rc, |
|
}, nil) |
|
} |
|
|
|
func webSubArticle(c *bm.Context) { |
|
params := c.Request.Form |
|
aidStr := params.Get("aid") |
|
title := params.Get("title") |
|
content := params.Get("content") |
|
summary := params.Get("summary") |
|
bannerURL := params.Get("banner_url") |
|
tidStr := params.Get("tid") |
|
categoryStr := params.Get("category") |
|
reprintStr := params.Get("reprint") |
|
tags := params.Get("tags") |
|
imageURLs := params.Get("image_urls") |
|
wordsStr := params.Get("words") |
|
actIDStr := params.Get("act_id") |
|
dynamicIntrosStr := params.Get("dynamic_intro") |
|
originImageURLs := params.Get("origin_image_urls") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
ck := c.Request.Header.Get("cookie") |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
var ( |
|
aid int64 |
|
actID int64 |
|
) |
|
if aidStr != "" { |
|
id, err := strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil || id <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
aid = id |
|
} |
|
if actIDStr != "" { |
|
actid, err := strconv.ParseInt(actIDStr, 10, 64) |
|
if err != nil || actid <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
actID = actid |
|
} |
|
words, _ := strconv.ParseInt(wordsStr, 10, 64) |
|
artParam, err := artSvc.ParseParam(c, categoryStr, reprintStr, tidStr, imageURLs, originImageURLs) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
// params |
|
art := &article.ArtParam{ |
|
AID: aid, |
|
MID: mid, |
|
Title: title, |
|
Content: content, |
|
Summary: summary, |
|
BannerURL: bannerURL, |
|
Tags: tags, |
|
ImageURLs: artParam.ImageURLs, |
|
OriginImageURLs: artParam.OriginImageURLs, |
|
RealIP: ip, |
|
Category: artParam.Category, |
|
TemplateID: artParam.TemplateID, |
|
Reprint: artParam.Reprint, |
|
Words: words, |
|
DynamicIntro: dynamicIntrosStr, |
|
ActivityID: actID, |
|
} |
|
// submit |
|
id, err := artSvc.SubArticle(c, mid, art, "", ck, metadata.String(c, metadata.RemoteIP)) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(map[string]int64{ |
|
"aid": id, |
|
}, nil) |
|
} |
|
|
|
func webUpdateArticle(c *bm.Context) { |
|
params := c.Request.Form |
|
aidStr := params.Get("aid") |
|
title := params.Get("title") |
|
content := params.Get("content") |
|
summary := params.Get("summary") |
|
bannerURL := params.Get("banner_url") |
|
tidStr := params.Get("tid") |
|
categoryStr := params.Get("category") |
|
reprintStr := params.Get("reprint") |
|
tags := params.Get("tags") |
|
imageURLs := params.Get("image_urls") |
|
wordsStr := params.Get("words") |
|
dynamicIntrosStr := params.Get("dynamic_intro") |
|
originImageURLs := params.Get("origin_image_urls") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
ck := c.Request.Header.Get("cookie") |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
aid, err := strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil || aid <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
words, _ := strconv.ParseInt(wordsStr, 10, 64) |
|
artParam, err := artSvc.ParseParam(c, categoryStr, reprintStr, tidStr, imageURLs, originImageURLs) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
// params |
|
art := &article.ArtParam{ |
|
AID: aid, |
|
MID: mid, |
|
Title: title, |
|
Content: content, |
|
Summary: summary, |
|
BannerURL: bannerURL, |
|
Tags: tags, |
|
ImageURLs: artParam.ImageURLs, |
|
OriginImageURLs: artParam.OriginImageURLs, |
|
RealIP: ip, |
|
Category: artParam.Category, |
|
TemplateID: artParam.TemplateID, |
|
Reprint: artParam.Reprint, |
|
Words: words, |
|
DynamicIntro: dynamicIntrosStr, |
|
} |
|
c.JSON(nil, artSvc.UpdateArticle(c, mid, art, "", ck, ip)) |
|
} |
|
|
|
func webDelArticle(c *bm.Context) { |
|
params := c.Request.Form |
|
aidStr := params.Get("aid") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
aid, err := strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil || aid <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
c.JSON(artSvc.DelArticle(c, aid, mid, ip), nil) |
|
} |
|
|
|
func webArticle(c *bm.Context) { |
|
params := c.Request.Form |
|
aidStr := params.Get("aid") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
aid, err := strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil || aid <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
art, err := artSvc.View(c, aid, mid, ip) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(art, nil) |
|
} |
|
|
|
func webArticleList(c *bm.Context) { |
|
params := c.Request.Form |
|
pnStr := params.Get("pn") |
|
psStr := params.Get("ps") |
|
sortStr := params.Get("sort") |
|
groupStr := params.Get("group") |
|
categoryStr := params.Get("category") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
pn, err := strconv.Atoi(pnStr) |
|
if err != nil || pn < 1 { |
|
pn = 1 |
|
} |
|
ps, err := strconv.Atoi(psStr) |
|
if err != nil || ps <= 10 { |
|
ps = 20 |
|
} |
|
sort, err := strconv.Atoi(sortStr) |
|
if err != nil || sort < 0 { |
|
sort = 0 |
|
} |
|
group, err := strconv.Atoi(groupStr) |
|
if err != nil || group < 0 { |
|
group = 0 |
|
} |
|
category, err := strconv.Atoi(categoryStr) |
|
if err != nil || category < 0 { |
|
category = 0 |
|
} |
|
arts, err := artSvc.Articles(c, mid, int(pn), int(ps), sort, group, category, ip) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSONMap(map[string]interface{}{ |
|
"artlist": arts, |
|
}, nil) |
|
} |
|
|
|
func webWithDrawArticle(c *bm.Context) { |
|
params := c.Request.Form |
|
aidStr := params.Get("aid") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
aid, err := strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil || aid <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
c.JSON(nil, artSvc.WithDrawArticle(c, aid, mid, ip)) |
|
} |
|
|
|
func webArticleUpCover(c *bm.Context) { |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
log.Info("webArticleUpCover mid(%d)", mid) |
|
cover := c.Request.Form.Get("cover") |
|
c.Request.Form.Del("cover") // NOTE: make sure write log concise |
|
ss := strings.Split(cover, ",") |
|
if len(ss) != 2 || len(ss[1]) == 0 { |
|
log.Error("webArticleUpCover format error mid(%d)|cover(%s)|coverSlice(%s)", mid, cover, ss) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
bs, err := base64.StdEncoding.DecodeString(ss[1]) |
|
if err != nil { |
|
log.Error("webArticleUpCover base64.StdEncoding.DecodeString(%s)|mid(%d)|error(%v)", ss[1], mid, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
ftype := http.DetectContentType(bs) |
|
if ftype != "image/jpeg" && ftype != "image/jpg" && ftype != "image/png" && ftype != "image/gif" { |
|
log.Error("webArticleUpCover file type not allow file type(%s)|mid(%d)", ftype, mid) |
|
c.JSON(nil, ecode.CreativeArticleImageTypeErr) |
|
return |
|
} |
|
url, err := artSvc.ArticleUpCover(c, ftype, bs) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(map[string]interface{}{ |
|
"url": url, |
|
"size": len(bs), |
|
}, nil) |
|
} |
|
|
|
func webSubmitDraft(c *bm.Context) { |
|
params := c.Request.Form |
|
aidStr := params.Get("aid") |
|
title := params.Get("title") |
|
content := params.Get("content") |
|
summary := params.Get("summary") |
|
bannerURL := params.Get("banner_url") |
|
tidStr := params.Get("tid") |
|
categoryStr := params.Get("category") |
|
reprintStr := params.Get("reprint") |
|
tags := params.Get("tags") |
|
imageURLs := params.Get("image_urls") |
|
wordsStr := params.Get("words") |
|
dynamicIntrosStr := params.Get("dynamic_intro") |
|
originImageURLs := params.Get("origin_image_urls") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
var ( |
|
did int64 |
|
err error |
|
) |
|
if aidStr != "" { |
|
did, err = strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil || did <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
} |
|
words, _ := strconv.ParseInt(wordsStr, 10, 64) |
|
artParam, err := artSvc.ParseDraftParam(c, categoryStr, reprintStr, tidStr, imageURLs, originImageURLs) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
// params |
|
art := &article.ArtParam{ |
|
AID: did, |
|
MID: mid, |
|
Title: title, |
|
Content: content, |
|
Summary: summary, |
|
BannerURL: bannerURL, |
|
Tags: tags, |
|
ImageURLs: artParam.ImageURLs, |
|
OriginImageURLs: artParam.OriginImageURLs, |
|
RealIP: ip, |
|
Category: artParam.Category, |
|
TemplateID: artParam.TemplateID, |
|
Reprint: artParam.Reprint, |
|
Words: words, |
|
DynamicIntro: dynamicIntrosStr, |
|
} |
|
// add draft |
|
id, err := artSvc.AddDraft(c, mid, art) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(map[string]int64{ |
|
"aid": id, |
|
}, nil) |
|
} |
|
|
|
func webDeleteDraft(c *bm.Context) { |
|
params := c.Request.Form |
|
aidStr := params.Get("aid") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
aid, err := strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil || aid <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
c.JSON(nil, artSvc.DelDraft(c, aid, mid, ip)) |
|
} |
|
|
|
func webDraft(c *bm.Context) { |
|
params := c.Request.Form |
|
aidStr := params.Get("aid") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
aid, err := strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil || aid <= 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
art, err := artSvc.Draft(c, aid, mid, ip) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(art, nil) |
|
} |
|
|
|
func webDraftList(c *bm.Context) { |
|
params := c.Request.Form |
|
pnStr := params.Get("pn") |
|
psStr := params.Get("ps") |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
pn, err := strconv.Atoi(pnStr) |
|
if err != nil || pn < 1 { |
|
pn = 1 |
|
} |
|
ps, err := strconv.Atoi(psStr) |
|
if err != nil || ps <= 10 { |
|
ps = 20 |
|
} |
|
arts, err := artSvc.Drafts(c, mid, pn, ps, ip) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSONMap(map[string]interface{}{ |
|
"artlist": arts, |
|
}, nil) |
|
} |
|
|
|
func webAuthor(c *bm.Context) { |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
isAuthor, _ := artSvc.IsAuthor(c, mid, ip) |
|
c.JSON(map[string]interface{}{ |
|
"mid": mid, |
|
"is_author": isAuthor, |
|
}, nil) |
|
} |
|
|
|
func webArticleCapture(c *bm.Context) { |
|
params := c.Request.Form |
|
originURL := params.Get("url") |
|
// check params |
|
midI, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
mid, ok := midI.(int64) |
|
if !ok || mid <= 0 { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
if originURL == "" { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
log.Info("capture mid(%d) origin imageURL (%s)", mid, originURL) |
|
_, err := url.ParseRequestURI(originURL) |
|
if err != nil { |
|
log.Error("capture check url(%s) format error(%v)", originURL, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
imgURL, size, err := artSvc.ArticleCapture(c, originURL) |
|
if err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(map[string]interface{}{ |
|
"url": imgURL, |
|
"size": size, |
|
}, nil) |
|
}
|
|
|