From: Niki Roo Date: Thu, 2 Mar 2017 19:03:23 +0000 (+0100) Subject: Fix POST parameters and YiffStar support X-Git-Tag: fanfix-1.3.0~1 X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=commitdiff_plain;h=13285ff8473a4092bddeed74c953f358ba1671d6 Fix POST parameters and YiffStar support --- diff --git a/src/be/nikiroo/fanfix/Cache.java b/src/be/nikiroo/fanfix/Cache.java index 8e8392a..d97a58a 100644 --- a/src/be/nikiroo/fanfix/Cache.java +++ b/src/be/nikiroo/fanfix/Cache.java @@ -222,7 +222,7 @@ public class Cache { throws IOException { URLConnection conn = openConnectionWithCookies(url, support); - if (postParams != null) { + if (postParams != null && conn instanceof HttpURLConnection) { StringBuilder postData = new StringBuilder(); for (Map.Entry param : postParams.entrySet()) { if (postData.length() != 0) @@ -234,6 +234,10 @@ public class Cache { } conn.setDoOutput(true); + ((HttpURLConnection) conn).setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", + "application/x-www-form-urlencoded"); + conn.setRequestProperty("charset", "utf-8"); OutputStreamWriter writer = new OutputStreamWriter( conn.getOutputStream()); diff --git a/src/be/nikiroo/fanfix/bundles/Config.java b/src/be/nikiroo/fanfix/bundles/Config.java index 7cc7bee..b68265e 100644 --- a/src/be/nikiroo/fanfix/bundles/Config.java +++ b/src/be/nikiroo/fanfix/bundles/Config.java @@ -44,8 +44,8 @@ public enum Config { CHAPTER_EN, // @Meta(what = "Chapter identification string", where = "", format = "", info = "used to identify a starting chapter in text mode") CHAPTER_FR, // - @Meta(what = "Login information", where = "", format = "", info = "used to login on YiffStar to have access to all the stories") + @Meta(what = "Login information", where = "", format = "", info = "used to login on YiffStar to have access to all the stories (should not be necessary anymore)") LOGIN_YIFFSTAR_USER, // - @Meta(what = "Login information", where = "", format = "", info = "used to login on YiffStar to have access to all the stories") + @Meta(what = "Login information", where = "", format = "", info = "used to login on YiffStar to have access to all the stories (should not be necessary anymore)") LOGIN_YIFFSTAR_PASS, // } diff --git a/src/be/nikiroo/fanfix/bundles/config.properties b/src/be/nikiroo/fanfix/bundles/config.properties index 4148f66..3f8345f 100644 --- a/src/be/nikiroo/fanfix/bundles/config.properties +++ b/src/be/nikiroo/fanfix/bundles/config.properties @@ -57,8 +57,8 @@ CHAPTER_EN = Chapter # used to identify a starting chapter in text mode CHAPTER_FR = Chapitre # (WHAT: Login information) -# used to login on YiffStar to have access to all the stories +# used to login on YiffStar to have access to all the stories (should not be necessary anymore) LOGIN_YIFFSTAR_USER = # (WHAT: Login information) -# used to login on YiffStar to have access to all the stories +# used to login on YiffStar to have access to all the stories (should not be necessary anymore) LOGIN_YIFFSTAR_PASS = diff --git a/src/be/nikiroo/fanfix/supported/YiffStar.java b/src/be/nikiroo/fanfix/supported/YiffStar.java index 4f4e8d6..0e24714 100644 --- a/src/be/nikiroo/fanfix/supported/YiffStar.java +++ b/src/be/nikiroo/fanfix/supported/YiffStar.java @@ -3,6 +3,7 @@ package be.nikiroo.fanfix.supported; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; +import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; @@ -68,25 +69,32 @@ class YiffStar extends BasicSupport { @Override public void login() throws IOException { - Map post = new HashMap(); - post.put("LoginForm[sfLoginUsername]", - Instance.getConfig().getString(Config.LOGIN_YIFFSTAR_USER)); - post.put("LoginForm[sfLoginPassword]", - Instance.getConfig().getString(Config.LOGIN_YIFFSTAR_PASS)); - post.put("YII_CSRF_TOKEN", ""); - - // Cookies will actually be retained by the cache manager once logged in - // TODO: not working yet, once fixed can be removed (adding "/guest" to - // URLs fix the access problem!): - /* - * Instance.getCache() .openNoCache(new - * URL("https://www.sofurry.com/user/login"), this, post).close(); - */ + // Note: this should not be necessary anymore + // (the "/guest" trick is enough) + 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("sfLoginUsername", login); + post.put("sfLoginPassword", password); + post.put("YII_CSRF_TOKEN", ""); + + // Cookies will actually be retained by the cache manager once + // logged in + Instance.getCache() + .openNoCache(new URL("https://www.sofurry.com/user/login"), + this, post).close(); + } } @Override public URL getCanonicalUrl(URL source) throws IOException { if (source.getPath().startsWith("/view")) { + source = new URL(source.toString() + "/guest"); InputStream in = Instance.getCache().open(source, this, false); String line = getLine(in, "/browse/folder/", 0); if (line != null) { @@ -94,7 +102,7 @@ class YiffStar extends BasicSupport { if (tab.length > 1) { String groupUrl = source.getProtocol() + "://" + source.getHost() + tab[1]; - return new URL(groupUrl); + return guest(groupUrl); } } } @@ -194,7 +202,7 @@ class YiffStar extends BasicSupport { link = source.getProtocol() + "://" + source.getHost() + link; } - final URL value = new URL(link); + final URL value = guest(link); final String key = StringUtils.unhtml(line).trim(); urls.add(new Entry() { public URL setValue(URL value) { @@ -245,4 +253,27 @@ class YiffStar extends BasicSupport { return builder.toString(); } + + /** + * 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 + */ + private URL guest(String link) throws MalformedURLException { + if (link.contains("?")) { + if (link.contains("/?")) { + return new URL(link.replace("?", "guest?")); + } else { + return new URL(link.replace("?", "/guest?")); + } + } else { + return new URL(link + "/guest"); + } + } }