Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
cc764cd
Capitalize Select method to match v1 of the code base.
gosso22 Jan 23, 2023
099ef50
BaseLogin fix v1 compatibility
gosso22 Jan 23, 2023
96af934
Added v1 login method in BaseLoginPresenter.
gosso22 Jan 23, 2023
0f059d1
Added v1 preference settings for login in.
gosso22 Jan 23, 2023
eb20e1a
Get a writable database based on v1 login password.
gosso22 Jan 23, 2023
357b4c3
Added v1 basic authentication methods for HttpAgent.
gosso22 Jan 23, 2023
dc000fe
Included v1 methods for UserService class.
gosso22 Jan 23, 2023
6d8a05d
Fix v1 compatibility SyncIntent service.
gosso22 Jan 23, 2023
55a9987
Fix v1 compatibility v1 Session class.
gosso22 Jan 23, 2023
2e2ce0d
Fix v1 compatibility SyncUtils
gosso22 Jan 23, 2023
7891973
Change password from byte array to String v1 compatibility.
gosso22 Jan 23, 2023
ccbc93b
Implement v1 getPassword method return string.
gosso22 Jan 23, 2023
4d6dd3b
Implement v1 isUserLogout methods fix compatibility.
gosso22 Jan 23, 2023
97d8a7d
Include v1 methods for BaseLoginContract interface.
gosso22 Jan 23, 2023
9fa5b22
Included tests for v1 methods in BaseLoginPresenter.
gosso22 Jan 23, 2023
6811a10
Fix compatibility issues logout user in SecuredFragment.
gosso22 Jan 23, 2023
548e171
Added v1 tests for BaseLoginActivity class.
gosso22 Jan 23, 2023
014d5f5
Added v1IsUserLogout method for v1 compatibility.
gosso22 Jan 23, 2023
5cc85fc
Fix v1 compatibility issue.
gosso22 Jan 23, 2023
be7cf56
Fix v1 compatibility issue.
gosso22 Jan 23, 2023
aced1e7
Added V1RemoteLoginTask class to accomodate v1 functionalities.
gosso22 Jan 23, 2023
e56bf3f
Modified .gitignore file.
gosso22 Jan 23, 2023
c5da033
Bumped up library version.
gosso22 Jan 23, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@ opensrp-path/reports/
opensrp-core/reports/
opensrp-core/jacoco.exec
/github.properties
caches/
daemon/
native/
wrapper/
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
VERSION_NAME=6.0.0-SNAPSHOT
VERSION_NAME=6.0.0-v1-01-SNAPSHOT
VERSION_CODE=1
GROUP=org.smartregister
POM_SETTING_DESCRIPTION=OpenSRP Client Core Application
Expand Down
4 changes: 4 additions & 0 deletions opensrp-core/src/main/java/org/smartregister/Context.java
Original file line number Diff line number Diff line change
Expand Up @@ -859,6 +859,10 @@ public Boolean IsUserLoggedOut() {
return userService().hasSessionExpired();
}

public Boolean v1IsUserLoggedOut() {
return userService().v1HasSessionExpired();
}

