Skip to content

Commit c941cd9

Browse files
author
updating-bot
committed
mirroring bot - 2025/11/04
1 parent 40e51a0 commit c941cd9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1031
-269
lines changed

svn_trunk/src/jd/plugins/decrypter/ArchiveOrgCrawler.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,9 @@
6969
import jd.plugins.components.PluginJSonUtils;
7070
import jd.plugins.download.HashInfo;
7171
import jd.plugins.hoster.ArchiveOrg;
72+
import jd.plugins.hoster.DirectHTTP;
7273

73-
@DecrypterPlugin(revision = "$Revision: 51392 $", interfaceVersion = 2, names = { "archive.org", "subdomain.archive.org" }, urls = { "https?://(?:www\\.)?archive\\.org/((?:details|download|stream|embed)/.+|search\\?query=.+)", "https?://[^/]+\\.archive\\.org/view_archive\\.php\\?archive=[^\\&]+(?:\\&file=[^\\&]+)?" })
74+
@DecrypterPlugin(revision = "$Revision: 51784 $", interfaceVersion = 2, names = { "archive.org", "subdomain.archive.org" }, urls = { "https?://(?:www\\.)?archive\\.org/((?:details|download|stream|embed)/.+|search\\?query=.+)", "https?://[^/]+\\.archive\\.org/view_archive\\.php\\?archive=[^\\&]+(?:\\&file=[^\\&]+)?" })
7475
public class ArchiveOrgCrawler extends PluginForDecrypt {
7576
public ArchiveOrgCrawler(PluginWrapper wrapper) {
7677
super(wrapper);
@@ -792,20 +793,23 @@ private ArrayList<DownloadLink> crawlMetadataJsonV2(final String identifier, fin
792793
playlistCrawlMode = PlaylistCrawlMode.AUTO;
793794
}
794795
final boolean isDownloadPage = sourceurl.matches("(?i)https?://[^/]+/download/.+");
795-
final String desiredSubpath;
796-
if (isDownloadPage) {
797-
desiredSubpath = new Regex(sourceurlForThisHandling, ".*/(" + Pattern.quote(identifier) + "/.+)").getMatch(0);
798-
} else {
799-
/* No download page/link -> No desired subpath */
800-
desiredSubpath = null;
801-
}
796+
String desiredSubpath = null;
802797
boolean allowCrawlArchiveContents = false;
803798
String desiredSubpathDecoded = null;
804799
String desiredSubpathDecoded2 = null;
805-
if (desiredSubpath != null) {
800+
find_desired_subpath: {
806801
/*
807802
* In this case we only want to get all files in a specific subfolder or even only a single file.
808803
*/
804+
if (!isDownloadPage) {
805+
/* Sourceurl is not a "/download/..." URL -> Do not look for a subpath */
806+
break find_desired_subpath;
807+
}
808+
desiredSubpath = new Regex(sourceurlForThisHandling, ".*/(" + Pattern.quote(identifier) + "/.+)").getMatch(0);
809+
if (desiredSubpath == null) {
810+
/* No subpath available */
811+
break find_desired_subpath;
812+
}
809813
desiredSubpathDecoded = Encoding.htmlDecode(desiredSubpath);
810814
/* Remove slash from end to allow for proper filename matching. */
811815
if (desiredSubpathDecoded.endsWith("/")) {
@@ -1075,13 +1079,21 @@ private ArrayList<DownloadLink> crawlMetadataJsonV2(final String identifier, fin
10751079
/* User desired item(s) are available -> Return only them */
10761080
return desiredSubpathItems;
10771081
}
1078-
logger.info("Failed to find single file/path: " + desiredSubpathDecoded);
10791082
final SingleFilePathNotFoundMode mode = cfg.getSingleFilePathNotFoundMode();
10801083
if (mode == SingleFilePathNotFoundMode.ADD_NOTHING_AND_DISPLAY_ADDED_URL_AS_OFFLINE) {
1084+
logger.info("Failed to find single file/path: " + desiredSubpathDecoded);
10811085
throw new PluginException(LinkStatus.ERROR_FILE_NOT_FOUND);
1082-
} else {
1083-
logger.info("Failed to find single file/path -> Adding all results instead");
10841086
}
1087+
logger.info("Failed to find single file/path -> Adding all (selected) results instead");
1088+
/* Add single offline item to list of results */
1089+
// final DownloadLink offline = this.createDownloadlink(sourceurl);
1090+
/*
1091+
* Add as DirectHTTP link so that URL structure does not matter and link will definitely end up as entry in linkgrabber visible
1092+
* to the user.
1093+
*/
1094+
final DownloadLink offline = this.createDownloadlink(DirectHTTP.createURLForThisPlugin(sourceurl));
1095+
offline.setAvailable(false);
1096+
selectedItems.add(offline);
10851097
}
10861098
/* Log skipped results */
10871099
if (skippedItemsFilepaths.size() > 0) {

svn_trunk/src/jd/plugins/decrypter/VKontakteRu.java

Lines changed: 83 additions & 91 deletions
Large diffs are not rendered by default.

svn_trunk/src/jd/plugins/hoster/FilerNet.java

Lines changed: 111 additions & 76 deletions
Large diffs are not rendered by default.

svn_trunk/src/jd/plugins/hoster/FlickrCom.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
import jd.plugins.decrypter.FlickrComCrawler;
6464
import jd.utils.JDUtilities;
6565

66-
@HostPlugin(revision = "$Revision: 50191 $", interfaceVersion = 2, names = { "flickr.com" }, urls = { "https?://(?:www\\.)?flickr\\.com/photos/([^<>\"/]+)/(\\d+)(?:/in/album-\\d+|/in/gallery-\\d+@N\\d+-\\d+)?" })
66+
@HostPlugin(revision = "$Revision: 51787 $", interfaceVersion = 2, names = { "flickr.com" }, urls = { "https?://(?:www\\.)?flickr\\.com/photos/([^<>\"/]+)/(\\d+)(?:/in/album-\\d+|/in/gallery-\\d+@N\\d+-\\d+)?" })
6767
public class FlickrCom extends PluginForHost {
6868
public FlickrCom(PluginWrapper wrapper) {
6969
super(wrapper);
@@ -798,8 +798,13 @@ protected void handleConnectionErrors(final Browser br, final URLConnectionAdapt
798798
if (StringUtils.containsIgnoreCase(con.getURL().toExternalForm(), "/photo_unavailable.gif")) {
799799
con.disconnect();
800800
errorBrokenFile(link);
801+
/* This code should never be reached */
802+
throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
801803
}
802804
if (!this.looksLikeDownloadableContent(con)) {
805+
if (con.getResponseCode() == 429) {
806+
throw new PluginException(LinkStatus.ERROR_IP_BLOCKED, "Error 429 too many requests", 5 * 60 * 1000l);
807+
}
803808
br.followConnection(true);
804809
if (con.getResponseCode() == 403 && br.containsHTML(">\\s*Request forbidden by administrative rules")) {
805810
final int minutesWait = this.getPluginConfig().getIntegerProperty(SETTING_WAIT_MINUTES_ON_ERROR_IP_BLOCKED, default_SETTING_WAIT_MINUTES_ON_ERROR_IP_BLOCKED);

svn_trunk/src/jd/plugins/hoster/Offline.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
*
4646
* @author raztoki<br />
4747
*/
48-
@HostPlugin(revision = "$Revision: 51699 $", interfaceVersion = 3, names = {}, urls = {})
48+
@HostPlugin(revision = "$Revision: 51781 $", interfaceVersion = 3, names = {}, urls = {})
4949
public class Offline extends PluginForHost {
5050
public static String getOfflineVersion() {
5151
final HostPlugin hostPlugin = Offline.class.getAnnotation(HostPlugin.class);
@@ -290,6 +290,7 @@ public static List<String[]> getPluginDomains() {
290290
* The limewire.com website then also says "Your files are ready! Easyupload.io is now part of LimeWire."
291291
*/
292292
ret.add(new String[] { "easyupload.io" });
293+
ret.add(new String[] { "turbovid.org", "turbovid.co" });
293294
if (cache != null) {
294295
cache.put(cacheID, ret);
295296
}

svn_trunk/src/jd/plugins/hoster/SharingWtf.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
import jd.plugins.LinkStatus;
4242
import jd.plugins.PluginException;
4343

44-
@HostPlugin(revision = "$Revision: 51779 $", interfaceVersion = 2, names = {}, urls = {})
44+
@HostPlugin(revision = "$Revision: 51785 $", interfaceVersion = 2, names = {}, urls = {})
4545
public class SharingWtf extends YetiShareCore {
4646
public SharingWtf(PluginWrapper wrapper) {
4747
super(wrapper);
@@ -283,16 +283,21 @@ protected void handleDownloadWebsite(final DownloadLink link, final Account acco
283283
}
284284
logger.log(pe);
285285
/*
286-
* Ugly implementation: Let previous code do its job until it fails, then check if we landet on the captcha page to continue
286+
* Ugly implementation: Let previous code do its job until it fails, then check if we landed on the captcha page to continue
287287
* lol
288288
*/
289-
final String filename = br.getRegex("data-filename=\"([^\"]+)").getMatch(0);
289+
/* 2025-11-03: filename is allowed to be an empty string. */
290+
String filename = br.getRegex("data-filename=\"([^\"]+)").getMatch(0);
290291
final String urlhash = br.getRegex("data-urlhash=\"([^\"]+)").getMatch(0);
291292
final String sitekey = br.getRegex("data-sitekey=\"([^\"]+)").getMatch(0);
292-
if (urlhash == null || sitekey == null || filename == null) {
293-
logger.warning("Special handling failed");
293+
if (urlhash == null || sitekey == null) {
294+
logger.warning("Special handling failed: urlhash=" + urlhash + " | sitekey=" + sitekey);
294295
throw pe;
295296
}
297+
if (filename == null) {
298+
/* Not important, can be empty */
299+
filename = "";
300+
}
296301
final String recaptchaV2Response = new CaptchaHelperHostPluginRecaptchaV2(this, br).getToken();
297302
final Form captcha = new Form();
298303
captcha.setMethod(MethodType.POST);
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
//jDownloader - Downloadmanager
2+
//Copyright (C) 2009 JD-Team support@jdownloader.org
3+
//
4+
//This program is free software: you can redistribute it and/or modify
5+
//it under the terms of the GNU General Public License as published by
6+
//the Free Software Foundation, either version 3 of the License, or
7+
//(at your option) any later version.
8+
//
9+
//This program is distributed in the hope that it will be useful,
10+
//but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
//GNU General Public License for more details.
13+
//
14+
//You should have received a copy of the GNU General Public License
15+
//along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
package jd.plugins.hoster;
17+
18+
import java.io.IOException;
19+
import java.util.ArrayList;
20+
import java.util.HashMap;
21+
import java.util.List;
22+
import java.util.Map;
23+
24+
import org.appwork.storage.JSonStorage;
25+
import org.appwork.storage.TypeRef;
26+
import org.appwork.utils.DebugMode;
27+
import org.appwork.utils.StringUtils;
28+
import org.appwork.utils.formatter.SizeFormatter;
29+
import org.jdownloader.captcha.v2.challenge.cloudflareturnstile.CaptchaHelperHostPluginCloudflareTurnstile;
30+
31+
import jd.PluginWrapper;
32+
import jd.http.Browser;
33+
import jd.http.Request;
34+
import jd.nutils.encoding.Encoding;
35+
import jd.parser.Regex;
36+
import jd.plugins.Account;
37+
import jd.plugins.DownloadLink;
38+
import jd.plugins.DownloadLink.AvailableStatus;
39+
import jd.plugins.HostPlugin;
40+
import jd.plugins.LinkStatus;
41+
import jd.plugins.PluginException;
42+
import jd.plugins.PluginForHost;
43+
44+
@HostPlugin(revision = "$Revision: 51786 $", interfaceVersion = 3, names = {}, urls = {})
45+
public class VexfileCom extends PluginForHost {
46+
public VexfileCom(PluginWrapper wrapper) {
47+
super(wrapper);
48+
}
49+
50+
@Override
51+
public Browser createNewBrowserInstance() {
52+
final Browser br = super.createNewBrowserInstance();
53+
br.setFollowRedirects(true);
54+
return br;
55+
}
56+
57+
@Override
58+
public String getAGBLink() {
59+
return "https://" + getHost() + "/tos";
60+
}
61+
62+
private static List<String[]> getPluginDomains() {
63+
final List<String[]> ret = new ArrayList<String[]>();
64+
// each entry in List<String[]> will result in one PluginForHost, Plugin.getHost() will return String[0]->main domain
65+
ret.add(new String[] { "vexfile.com" });
66+
return ret;
67+
}
68+
69+
public static String[] getAnnotationNames() {
70+
return buildAnnotationNames(getPluginDomains());
71+
}
72+
73+
@Override
74+
public String[] siteSupportedNames() {
75+
return buildSupportedNames(getPluginDomains());
76+
}
77+
78+
public static String[] getAnnotationUrls() {
79+
final List<String> ret = new ArrayList<String>();
80+
for (final String[] domains : getPluginDomains()) {
81+
ret.add("https?://(?:www\\.)?" + buildHostsPatternPart(domains) + "/download/([A-Za-z0-9]+)");
82+
}
83+
return ret.toArray(new String[0]);
84+
}
85+
86+
@Override
87+
public String getLinkID(final DownloadLink link) {
88+
final String fid = getFID(link);
89+
if (fid != null) {
90+
return this.getHost() + "://" + fid;
91+
} else {
92+
return super.getLinkID(link);
93+
}
94+
}
95+
96+
private String getFID(final DownloadLink link) {
97+
return new Regex(link.getPluginPatternMatcher(), this.getSupportedLinks()).getMatch(0);
98+
}
99+
100+
@Override
101+
public boolean isResumeable(final DownloadLink link, final Account account) {
102+
return true;
103+
}
104+
105+
public int getMaxChunks(final DownloadLink link, final Account account) {
106+
return 0;
107+
}
108+
109+
@Override
110+
protected String getDefaultFileName(DownloadLink link) {
111+
return this.getFID(link);
112+
}
113+
114+
@Override
115+
public AvailableStatus requestFileInformation(final DownloadLink link) throws IOException, PluginException {
116+
this.setBrowserExclusive();
117+
br.getPage(link.getPluginPatternMatcher());
118+
if (br.getHttpConnection().getResponseCode() == 404) {
119+
throw new PluginException(LinkStatus.ERROR_FILE_NOT_FOUND);
120+
}
121+
String filename = br.getRegex("class=\"card-dt\"[^>]*>\\s*<h4>([^<]+)</h4>").getMatch(0);
122+
if (StringUtils.isEmpty(filename)) {
123+
filename = br.getRegex("title:\\s*'([^'\"]+)").getMatch(0);
124+
}
125+
String filesize = br.getRegex("class=\"file-size\"[^>]*>\\s*<[^>]*>\\s*</i>([^<]+)").getMatch(0);
126+
if (filename != null) {
127+
filename = Encoding.htmlDecode(filename).trim();
128+
link.setName(filename);
129+
} else {
130+
logger.warning("Failed to find filename");
131+
}
132+
if (filesize != null) {
133+
link.setDownloadSize(SizeFormatter.getSize(filesize));
134+
} else {
135+
logger.warning("Failed to find filesize");
136+
}
137+
return AvailableStatus.TRUE;
138+
}
139+
140+
@Override
141+
public void handleFree(final DownloadLink link) throws Exception, PluginException {
142+
handleDownload(link);
143+
}
144+
145+
private void handleDownload(final DownloadLink link) throws Exception, PluginException {
146+
final String directlinkproperty = "directurl";
147+
if (!attemptStoredDownloadurlDownload(link, directlinkproperty)) {
148+
requestFileInformation(link);
149+
final String continuelink = br.getRegex("href=\"([^\"]+)\"[^>]*class=\"generate-link blocked\"").getMatch(0);
150+
if (continuelink == null) {
151+
throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT, "Failed to find continuelink");
152+
}
153+
final String file_id = br.getRegex("id=\"file_id\" value=\"(\\d+)\"").getMatch(0);
154+
if (file_id == null) {
155+
throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT, "Failed to find file_id");
156+
}
157+
final String csrftoken = br.getRegex("'X-CSRF-TOKEN':\\s*'([^\"']+)").getMatch(0);
158+
if (csrftoken == null) {
159+
throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT, "Failed to find file_id");
160+
}
161+
if (!DebugMode.TRUE_IN_IDE_ELSE_FALSE) {
162+
throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT, "Unfinished plugin!");
163+
}
164+
final String cfTurnstileResponse = new CaptchaHelperHostPluginCloudflareTurnstile(this, br).getToken();
165+
final Map<String, Object> postdata = new HashMap<String, Object>();
166+
postdata.put("file_id", csrftoken);
167+
postdata.put("token", cfTurnstileResponse);
168+
final Request req = br.createJSonPostRequest("/verify-cf-captcha", JSonStorage.serializeToJson(postdata));
169+
req.getHeaders().put("Content-Type", "application/json");
170+
req.getHeaders().put("X-CSRF-TOKEN", csrftoken);
171+
/* This should set at least two cookies: XSRF-TOKEN, vexfilecom_session */
172+
br.getPage(req);
173+
final Map<String, Object> entries = restoreFromString(br.getRequest().getHtmlCode(), TypeRef.MAP);
174+
if (Boolean.FALSE.equals(entries.get("success"))) {
175+
/* This should be a rare case. */
176+
throw new PluginException(LinkStatus.ERROR_CAPTCHA);
177+
}
178+
br.getPage(continuelink);
179+
String dllink = br.getRegex("\"(/[^\"]+)\"[^>]*class=\"generate-link\"").getMatch(0);
180+
if (StringUtils.isEmpty(dllink)) {
181+
throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT, "Failed to find final downloadurl");
182+
}
183+
dl = jd.plugins.BrowserAdapter.openDownload(br, link, dllink, this.isResumeable(link, null), this.getMaxChunks(link, null));
184+
this.handleConnectionErrors(br, dl.getConnection());
185+
link.setProperty(directlinkproperty, dl.getConnection().getURL().toExternalForm());
186+
}
187+
dl.startDownload();
188+
}
189+
190+
@Override
191+
public boolean hasCaptcha(DownloadLink link, jd.plugins.Account acc) {
192+
return true;
193+
}
194+
195+
private boolean attemptStoredDownloadurlDownload(final DownloadLink link, final String directlinkproperty) throws Exception {
196+
final String url = link.getStringProperty(directlinkproperty);
197+
if (StringUtils.isEmpty(url)) {
198+
return false;
199+
}
200+
try {
201+
final Browser brc = br.cloneBrowser();
202+
dl = new jd.plugins.BrowserAdapter().openDownload(brc, link, url, this.isResumeable(link, null), this.getMaxChunks(link, null));
203+
if (this.looksLikeDownloadableContent(dl.getConnection())) {
204+
return true;
205+
} else {
206+
brc.followConnection(true);
207+
throw new IOException();
208+
}
209+
} catch (final Throwable e) {
210+
logger.log(e);
211+
try {
212+
dl.getConnection().disconnect();
213+
} catch (Throwable ignore) {
214+
}
215+
return false;
216+
}
217+
}
218+
219+
@Override
220+
public int getMaxSimultanFreeDownloadNum() {
221+
return Integer.MAX_VALUE;
222+
}
223+
}

svn_trunk/src/jd/plugins/hoster/VidhideCom.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import jd.plugins.LinkStatus;
3939
import jd.plugins.PluginException;
4040

41-
@HostPlugin(revision = "$Revision: 51727 $", interfaceVersion = 3, names = {}, urls = {})
41+
@HostPlugin(revision = "$Revision: 51784 $", interfaceVersion = 3, names = {}, urls = {})
4242
public class VidhideCom extends XFileSharingProBasic {
4343
public VidhideCom(final PluginWrapper wrapper) {
4444
super(wrapper);
@@ -55,7 +55,7 @@ public VidhideCom(final PluginWrapper wrapper) {
5555
public static List<String[]> getPluginDomains() {
5656
final List<String[]> ret = new ArrayList<String[]>();
5757
// each entry in List<String[]> will result in one PluginForHost, Plugin.getHost() will return String[0]->main domain
58-
ret.add(new String[] { "vidhidepro.com", "vidhide.com", "vidhidehub.com", "moflix-stream.click", "javplaya.com", "filelions.to", "filelions.com", "filelions.online", "filelions.site", "alions.pro", "azipcdn.com", "vidhidepre.com", "dlions.pro", "playrecord.biz", "mycloudz.cc", "vidhideplus.com", "nikaplayer.com", "niikaplayerr.com", "vidhidefast.com", "seraphinapl.com", "taylorplayer.com", "dinisglows.com" });
58+
ret.add(new String[] { "vidhidepro.com", "vidhide.com", "vidhidehub.com", "moflix-stream.click", "javplaya.com", "filelions.to", "filelions.com", "filelions.online", "filelions.site", "alions.pro", "azipcdn.com", "vidhidepre.com", "dlions.pro", "playrecord.biz", "mycloudz.cc", "vidhideplus.com", "nikaplayer.com", "niikaplayerr.com", "vidhidefast.com", "seraphinapl.com", "taylorplayer.com", "dinisglows.com", "dingtezuni.com" });
5959
return ret;
6060
}
6161

0 commit comments

Comments
 (0)