Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove pbj=1 parameter from YouYube urls in recaptcha activity #5208

Merged
merged 1 commit into from
Dec 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ public class ReCaptchaActivity extends AppCompatActivity {
public static final String YT_URL = "https://www.youtube.com";
public static final String RECAPTCHA_COOKIES_KEY = "recaptcha_cookies";

public static String sanitizeRecaptchaUrl(@Nullable final String url) {
if (url == null || url.trim().isEmpty()) {
return YT_URL; // YouTube is the most likely service to have thrown a recaptcha
} else {
// remove "pbj=1" parameter from YouYube urls, as it makes the page JSON and not HTML
return url.replace("&pbj=1", "").replace("pbj=1&", "").replace("?pbj=1", "");
}
}


private WebView webView;
private String foundCookies = "";

Expand All @@ -64,15 +74,10 @@ protected void onCreate(final Bundle savedInstanceState) {
final Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

String url = getIntent().getStringExtra(RECAPTCHA_URL_EXTRA);
if (url == null || url.isEmpty()) {
url = YT_URL;
}

final String url = sanitizeRecaptchaUrl(getIntent().getStringExtra(RECAPTCHA_URL_EXTRA));
// set return to Cancel by default
setResult(RESULT_CANCELED);


webView = findViewById(R.id.reCaptchaWebView);

// enable Javascript
Expand Down
27 changes: 27 additions & 0 deletions app/src/test/java/org/schabi/newpipe/ReCaptchaActivityTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.schabi.newpipe

import org.junit.Assert.assertEquals
import org.junit.Test
import org.schabi.newpipe.ReCaptchaActivity.YT_URL

class ReCaptchaActivityTest {
private fun assertSanitized(expected: String, actual: String?) {
assertEquals(expected, ReCaptchaActivity.sanitizeRecaptchaUrl(actual))
}

@Test fun `null, empty or blank url is sanitized correctly`() {
assertSanitized(YT_URL, null)
assertSanitized(YT_URL, "")
assertSanitized(YT_URL, " \n \t ")
}

@Test fun `YouTube url containing pbj=1 is sanitized correctly`() {
val sanitizedUrl = "https://m.youtube.com/results?search_query=test"
assertSanitized(sanitizedUrl, "https://m.youtube.com/results?search_query=test")
assertSanitized(sanitizedUrl, "https://m.youtube.com/results?search_query=test&pbj=1&pbj=1")
assertSanitized(sanitizedUrl, "https://m.youtube.com/results?pbj=1&search_query=test")
assertSanitized("pbj://pbj.pbj.pbj/pbj", "pbj://pbj.pbj.pbj/pbj?pbj=1")
assertSanitized("http://www.host.com/b?p1=7&p2=9", "http://www.host.com/b?p1=7&pbj=1&p2=9")
assertSanitized("http://www.host.com/a?pbj=0", "http://www.host.com/a?pbj=0")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import org.junit.Assert.assertEquals
import org.junit.Test
import java.time.LocalDate
import java.time.OffsetDateTime
import java.time.ZoneId
import java.time.ZoneOffset
import java.util.Calendar
import java.util.TimeZone
Expand All @@ -13,7 +12,7 @@ class OffsetDateTimeToCalendarTest {
@Test
fun testRelativeTimeWithCurrentOffsetDateTime() {
val calendar = LocalDate.of(2020, 1, 1).atStartOfDay().atOffset(ZoneOffset.UTC)
.toCalendar()
.toCalendar()

assertEquals(2020, calendar[Calendar.YEAR])
assertEquals(0, calendar[Calendar.MONTH])
Expand Down