20251209
This commit is contained in:
77
archive/bbs-go-active/server/internal/pkg/bbsurls/urls.go
Normal file
77
archive/bbs-go-active/server/internal/pkg/bbsurls/urls.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package bbsurls
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"bbs-go/internal/pkg/config"
|
||||
)
|
||||
|
||||
// 是否是内部链接
|
||||
func IsInternalUrl(href string) bool {
|
||||
if IsAnchor(href) {
|
||||
return true
|
||||
}
|
||||
u, err := url.Parse(config.Instance.BaseUrl)
|
||||
if err != nil {
|
||||
slog.Error(err.Error(), slog.Any("err", err))
|
||||
return false
|
||||
}
|
||||
return strings.Contains(href, u.Host)
|
||||
}
|
||||
|
||||
// 是否是锚链接
|
||||
func IsAnchor(href string) bool {
|
||||
return strings.Index(href, "#") == 0
|
||||
}
|
||||
|
||||
func AbsUrl(path string) string {
|
||||
return config.Instance.BaseUrl + path
|
||||
}
|
||||
|
||||
// 用户主页
|
||||
func UserUrl(userId int64) string {
|
||||
return AbsUrl("/user/" + strconv.FormatInt(userId, 10))
|
||||
}
|
||||
|
||||
// 文章详情
|
||||
func ArticleUrl(articleId int64) string {
|
||||
return AbsUrl("/article/" + strconv.FormatInt(articleId, 10))
|
||||
}
|
||||
|
||||
// 标签文章列表
|
||||
func TagArticlesUrl(tagId int64) string {
|
||||
return AbsUrl("/articles/" + strconv.FormatInt(tagId, 10))
|
||||
}
|
||||
|
||||
// 话题详情
|
||||
func TopicUrl(topicId int64) string {
|
||||
return AbsUrl("/topic/" + strconv.FormatInt(topicId, 10))
|
||||
}
|
||||
|
||||
func UrlJoin(parts ...string) string {
|
||||
sep := "/"
|
||||
var ss []string
|
||||
for i, part := range parts {
|
||||
part = strings.TrimSpace(part)
|
||||
var (
|
||||
from = 0
|
||||
to = len(part)
|
||||
)
|
||||
if strings.Index(part, sep) == 0 {
|
||||
from = 1
|
||||
}
|
||||
if strings.LastIndex(part, sep) == len(part)-1 {
|
||||
to = len(part) - 1
|
||||
}
|
||||
part = part[from:to]
|
||||
|
||||
ss = append(ss, part)
|
||||
if i != len(parts)-1 {
|
||||
ss = append(ss, sep)
|
||||
}
|
||||
}
|
||||
return strings.Join(ss, "")
|
||||
}
|
||||
Reference in New Issue
Block a user