MCPcopy Index your code
hub / github.com/TruthHun/BookStack / handleReleaseV3

Method handleReleaseV3

controllers/api/CommonController.go:942–1005  ·  view source on GitHub ↗
(release, bookIdentify string)

Source from the content-addressed store, hash-verified

940}
941
942func (this *CommonController) handleReleaseV3(release, bookIdentify string) (htmlNodes interface{}, images []string, links []map[string]string) {
943 query, err := goquery.NewDocumentFromReader(bytes.NewBufferString(release))
944 if err != nil {
945 beego.Error(err)
946 htmlNodes = release
947 return
948 }
949 // 处理svg
950 utils.HandleSVG(query, bookIdentify)
951 query.Find(".reference-link").Remove()
952 query.Find(".header-link").Remove()
953 medias := []string{"audio", "video"}
954 for _, tag := range medias {
955 query.Find(tag).Each(func(idx int, sel *goquery.Selection) {
956 src, ok := sel.Attr("src")
957 if ok && !(strings.HasPrefix(src, "https://") || strings.HasPrefix(src, "http://")) {
958 if utils.StoreType == utils.StoreOss { // OSS 云存储,则使用OSS签名,否则使用本地存储的链接签名
959 if bucket, err := store.ModelStoreOss.GetBucket(); err == nil {
960 src = strings.TrimLeft(src, "/")
961 src, _ = bucket.SignURL(src, http.MethodGet, utils.MediaDuration)
962 if slice := strings.Split(src, "/"); len(slice) > 2 {
963 src = strings.Join(slice[3:], "/")
964 }
965 }
966 } else {
967 if sign, err := utils.GenerateMediaSign(src, time.Now().UnixNano(), time.Duration(utils.MediaDuration)); err == nil {
968 if strings.Contains(src, "?") {
969 src = src + "&sign=" + sign
970 } else {
971 src = src + "?sign=" + sign
972 }
973 }
974 }
975 }
976 sel.SetAttr("src", src)
977 })
978 }
979
980 query.Find("img").Each(func(idx int, sel *goquery.Selection) {
981 if src, ok := sel.Attr("src"); ok {
982 images = append(images, src)
983 }
984 })
985
986 prefix := "/read/"
987 query.Find("a").Each(func(idx int, sel *goquery.Selection) {
988 if href, ok := sel.Attr("href"); ok && strings.HasPrefix(href, prefix) {
989 if text := strings.TrimSpace(sel.Text()); text != "" {
990 href = strings.Split(strings.Split(strings.TrimPrefix(href, prefix), "?")[0], "#")[0]
991 links = append(links, map[string]string{"title": text, "href": href})
992 }
993 }
994 })
995
996 release, _ = query.Html()
997 nodes, err := html2json.NewDefault().ParseByByteV2([]byte(release), models.GetAPIStaticDomain())
998 if err != nil {
999 beego.Error(err)

Callers 1

ReadMethod · 0.95

Calls 6

HandleSVGFunction · 0.92
GenerateMediaSignFunction · 0.92
GetAPIStaticDomainFunction · 0.92
GetBucketMethod · 0.80
appendFunction · 0.50
FindMethod · 0.45

Tested by

no test coverage detected