Browse Source

:art: Support LiuYun account login https://github.com/siyuan-note/siyuan/issues/8578

Daniel 2 years ago
parent
commit
f37a358cd6

+ 1 - 1
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,

+ 1 - 1
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

+ 54 - 0
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 <https://www.gnu.org/licenses/>.
+
+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
+}

+ 1 - 0
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() {

+ 4 - 4
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,

+ 13 - 13
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))

+ 2 - 2
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},

+ 14 - 6
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 {

+ 1 - 1
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