Remove pbj=1 parameter from YouYube urls in recaptcha activity
This commit is contained in:
parent
0ced9ba799
commit
10f79e1307
|
@ -53,6 +53,16 @@ public class ReCaptchaActivity extends AppCompatActivity {
|
||||||
public static final String YT_URL = "https://www.youtube.com";
|
public static final String YT_URL = "https://www.youtube.com";
|
||||||
public static final String RECAPTCHA_COOKIES_KEY = "recaptcha_cookies";
|
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 WebView webView;
|
||||||
private String foundCookies = "";
|
private String foundCookies = "";
|
||||||
|
|
||||||
|
@ -64,15 +74,10 @@ public class ReCaptchaActivity extends AppCompatActivity {
|
||||||
final Toolbar toolbar = findViewById(R.id.toolbar);
|
final Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
String url = getIntent().getStringExtra(RECAPTCHA_URL_EXTRA);
|
final String url = sanitizeRecaptchaUrl(getIntent().getStringExtra(RECAPTCHA_URL_EXTRA));
|
||||||
if (url == null || url.isEmpty()) {
|
|
||||||
url = YT_URL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set return to Cancel by default
|
// set return to Cancel by default
|
||||||
setResult(RESULT_CANCELED);
|
setResult(RESULT_CANCELED);
|
||||||
|
|
||||||
|
|
||||||
webView = findViewById(R.id.reCaptchaWebView);
|
webView = findViewById(R.id.reCaptchaWebView);
|
||||||
|
|
||||||
// enable Javascript
|
// enable Javascript
|
||||||
|
|
|
@ -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")
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,6 @@ import org.junit.Assert.assertEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.time.OffsetDateTime
|
import java.time.OffsetDateTime
|
||||||
import java.time.ZoneId
|
|
||||||
import java.time.ZoneOffset
|
import java.time.ZoneOffset
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
import java.util.TimeZone
|
import java.util.TimeZone
|
||||||
|
|
Loading…
Reference in New Issue