Skip to content

Commit 8580280

Browse files
committed
refac
1 parent 4565a90 commit 8580280

File tree

2 files changed

+73
-55
lines changed

2 files changed

+73
-55
lines changed

extensions/spotify/src/main/java/app/revanced/extension/spotify/misc/fix/ClientTokenFetcher.java

Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import androidx.annotation.NonNull;
44
import androidx.annotation.Nullable;
55
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.*;
77

88
import java.io.IOException;
99
import java.net.HttpURLConnection;
@@ -16,76 +16,94 @@ class ClientTokenFetcher {
1616
static final String IOS_CLIENT_ID = "58bd3c95768941ea9eb4350aaa033eb3";
1717

1818
@NonNull
19-
static final String CLIENT_TOKEN_PATH = "/v1/clienttoken";
19+
static final String CLIENT_TOKEN_API_PATH = "/v1/clienttoken";
2020
@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;
2222

23-
// The return value of these methods are overriden by the patch.
23+
// Modified by a patch. Do not touch.
2424
@NonNull
2525
static String getClientVersion() {
2626
return "";
2727
}
2828

29+
// Modified by a patch. Do not touch.
2930
@NonNull
3031
static String getSystemVersion() {
3132
return "";
3233
}
3334

35+
// Modified by a patch. Do not touch.
3436
@NonNull
3537
static String getHardwareMachine() {
3638
return "";
3739
}
3840

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+
3963
@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()
4771
.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();
5775
}
5876

5977
@Nullable
60-
static ClienttokenHttp.ClientTokenResponse fetchClientToken(
61-
@NonNull ClienttokenHttp.ClientTokenRequest originalClientTokenRequest
78+
static ClientTokenResponse fetchClientToken(
79+
@NonNull ClientTokenRequest originalClientTokenRequest
6280
) throws IOException {
6381
String iosUserAgent = getIOSUserAgent();
6482
if (iosUserAgent == null) {
6583
return null;
6684
}
6785

68-
ClienttokenHttp.ClientTokenRequest clientTokenRequest = spoofClientTokenRequest(originalClientTokenRequest);
86+
ClientTokenRequest clientTokenRequest = spoofClientTokenRequest(originalClientTokenRequest);
6987

70-
HttpURLConnection clientTokenRequestConnection = createProtobufRequestConnection(CLIENT_TOKEN_ENDPOINT);
88+
HttpURLConnection clientTokenRequestConnection = createProtobufRequestConnection(CLIENT_TOKEN_API_URL);
7189
clientTokenRequestConnection.setRequestProperty("User-Agent", iosUserAgent);
7290
clientTokenRequestConnection.getOutputStream().write(clientTokenRequest.toByteArray());
7391

74-
return ClienttokenHttp.ClientTokenResponse.parseFrom(clientTokenRequestConnection.getInputStream());
92+
return ClientTokenResponse.parseFrom(clientTokenRequestConnection.getInputStream());
7593
}
7694

7795
@NonNull
78-
static ClienttokenHttp.ClientTokenRequest spoofClientTokenRequest(
79-
@NonNull ClienttokenHttp.ClientTokenRequest originalClientTokenRequest
96+
static ClientTokenRequest spoofClientTokenRequest(
97+
@NonNull ClientTokenRequest originalClientTokenRequest
8098
) {
81-
ClienttokenHttp.ClientTokenRequestType clientTokenRequestType = originalClientTokenRequest.getRequestType();
99+
ClientTokenRequestType clientTokenRequestType = originalClientTokenRequest.getRequestType();
82100

83-
if (clientTokenRequestType != ClienttokenHttp.ClientTokenRequestType.REQUEST_CLIENT_DATA_REQUEST) {
101+
if (clientTokenRequestType != ClientTokenRequestType.REQUEST_CLIENT_DATA_REQUEST) {
84102
return originalClientTokenRequest;
85103
}
86104

87105
String deviceId = originalClientTokenRequest.getClientData().getConnectivitySdkData().getDeviceId();
88-
return buildSpoofedClientTokenRequest(deviceId);
106+
return buildClientTokenRequest(deviceId);
89107
}
90108

91109
@SuppressWarnings("SameParameterValue")

extensions/spotify/src/main/java/app/revanced/extension/spotify/misc/fix/RequestListener.java

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,36 @@ public Response serve(@NonNull IHTTPSession request) {
3232
String uri = request.getUri();
3333
Logger.printInfo(() -> "Serving request for URI: " + uri);
3434

35-
if (uri.equals(ClientTokenFetcher.CLIENT_TOKEN_PATH)) {
36-
InputStream requestBodyInputStream = getRequestBodyInputStream(request);
37-
38-
ClienttokenHttp.ClientTokenRequest clientTokenRequest;
39-
try {
40-
clientTokenRequest = ClienttokenHttp.ClientTokenRequest.parseFrom(requestBodyInputStream);
41-
} catch (IOException ex) {
42-
Logger.printException(() -> "Failed to parse client token request", ex);
43-
return newResponse(INTERNAL_ERROR);
44-
}
35+
if (!uri.equals(ClientTokenFetcher.CLIENT_TOKEN_API_PATH)) return newResponse(INTERNAL_ERROR);
36+
37+
InputStream requestBodyInputStream = getRequestBodyInputStream(request);
4538

46-
try {
47-
ClienttokenHttp.ClientTokenResponse clientTokenResponse =
48-
ClientTokenFetcher.fetchClientToken(clientTokenRequest);
39+
ClienttokenHttp.ClientTokenRequest clientTokenRequest;
40+
try {
41+
clientTokenRequest = ClienttokenHttp.ClientTokenRequest.parseFrom(requestBodyInputStream);
42+
} catch (IOException ex) {
43+
Logger.printException(() -> "Failed to parse client token request", ex);
44+
return newResponse(INTERNAL_ERROR);
45+
}
4946

50-
if (clientTokenResponse == null) {
51-
return newResponse(INTERNAL_ERROR);
52-
}
47+
try {
48+
ClienttokenHttp.ClientTokenResponse clientTokenResponse =
49+
ClientTokenFetcher.fetchClientToken(clientTokenRequest);
5350

54-
ClienttokenHttp.ClientTokenResponseType responseGranted =
55-
ClienttokenHttp.ClientTokenResponseType.RESPONSE_GRANTED_TOKEN_RESPONSE;
56-
if (clientTokenResponse.getResponseType() == responseGranted) {
57-
Logger.printInfo(() -> "Fetched iOS client token: " +
58-
clientTokenResponse.getGrantedToken().getToken());
59-
}
51+
if (clientTokenResponse == null) {
52+
return newResponse(INTERNAL_ERROR);
53+
}
6054

61-
return newResponse(Response.Status.OK, clientTokenResponse);
62-
} catch (IOException ex) {
63-
Logger.printException(() -> "Failed to get client token response", ex);
55+
ClienttokenHttp.ClientTokenResponseType responseGranted =
56+
ClienttokenHttp.ClientTokenResponseType.RESPONSE_GRANTED_TOKEN_RESPONSE;
57+
if (clientTokenResponse.getResponseType() == responseGranted) {
58+
Logger.printInfo(() -> "Fetched iOS client token: " +
59+
clientTokenResponse.getGrantedToken().getToken());
6460
}
61+
62+
return newResponse(Response.Status.OK, clientTokenResponse);
63+
} catch (IOException ex) {
64+
Logger.printException(() -> "Failed to get client token response", ex);
6565
}
6666

6767
return newResponse(INTERNAL_ERROR);

0 commit comments

Comments
 (0)