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" />
</intent-filter>
</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.NetworkBookInfoActivity" android:process=":networkLibrary" android:configChanges="orientation|keyboardHidden">
<intent-filter>

View file

@ -166,7 +166,7 @@
<data android:host="*" android:scheme="opds" />
</intent-filter>
</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.NetworkBookInfoActivity" android:process=":networkLibrary" android:configChanges="orientation|keyboardHidden">
<intent-filter>

View file

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

View file

@ -35,10 +35,10 @@ import org.geometerplus.android.util.PackageUtil;
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) {
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 {
final NetworkAuthenticationManager mgr = myLink.authenticationManager();
if (info.getId().toString().endsWith("/signIn")) {
Util.runAuthenticationDialog(AccountMenuActivity.this, myLink, null);
Util.runAuthenticationDialog(AuthorizationMenuActivity.this, myLink, null);
} else {
final Intent intent = Util.authorizationIntent(myLink, info.getId());
if (PackageUtil.canBeStarted(AccountMenuActivity.this, intent, true)) {
if (PackageUtil.canBeStarted(AuthorizationMenuActivity.this, intent, true)) {
startActivity(intent);
}
}

View file

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

View file

@ -95,7 +95,7 @@ public abstract class Util implements UserRegistrationConstants {
final Intent intent = intentByLink(new Intent(activity, AuthenticationActivity.class), link);
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.CUSTOM_AUTH_KEY, true);
activity.startActivity(intent);

View file

@ -67,7 +67,7 @@ public class SignOutAction extends Action {
public String getOptionsLabel(NetworkTree tree) {
final NetworkAuthenticationManager mgr = tree.getLink().authenticationManager();
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);
}
@ -75,7 +75,7 @@ public class SignOutAction extends Action {
public String getContextLabel(NetworkTree tree) {
final NetworkAuthenticationManager mgr = tree.getLink().authenticationManager();
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);
}
}

View file

@ -48,18 +48,27 @@ public abstract class NetworkAuthenticationManager {
public final INetworkLink Link;
public final ZLStringOption UserNameOption;
protected final ZLStringOption UserNameOption;
protected NetworkAuthenticationManager(INetworkLink link) {
Link = link;
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
*/
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 BookUrlInfo downloadReference(NetworkBookItem book);
public abstract void refreshAccountInformation() throws ZLNetworkException;

View file

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