diff --git a/kernel/bazaar/package.go b/kernel/bazaar/package.go index a360ae0f3..d3f69ba86 100644 --- a/kernel/bazaar/package.go +++ b/kernel/bazaar/package.go @@ -553,7 +553,7 @@ func incPackageDownloads(repoURLHash, systemID string) { } repo := strings.Split(repoURLHash, "@")[0] - u := util.AliyunServer + "/apis/siyuan/bazaar/addBazaarPackageDownloadCount" + u := util.ChinaServer + "/apis/siyuan/bazaar/addBazaarPackageDownloadCount" httpclient.NewCloudRequest30s().SetBody( map[string]interface{}{ "systemID": systemID, diff --git a/kernel/model/assets.go b/kernel/model/assets.go index a6920be2b..66babf905 100644 --- a/kernel/model/assets.go +++ b/kernel/model/assets.go @@ -367,7 +367,7 @@ func uploadAssets2Cloud(sqlAssets []*sql.Asset, bizType string) (err error) { SetCookies(&http.Cookie{Name: "symphony", Value: uploadToken}). SetHeader("meta-type", metaType). SetHeader("biz-type", bizType). - Post(util.AliyunServer + "/apis/siyuan/upload?ver=" + util.Ver) + Post(util.ChinaServer + "/apis/siyuan/upload?ver=" + util.Ver) if nil != reqErr { logging.LogErrorf("upload assets failed: %s", reqErr) return ErrFailedToConnectCloudServer diff --git a/kernel/model/cloud.go b/kernel/model/cloud.go new file mode 100644 index 000000000..3908956cc --- /dev/null +++ b/kernel/model/cloud.go @@ -0,0 +1,54 @@ +// SiYuan - Build Your Eternal Digital Garden +// Copyright (c) 2020-present, b3log.org +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package model + +import "github.com/siyuan-note/siyuan/kernel/util" + +func getCloudServer() string { + if 0 == Conf.CloudRegion { + return util.ChinaServer + } + return util.NorthAmericaServer +} + +func getCloudWebSocketServer() string { + if 0 == Conf.CloudRegion { + return util.ChinaWebSocketServer + } + return util.NorthAmericaWebSocketServer +} + +func getCloudSyncServer() string { + if 0 == Conf.CloudRegion { + return util.ChinaSyncServer + } + return util.NorthAmericaSyncServer +} + +func getCloudAssetsServer() string { + if 0 == Conf.CloudRegion { + return util.ChinaCloudAssetsServer + } + return util.NorthAmericaCloudAssetsServer +} + +func getCloudAccountServer() string { + if 0 == Conf.CloudRegion { + return util.ChinaAccountServer + } + return util.NorthAmericaAccountServer +} diff --git a/kernel/model/conf.go b/kernel/model/conf.go index 637b10093..76cb56f1f 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -79,6 +79,7 @@ type AppConf struct { Repo *conf.Repo `json:"repo"` // 数据仓库 OpenHelp bool `json:"openHelp"` // 启动后是否需要打开用户指南 ShowChangelog bool `json:"showChangelog"` // 是否显示版本更新日志 + CloudRegion int `json:"cloudRegion"` // 云端区域,0:中国大陆,1:北美 } func InitConf() { diff --git a/kernel/model/export.go b/kernel/model/export.go index fe16a50cf..386350a22 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -83,7 +83,7 @@ func Export2Liandi(id string) (err error) { resp, getErr := request. SetSuccessResult(result). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Get(util.LiandiServer + "/api/v2/article/update/" + articleId) + Get(util.ChinaAccountServer + "/api/v2/article/update/" + articleId) if nil != getErr { logging.LogErrorf("get liandi article info failed: %s", getErr) return getErr @@ -105,7 +105,7 @@ func Export2Liandi(id string) (err error) { } } - apiURL := util.LiandiServer + "/api/v2/article" + apiURL := util.ChinaAccountServer + "/api/v2/article" if foundArticle { apiURL += "/" + articleId } @@ -159,7 +159,7 @@ func Export2Liandi(id string) (err error) { } } - msg := fmt.Sprintf(Conf.Language(181), util.LiandiServer+"/article/"+articleId) + msg := fmt.Sprintf(Conf.Language(181), util.ChinaAccountServer+"/article/"+articleId) util.PushMsg(msg, 7000) return } @@ -992,7 +992,7 @@ func ExportStdMarkdown(id string) string { cloudAssetsBase := "" if IsSubscriber() { - cloudAssetsBase = "https://assets.b3logfile.com/siyuan/" + Conf.User.UserId + "/" + cloudAssetsBase = util.ChinaCloudAssetsServer + Conf.User.UserId + "/" } return exportMarkdownContent0(tree, cloudAssetsBase, false, Conf.Export.BlockRefMode, Conf.Export.BlockEmbedMode, Conf.Export.FileAnnotationRefMode, diff --git a/kernel/model/liandi.go b/kernel/model/liandi.go index 05dd6f8f1..41d748690 100644 --- a/kernel/model/liandi.go +++ b/kernel/model/liandi.go @@ -61,7 +61,7 @@ func CloudChatGPT(msg string, contextMsgs []string) (ret string, stop bool, err SetSuccessResult(requestResult). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). SetBody(payload). - Post(util.AliyunServer + "/apis/siyuan/ai/chatGPT") + Post(util.ChinaServer + "/apis/siyuan/ai/chatGPT") if nil != err { logging.LogErrorf("chat gpt failed: %s", err) err = ErrFailedToConnectCloudServer @@ -106,7 +106,7 @@ func StartFreeTrial() (err error) { _, err = request. SetSuccessResult(requestResult). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Post(util.AliyunServer + "/apis/siyuan/user/startFreeTrial") + Post(util.ChinaServer + "/apis/siyuan/user/startFreeTrial") if nil != err { logging.LogErrorf("start free trial failed: %s", err) return ErrFailedToConnectCloudServer @@ -123,7 +123,7 @@ func DeactivateUser() (err error) { resp, err := request. SetSuccessResult(requestResult). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Post(util.AliyunServer + "/apis/siyuan/user/deactivate") + Post(util.ChinaServer + "/apis/siyuan/user/deactivate") if nil != err { logging.LogErrorf("deactivate user failed: %s", err) return ErrFailedToConnectCloudServer @@ -149,7 +149,7 @@ func SetCloudBlockReminder(id, data string, timed int64) (err error) { SetSuccessResult(requestResult). SetBody(payload). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Post(util.AliyunServer + "/apis/siyuan/calendar/setBlockReminder") + Post(util.ChinaServer + "/apis/siyuan/calendar/setBlockReminder") if nil != err { logging.LogErrorf("set block reminder failed: %s", err) return ErrFailedToConnectCloudServer @@ -181,7 +181,7 @@ func LoadUploadToken() (err error) { resp, err := request. SetSuccessResult(requestResult). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Post(util.AliyunServer + "/apis/siyuan/upload/token") + Post(util.ChinaServer + "/apis/siyuan/upload/token") if nil != err { logging.LogErrorf("get upload token failed: %s", err) return ErrFailedToConnectCloudServer @@ -401,7 +401,7 @@ func RemoveCloudShorthands(ids []string) (err error) { SetSuccessResult(&result). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). SetBody(body). - Post(util.AliyunServer + "/apis/siyuan/inbox/removeCloudShorthands") + Post(util.ChinaServer + "/apis/siyuan/inbox/removeCloudShorthands") if nil != err { logging.LogErrorf("remove cloud shorthands failed: %s", err) err = ErrFailedToConnectCloudServer @@ -428,7 +428,7 @@ func GetCloudShorthand(id string) (ret map[string]interface{}, err error) { resp, err := request. SetSuccessResult(&result). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Post(util.AliyunServer + "/apis/siyuan/inbox/getCloudShorthand?id=" + id) + Post(util.ChinaServer + "/apis/siyuan/inbox/getCloudShorthand?id=" + id) if nil != err { logging.LogErrorf("get cloud shorthand failed: %s", err) err = ErrFailedToConnectCloudServer @@ -459,7 +459,7 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) { resp, err := request. SetSuccessResult(&result). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Post(util.AliyunServer + "/apis/siyuan/inbox/getCloudShorthands?p=" + strconv.Itoa(page)) + Post(util.ChinaServer + "/apis/siyuan/inbox/getCloudShorthands?p=" + strconv.Itoa(page)) if nil != err { logging.LogErrorf("get cloud shorthands failed: %s", err) err = ErrFailedToConnectCloudServer @@ -496,7 +496,7 @@ func getUser(token string) (*conf.User, error) { _, err := request. SetSuccessResult(&result). SetBody(map[string]string{"token": token}). - Post(util.AliyunServer + "/apis/siyuan/user") + Post(util.ChinaServer + "/apis/siyuan/user") if nil != err { logging.LogErrorf("get community user failed: %s", err) return nil, errors.New(Conf.Language(18)) @@ -530,7 +530,7 @@ func UseActivationcode(code string) (err error) { SetSuccessResult(requestResult). SetBody(map[string]string{"data": code}). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Post(util.AliyunServer + "/apis/siyuan/useActivationcode") + Post(util.ChinaServer + "/apis/siyuan/useActivationcode") if nil != err { logging.LogErrorf("check activation code failed: %s", err) return ErrFailedToConnectCloudServer @@ -551,7 +551,7 @@ func CheckActivationcode(code string) (retCode int, msg string) { SetSuccessResult(requestResult). SetBody(map[string]string{"data": code}). SetCookies(&http.Cookie{Name: "symphony", Value: Conf.User.UserToken}). - Post(util.AliyunServer + "/apis/siyuan/checkActivationcode") + Post(util.ChinaServer + "/apis/siyuan/checkActivationcode") if nil != err { logging.LogErrorf("check activation code failed: %s", err) msg = ErrFailedToConnectCloudServer.Error() @@ -570,7 +570,7 @@ func Login(userName, password, captcha string) (ret *gulu.Result, err error) { _, err = request. SetSuccessResult(&result). SetBody(map[string]string{"userName": userName, "userPassword": password, "captcha": captcha}). - Post(util.AliyunServer + "/apis/siyuan/login") + Post(util.ChinaServer + "/apis/siyuan/login") if nil != err { logging.LogErrorf("login failed: %s", err) return nil, errors.New(Conf.Language(18)) @@ -597,7 +597,7 @@ func Login2fa(token, code string) (map[string]interface{}, error) { SetSuccessResult(&result). SetBody(map[string]string{"twofactorAuthCode": code}). SetHeader("token", token). - Post(util.AliyunServer + "/apis/siyuan/login/2fa") + Post(util.ChinaServer + "/apis/siyuan/login/2fa") if nil != err { logging.LogErrorf("login 2fa failed: %s", err) return nil, errors.New(Conf.Language(18)) diff --git a/kernel/model/sync.go b/kernel/model/sync.go index e4cb892b5..051a61a84 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -573,7 +573,7 @@ func planSyncAfter(d time.Duration) { } func isProviderOnline(byHand bool) (ret bool) { - checkURL := util.SiYuanSyncServer + checkURL := util.ChinaSyncServer skipTlsVerify := false switch Conf.Sync.Provider { case conf.ProviderSiYuan: @@ -744,7 +744,7 @@ var KernelID = gulu.Rand.String(7) func dialSyncWebSocket() (c *websocket.Conn, err error) { //endpoint := "ws://127.0.0.1:64388" + "/apis/siyuan/dejavu/ws" - endpoint := util.AliyunWebSocketServer + "/apis/siyuan/dejavu/ws" + endpoint := util.ChinaWebSocketServer + "/apis/siyuan/dejavu/ws" header := http.Header{ "x-siyuan-uid": []string{Conf.User.UserId}, "x-siyuan-kernel": []string{KernelID}, diff --git a/kernel/util/path.go b/kernel/util/path.go index 3012bfc66..af1b53067 100644 --- a/kernel/util/path.go +++ b/kernel/util/path.go @@ -36,12 +36,20 @@ var ( ) const ( - AliyunServer = "https://siyuan-sync.b3logfile.com" // 云端服务地址,阿里云负载均衡,用于接口,数据同步文件上传、下载会走七牛云 OSS SiYuanSyncServer - AliyunWebSocketServer = "wss://siyuan-sync.b3logfile.com" // 云端服务地址,阿里云负载均衡,用于接口,数据同步文件上传、下载会走七牛云 OSS SiYuanSyncServer - SiYuanSyncServer = "https://siyuan-data.b3logfile.com/" // 云端数据同步服务地址,七牛云 OSS,用于数据同步文件上传、下载 - BazaarStatServer = "http://bazaar.b3logfile.com" // 集市包统计服务地址,直接对接 Bucket 没有 CDN 缓存 - BazaarOSSServer = "https://oss.b3logfile.com" // 云端对象存储地址,七牛云,仅用于读取集市包 - LiandiServer = "https://ld246.com" // 链滴服务地址,用于分享发布帖子 + ChinaServer = "https://siyuan-sync.b3logfile.com" // 中国大陆云端服务地址,阿里云负载均衡,用于接口,数据同步文件上传、下载会走七牛云 OSS ChinaSyncServer + ChinaWebSocketServer = "wss://siyuan-sync.b3logfile.com" // 中国大陆云端服务地址,阿里云负载均衡,用于接口,数据同步文件上传、下载会走七牛云 OSS ChinaSyncServer + ChinaSyncServer = "https://siyuan-data.b3logfile.com/" // 中国大陆云端数据同步服务地址,七牛云 OSS,用于数据同步文件上传、下载 + ChinaCloudAssetsServer = "https://assets.b3logfile.com/siyuan/" // 中国大陆云端图床服务地址,用于导出预览模式下订阅会员渲染图床 + ChinaAccountServer = "https://ld246.com" // 中国大陆链滴服务地址,用于账号登录、分享发布帖子 + + NorthAmericaServer = "https://siyuan-cloud.liuyun.io" // 北美云端服务地址,Cloudflare + NorthAmericaWebSocketServer = "wss://siyuan-cloud.liuyun.io" // 北美云端服务地址,Cloudflare,用于接口,数据同步文件上传、下载会走七牛云 OSS ChinaSyncServer + NorthAmericaSyncServer = "https://siyuan-data.liuyun.io/" // 北美云端数据同步服务地址,七牛云 OSS,用于数据同步文件上传、下载 + NorthAmericaCloudAssetsServer = "https://assets.liuyun.io/siyuan/" // 北美云端图床服务地址,用于导出预览模式下订阅会员渲染图床 + NorthAmericaAccountServer = "https://liuyun.io" // 流云服务地址,用于账号登录、分享发布帖子 + + BazaarStatServer = "http://bazaar.b3logfile.com" // 集市包统计服务地址,直接对接 Bucket 没有 CDN + BazaarOSSServer = "https://oss.b3logfile.com" // 云端对象存储地址,七牛云,仅用于读取集市包,全球 CDN ) func ShortPathForBootingDisplay(p string) string { diff --git a/kernel/util/rhy.go b/kernel/util/rhy.go index bd306d150..3054422f1 100644 --- a/kernel/util/rhy.go +++ b/kernel/util/rhy.go @@ -38,7 +38,7 @@ func GetRhyResult(force bool) (map[string]interface{}, error) { } request := httpclient.NewCloudRequest30s() - _, err := request.SetSuccessResult(&cachedRhyResult).Get(AliyunServer + "/apis/siyuan/version?ver=" + Ver) + _, err := request.SetSuccessResult(&cachedRhyResult).Get(ChinaServer + "/apis/siyuan/version?ver=" + Ver) if nil != err { logging.LogErrorf("get version info failed: %s", err) return nil, err