Example #1
0
func defaultCacheKeyAlgorithm(ctx echo.Context) string {
	filter := map[string]bool{
		"from":      true,
		"sign":      true,
		"nonce":     true,
		"timestamp": true,
	}
	form := ctx.FormParams()
	var keys = make([]string, 0, len(form))
	for key := range form {
		if _, ok := filter[key]; !ok {
			keys = append(keys, key)
		}
	}

	sort.Sort(sort.StringSlice(keys))

	buffer := goutils.NewBuffer()
	for _, k := range keys {
		buffer.Append(k).Append("=").Append(ctx.FormValue(k))
	}

	req := ctx.Request()
	return goutils.Md5(req.Method() + req.URL().Path() + buffer.String())
}
Example #2
0
// 驼峰式写法转为下划线写法
func UnderscoreName(name string) string {
	buffer := goutils.NewBuffer()
	for i, r := range name {
		if unicode.IsUpper(r) {
			if i != 0 {
				buffer.Append('_')
			}
			buffer.Append(unicode.ToLower(r))
		} else {
			buffer.Append(r)
		}
	}

	return buffer.String()
}
Example #3
0
func (s *Service) GenSign(args map[string]interface{}) string {
	keys := make([]string, 0, len(args))
	for k := range args {
		keys = append(keys, k)
	}
	sort.Sort(sort.StringSlice(keys))

	buffer := goutils.NewBuffer()
	for _, k := range keys {
		buffer.Append(k).Append("=").Append(goutils.ConvertString(args[k]))
	}

	if s.CommonSalt != "" {
		buffer.Append(s.CommonSalt)
	} else {
		if from, ok := args["from"]; ok {
			if salt, ok := s.FromSalt[goutils.ConvertString(from)]; ok {
				buffer.Append(salt)
			}
		}
	}

	return goutils.Md5(buffer.String())
}
Example #4
0
func (this *SolrClient) Post() error {
	stringBuilder := goutils.NewBuffer().Append("{")

	needComma := false
	for _, addCommand := range this.addCommands {
		commandJson, err := json.Marshal(addCommand)
		if err != nil {
			continue
		}

		if stringBuilder.Len() == 1 {
			needComma = false
		} else {
			needComma = true
		}

		if needComma {
			stringBuilder.Append(",")
		}

		stringBuilder.Append(`"add":`).Append(commandJson)
	}

	for _, delCommand := range this.delCommands {
		commandJson, err := json.Marshal(delCommand)
		if err != nil {
			continue
		}

		if stringBuilder.Len() == 1 {
			needComma = false
		} else {
			needComma = true
		}

		if needComma {
			stringBuilder.Append(",")
		}

		stringBuilder.Append(`"delete":`).Append(commandJson)
	}

	if stringBuilder.Len() == 1 {
		logger.Errorln("post docs:no right addcommand")
		return errors.New("no right addcommand")
	}

	stringBuilder.Append("}")

	logger.Infoln("start post data to solr...")

	resp, err := http.Post(config.ConfigFile.MustValue("search", "engine_url")+"/update?wt=json&commit=true", "application/json", stringBuilder)
	if err != nil {
		logger.Errorln("post error:", err)
		return err
	}

	defer resp.Body.Close()

	var result map[string]interface{}
	err = json.NewDecoder(resp.Body).Decode(&result)
	if err != nil {
		logger.Errorln("parse response error:", err)
		return err
	}

	logger.Infoln("post data result:", result)

	return nil
}
Example #5
0
// GetPageHtml 构造分页html, uri 当前uri, total 记录总数
func (this *Paginator) GetPageHtml(uri string, total ...int) string {
	if len(total) > 0 {
		this.SetTotal(int64(total[0]))
	}

	if this.totalPage < 2 {
		return ""
	}

	if !strings.Contains(uri, "?") {
		uri += "?"
	}

	// 显示5页,然后显示...,接着显示最后两页
	stringBuilder := goutils.NewBuffer()
	stringBuilder.Append(`<li class="prev previous_page">`)
	// 当前是第一页
	if this.curPage != 1 {
		stringBuilder.Append(`<a href="`).Append(uri).Append("p=").Append(this.curPage - 1).Append(`">&laquo;</a>`)
	}
	stringBuilder.Append(`</li>`)

	// 当前页前后至少保持两页可以翻看;
	// 离最开始或最后5页内,不显示 ...,否则显示 ...
	if this.curPage <= maxShow {
		// 当前页之前的页
		for i := 0; i < this.curPage-1; i++ {
			this.appendPage(stringBuilder, uri, i+1)
		}
		// 当前页
		this.appendCurPage(stringBuilder, uri)

		// 当前页之后的页

		// 全部显示
		if this.totalPage-this.curPage <= maxShow {
			for i := this.curPage; i < this.totalPage; i++ {
				this.appendPage(stringBuilder, uri, i+1)
			}
		} else {
			// 显示当前页后两页、...和最后两页
			for i := this.curPage; i < this.curPage+2; i++ {
				this.appendPage(stringBuilder, uri, i+1)
			}
			stringBuilder.Append(`<li class="disabled"><a href="#"><span class="gap">…</span></a></li>`)
			for i := this.totalPage - 2; i < this.totalPage; i++ {
				this.appendPage(stringBuilder, uri, i+1)
			}
		}
	} else {
		// 显示最开始两页,然后是...和挨着当前页的两页
		for i := 0; i < 2; i++ {
			this.appendPage(stringBuilder, uri, i+1)
		}
		stringBuilder.Append(`<li class="disabled"><a href="#"><span class="gap">…</span></a></li>`)
		for i := this.curPage - 2; i < this.curPage; i++ {
			this.appendPage(stringBuilder, uri, i)
		}
		// 当前页
		this.appendCurPage(stringBuilder, uri)

		// 当前页之后的页

		// 全部显示
		if this.totalPage-this.curPage <= maxShow {
			for i := this.curPage; i < this.totalPage; i++ {
				this.appendPage(stringBuilder, uri, i+1)
			}
		} else {
			// 显示当前页后两页、...和最后两页
			for i := this.curPage; i < this.curPage+2; i++ {
				this.appendPage(stringBuilder, uri, i+1)
			}
			stringBuilder.Append(`<li class="disabled"><a href="#"><span class="gap">…</span></a></li>`)
			for i := this.totalPage - 2; i < this.totalPage; i++ {
				this.appendPage(stringBuilder, uri, i+1)
			}
		}
	}

	// 处理next
	stringBuilder.Append(`<li class="next next_page ">`)
	if this.curPage < this.totalPage {
		stringBuilder.Append(`<a href="`).Append(uri).Append("p=").Append(this.curPage + 1).Append(`">&raquo;</a>`)
	}
	stringBuilder.Append(`</li>`)
	return stringBuilder.String()
}
Example #6
0
func (this *User) String() string {
	buffer := goutils.NewBuffer()
	buffer.Append(this.Username).Append(this.Email).Append(this.Uid).Append(this.Mtime)

	return buffer.String()
}