reprogl

Форк
0
/
hash.go 
71 строка · 1.2 Кб
1
package hashid
2

3
import (
4
	"errors"
5
	"fmt"
6

7
	"github.com/speps/go-hashids/v2"
8
)
9

10
const (
11
	User Option = 1 << iota
12
	Commentator
13
	Male
14
	Female
15
)
16

17
type Option int
18

19
var hash *hashids.HashID
20

21
var WrongOptions = errors.New("hashid: wrong options")
22

23
func init() {
24
	var err error
25
	hash, err = hashids.NewWithData(&hashids.HashIDData{
26
		Salt:      "Thi5 is sa1t :)",
27
		Alphabet:  "1234567890ABCDEFGHJKLMNPQRSTUVWXYZ",
28
		MinLength: 6,
29
	})
30
	if err != nil {
31
		panic(err)
32
	}
33
}
34

35
func Encode(id int, options Option) (hashString string) {
36
	hashString, err := encode(id, options)
37
	if err != nil {
38
		panic(err)
39
	}
40

41
	return
42
}
43

44
func Decode(str string, isAvatar bool) (HashData, error) {
45
	var data = HashData{Hash: str}
46

47
	ids, err := decode(str)
48
	if err != nil {
49
		return data, err
50
	}
51
	if len(ids) != 2 {
52
		return data, errors.New(fmt.Sprintf("hashid: incorrect result length: %d", len(ids)))
53
	}
54

55
	data.ID = ids[0]
56
	data.options = Option(ids[1])
57

58
	if isAvatar && !data.validOptions() {
59
		return data, WrongOptions
60
	}
61

62
	return data, nil
63
}
64

65
func decode(str string) ([]int, error) {
66
	return hash.DecodeWithError(str)
67
}
68

69
func encode(id int, options Option) (string, error) {
70
	return hash.EncodeInt64([]int64{int64(id), int64(options)})
71
}
72

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.