14
14
import java .net .URLDecoder ;
15
15
import java .net .http .HttpClient ;
16
16
import java .nio .charset .StandardCharsets ;
17
+ import java .util .Arrays ;
18
+ import java .util .List ;
17
19
import java .util .Map ;
18
20
import java .util .UUID ;
19
21
import java .util .function .Supplier ;
22
+ import java .util .stream .Collectors ;
20
23
import org .apache .http .client .utils .URIBuilder ;
21
24
22
25
public class SquareOAuthFlow extends BaseOAuth2Flow {
23
26
24
- private static final String SCOPE_VALUE =
25
- "ITEMS_READ+CUSTOMERS_WRITE+MERCHANT_PROFILE_READ+EMPLOYEES_READ+PAYMENTS_READ+CUSTOMERS_READ+TIMECARDS_READ+ORDERS_READ" ;
27
+ private static final List <String > SCOPES = Arrays .asList (
28
+ "CUSTOMERS_READ" ,
29
+ "EMPLOYEES_READ" ,
30
+ "ITEMS_READ" ,
31
+ "MERCHANT_PROFILE_READ" ,
32
+ "ORDERS_READ" ,
33
+ "PAYMENTS_READ" ,
34
+ "TIMECARDS_READ"
35
+ // OAuth Permissions:
36
+ // https://developer.squareup.com/docs/oauth-api/square-permissions
37
+ // https://developer.squareup.com/reference/square/enums/OAuthPermission
38
+ // "DISPUTES_READ",
39
+ // "GIFTCARDS_READ",
40
+ // "INVENTORY_READ",
41
+ // "INVOICES_READ",
42
+ // "TIMECARDS_SETTINGS_READ",
43
+ // "LOYALTY_READ",
44
+ // "ONLINE_STORE_SITE_READ",
45
+ // "ONLINE_STORE_SNIPPETS_READ",
46
+ // "SUBSCRIPTIONS_READ",
47
+ );
26
48
private static final String AUTHORIZE_URL = "https://connect.squareup.com/oauth2/authorize" ;
27
49
private static final String ACCESS_TOKEN_URL = "https://connect.squareup.com/oauth2/token" ;
28
50
@@ -47,7 +69,7 @@ protected String formatConsentUrl(final UUID definitionId,
47
69
// Need to have decoded format, otherwise square fails saying that scope is incorrect
48
70
return URLDecoder .decode (new URIBuilder (AUTHORIZE_URL )
49
71
.addParameter ("client_id" , clientId )
50
- .addParameter ("scope" , SCOPE_VALUE )
72
+ .addParameter ("scope" , String . join ( "+" , SCOPES ) )
51
73
.addParameter ("session" , "False" )
52
74
.addParameter ("state" , getState ())
53
75
.build ().toString (), StandardCharsets .UTF_8 );
@@ -66,21 +88,18 @@ protected Map<String, String> getAccessTokenQueryParameters(String clientId,
66
88
String clientSecret ,
67
89
String authCode ,
68
90
String redirectUrl ) {
91
+ String scopes = SCOPES .stream ()
92
+ .map (name -> ('"' + name + '"' ))
93
+ .collect (Collectors .joining ("," ));
94
+ scopes = '[' + scopes + ']' ;
95
+
69
96
return ImmutableMap .<String , String >builder ()
70
97
// required
71
98
.put ("client_id" , clientId )
72
99
.put ("client_secret" , clientSecret )
73
100
.put ("code" , authCode )
74
101
.put ("grant_type" , "authorization_code" )
75
- .put ("scopes" , "[\n "
76
- + " \" ITEMS_READ\" ,\n "
77
- + " \" MERCHANT_PROFILE_READ\" ,\n "
78
- + " \" EMPLOYEES_READ\" ,\n "
79
- + " \" PAYMENTS_READ\" ,\n "
80
- + " \" CUSTOMERS_READ\" ,\n "
81
- + " \" TIMECARDS_READ\" ,\n "
82
- + " \" ORDERS_READ\" \n "
83
- + " ]" )
102
+ .put ("scopes" , scopes )
84
103
.build ();
85
104
}
86
105
0 commit comments