diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java index 4979ee44e..96d0d52f3 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java @@ -256,6 +256,7 @@ public interface SharedPreferenceConstants { String KEY_SETTINGS_WIZARD_COMPLETED = "settings_wizard_completed"; @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = true) String KEY_CARD_ANIMATION = "card_animation"; + @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = true) String KEY_UNREAD_COUNT = "unread_count"; String KEY_NOTIFICATION = "notification"; String KEY_NOTIFICATION_TYPE_HOME = "notification_type_home"; @@ -302,7 +303,9 @@ public interface SharedPreferenceConstants { @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = false) String KEY_THUMBOR_ENABLED = "thumbor_enabled"; + @Preference(type = STRING, hasDefault = false) String KEY_THUMBOR_ADDRESS = "thumbor_address"; + @Preference(type = STRING, hasDefault = false) String KEY_THUMBOR_SECURITY_KEY = "thumbor_security_key"; @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = false) String KEY_HIDE_CARD_ACTIONS = "hide_card_actions"; diff --git a/twidere.component.twitter4j/src/main/java/twitter4j/conf/ConfigurationBase.java b/twidere.component.twitter4j/src/main/java/twitter4j/conf/ConfigurationBase.java index 5d1c449c8..17d4eaa9d 100644 --- a/twidere.component.twitter4j/src/main/java/twitter4j/conf/ConfigurationBase.java +++ b/twidere.component.twitter4j/src/main/java/twitter4j/conf/ConfigurationBase.java @@ -714,7 +714,7 @@ class ConfigurationBase implements TwitterConstants, Configuration { } public void setOAuthAuthorizationURL(String oAuthAuthorizationURL) { -// this.oAuthAuthorizationURL = oAuthAuthorizationURL; + this.oAuthAuthorizationURL = oAuthAuthorizationURL; } protected final void setOAuthBaseURL(String oAuthBaseURL) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/OAuthPasswordAuthenticator.java b/twidere/src/main/java/org/mariotaku/twidere/util/OAuthPasswordAuthenticator.java index 5540ccb61..69b0e040f 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/OAuthPasswordAuthenticator.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/OAuthPasswordAuthenticator.java @@ -30,6 +30,7 @@ import org.xmlpull.v1.XmlPullParserFactory; import java.io.IOException; import java.io.Reader; +import java.net.HttpCookie; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -89,8 +90,20 @@ public class OAuthPasswordAuthenticator implements Constants { final HeaderMap requestHeaders = new HeaderMap(); requestHeaders.addHeader("Origin", "https://twitter.com"); requestHeaders.addHeader("Referer", "https://twitter.com/oauth/authorize?oauth_token=" + requestToken.getToken()); - requestHeaders.put("Cookie", cookieHeaders); + final List modifiedCookieHeaders = new ArrayList<>(); final String oAuthAuthorizationUrl = conf.getOAuthAuthorizationURL(); + + final String host = parseUrlHost(oAuthAuthorizationUrl); + for (String cookieHeader : cookieHeaders) { + for (HttpCookie cookie : HttpCookie.parse(cookieHeader)) { + if (HttpCookie.domainMatches(cookie.getDomain(), host)) { + cookie.setVersion(1); + cookie.setDomain("twitter.com"); + } + modifiedCookieHeaders.add(cookie.toString()); + } + } + requestHeaders.put("Cookie", modifiedCookieHeaders); final String oauthPin = readOAuthPINFromHtml(client.post(oAuthAuthorizationUrl, oAuthAuthorizationUrl, params.toArray(new HttpParameter[params.size()]), requestHeaders).asReader()); if (isEmpty(oauthPin)) throw new WrongUserPassException(); @@ -100,7 +113,7 @@ public class OAuthPasswordAuthenticator implements Constants { } } - public static void readInputFromHtml(final Reader in, Map map, String... desiredNames) throws IOException, XmlPullParserException { + private static void readInputFromHtml(final Reader in, Map map, String... desiredNames) throws IOException, XmlPullParserException { final XmlPullParserFactory f = XmlPullParserFactory.newInstance(); final XmlPullParser parser = f.newPullParser(); parser.setFeature(Xml.FEATURE_RELAXED, true); @@ -151,6 +164,11 @@ public class OAuthPasswordAuthenticator implements Constants { return null; } + private static String parseUrlHost(String url) { + final int startOfHost = url.indexOf("://") + 3, endOfHost = url.indexOf('/', startOfHost); + return url.substring(startOfHost, endOfHost); + } + public static class AuthenticationException extends Exception { private static final long serialVersionUID = -5629194721838256378L; diff --git a/twidere/src/main/res/layout/activity_sign_in.xml b/twidere/src/main/res/layout/activity_sign_in.xml index 2240bbfa2..2013e38ea 100644 --- a/twidere/src/main/res/layout/activity_sign_in.xml +++ b/twidere/src/main/res/layout/activity_sign_in.xml @@ -23,13 +23,13 @@ + android:layout_gravity="center">