GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( 4702c6...c6e412 )
by Jackson
13:16 queued 03:19
created

credentials.*URLCredentialsProvider.GetType   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 0
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
package credentials
2
3
import (
4
	"encoding/json"
5
	"fmt"
6
	"os"
7
	"time"
8
9
	"github.com/alibabacloud-go/tea/tea"
10
	"github.com/aliyun/credentials-go/credentials/request"
11
	"github.com/aliyun/credentials-go/credentials/utils"
12
)
13
14
// URLCredential is a kind of credential
15
type URLCredentialsProvider struct {
16
	URL string
17
	*credentialUpdater
18
	*sessionCredential
19
	runtime *utils.Runtime
20
}
21
22
type URLResponse struct {
23
	AccessKeyId     string `json:"AccessKeyId" xml:"AccessKeyId"`
24
	AccessKeySecret string `json:"AccessKeySecret" xml:"AccessKeySecret"`
25
	SecurityToken   string `json:"SecurityToken" xml:"SecurityToken"`
26
	Expiration      string `json:"Expiration" xml:"Expiration"`
27
}
28
29
func newURLCredential(URL string) *URLCredentialsProvider {
30
	credentialUpdater := new(credentialUpdater)
31
	if URL == "" {
32
		URL = os.Getenv("ALIBABA_CLOUD_CREDENTIALS_URI")
33
	}
34
	return &URLCredentialsProvider{
35
		URL:               URL,
36
		credentialUpdater: credentialUpdater,
37
	}
38
}
39
40
func (e *URLCredentialsProvider) GetCredential() (*CredentialModel, error) {
41
	if e.sessionCredential == nil || e.needUpdateCredential() {
42
		err := e.updateCredential()
43
		if err != nil {
44
			return nil, err
45
		}
46
	}
47
	credential := &CredentialModel{
48
		AccessKeyId:     tea.String(e.sessionCredential.AccessKeyId),
49
		AccessKeySecret: tea.String(e.sessionCredential.AccessKeySecret),
50
		SecurityToken:   tea.String(e.sessionCredential.SecurityToken),
51
		Type:            tea.String("credential_uri"),
52
	}
53
	return credential, nil
54
}
55
56
// GetAccessKeyId reutrns  URLCredential's AccessKeyId
57
// if AccessKeyId is not exist or out of date, the function will update it.
58
func (e *URLCredentialsProvider) GetAccessKeyId() (accessKeyId *string, err error) {
59
	c, err := e.GetCredential()
60
	if err != nil {
61
		return
62
	}
63
	accessKeyId = c.AccessKeyId
64
	return
65
}
66
67
// GetAccessSecret reutrns  URLCredential's AccessKeySecret
68
// if AccessKeySecret is not exist or out of date, the function will update it.
69
func (e *URLCredentialsProvider) GetAccessKeySecret() (accessKeySecret *string, err error) {
70
	c, err := e.GetCredential()
71
	if err != nil {
72
		return
73
	}
74
	accessKeySecret = c.AccessKeySecret
75
	return
76
}
77
78
// GetSecurityToken reutrns  URLCredential's SecurityToken
79
// if SecurityToken is not exist or out of date, the function will update it.
80
func (e *URLCredentialsProvider) GetSecurityToken() (securityToken *string, err error) {
81
	c, err := e.GetCredential()
82
	if err != nil {
83
		return
84
	}
85
	securityToken = c.SecurityToken
86
	return
87
}
88
89
// GetBearerToken is useless for URLCredential
90
func (e *URLCredentialsProvider) GetBearerToken() *string {
91
	return tea.String("")
92
}
93
94
// GetType reutrns  URLCredential's type
95
func (e *URLCredentialsProvider) GetType() *string {
96
	return tea.String("credential_uri")
97
}
98
99
func (e *URLCredentialsProvider) updateCredential() (err error) {
100
	if e.runtime == nil {
101
		e.runtime = new(utils.Runtime)
102
	}
103
	request := request.NewCommonRequest()
104
	request.URL = e.URL
105
	request.Method = "GET"
106
	content, err := doAction(request, e.runtime)
107
	if err != nil {
108
		return fmt.Errorf("get credentials from %s failed with error: %s", e.URL, err.Error())
109
	}
110
	var resp *URLResponse
111
	err = json.Unmarshal(content, &resp)
112
	if err != nil {
113
		return fmt.Errorf("get credentials from %s failed with error, json unmarshal fail: %s", e.URL, err.Error())
114
	}
115
	if resp.AccessKeyId == "" || resp.AccessKeySecret == "" || resp.SecurityToken == "" || resp.Expiration == "" {
116
		return fmt.Errorf("get credentials failed: AccessKeyId: %s, AccessKeySecret: %s, SecurityToken: %s, Expiration: %s", resp.AccessKeyId, resp.AccessKeySecret, resp.SecurityToken, resp.Expiration)
117
	}
118
119
	expirationTime, err := time.Parse("2006-01-02T15:04:05Z", resp.Expiration)
120
	e.lastUpdateTimestamp = time.Now().Unix()
121
	e.credentialExpiration = int(expirationTime.Unix() - time.Now().Unix())
122
	e.sessionCredential = &sessionCredential{
123
		AccessKeyId:     resp.AccessKeyId,
124
		AccessKeySecret: resp.AccessKeySecret,
125
		SecurityToken:   resp.SecurityToken,
126
	}
127
128
	return
129
}
130