-
Notifications
You must be signed in to change notification settings - Fork 0
/
request.go
84 lines (69 loc) · 2.76 KB
/
request.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package applesignin
import (
"net/url"
)
type request interface {
SetSecret(string)
Encode() string
}
var (
_ request = (*validateTokenRequest)(nil)
_ request = (*refreshTokenRequest)(nil)
)
type apiRequest struct {
// The identifier (App ID or Services ID) for your app.
// The identifier must not include your Team ID, to help mitigate sensitive data exposure to the end user.
// This parameter is required for both authorization code and refresh token validation requests.
ClientID string
// A secret JSON Web Token, generated by the developer,
// that uses the Sign in with Apple private key associated with your developer account.
// This parameter is required for both authorization code and refresh token validation requests.
ClientSecret string
// The grant type determines how the client app interacts with the validation server.
// This parameter is required for both authorization code and refresh token validation requests.
// For authorization code validation, use authorization_code.
// For refresh token validation requests, use refresh_token.
GrantType string
}
func (r *apiRequest) SetSecret(s string) {
r.ClientSecret = s
}
// validateTokenRequest see https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens.
type validateTokenRequest struct {
apiRequest
// The authorization code received in an authorization response sent to your app.
// The code is single-use only and valid for five minutes.
// This parameter is required for authorization code validation requests.
Code string
// The destination URI provided in the authorization request when authorizing a user with your app, if applicable.
// The URI must use the HTTPS protocol, include a domain name, and cannot contain an IP address or localhost.
// This parameter is required for authorization code validation requests.
RedirectURI string
}
func (r *validateTokenRequest) Encode() string {
v := url.Values{
"client_id": []string{r.ClientID},
"client_secret": []string{r.ClientSecret},
"grant_type": []string{r.GrantType},
"code": []string{r.Code},
}
if r.RedirectURI != "" {
v.Set("redirect_uri", r.RedirectURI)
}
return v.Encode()
}
// refreshTokenRequest see https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens.
type refreshTokenRequest struct {
apiRequest
// The refresh token received from the validation server during a authorization request.
// This parameter is required for refresh token validation requests.
RefreshToken string
}
func (r *refreshTokenRequest) Encode() string {
return url.Values{
"client_id": []string{r.ClientID},
"client_secret": []string{r.ClientSecret},
"grant_type": []string{r.GrantType},
"refresh_token": []string{r.RefreshToken},
}.Encode()
}