1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-04 18:29:23 +02:00

authentication related things: updates

This commit is contained in:
Nikolay Pultsin 2011-10-16 01:23:47 +01:00
parent 67eab47313
commit bb9a9d7fa5
10 changed files with 159 additions and 137 deletions

View file

@ -166,7 +166,7 @@
<data android:host="*" android:scheme="opds" /> <data android:host="*" android:scheme="opds" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name="org.geometerplus.android.fbreader.network.AccountMenuActivity" android:process=":networkLibrary" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden"/> <activity android:name="org.geometerplus.android.fbreader.network.AuthorizationMenuActivity" android:process=":networkLibrary" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden"/>
<activity android:name="org.geometerplus.android.fbreader.network.TopupMenuActivity" android:process=":networkLibrary" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden"/> <activity android:name="org.geometerplus.android.fbreader.network.TopupMenuActivity" android:process=":networkLibrary" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden"/>
<activity android:name="org.geometerplus.android.fbreader.network.NetworkBookInfoActivity" android:process=":networkLibrary" android:configChanges="orientation|keyboardHidden"> <activity android:name="org.geometerplus.android.fbreader.network.NetworkBookInfoActivity" android:process=":networkLibrary" android:configChanges="orientation|keyboardHidden">
<intent-filter> <intent-filter>

View file

@ -166,7 +166,7 @@
<data android:host="*" android:scheme="opds" /> <data android:host="*" android:scheme="opds" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name="org.geometerplus.android.fbreader.network.AccountMenuActivity" android:process=":networkLibrary" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden"/> <activity android:name="org.geometerplus.android.fbreader.network.AuthorizationMenuActivity" android:process=":networkLibrary" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden"/>
<activity android:name="org.geometerplus.android.fbreader.network.TopupMenuActivity" android:process=":networkLibrary" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden"/> <activity android:name="org.geometerplus.android.fbreader.network.TopupMenuActivity" android:process=":networkLibrary" android:theme="@android:style/Theme.Dialog" android:configChanges="orientation|keyboardHidden"/>
<activity android:name="org.geometerplus.android.fbreader.network.NetworkBookInfoActivity" android:process=":networkLibrary" android:configChanges="orientation|keyboardHidden"> <activity android:name="org.geometerplus.android.fbreader.network.NetworkBookInfoActivity" android:process=":networkLibrary" android:configChanges="orientation|keyboardHidden">
<intent-filter> <intent-filter>

View file

