3
3
import androidx .annotation .NonNull ;
4
4
import androidx .annotation .Nullable ;
5
5
import app .revanced .extension .shared .Logger ;
6
- import app .revanced .extension .spotify .clienttoken .data .v0 .ClienttokenHttp ;
6
+ import app .revanced .extension .spotify .clienttoken .data .v0 .ClienttokenHttp .* ;
7
7
8
8
import java .io .IOException ;
9
9
import java .net .HttpURLConnection ;
@@ -16,76 +16,94 @@ class ClientTokenFetcher {
16
16
static final String IOS_CLIENT_ID = "58bd3c95768941ea9eb4350aaa033eb3" ;
17
17
18
18
@ NonNull
19
- static final String CLIENT_TOKEN_PATH = "/v1/clienttoken" ;
19
+ static final String CLIENT_TOKEN_API_PATH = "/v1/clienttoken" ;
20
20
@ NonNull
21
- static final String CLIENT_TOKEN_ENDPOINT = "https://clienttoken.spotify.com" + CLIENT_TOKEN_PATH ;
21
+ static final String CLIENT_TOKEN_API_URL = "https://clienttoken.spotify.com" + CLIENT_TOKEN_API_PATH ;
22
22
23
- // The return value of these methods are overriden by the patch .
23
+ // Modified by a patch. Do not touch .
24
24
@ NonNull
25
25
static String getClientVersion () {
26
26
return "" ;
27
27
}
28
28
29
+ // Modified by a patch. Do not touch.
29
30
@ NonNull
30
31
static String getSystemVersion () {
31
32
return "" ;
32
33
}
33
34
35
+ // Modified by a patch. Do not touch.
34
36
@ NonNull
35
37
static String getHardwareMachine () {
36
38
return "" ;
37
39
}
38
40
41
+ private static final ConnectivitySdkData DEFAULT_CONNECTIVITY_SDK_DATA =
42
+ ConnectivitySdkData .newBuilder ()
43
+ .setPlatformSpecificData (PlatformSpecificData .newBuilder ()
44
+ .setIos (NativeIOSData .newBuilder ()
45
+ .setHwMachine (getHardwareMachine ())
46
+ .setSystemVersion (getSystemVersion ())
47
+ .build ())
48
+ .build ())
49
+ .build ();
50
+
51
+ private static final ClientDataRequest DEFAULT_CLIENT_DATA_REQUEST =
52
+ ClientDataRequest .newBuilder ()
53
+ .setClientVersion (getClientVersion ())
54
+ .setClientId (IOS_CLIENT_ID )
55
+ .build ();
56
+
57
+ private static final ClientTokenRequest DEFAULT_CLIENT_TOKEN_REQUEST =
58
+ ClientTokenRequest .newBuilder ()
59
+ .setRequestType (ClientTokenRequestType .REQUEST_CLIENT_DATA_REQUEST )
60
+ .build ();
61
+
62
+
39
63
@ NonNull
40
- static ClienttokenHttp . ClientTokenRequest buildSpoofedClientTokenRequest (String deviceId ) {
41
- return ClienttokenHttp . ClientTokenRequest . newBuilder ()
42
- .setRequestType ( ClienttokenHttp . ClientTokenRequestType . REQUEST_CLIENT_DATA_REQUEST )
43
- .setClientData (ClienttokenHttp . ClientDataRequest . newBuilder ()
44
- .setClientVersion ( getClientVersion () )
45
- .setClientId ( IOS_CLIENT_ID )
46
- . setConnectivitySdkData ( ClienttokenHttp . ConnectivitySdkData . newBuilder ()
64
+ static ClientTokenRequest buildClientTokenRequest (String deviceId ) {
65
+ return DEFAULT_CLIENT_TOKEN_REQUEST
66
+ .toBuilder ( )
67
+ .setClientData (DEFAULT_CLIENT_DATA_REQUEST
68
+ .toBuilder ( )
69
+ .setConnectivitySdkData ( DEFAULT_CONNECTIVITY_SDK_DATA
70
+ . toBuilder ()
47
71
.setDeviceId (deviceId )
48
- .setPlatformSpecificData (ClienttokenHttp .PlatformSpecificData .newBuilder ()
49
- .setIos (ClienttokenHttp .NativeIOSData .newBuilder ()
50
- .setHwMachine (getHardwareMachine ())
51
- .setSystemVersion (getSystemVersion ())
52
- .build ())
53
- .build ())
54
- .build ())
55
- .build ())
56
- .build ();
72
+ .build ()
73
+ ).build ()
74
+ ).build ();
57
75
}
58
76
59
77
@ Nullable
60
- static ClienttokenHttp . ClientTokenResponse fetchClientToken (
61
- @ NonNull ClienttokenHttp . ClientTokenRequest originalClientTokenRequest
78
+ static ClientTokenResponse fetchClientToken (
79
+ @ NonNull ClientTokenRequest originalClientTokenRequest
62
80
) throws IOException {
63
81
String iosUserAgent = getIOSUserAgent ();
64
82
if (iosUserAgent == null ) {
65
83
return null ;
66
84
}
67
85
68
- ClienttokenHttp . ClientTokenRequest clientTokenRequest = spoofClientTokenRequest (originalClientTokenRequest );
86
+ ClientTokenRequest clientTokenRequest = spoofClientTokenRequest (originalClientTokenRequest );
69
87
70
- HttpURLConnection clientTokenRequestConnection = createProtobufRequestConnection (CLIENT_TOKEN_ENDPOINT );
88
+ HttpURLConnection clientTokenRequestConnection = createProtobufRequestConnection (CLIENT_TOKEN_API_URL );
71
89
clientTokenRequestConnection .setRequestProperty ("User-Agent" , iosUserAgent );
72
90
clientTokenRequestConnection .getOutputStream ().write (clientTokenRequest .toByteArray ());
73
91
74
- return ClienttokenHttp . ClientTokenResponse .parseFrom (clientTokenRequestConnection .getInputStream ());
92
+ return ClientTokenResponse .parseFrom (clientTokenRequestConnection .getInputStream ());
75
93
}
76
94
77
95
@ NonNull
78
- static ClienttokenHttp . ClientTokenRequest spoofClientTokenRequest (
79
- @ NonNull ClienttokenHttp . ClientTokenRequest originalClientTokenRequest
96
+ static ClientTokenRequest spoofClientTokenRequest (
97
+ @ NonNull ClientTokenRequest originalClientTokenRequest
80
98
) {
81
- ClienttokenHttp . ClientTokenRequestType clientTokenRequestType = originalClientTokenRequest .getRequestType ();
99
+ ClientTokenRequestType clientTokenRequestType = originalClientTokenRequest .getRequestType ();
82
100
83
- if (clientTokenRequestType != ClienttokenHttp . ClientTokenRequestType .REQUEST_CLIENT_DATA_REQUEST ) {
101
+ if (clientTokenRequestType != ClientTokenRequestType .REQUEST_CLIENT_DATA_REQUEST ) {
84
102
return originalClientTokenRequest ;
85
103
}
86
104
87
105
String deviceId = originalClientTokenRequest .getClientData ().getConnectivitySdkData ().getDeviceId ();
88
- return buildSpoofedClientTokenRequest (deviceId );
106
+ return buildClientTokenRequest (deviceId );
89
107
}
90
108
91
109
@ SuppressWarnings ("SameParameterValue" )
0 commit comments