package be.nikiroo.fanfix.supported; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.jsoup.helper.DataUtil; import org.jsoup.nodes.Document; import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.bundles.Config; import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.utils.IOUtils; import be.nikiroo.utils.Progress; /** * Support class for SoFurry.com, a Furry * website supporting images and stories (we only retrieve the stories). * * @author niki */ class YiffStar2 extends BasicSupport { @Override protected String getSourceName() { return "YiffStar"; } @Override protected void login() throws IOException { // Note: this is not necessary anymore for NSFW // (the "/guest" trick is enough) // ...but still required for RegUsersOnly pages String login = Instance.getConfig().getString( Config.LOGIN_YIFFSTAR_USER); String password = Instance.getConfig().getString( Config.LOGIN_YIFFSTAR_PASS); if (login != null && !login.isEmpty() && password != null && !password.isEmpty()) { Map post = new HashMap(); post.put("YII_CSRF_TOKEN", ""); post.put("LoginForm[sfLoginUsername]", login); post.put("LoginForm[sfLoginPassword]", password); post.put("returnUrl", "/"); post.put("yt1", "Login"); // Cookies will actually be retained by the cache manager once // logged in setCurrentReferer(null); Instance.getCache() .openNoCache(new URL("https://www.sofurry.com/user/login"), this, post, null, null).close(); } } @Override protected Document loadDocument(URL source) throws IOException { String url = getCanonicalUrl(source).toString(); return DataUtil .load(Instance.getCache().openNoCache(source, this, null, null, null), "UTF-8", url.toString()); } @Override protected boolean isHtml() { return true; } @Override protected MetaData getMeta() throws IOException { IOUtils.writeSmallFile(new File("/tmp/node.html"), getSourceNode() .outerHtml()); MetaData meta = new MetaData(); meta.setTitle(""); meta.setAuthor(""); meta.setDate(""); meta.setTags(new ArrayList()); meta.setSource(getSourceName()); meta.setUrl(getSource().toString()); meta.setPublisher(getSourceName()); meta.setUuid(getSource().toString()); meta.setLuid(""); meta.setLang("en"); meta.setSubject("Furry"); meta.setType(getType().toString()); meta.setImageDocument(false); meta.setCover(null); return meta; } @Override protected String getDesc() throws IOException { // TODO Auto-generated method stub return ""; } @Override protected List> getChapters(Progress pg) throws IOException { // TODO Auto-generated method stub return new ArrayList>(); } @Override protected String getChapterContent(URL chapUrl, int number, Progress pg) throws IOException { // TODO Auto-generated method stub return ""; } @Override protected boolean supports(URL url) { String host = url.getHost(); if (host.startsWith("www.")) { host = host.substring("www.".length()); } return "sofurry.com".equals(host); } /** * Return a {@link URL} from the given link, but add the "/guest" part to it * to make sure we don't need to be logged-in to see it. * * @param link * the link * * @return the {@link URL} * * @throws MalformedURLException * in case of data error */ static private URL guestUrl(String link) throws MalformedURLException { if (true) return new URL(link); if (link.contains("?")) { if (link.contains("/?")) { return new URL(link.replace("?", "guest?")); } return new URL(link.replace("?", "/guest?")); } return new URL(link + "/guest"); } }