zentao.go 4.6 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1
package zentaoHelper
2 3

import (
4
	"errors"
5
	"fmt"
雨爱无痕 已提交
6
	"net/url"
Z
zhaoke 已提交
7 8 9
	"regexp"
	"strings"

雨爱无痕 已提交
10 11
	fileUtils "github.com/easysoft/zentaoatf/pkg/lib/file"

12
	"github.com/bitly/go-simplejson"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
13
	commConsts "github.com/easysoft/zentaoatf/internal/pkg/consts"
Z
zhaoke 已提交
14
	commDomain "github.com/easysoft/zentaoatf/internal/pkg/domain"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
15
	serverDomain "github.com/easysoft/zentaoatf/internal/server/modules/v1/domain"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
16 17 18
	httpUtils "github.com/easysoft/zentaoatf/pkg/lib/http"
	i118Utils "github.com/easysoft/zentaoatf/pkg/lib/i118"
	logUtils "github.com/easysoft/zentaoatf/pkg/lib/log"
19 20
)

21
func GetConfig(baseUrl string) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
22
	url := baseUrl + "?mode=getconfig"
23 24 25
	bytes, err := httpUtils.Get(url)
	if err != nil {
		return
aaronchen2k2k's avatar
aaronchen2k2k 已提交
26 27 28 29 30 31 32
	}

	json, _ := simplejson.NewJson(bytes)
	commConsts.ZenTaoVersion, _ = json.Get("version").String()
	commConsts.SessionId, _ = json.Get("sessionID").String()
	commConsts.SessionVar, _ = json.Get("sessionVar").String()
	requestType, _ := json.Get("requestType").String()
aaronchen2k2k's avatar
i118  
aaronchen2k2k 已提交
33
	commConsts.RequestType = requestType
aaronchen2k2k's avatar
aaronchen2k2k 已提交
34 35
	commConsts.RequestFix, _ = json.Get("requestFix").String()

36
	return