public DristhiConfiguration configuration() {
if (configuration == null) {
configuration = new DristhiConfiguration();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ public String Endquery(String selectquery) {
return selectquery + ";";
}

public String SelectInitiateMainTable(String tablename, String[] columns) {
return selectInitiateMainTable(tablename, columns, "id");
}

public String selectInitiateMainTable(String tablename, String[] columns) {
return selectInitiateMainTable(tablename, columns, "id");
}
Expand Down Expand Up @@ -115,6 +119,12 @@ public String selectInitiateMainTableCounts(String tablename) {
return Selectquery;
}

public String SelectInitiateMainTableCounts(String tablename) {
Selectquery = "SELECT COUNT(*)";
Selectquery = Selectquery + " FROM " + tablename;
return Selectquery;
}

public String mainCondition(String condition) {
Selectquery = Selectquery + (!condition.isEmpty() ? " WHERE " + condition + " " : "");
return Selectquery;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.smartregister.job.SyncSettingsServiceJob;
import org.smartregister.login.task.LocalLoginTask;
import org.smartregister.login.task.RemoteLoginTask;
import org.smartregister.login.task.V1RemoteLoginTask;
import org.smartregister.multitenant.ResetAppHelper;
import org.smartregister.repository.AllSharedPreferences;
import org.smartregister.service.UserService;
Expand All @@ -57,6 +58,7 @@ public abstract class BaseLoginInteractor implements BaseLoginContract.Interacto
private static final int MINIMUM_JOB_FLEX_VALUE = 5;
private BaseLoginContract.Presenter mLoginPresenter;
private RemoteLoginTask remoteLoginTask;
private V1RemoteLoginTask v1RemoteLogin;
private boolean isLocalLogin;

private ResetAppHelper resetAppHelper;
Expand Down Expand Up @@ -92,6 +94,25 @@ public void login(WeakReference<BaseLoginContract.View> view, String userName, c
});
}

@Override
public void v1Login(WeakReference<BaseLoginContract.View> view, String userName, String password) {
v1LoginWithLocalFlag(view, !getSharedPreferences().v1FetchForceRemoteLogin()
&& userName.equalsIgnoreCase(getSharedPreferences().fetchRegisteredANM()), userName, password);
}

public void v1LoginWithLocalFlag(WeakReference<BaseLoginContract.View> view, boolean localLogin, String userName, String password) {

getLoginView().hideKeyboard();
getLoginView().enableLoginButton(false);
if (localLogin) {
v1localLogin(view, userName, password);
} else {
v1RemoteLogin(userName, password);
}

Timber.i("Login result finished " + DateTime.now().toString());
}

@VisibleForTesting
protected boolean isRefreshTokenExpired(String userName) {
return !AccountHelper.isRefreshTokenValid(userName, CoreLibrary.getInstance().getAccountAuthenticatorXml().getAccountType());
Expand All @@ -110,6 +131,22 @@ public void loginWithLocalFlag(WeakReference<BaseLoginContract.View> view, boole
Timber.i("Login result finished " + DateTime.now());
}

private void v1localLogin(WeakReference<BaseLoginContract.View> view, String userName, String password) {
getLoginView().enableLoginButton(true);
boolean isAuthenticated = getUserService().v1isUserInValidGroup(userName, password);
if (!isAuthenticated) {

getLoginView().showErrorDialog(getApplicationContext().getResources().getString(R.string.unauthorized));

} else if (isAuthenticated && (!AllConstants.TIME_CHECK || TimeStatus.OK.equals(getUserService().validateStoredServerTimeZone()))) {

v1NavigateToHomePage(userName, password);

} else {
v1LoginWithLocalFlag(view, false, userName, password);
}
}

private void localLogin(WeakReference<BaseLoginContract.View> view, String userName, char[] password) {
getLoginView().enableLoginButton(true);

Expand All @@ -132,6 +169,27 @@ private void localLogin(WeakReference<BaseLoginContract.View> view, String userN

}

private void v1NavigateToHomePage(String userName, String password) {

getUserService().v1localLogin(userName, password);
getLoginView().goToHome(false);

CoreLibrary.getInstance().initP2pLibrary(userName);

new Thread(new Runnable() {
@Override
public void run() {
Timber.i("Starting DrishtiSyncScheduler " + DateTime.now().toString());

scheduleJobsImmediately();

Timber.i("Started DrishtiSyncScheduler " + DateTime.now().toString());

CoreLibrary.getInstance().context().getUniqueIdRepository().releaseReservedIds();
}
}).start();
}

private void navigateToHomePage(String userName) {

getUserService().localLoginWith(userName);
Expand Down Expand Up @@ -238,6 +296,102 @@ private void remoteLogin(final String userName, final char[] password, final Acc
}
}


private void remoteLoginWith(String userName, String password, LoginResponse loginResponse) {
getUserService().v1RemoteLogin(userName, password, loginResponse.payload());
processServerSettings(loginResponse);

scheduleJobsPeriodically();
scheduleJobsImmediately();

CoreLibrary.getInstance().initP2pLibrary(userName);

getLoginView().goToHome(true);
}

private void v1RemoteLogin(final String userName, final String password) {

try {
if (getSharedPreferences().fetchBaseURL("").isEmpty() && StringUtils.isNotBlank(this.getApplicationContext().getString(R.string.opensrp_url))) {
getSharedPreferences().savePreference("DRISHTI_BASE_URL", getApplicationContext().getString(R.string.opensrp_url));
}
if (!getSharedPreferences().fetchBaseURL("").isEmpty()) {
v1TryRemoteLogin(userName, password, new Listener<LoginResponse>() {

public void onEvent(LoginResponse loginResponse) {
getLoginView().enableLoginButton(true);
if (loginResponse == LoginResponse.SUCCESS) {
String username=loginResponse.payload()!=null && loginResponse.payload().user != null && StringUtils.isNotBlank(loginResponse.payload().user.getUsername())
? loginResponse.payload().user.getUsername() : userName;

//Capture the location of the user and store it in shared
Set<TeamLocation> userLocaltion;
TeamLocation currentUserLocation;
if (loginResponse.payload() != null){
userLocaltion = loginResponse.payload().team.locations;

TeamLocation[] tlocationArray = userLocaltion.toArray(new TeamLocation[1]);
currentUserLocation = tlocationArray[0];
CoreLibrary.getInstance().context().allSharedPreferences().saveUserLocalityName(username, currentUserLocation.name);
}

if (getUserService().isUserInPioneerGroup(username)) {
TimeStatus timeStatus = getUserService().validateDeviceTime(
loginResponse.payload(), AllConstants.MAX_SERVER_TIME_DIFFERENCE
);
if (!AllConstants.TIME_CHECK || timeStatus.equals(TimeStatus.OK)) {

remoteLoginWith(username, password, loginResponse);

} else {
if (timeStatus.equals(TimeStatus.TIMEZONE_MISMATCH)) {
TimeZone serverTimeZone = UserService.getServerTimeZone(loginResponse.payload());

getLoginView().showErrorDialog(getApplicationContext().getString(timeStatus.getMessage(),
serverTimeZone.getDisplayName()));
} else {
getLoginView().showErrorDialog(getApplicationContext().getString(timeStatus.getMessage()));
}
}
} else {
// Valid user from wrong group trying to log in
getLoginView().showErrorDialog(getApplicationContext().getString(R.string.unauthorized_group));
}
} else {
if (loginResponse == null) {
getLoginView().showErrorDialog("Sorry, your loginWithLocalFlag failed. Please try again");
} else {
if (loginResponse == NO_INTERNET_CONNECTIVITY) {
getLoginView().showErrorDialog(getApplicationContext().getResources().getString(R.string.no_internet_connectivity));
} else if (loginResponse == UNKNOWN_RESPONSE) {
getLoginView().showErrorDialog(getApplicationContext().getResources().getString(R.string.unknown_response));
} else if (loginResponse == UNAUTHORIZED) {
getLoginView().showErrorDialog(getApplicationContext().getResources().getString(R.string.unauthorized));
} else {
getLoginView().showErrorDialog(loginResponse.message());
}
}
}
}
});
} else {
getLoginView().enableLoginButton(true);
getLoginView().showErrorDialog("OpenSRP Base URL is missing. Please add it in Setting and try again");
}
} catch (Exception e) {
Timber.e(e);
getLoginView().showErrorDialog("Error occurred trying to loginWithLocalFlag in. Please try again...");
}
}

private void v1TryRemoteLogin(final String userName, final String password, final Listener<LoginResponse> afterLogincheck) {
if (v1RemoteLogin != null && !v1RemoteLogin.isCancelled()) {
v1RemoteLogin.cancel(true);
}
v1RemoteLogin = new V1RemoteLoginTask(getLoginView(), userName, password, afterLogincheck);
v1RemoteLogin.execute();
}

private boolean isValidTimecheck(TimeStatus timeStatus) {
return !CoreLibrary.getInstance().isTimecheckDisabled() || TimeStatus.OK.equals(timeStatus);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,19 @@ public boolean isPasswordValid(char[] password) {
return password != null && password.length > 1;
}

@Override
public boolean v1IsPasswordValid(String password) {
return !TextUtils.isEmpty(password) && password.length() > 1;
}

@Override
public boolean isEmptyUsername(String username) {
return username == null || TextUtils.isEmpty(username);
}

@Override
public boolean isUserLoggedOut() {
return getOpenSRPContext().IsUserLoggedOut();
return getOpenSRPContext().v1IsUserLoggedOut();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,32 @@ public void attemptLogin(String username, char[] password) {
}
}

@Override
public void v1AttemptLogin(String username, String password) {
// Reset errors.
getLoginView().resetUsernameError();
getLoginView().resetPaswordError();

boolean cancel = false;

// Check for a valid password, if the user entered one.
if (!mLoginModel.v1IsPasswordValid(password)) {
getLoginView().setPasswordError(R.string.error_invalid_password);
cancel = true;
}

// Check for a valid username
if (mLoginModel.isEmptyUsername(username)) {
getLoginView().setUsernameError(R.string.error_field_required);
cancel = true;
getLoginView().enableLoginButton(true);
}

if (!cancel) {
mLoginInteractor.v1Login(mLoginView, username.trim(), password.trim());
}
}

@Override
public BaseLoginContract.View getLoginView() {
if (mLoginView != null) {
Expand Down
Loading