@ -246,11 +246,10 @@ public class AuthenticationActivity extends Activity {
private void runCustomAuthentication(final String username, final String password) { private void runCustomAuthentication(final String username, final String password) {
final NetworkAuthenticationManager mgr = myLink.authenticationManager(); final NetworkAuthenticationManager mgr = myLink.authenticationManager();
mgr.UserNameOption.setValue(username);
final Runnable runnable = new Runnable() { final Runnable runnable = new Runnable() {
public void run() { public void run() {
try { try {
mgr.authorise(password); mgr.authorise(username, password);
if (mgr.needsInitialization()) { if (mgr.needsInitialization()) {
mgr.initialize(); mgr.initialize();
} }

View file

@ -35,10 +35,10 @@ import org.geometerplus.android.util.PackageUtil;
import org.geometerplus.android.fbreader.api.PluginApi; import org.geometerplus.android.fbreader.api.PluginApi;
public class AccountMenuActivity extends MenuActivity { public class AuthorizationMenuActivity extends MenuActivity {
public static void runMenu(Context context, INetworkLink link) { public static void runMenu(Context context, INetworkLink link) {
context.startActivity( context.startActivity(
Util.intentByLink(new Intent(context, AccountMenuActivity.class), link) Util.intentByLink(new Intent(context, AuthorizationMenuActivity.class), link)
); );
} }
@ -69,10 +69,10 @@ public class AccountMenuActivity extends MenuActivity {
try { try {
final NetworkAuthenticationManager mgr = myLink.authenticationManager(); final NetworkAuthenticationManager mgr = myLink.authenticationManager();
if (info.getId().toString().endsWith("/signIn")) { if (info.getId().toString().endsWith("/signIn")) {
Util.runAuthenticationDialog(AccountMenuActivity.this, myLink, null); Util.runAuthenticationDialog(AuthorizationMenuActivity.this, myLink, null);
} else { } else {
final Intent intent = Util.authorizationIntent(myLink, info.getId()); final Intent intent = Util.authorizationIntent(myLink, info.getId());
if (PackageUtil.canBeStarted(AccountMenuActivity.this, intent, true)) { if (PackageUtil.canBeStarted(AuthorizationMenuActivity.this, intent, true)) {
startActivity(intent); startActivity(intent);
} }
} }

View file

@ -106,7 +106,7 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
try { try {
if (!mgr.isAuthorised(true)) { if (!mgr.isAuthorised(true)) {
AccountMenuActivity.runMenu(this, myLink); AuthorizationMenuActivity.runMenu(this, myLink);
} }
} catch (ZLNetworkException e) { } catch (ZLNetworkException e) {
} }
@ -122,10 +122,17 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
myAccount = mgr.currentAccount(); myAccount = mgr.currentAccount();
setupUI(true); setupUI(AuthorizationState.Authorized);
NetworkLibrary.Instance().addChangeListener(this);
} }
private void setupUI(boolean authorized) { private static enum AuthorizationState {
Authorized,
NotAuthorized
};
private void setupUI(AuthorizationState state) {
final ZLResource dialogResource = ZLResource.resource("dialog"); final ZLResource dialogResource = ZLResource.resource("dialog");
final ZLResource buttonResource = dialogResource.getResource("button"); final ZLResource buttonResource = dialogResource.getResource("button");
@ -142,13 +149,14 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
setTitle(resource.getResource("title").getValue()); setTitle(resource.getResource("title").getValue());
} }
if (!authorized) { switch (state) {
case NotAuthorized:
textArea.setText(resource.getResource("notAuthorized").getValue()); textArea.setText(resource.getResource("notAuthorized").getValue());
okButton.setText(buttonResource.getResource("authorize").getValue()); okButton.setText(buttonResource.getResource("authorize").getValue());
cancelButton.setText(buttonResource.getResource("cancel").getValue()); cancelButton.setText(buttonResource.getResource("cancel").getValue());
okButton.setOnClickListener(new View.OnClickListener() { okButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
AccountMenuActivity.runMenu(BuyBooksActivity.this, myLink); AuthorizationMenuActivity.runMenu(BuyBooksActivity.this, myLink);
} }
}); });
cancelButton.setOnClickListener(new View.OnClickListener() { cancelButton.setOnClickListener(new View.OnClickListener() {
@ -156,7 +164,9 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
finish(); finish();
} }
}); });
} else if (myAccount == null) { break;
case Authorized:
if (myAccount == null) {
textArea.setText(resource.getResource("noAccountInformation").getValue()); textArea.setText(resource.getResource("noAccountInformation").getValue());
okButton.setText(buttonResource.getResource("refresh").getValue()); okButton.setText(buttonResource.getResource("refresh").getValue());
cancelButton.setText(buttonResource.getResource("cancel").getValue()); cancelButton.setText(buttonResource.getResource("cancel").getValue());
@ -225,18 +235,14 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
okButton.setVisibility(View.GONE); okButton.setVisibility(View.GONE);
} }
} }
break;
}
} }
@Override @Override
protected void onStart() { protected void onDestroy() {
super.onStart();
NetworkLibrary.Instance().addChangeListener(this);
}
@Override
protected void onStop() {
NetworkLibrary.Instance().removeChangeListener(this); NetworkLibrary.Instance().removeChangeListener(this);
super.onStop(); super.onDestroy();
} }
@Override @Override
@ -285,7 +291,7 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
if (updated) { if (updated) {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
public void run() { public void run() {
setupUI(true); setupUI(AuthorizationState.Authorized);
} }
}); });
} }
@ -342,23 +348,29 @@ public class BuyBooksActivity extends Activity implements NetworkLibrary.ChangeL
// method from NetworkLibrary.ChangeListener // method from NetworkLibrary.ChangeListener
public void onLibraryChanged(final NetworkLibrary.ChangeListener.Code code, final Object[] params) { public void onLibraryChanged(final NetworkLibrary.ChangeListener.Code code, final Object[] params) {
runOnUiThread(new Runnable() {
public void run() {
switch (code) { switch (code) {
case SignedIn: case SignedIn:
updateAuthorizationState(); updateAuthorizationState();
break; break;
} }
} }
});
}
private void updateAuthorizationState() { private void updateAuthorizationState() {
final NetworkAuthenticationManager mgr = myLink.authenticationManager(); final NetworkAuthenticationManager mgr = myLink.authenticationManager();
try { try {
if (mgr.isAuthorised(true)) { if (mgr.isAuthorised(true)) {
setupUI(AuthorizationState.Authorized);
refreshAccountInformation(); refreshAccountInformation();
} else { } else {
setupUI(false); setupUI(AuthorizationState.NotAuthorized);
} }
} catch (ZLNetworkException e) { } catch (ZLNetworkException e) {
setupUI(false); e.printStackTrace();
setupUI(AuthorizationState.NotAuthorized);
} }
} }
} }

