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 loginUser(String username, String password) { return AuthenticationAPIService.getInstance().login(getLoginRequest(username, password)) .doOnNext(processAuthenticationResponse); } public Observable registerUser(User user, final String username, final String password) { RegistrationRequest registrationRequest = getRegistrationRequest(user, username, password); return AuthenticationAPIService.getInstance().register(registrationRequest) .flatMap(new Func1>() { @Override public Observable call(AuthenticationResponse authenticationResponse) { return Observable.just(getLoginRequest(username, password)); } }) .flatMap(requestLogin) .doOnNext(processAuthenticationResponse); } public Observable logout() { return AuthenticationAPIService.getInstance().logout() .doOnNext(processLogoutResponse) .doOnError(processLogoutFailure); } private Func1> requestLogin = new Func1>() { @Override public Observable call(LoginRequest request) { return AuthenticationAPIService.getInstance().login(request); } }; private Action1 processAuthenticationResponse = new Action1() { @Override public void call(AuthenticationResponse authenticationResponse) { RTTAppHelper.getInstance().saveToken(authenticationResponse.getToken()); RTTAppHelper.getInstance().saveUserId(authenticationResponse.getId()); } }; private Action1 processLogoutResponse = new Action1() { @Override public void call(Object object) { clearToken(); } }; private Action1 processLogoutFailure = new Action1() { @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); } }