Skip to content

Commit 16217f0

Browse files
committed
feat(Sync for Reddit): Add Fix /user/ endpoint patch
1 parent d6f20ee commit 16217f0

File tree

9 files changed

+108
-0
lines changed

9 files changed

+108
-0
lines changed

api/revanced-patches.api

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,12 @@ public final class app/revanced/patches/reddit/customclients/syncforreddit/fix/s
828828
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/fix/slink/FixSLinksPatch;
829829
}
830830

831+
public final class app/revanced/patches/reddit/customclients/syncforreddit/fix/user/FixUserEndpointPatch : app/revanced/patcher/patch/BytecodePatch {
832+
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/fix/user/FixUserEndpointPatch;
833+
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
834+
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
835+
}
836+
831837
public final class app/revanced/patches/reddit/customclients/syncforreddit/misc/integrations/IntegrationsPatch : app/revanced/patches/shared/misc/integrations/BaseIntegrationsPatch {
832838
public static final field INSTANCE Lapp/revanced/patches/reddit/customclients/syncforreddit/misc/integrations/IntegrationsPatch;
833839
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user
2+
3+
import app.revanced.patcher.data.BytecodeContext
4+
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
5+
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
6+
import app.revanced.patcher.fingerprint.MethodFingerprint
7+
import app.revanced.patcher.patch.BytecodePatch
8+
import app.revanced.patcher.patch.annotation.CompatiblePackage
9+
import app.revanced.patcher.patch.annotation.Patch
10+
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.*
11+
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthFriendRequestFingerprint
12+
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthSubredditInfoRequestHelperFingerprint
13+
import app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints.OAuthUnfriendRequestFingerprint
14+
import app.revanced.util.getReference
15+
import app.revanced.util.resultOrThrow
16+
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
17+
import com.android.tools.smali.dexlib2.iface.reference.StringReference
18+
19+
@Patch(
20+
name = "Fix /user/ endpoint",
21+
description = "Fixes the endpoint for viewing user profiles by replacing /u/ with /user/.",
22+
compatiblePackages = [
23+
CompatiblePackage("com.laurencedawson.reddit_sync"),
24+
CompatiblePackage("com.laurencedawson.reddit_sync.pro"),
25+
CompatiblePackage("com.laurencedawson.reddit_sync.dev"),
26+
],
27+
)
28+
@Suppress("unused")
29+
object FixUserEndpointPatch : BytecodePatch(
30+
fingerprints = setOf(
31+
OAuthFriendRequestFingerprint,
32+
OAuthSubredditInfoRequestConstructorFingerprint,
33+
OAuthSubredditInfoRequestHelperFingerprint,
34+
OAuthUnfriendRequestFingerprint,
35+
OAuthUserIdRequestFingerprint,
36+
OAuthUserInfoRequestFingerprint,
37+
),
38+
) {
39+
override fun execute(context: BytecodeContext) {
40+
arrayOf(
41+
OAuthFriendRequestFingerprint,
42+
OAuthSubredditInfoRequestConstructorFingerprint,
43+
OAuthSubredditInfoRequestHelperFingerprint,
44+
OAuthUnfriendRequestFingerprint,
45+
OAuthUserIdRequestFingerprint,
46+
OAuthUserInfoRequestFingerprint,
47+
).map(MethodFingerprint::resultOrThrow).map {
48+
it.scanResult.stringsScanResult!!.matches.first().index to it.mutableMethod
49+
}.forEach { (userPathStringIndex, method) ->
50+
val userPathStringInstruction = method.getInstruction<OneRegisterInstruction>(userPathStringIndex)
51+
val userPathStringRegister = userPathStringInstruction.registerA
52+
val fixedUserPathString = userPathStringInstruction.getReference<StringReference>()!!.string.replace("u/", "user/")
53+
54+
method.replaceInstruction(
55+
userPathStringIndex,
56+
"const-string v$userPathStringRegister, \"${fixedUserPathString}\"",
57+
)
58+
}
59+
}
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
2+
3+
import app.revanced.patcher.fingerprint.MethodFingerprint
4+
5+
internal abstract class BaseUserEndpointFingerprint(source: String, accessFlags: Int? = null) :
6+
MethodFingerprint(
7+
accessFlags = accessFlags,
8+
strings = listOf("u/"),
9+
customFingerprint = { _, classDef -> classDef.sourceFile == source },
10+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
2+
3+
internal object OAuthFriendRequestFingerprint : BaseUserEndpointFingerprint("OAuthFriendRequest.java")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
2+
3+
import app.revanced.patcher.extensions.or
4+
import com.android.tools.smali.dexlib2.AccessFlags
5+
6+
internal object OAuthSubredditInfoRequestConstructorFingerprint :
7+
BaseUserEndpointFingerprint(
8+
"OAuthSubredditInfoRequest.java",
9+
AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
10+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
2+
3+
import app.revanced.patcher.extensions.or
4+
import com.android.tools.smali.dexlib2.AccessFlags
5+
6+
internal object OAuthSubredditInfoRequestHelperFingerprint :
7+
BaseUserEndpointFingerprint(
8+
"OAuthSubredditInfoRequest.java",
9+
AccessFlags.PRIVATE or AccessFlags.STATIC,
10+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
2+
3+
internal object OAuthUnfriendRequestFingerprint : BaseUserEndpointFingerprint("OAuthUnfriendRequest.java")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
2+
3+
internal object OAuthUserIdRequestFingerprint : BaseUserEndpointFingerprint("OAuthUserIdRequest.java")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package app.revanced.patches.reddit.customclients.syncforreddit.fix.user.fingerprints
2+
3+
internal object OAuthUserInfoRequestFingerprint : BaseUserEndpointFingerprint("OAuthUserInfoRequest.java")

0 commit comments

Comments
 (0)