View file

@ -42,7 +42,6 @@ public class ListenerCallback extends BroadcastReceiver implements UserRegistrat
if (mgr instanceof LitResAuthenticationManager) { if (mgr instanceof LitResAuthenticationManager) {
try { try {
processSignup((LitResAuthenticationManager)mgr, intent); processSignup((LitResAuthenticationManager)mgr, intent);
library.fireModelChangedEvent(NetworkLibrary.ChangeListener.Code.SignedIn);
} catch (ZLNetworkException e) { } catch (ZLNetworkException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -64,7 +63,10 @@ public class ListenerCallback extends BroadcastReceiver implements UserRegistrat
// throw new ZLNetworkException(NetworkException.ERROR_AUTHENTICATION_FAILED); // throw new ZLNetworkException(NetworkException.ERROR_AUTHENTICATION_FAILED);
//} //}
try { try {
mgr.authorise(data.getStringExtra(USER_REGISTRATION_PASSWORD)); mgr.authorise(
data.getStringExtra(USER_REGISTRATION_USERNAME),
data.getStringExtra(USER_REGISTRATION_PASSWORD)
);
mgr.initialize(); mgr.initialize();
} catch (ZLNetworkException e) { } catch (ZLNetworkException e) {
mgr.logOut(); mgr.logOut();

View file

@ -95,7 +95,7 @@ public abstract class Util implements UserRegistrationConstants {
final Intent intent = intentByLink(new Intent(activity, AuthenticationActivity.class), link); final Intent intent = intentByLink(new Intent(activity, AuthenticationActivity.class), link);
AuthenticationActivity.registerRunnable(intent, onSuccess); AuthenticationActivity.registerRunnable(intent, onSuccess);
intent.putExtra(AuthenticationActivity.USERNAME_KEY, mgr.UserNameOption.getValue()); intent.putExtra(AuthenticationActivity.USERNAME_KEY, mgr.getUserName());
intent.putExtra(AuthenticationActivity.SCHEME_KEY, "https"); intent.putExtra(AuthenticationActivity.SCHEME_KEY, "https");
intent.putExtra(AuthenticationActivity.CUSTOM_AUTH_KEY, true); intent.putExtra(AuthenticationActivity.CUSTOM_AUTH_KEY, true);
activity.startActivity(intent); activity.startActivity(intent);

View file

@ -67,7 +67,7 @@ public class SignOutAction extends Action {
public String getOptionsLabel(NetworkTree tree) { public String getOptionsLabel(NetworkTree tree) {
final NetworkAuthenticationManager mgr = tree.getLink().authenticationManager(); final NetworkAuthenticationManager mgr = tree.getLink().authenticationManager();
final String userName = final String userName =
mgr != null && mgr.mayBeAuthorised(false) ? mgr.UserNameOption.getValue() : ""; mgr != null && mgr.mayBeAuthorised(false) ? mgr.getVisibleUserName() : "";
return super.getOptionsLabel(tree).replace("%s", userName); return super.getOptionsLabel(tree).replace("%s", userName);
} }
@ -75,7 +75,7 @@ public class SignOutAction extends Action {
public String getContextLabel(NetworkTree tree) { public String getContextLabel(NetworkTree tree) {
final NetworkAuthenticationManager mgr = tree.getLink().authenticationManager(); final NetworkAuthenticationManager mgr = tree.getLink().authenticationManager();
final String userName = final String userName =
mgr != null && mgr.mayBeAuthorised(false) ? mgr.UserNameOption.getValue() : ""; mgr != null && mgr.mayBeAuthorised(false) ? mgr.getVisibleUserName() : "";
return super.getContextLabel(tree).replace("%s", userName); return super.getContextLabel(tree).replace("%s", userName);
} }
} }

View file

@ -48,18 +48,27 @@ public abstract class NetworkAuthenticationManager {
public final INetworkLink Link; public final INetworkLink Link;
public final ZLStringOption UserNameOption; protected final ZLStringOption UserNameOption;
protected NetworkAuthenticationManager(INetworkLink link) { protected NetworkAuthenticationManager(INetworkLink link) {
Link = link; Link = link;
UserNameOption = new ZLStringOption(link.getSiteName(), "userName", ""); UserNameOption = new ZLStringOption(link.getSiteName(), "userName", "");
} }
public String getUserName() {
return UserNameOption.getValue();
}
public String getVisibleUserName() {
final String username = getUserName();
return username.startsWith("fbreader-auto-") ? "auto" : username;
}
/* /*
* Common manager methods * Common manager methods
*/ */
public abstract boolean isAuthorised(boolean useNetwork /* = true */) throws ZLNetworkException; public abstract boolean isAuthorised(boolean useNetwork /* = true */) throws ZLNetworkException;
public abstract void authorise(String password) throws ZLNetworkException; public abstract void authorise(String username, String password) throws ZLNetworkException;
public abstract void logOut(); public abstract void logOut();
public abstract BookUrlInfo downloadReference(NetworkBookItem book); public abstract BookUrlInfo downloadReference(NetworkBookItem book);
public abstract void refreshAccountInformation() throws ZLNetworkException; public abstract void refreshAccountInformation() throws ZLNetworkException;

View file

@ -81,12 +81,16 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
myCanRebillOption = new ZLBooleanOption(link.getSiteName(), "canRebill", false); myCanRebillOption = new ZLBooleanOption(link.getSiteName(), "canRebill", false);
} }
public synchronized void initUser(String userName, String sid, String userId, boolean canRebill) { public synchronized void initUser(String username, String sid, String userId, boolean canRebill) {
UserNameOption.setValue(userName); if (username == null) {
username = UserNameOption.getValue();
} else {
UserNameOption.setValue(username);
}
mySidOption.setValue(sid); mySidOption.setValue(sid);
myUserIdOption.setValue(userId); myUserIdOption.setValue(userId);
myCanRebillOption.setValue(canRebill); myCanRebillOption.setValue(canRebill);
myFullyInitialized = !"".equals(userName) && !"".equals(sid) && !"".equals(userId); myFullyInitialized = !"".equals(username) && !"".equals(sid) && !"".equals(userId);
} }
@Override @Override
@ -95,13 +99,17 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
} }
private synchronized void logOut(boolean full) { private synchronized void logOut(boolean full) {
if ("".equals(mySidOption.getValue())) {
return;
}
if (full) { if (full) {
initUser(UserNameOption.getValue(), "", "", false); initUser(null, "", "", false);
} else { } else {
myFullyInitialized = false; myFullyInitialized = false;
} }
myInitializedDataSid = null; myInitializedDataSid = null;
myPurchasedBooks.clear(); myPurchasedBooks.clear();
NetworkLibrary.Instance().fireModelChangedEvent(NetworkLibrary.ChangeListener.Code.SignedIn);
} }
@Override @Override
@ -136,7 +144,7 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
} }
request.addPostParameter("sid", sid); request.addPostParameter("sid", sid);
ZLNetworkManager.Instance().perform(request); ZLNetworkManager.Instance().perform(request);
initUser(UserNameOption.getValue(), xmlReader.Sid, xmlReader.UserId, xmlReader.CanRebill); initUser(null, xmlReader.Sid, xmlReader.UserId, xmlReader.CanRebill);
return true; return true;
} catch (ZLNetworkException e) { } catch (ZLNetworkException e) {
if (NetworkException.ERROR_AUTHENTICATION_FAILED.equals(e.getCode())) { if (NetworkException.ERROR_AUTHENTICATION_FAILED.equals(e.getCode())) {
@ -148,38 +156,30 @@ public class LitResAuthenticationManager extends NetworkAuthenticationManager {
} }
@Override @Override
public void authorise(String password) throws ZLNetworkException { public void authorise(String username, String password) throws ZLNetworkException {
final Map<String,String> params = new HashMap<String,String>(); final Map<String,String> params = new HashMap<String,String>();
final String url = parseUrl(Link.getUrl(UrlInfo.Type.SignIn), params); final String url = parseUrl(Link.getUrl(UrlInfo.Type.SignIn), params);
if (url == null) { if (url == null) {
throw new ZLNetworkException(NetworkException.ERROR_UNSUPPORTED_OPERATION); throw new ZLNetworkException(NetworkException.ERROR_UNSUPPORTED_OPERATION);
} }
final String login;
synchronized (this) { synchronized (this) {
login = UserNameOption.getValue(); UserNameOption.setValue(username);
} }
final LitResLoginXMLReader xmlReader = new LitResLoginXMLReader(Link.getSiteName());
ZLNetworkException exception = null;
try { try {
final LitResLoginXMLReader xmlReader = new LitResLoginXMLReader(Link.getSiteName());
final LitResNetworkRequest request = new LitResNetworkRequest(url, xmlReader); final LitResNetworkRequest request = new LitResNetworkRequest(url, xmlReader);
for (Map.Entry<String,String> entry : params.entrySet()) { for (Map.Entry<String,String> entry : params.entrySet()) {
request.addPostParameter(entry.getKey(), entry.getValue()); request.addPostParameter(entry.getKey(), entry.getValue());
} }
request.addPostParameter("login", login); request.addPostParameter("login", username);
request.addPostParameter("pwd", password); request.addPostParameter("pwd", password);
ZLNetworkManager.Instance().perform(request); ZLNetworkManager.Instance().perform(request);
NetworkLibrary.Instance().fireModelChangedEvent(NetworkLibrary.ChangeListener.Code.SignedIn);
initUser(null, xmlReader.Sid, xmlReader.UserId, xmlReader.CanRebill);
} catch (ZLNetworkException e) { } catch (ZLNetworkException e) {
exception = e;
}
synchronized (this) {
if (exception != null) {
logOut(false); logOut(false);
throw exception; throw e;
}
initUser(UserNameOption.getValue(), xmlReader.Sid, xmlReader.UserId, xmlReader.CanRebill);
} }
} }