aaronchen2k2k's avatar
aaronchen2k2k 已提交
37 38
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
39
func Login(config commDomain.WorkspaceConf) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
40 41 42 43 44 45 46 47
	url := GenApiUrl("tokens", nil, config.Url)

	params := map[string]string{
		"account":  config.Username,
		"password": config.Password,
	}
	bodyBytes, err := httpUtils.Post(url, params)
	if err != nil {
48
		err = ZentaoLoginErr(err.Error())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
49
		return
aaronchen2k2k's avatar
aaronchen2k2k 已提交
50 51
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
52 53
	jsn, err := simplejson.NewJson(bodyBytes)
	if err != nil {
54
		err = ZentaoLoginErr(err.Error())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
55 56

		return
aaronchen2k2k's avatar
aaronchen2k2k 已提交
57 58
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
59 60 61
	if jsn == nil {
		return
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
62 63
	mp, err := jsn.Map()
	if err != nil {
64
		err = ZentaoLoginErr(err.Error())
aaronchen2k2k's avatar
aaronchen2k2k 已提交
65 66 67

		return
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
68 69 70 71

	val, ok := mp["token"]
	if ok {
		commConsts.SessionId = val.(string)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
72 73 74
		if commConsts.Verbose {
			logUtils.Info(i118Utils.Sprintf("success_to_login"))
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
75 76

	} else {
Z
zhaoke 已提交
77
		err = ZentaoLoginErr(fmt.Sprintf("%#v", mp["error"]))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
78 79

		return
aaronchen2k2k's avatar
aaronchen2k2k 已提交
80 81 82 83 84
	}

	return
}

雨爱无痕 已提交
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
func LoginSilently(config commDomain.WorkspaceConf) (err error) {
	url := GenApiUrl("tokens", nil, config.Url)

	params := map[string]string{
		"account":  config.Username,
		"password": config.Password,
	}
	bodyBytes, err := httpUtils.Post(url, params)
	if err != nil {
		return
	}

	jsn, err := simplejson.NewJson(bodyBytes)
	if err != nil {
		return
	}

	if jsn == nil {
		return
	}
	mp, err := jsn.Map()
	if err != nil {
		return
	}

	val, ok := mp["token"]
	if ok {
		commConsts.SessionId = val.(string)
		if commConsts.Verbose {
			logUtils.Info(i118Utils.Sprintf("success_to_login"))
		}
	} else {
		if commConsts.Verbose {
			err = ZentaoLoginErr(fmt.Sprintf("%#v", mp["error"]))
		}

		return
	}

	return
}

127
func ListLang() (langs []serverDomain.ZentaoLang, err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
128 129
	for key, mp := range commConsts.LangMap {
		langs = append(langs, serverDomain.ZentaoLang{Code: key, Name: mp["name"]})
130 131 132 133 134
	}

	return
}

雨爱无痕 已提交
135
func FixUrl(url string) (ret string) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
136 137 138 139 140 141 142 143 144 145 146 147
	regx := regexp.MustCompile(`(http|https):\/\/.+`)
	result := regx.FindStringSubmatch(url)
	if result == nil {
		return
	}

	regx = regexp.MustCompile(`[^:\/]\/`)
	result = regx.FindStringSubmatch(url)
	if result == nil { // without /
		ret = url
	} else {
		index := strings.LastIndex(url, "/")
Z
zhaoke 已提交
148 149 150 151 152
		if url[index+1:] != "zentao" {
			ret = url[:index+1]
		} else {
			ret = url
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
153 154 155 156
	}

	return
}
雨爱无痕 已提交
157

158
func GetSiteUrl(srcUrl string) (baseUrl, version string, err error) {
Z
zhaoke 已提交
159
	url1, url2 := FixSiteUrl(srcUrl)
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178

	version = getZentaoVersion(url1)
	if version != "" {
		baseUrl = url1
	} else {
		version = getZentaoVersion(url2)
		if version != "" {
			baseUrl = url2
		}
	}

	if baseUrl == "" {
		err = errors.New(i118Utils.Sprintf("wrong_zentao_url"))
		return
	}

	return
}

Z
zhaoke 已提交
179
func FixSiteUrl(originalUrl string) (url1, url2 string) {
180
	u, _ := url.Parse(originalUrl)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
181 182 183
	url1 = fmt.Sprintf("%s://%s", u.Scheme, u.Host)
	url1 += "/"

184
	pth := strings.Replace(originalUrl, url1, "", -1)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
185 186
	pth = strings.TrimLeft(pth, "/")
	arr := strings.Split(pth, "/")
雨爱无痕 已提交
187
	if len(arr) >= 1 {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
188
		url2 = url1 + arr[0]
雨爱无痕 已提交
189
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
190 191 192 193

	url1 = fileUtils.AddUrlPathSepIfNeeded(url1)
	url2 = fileUtils.AddUrlPathSepIfNeeded(url2)

雨爱无痕 已提交
194 195
	return
}
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236

//func CheckRestApi(baseUrl string) (err error) {
//	url := baseUrl + "api.php/v1/products"
//	bytes, err := httpUtils.Get(url)
//	if err != nil {
//		return
//	}
//
//	json, err := simplejson.NewJson(bytes)
//	if err != nil {
//		return
//	}
//
//	total, err := json.Get("total").Int()
//	if err != nil {
//		return
//	}
//
//	if total < 1 {
//		err = errors.New(i118Utils.Sprintf("wrong_zentao_url"))
//	}
//
//	return
//}

func getZentaoVersion(baseUrl string) (ret string) {
	url := baseUrl + "?mode=getconfig"
	bytes, isForward, err := httpUtils.GetCheckForward(url)
	if err != nil || isForward {
		return
	}

	json, err := simplejson.NewJson(bytes)
	if err != nil {
		return
	}

	ret, _ = json.Get("version").String()

	return
}