Skip to content

Commit fe2583f

Browse files
committed
Generate and verify Https links
1 parent 5f2d0cf commit fe2583f

8 files changed

Lines changed: 74 additions & 24 deletions

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.schabi.newpipe.extractor.services.soundcloud;
2+
3+
import com.grack.nanojson.JsonObject;
4+
5+
import javax.annotation.Nonnull;
6+
7+
public class SoundcloudExtractorHelper {
8+
9+
private static final String HTTP = "http://";
10+
private static final String HTTPS = "https://";
11+
12+
13+
private static String replaceHttpWithHttps(final String url) {
14+
if(!url.isEmpty() && url.startsWith(HTTP)) {
15+
return HTTPS + url.substring(HTTP.length());
16+
}
17+
return url;
18+
}
19+
20+
@Nonnull
21+
static String getUploaderUrl(JsonObject object) {
22+
String url = object.getObject("user").getString("permalink_url", "");
23+
return replaceHttpWithHttps(url);
24+
}
25+
26+
@Nonnull
27+
static String getAvatarUrl(JsonObject object) {
28+
String url = object.getObject("user", new JsonObject()).getString("avatar_url", "");
29+
return replaceHttpWithHttps(url);
30+
}
31+
32+
public static String getUploaderName(JsonObject object) {
33+
return object.getObject("user").getString("username", "");
34+
}
35+
}

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudPlaylistExtractor.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.grack.nanojson.JsonParser;
55
import com.grack.nanojson.JsonParserException;
66
import org.schabi.newpipe.extractor.Downloader;
7-
import org.schabi.newpipe.extractor.NewPipe;
87
import org.schabi.newpipe.extractor.StreamingService;
98
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
109
import org.schabi.newpipe.extractor.exceptions.ParsingException;
@@ -69,17 +68,17 @@ public String getBannerUrl() {
6968

7069
@Override
7170
public String getUploaderUrl() {
72-
return playlist.getObject("user").getString("permalink_url", "");
71+
return SoundcloudExtractorHelper.getUploaderUrl(playlist);
7372
}
7473

7574
@Override
7675
public String getUploaderName() {
77-
return playlist.getObject("user").getString("username", "");
76+
return SoundcloudExtractorHelper.getUploaderName(playlist);
7877
}
7978

8079
@Override
8180
public String getUploaderAvatarUrl() {
82-
return playlist.getObject("user", new JsonObject()).getString("avatar_url", "");
81+
return SoundcloudExtractorHelper.getAvatarUrl(playlist);
8382
}
8483

8584
@Override

src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,19 @@ public long getDislikeCount() {
102102
@Nonnull
103103
@Override
104104
public String getUploaderUrl() {
105-
return track.getObject("user").getString("permalink_url", "");
105+
return SoundcloudExtractorHelper.getUploaderUrl(track);
106106
}
107107

108108
@Nonnull
109109
@Override
110110
public String getUploaderName() {
111-
return track.getObject("user").getString("username", "");
111+
return SoundcloudExtractorHelper.getUploaderName(track);
112112
}
113113

114114
@Nonnull
115115
@Override
116116
public String getUploaderAvatarUrl() {
117-
return track.getObject("user", new JsonObject()).getString("avatar_url", "");
117+
return SoundcloudExtractorHelper.getAvatarUrl(track);
118118
}
119119

120120
@Override

src/test/java/org/schabi/newpipe/extractor/ExtractorAsserts.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.schabi.newpipe.extractor;
22

3+
import javax.annotation.Nonnull;
34
import java.net.MalformedURLException;
45
import java.net.URL;
56
import java.util.List;
67

8+
import static org.junit.Assert.assertEquals;
9+
710
public class ExtractorAsserts {
811
public static void assertEmptyErrors(String message, List<Throwable> errors) {
912
if(!errors.isEmpty()) {
@@ -14,11 +17,21 @@ public static void assertEmptyErrors(String message, List<Throwable> errors) {
1417
}
1518
}
1619

17-
public static void assertIsValidUrl(String url) {
20+
@Nonnull
21+
private static URL urlFromString(String url) {
1822
try {
19-
new URL(url);
23+
return new URL(url);
2024
} catch (MalformedURLException e) {
2125
throw new AssertionError("Invalid url: " + url, e);
2226
}
2327
}
28+
29+
public static void assertIsValidUrl(String url) {
30+
urlFromString(url);
31+
}
32+
33+
public static void assertIsSecureUrl(String urlToCheck) {
34+
URL url = urlFromString(urlToCheck);
35+
assertEquals("Protocol of URL is not secure", "https", url.getProtocol());
36+
}
2437
}

src/test/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudChannelExtractorTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.schabi.newpipe.extractor.channel.ChannelExtractor;
99

1010
import static org.junit.Assert.*;
11+
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertIsSecureUrl;
1112
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
1213

1314
/**
@@ -43,7 +44,7 @@ public void testGetDescription() throws Exception {
4344

4445
@Test
4546
public void testGetAvatarUrl() throws Exception {
46-
assertTrue(extractor.getAvatarUrl().contains("https://"));
47+
assertIsSecureUrl(extractor.getAvatarUrl());
4748
}
4849

4950
@Test

src/test/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudPlaylistExtractorTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.schabi.newpipe.extractor.playlist.PlaylistExtractor;
99

1010
import static org.junit.Assert.*;
11+
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertIsSecureUrl;
1112
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
1213

1314
/**
@@ -42,12 +43,13 @@ public void testGetName() throws Exception {
4243

4344
@Test
4445
public void testGetThumbnailUrl() throws Exception {
45-
assertTrue(extractor.getThumbnailUrl(), extractor.getThumbnailUrl().contains("https://"));
46+
assertIsSecureUrl(extractor.getThumbnailUrl());
4647
}
4748

4849
@Test
4950
public void testGetUploaderUrl() throws Exception {
50-
assertEquals(extractor.getUploaderUrl(), "http://soundcloud.com/liluzivert");
51+
assertIsSecureUrl(extractor.getUploaderUrl());
52+
assertEquals(extractor.getUploaderUrl(), "https://soundcloud.com/liluzivert");
5153
}
5254

5355
@Test
@@ -57,7 +59,7 @@ public void testGetUploaderName() throws Exception {
5759

5860
@Test
5961
public void testGetUploaderAvatarUrl() throws Exception {
60-
assertTrue(extractor.getUploaderAvatarUrl(), extractor.getUploaderAvatarUrl().contains("https://"));
62+
assertIsSecureUrl(extractor.getUploaderAvatarUrl());
6163
}
6264

6365
@Test

src/test/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractorDefaultTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.io.IOException;
1515

1616
import static org.junit.Assert.*;
17+
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertIsSecureUrl;
1718
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
1819

1920
/**
@@ -69,22 +70,23 @@ public void testGetViewCount() throws ParsingException {
6970

7071
@Test
7172
public void testGetUploadDate() throws ParsingException {
72-
assertEquals(extractor.getUploadDate(), "2016-07-31");
73+
assertEquals("2016-07-31", extractor.getUploadDate());
7374
}
7475

7576
@Test
7677
public void testGetUploaderUrl() throws ParsingException {
77-
assertEquals(extractor.getUploaderUrl(), "http://soundcloud.com/liluzivert");
78+
assertIsSecureUrl(extractor.getUploaderUrl());
79+
assertEquals("https://soundcloud.com/liluzivert", extractor.getUploaderUrl());
7880
}
7981

8082
@Test
8183
public void testGetThumbnailUrl() throws ParsingException {
82-
assertTrue(extractor.getThumbnailUrl(), extractor.getThumbnailUrl().contains("https://"));
84+
assertIsSecureUrl(extractor.getThumbnailUrl());
8385
}
8486

8587
@Test
8688
public void testGetUploaderAvatarUrl() throws ParsingException {
87-
assertTrue(extractor.getUploaderAvatarUrl(), extractor.getUploaderAvatarUrl().contains("https://"));
89+
assertIsSecureUrl(extractor.getUploaderAvatarUrl());
8890
}
8991

9092
@Test

src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractorDefaultTest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.junit.BeforeClass;
44
import org.junit.Test;
55
import org.schabi.newpipe.Downloader;
6+
import org.schabi.newpipe.extractor.ExtractorAsserts;
67
import org.schabi.newpipe.extractor.NewPipe;
78
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
89
import org.schabi.newpipe.extractor.exceptions.ParsingException;
@@ -12,6 +13,7 @@
1213
import java.io.IOException;
1314

1415
import static org.junit.Assert.*;
16+
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertIsSecureUrl;
1517
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
1618

1719
/*
@@ -38,7 +40,6 @@
3840
* Test for {@link StreamExtractor}
3941
*/
4042
public class YoutubeStreamExtractorDefaultTest {
41-
public static final String HTTPS = "https://";
4243
private static YoutubeStreamExtractor extractor;
4344

4445
@BeforeClass
@@ -102,14 +103,12 @@ public void testGetUploaderUrl() throws ParsingException {
102103

103104
@Test
104105
public void testGetThumbnailUrl() throws ParsingException {
105-
assertTrue(extractor.getThumbnailUrl(),
106-
extractor.getThumbnailUrl().contains(HTTPS));
106+
assertIsSecureUrl(extractor.getThumbnailUrl());
107107
}
108108

109109
@Test
110110
public void testGetUploaderAvatarUrl() throws ParsingException {
111-
assertTrue(extractor.getUploaderAvatarUrl(),
112-
extractor.getUploaderAvatarUrl().contains(HTTPS));
111+
assertIsSecureUrl(extractor.getUploaderAvatarUrl());
113112
}
114113

115114
@Test
@@ -120,8 +119,7 @@ public void testGetAudioStreams() throws IOException, ExtractionException {
120119
@Test
121120
public void testGetVideoStreams() throws IOException, ExtractionException {
122121
for (VideoStream s : extractor.getVideoStreams()) {
123-
assertTrue(s.url,
124-
s.url.contains(HTTPS));
122+
assertIsSecureUrl(s.url);
125123
assertTrue(s.resolution.length() > 0);
126124
assertTrue(Integer.toString(s.getFormatId()),
127125
0 <= s.getFormatId() && s.getFormatId() <= 4);

0 commit comments

Comments
 (0)