boosty

Форк
0
/
auth.go 
72 строки · 1.1 Кб
1
package auth
2

3
import (
4
	"encoding/json"
5
	"fmt"
6
	"os"
7
)
8

9
type Callback func(info Info)
10

11
type Info struct {
12
	AccessToken  string `json:"accessToken"`
13
	RefreshToken string `json:"refreshToken"`
14
	ExpiresAt    int64  `json:"expiresAt"`
15
	DeviceId     string `json:"deviceId"`
16
}
17

18
type Auth struct {
19
	file     string
20
	info     Info
21
	callback Callback
22
}
23

24
func New(options ...Option) (*Auth, error) {
25
	auth := &Auth{
26
		file: "",
27
		info: Info{},
28
	}
29

30
	for _, o := range options {
31
		if err := o(auth); err != nil {
32
			return nil, err
33
		}
34
	}
35

36
	return auth, nil
37
}
38

39
func (a *Auth) Info() Info {
40
	return a.info
41
}
42

43
func (a *Auth) Update(info Info) {
44
	a.info = info
45
	if a.callback != nil {
46
		a.callback(info)
47
	}
48
}
49

50
func (a *Auth) BearerHeader() string {
51
	return "Bearer " + a.info.AccessToken
52
}
53

54
func (a *Auth) RefreshToken() string {
55
	return a.info.RefreshToken
56
}
57

58
func (a *Auth) DeviceId() string {
59
	return a.info.DeviceId
60
}
61

62
func (a *Auth) Save() error {
63
	if a.file == "" {
64
		return nil
65
	}
66

67
	data, err := json.Marshal(a.info)
68
	if err != nil {
69
		return fmt.Errorf("error on marshal auth data: %w", err)
70
	}
71
	return os.WriteFile(a.file, data, 0644)
72
}
73

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

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

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

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