reprogl

Форк
0
/
yandex.go 
68 строк · 1.5 Кб
1
package oauth
2

3
import (
4
	"encoding/base64"
5
	"encoding/json"
6
	"errors"
7
	"net/http"
8
)
9

10
type yandexResourceOwner struct {
11
	accessToken string
12
}
13

14
func (yro *yandexResourceOwner) GetUserData() (*UserData, error) {
15
	request, err := http.NewRequest(http.MethodGet, "https://login.yandex.ru/info", http.NoBody)
16
	if err != nil {
17
		return nil, err
18
	}
19

20
	request.Header.Set("Accept", "application/json")
21
	request.Header.Set("Authorization", "OAuth "+yro.accessToken)
22

23
	buf, err := doRequest(request)
24
	if err != nil {
25
		return nil, err
26
	}
27

28
	if !json.Valid(buf) {
29
		return nil, errors.New("invalid JSON string")
30
	}
31

32
	result := struct {
33
		ID            string `json:"id"`
34
		Username      string `json:"login"`
35
		DisplayName   string `json:"display_name"`
36
		FirstName     string `json:"first_name"`
37
		LastName      string `json:"last_name"`
38
		Gender        Gender `json:"sex"`
39
		Email         string `json:"default_email"`
40
		Avatar        string `json:"default_avatar_id"`
41
		IsAvatarEmpty bool   `json:"is_avatar_empty"`
42
	}{
43
		Gender: Unknown,
44
	}
45

46
	err = json.Unmarshal(buf, &result)
47
	if err != nil {
48
		return nil, err
49
	}
50

51
	userData := &UserData{
52
		ID:          result.ID,
53
		Username:    result.Username,
54
		DisplayName: result.DisplayName,
55
		FirstName:   result.FirstName,
56
		LastName:    result.LastName,
57
		Gender:      result.Gender,
58
		Email:       result.Email,
59
		RawData:     base64.URLEncoding.EncodeToString(buf),
60
		Provider:    yandexProvider,
61
	}
62

63
	if !result.IsAvatarEmpty {
64
		userData.Avatar = result.Avatar
65
	}
66

67
	return userData, nil
68
}
69

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

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

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

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