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:
parent
67eab47313
commit
bb9a9d7fa5
10 changed files with 159 additions and 137 deletions
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue