RealTimeTalk/app/src/main/java/com/smarthomies/realtimetalk/managers/AuthenticationManager.java

93 lines
3.7 KiB
Java

package com.smarthomies.realtimetalk.managers;
import com.smarthomies.realtimetalk.models.db.User;
import com.smarthomies.realtimetalk.models.network.AuthenticationResponse;
import com.smarthomies.realtimetalk.models.network.LoginRequest;
import com.smarthomies.realtimetalk.models.network.RegistrationRequest;
import com.smarthomies.realtimetalk.services.AuthenticationAPIService;
import com.smarthomies.realtimetalk.utils.RTTAppHelper;
import rx.Observable;
import rx.functions.Action0;
import rx.functions.Action1;
import rx.functions.Func1;
/**
* Created by ensar on 01/11/16.
*/
public class AuthenticationManager {
public static final String TAG = AuthenticationManager.class.getSimpleName();
public Observable<AuthenticationResponse> loginUser(String username, String password) {
return AuthenticationAPIService.getInstance().login(getLoginRequest(username, password))
.doOnNext(processAuthenticationResponse);
}
public Observable<AuthenticationResponse> registerUser(User user, final String username, final String password) {
RegistrationRequest registrationRequest = getRegistrationRequest(user, username, password);
return AuthenticationAPIService.getInstance().register(registrationRequest)
.flatMap(new Func1<AuthenticationResponse, Observable<LoginRequest>>() {
@Override
public Observable<LoginRequest> call(AuthenticationResponse authenticationResponse) {
return Observable.just(getLoginRequest(username, password));
}
})
.flatMap(requestLogin)
.doOnNext(processAuthenticationResponse);
}
public Observable<Object> logout() {
return AuthenticationAPIService.getInstance().logout()
.doOnNext(processLogoutResponse)
.doOnError(processLogoutFailure);
}
private Func1<LoginRequest, Observable<AuthenticationResponse>> requestLogin = new Func1<LoginRequest, Observable<AuthenticationResponse>>() {
@Override
public Observable<AuthenticationResponse> call(LoginRequest request) {
return AuthenticationAPIService.getInstance().login(request);
}
};
private Action1<AuthenticationResponse> processAuthenticationResponse = new Action1<AuthenticationResponse>() {
@Override
public void call(AuthenticationResponse authenticationResponse) {
RTTAppHelper.getInstance().saveToken(authenticationResponse.getToken());
RTTAppHelper.getInstance().saveUserId(authenticationResponse.getId());
}
};
private Action1<Object> processLogoutResponse = new Action1<Object>() {
@Override
public void call(Object object) {
clearToken();
}
};
private Action1<Throwable> processLogoutFailure = new Action1<Throwable>() {
@Override
public void call(Throwable object) {
clearToken();
}
};
private void clearToken() {
RTTAppHelper.getInstance().saveToken("");
RTTAppHelper.getInstance().saveUserId(-1);
}
private RegistrationRequest getRegistrationRequest(User user, String username, String password) {
RegistrationRequest registrationRequest = new RegistrationRequest();
registrationRequest.setUsername(username);
registrationRequest.setPassword(password);
registrationRequest.setEmail(user.getEmail());
registrationRequest.setFirstName(user.getFirstName());
registrationRequest.setLastName(user.getLastName());
return registrationRequest;
}
private LoginRequest getLoginRequest(String username, String password) {
return new LoginRequest(username, password);
}
}