// Path: src/com/nitindhar/kampr/data/SessionDao.java
// public interface SessionDao {
// 
//     public boolean sessionExists();
// 
//     public boolean storeSession(Session session) throws Exception;
// 
//     public boolean removeSession();
// 
//     public boolean sessionWasEulaAccepted();
// 
//     public boolean sessionEulaAccepted();
// 
//     public String getSessionToken();
// 
//     public boolean storeSessionPostType(String postType);
// 
//     public String getSessionPostType();
// 
// }
// 
// Path: src/com/nitindhar/kampr/data/SessionSharedPreferencesDao.java
// public class SessionSharedPreferencesDao implements SessionDao {
// 
//     private static final SessionDao INSTANCE = new SessionSharedPreferencesDao();
//     private static final String SESSION_KEY_USERNAME = "login_username";
//     private static final String SESSION_KEY_PASSWORD = "login_password";
//     private static final String SESSION_KEY_TOKEN = "login_token";
//     private static final String SESSION_KEY_USER_ID = "login_user_id";
//     private static final String SESSION_KEY_EULA_ACCEPTED = "agreed_to_eula";
//     private static final String SESSION_KEY_POST_TYPE = "post_type";
//     private static final String SESSION_PASSWORD_HASH_ALGO = "MD5";
// 
//     private static SharedPreferences preferences;
// 
//     public static SessionDao instance() {
//         return INSTANCE;
//     }
// 
//     public static void setSharedPreferences(SharedPreferences preferences) {
//         SessionSharedPreferencesDao.preferences = preferences;
//     }
// 
//     @Override
//     public boolean sessionExists() {
//         if (preferences.getString(SESSION_KEY_TOKEN, null) != null) {
//             return true;
//         } else {
//             return false;
//         }
//     }
// 
//     @Override
//     public boolean storeSession(Session session)
//             throws NoSuchAlgorithmException {
//         SharedPreferences.Editor editor = preferences.edit();
//         MessageDigest md = MessageDigest
//                 .getInstance(SESSION_PASSWORD_HASH_ALGO);
//         byte[] passwordHash = md.digest(session.getPassword().getBytes());
// 
//         editor.putString(SESSION_KEY_USERNAME, session.getUsername());
//         editor.putString(SESSION_KEY_PASSWORD, passwordHash.toString());
//         editor.putString(SESSION_KEY_TOKEN, session.getToken());
//         editor.putString(SESSION_KEY_USER_ID,
//                 Integer.toString(session.getUserId()));
//         return editor.commit();
//     }
// 
//     @Override
//     public boolean sessionWasEulaAccepted() {
//         return preferences.getBoolean(SESSION_KEY_EULA_ACCEPTED, false);
//     }
// 
//     @Override
//     public boolean sessionEulaAccepted() {
//         SharedPreferences.Editor editor = preferences.edit();
//         editor.putBoolean(SESSION_KEY_EULA_ACCEPTED, true);
//         return editor.commit();
//     }
// 
//     @Override
//     public boolean removeSession() {
//         SharedPreferences.Editor editor = preferences.edit();
//         editor.remove(SESSION_KEY_USERNAME);
//         editor.remove(SESSION_KEY_PASSWORD);
//         editor.remove(SESSION_KEY_TOKEN);
//         editor.remove(SESSION_KEY_USER_ID);
//         editor.remove(SESSION_KEY_POST_TYPE);
//         return editor.commit();
//     }
// 
//     @Override
//     public String getSessionToken() {
//         return preferences.getString(SESSION_KEY_TOKEN, null);
//     }
// 
//     @Override
//     public boolean storeSessionPostType(String postType) {
//         SharedPreferences.Editor editor = preferences.edit();
//         editor.putString(SESSION_KEY_POST_TYPE, postType);
//         return editor.commit();
//     }
// 
//     @Override
//     public String getSessionPostType() {
//         return preferences.getString(SESSION_KEY_POST_TYPE, null);
//     }
// 
// }
// 
// Path: src/com/nitindhar/kampr/models/Session.java
// public class Session {
// 
//     private final String username;
//     private final String password;
//     private final String token;
//     private final Integer userId;
// 
//     public Session(String username, String password, String token,
//             Integer userId) {
//         Preconditions.checkArgument(!StringUtils.isBlank(username));
//         Preconditions.checkArgument(!StringUtils.isBlank(password));
//         Preconditions.checkArgument(!StringUtils.isBlank(token));
// 
//         this.username = username;
//         this.password = password;
//         this.token = token;
//         this.userId = userId;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public String getToken() {
//         return token;
//     }
// 
//     public Integer getUserId() {
//         return userId;
//     }
// 
// }
// 
// Path: src/com/nitindhar/kampr/util/ForrstUtil.java
// public class ForrstUtil {
// 
//     private static final ForrstAPI forrst = new ForrstAPIClient(HttpProvider.JAVA_NET);
// 
//     public static ForrstAPI client() {
//         return forrst;
//     }
// 
// }


import java.util.concurrent.Callable;
import com.google.common.base.Optional;
import com.nitindhar.forrst.model.Auth;
import com.nitindhar.kampr.data.SessionDao;
import com.nitindhar.kampr.data.SessionSharedPreferencesDao;
import com.nitindhar.kampr.models.Session;
import com.nitindhar.kampr.util.ForrstUtil;
package com.nitindhar.kampr.async;



public class LoginTask implements Callable<Boolean> {

    private static SessionDao sessionDao = SessionSharedPreferencesDao.instance();

    private final String username;
    private final String password;

    public LoginTask(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public Boolean call() {
        boolean validCredentials = false;
        try {
            Optional<Auth> auth = ForrstUtil.client().usersAuth(username, password);
            if (auth.isPresent()) {
// Path: src/com/nitindhar/kampr/data/SessionDao.java
// public interface SessionDao {
// 
//     public boolean sessionExists();
// 
//     public boolean storeSession(Session session) throws Exception;
// 
//     public boolean removeSession();
// 
//     public boolean sessionWasEulaAccepted();
// 
//     public boolean sessionEulaAccepted();
// 
//     public String getSessionToken();
// 
//     public boolean storeSessionPostType(String postType);
// 
//     public String getSessionPostType();
// 
// }
// 
// Path: src/com/nitindhar/kampr/data/SessionSharedPreferencesDao.java
// public class SessionSharedPreferencesDao implements SessionDao {
// 
//     private static final SessionDao INSTANCE = new SessionSharedPreferencesDao();
//     private static final String SESSION_KEY_USERNAME = "login_username";
//     private static final String SESSION_KEY_PASSWORD = "login_password";
//     private static final String SESSION_KEY_TOKEN = "login_token";
//     private static final String SESSION_KEY_USER_ID = "login_user_id";
//     private static final String SESSION_KEY_EULA_ACCEPTED = "agreed_to_eula";
//     private static final String SESSION_KEY_POST_TYPE = "post_type";
//     private static final String SESSION_PASSWORD_HASH_ALGO = "MD5";
// 
//     private static SharedPreferences preferences;
// 
//     public static SessionDao instance() {
//         return INSTANCE;
//     }
// 
//     public static void setSharedPreferences(SharedPreferences preferences) {
//         SessionSharedPreferencesDao.preferences = preferences;
//     }
// 
//     @Override
//     public boolean sessionExists() {
//         if (preferences.getString(SESSION_KEY_TOKEN, null) != null) {
//             return true;
//         } else {
//             return false;
//         }
//     }
// 
//     @Override
//     public boolean storeSession(Session session)
//             throws NoSuchAlgorithmException {
//         SharedPreferences.Editor editor = preferences.edit();
//         MessageDigest md = MessageDigest
//                 .getInstance(SESSION_PASSWORD_HASH_ALGO);
//         byte[] passwordHash = md.digest(session.getPassword().getBytes());
// 
//         editor.putString(SESSION_KEY_USERNAME, session.getUsername());
//         editor.putString(SESSION_KEY_PASSWORD, passwordHash.toString());
//         editor.putString(SESSION_KEY_TOKEN, session.getToken());
//         editor.putString(SESSION_KEY_USER_ID,
//                 Integer.toString(session.getUserId()));
//         return editor.commit();
//     }
// 
//     @Override
//     public boolean sessionWasEulaAccepted() {
//         return preferences.getBoolean(SESSION_KEY_EULA_ACCEPTED, false);
//     }
// 
//     @Override
//     public boolean sessionEulaAccepted() {
//         SharedPreferences.Editor editor = preferences.edit();
//         editor.putBoolean(SESSION_KEY_EULA_ACCEPTED, true);
//         return editor.commit();
//     }
// 
//     @Override
//     public boolean removeSession() {
//         SharedPreferences.Editor editor = preferences.edit();
//         editor.remove(SESSION_KEY_USERNAME);
//         editor.remove(SESSION_KEY_PASSWORD);
//         editor.remove(SESSION_KEY_TOKEN);
//         editor.remove(SESSION_KEY_USER_ID);
//         editor.remove(SESSION_KEY_POST_TYPE);
//         return editor.commit();
//     }
// 
//     @Override
//     public String getSessionToken() {
//         return preferences.getString(SESSION_KEY_TOKEN, null);
//     }
// 
//     @Override
//     public boolean storeSessionPostType(String postType) {
//         SharedPreferences.Editor editor = preferences.edit();
//         editor.putString(SESSION_KEY_POST_TYPE, postType);
//         return editor.commit();
//     }
// 
//     @Override
//     public String getSessionPostType() {
//         return preferences.getString(SESSION_KEY_POST_TYPE, null);
//     }
// 
// }
// 
// Path: src/com/nitindhar/kampr/models/Session.java
// public class Session {
// 
//     private final String username;
//     private final String password;
//     private final String token;
//     private final Integer userId;
// 
//     public Session(String username, String password, String token,
//             Integer userId) {
//         Preconditions.checkArgument(!StringUtils.isBlank(username));
//         Preconditions.checkArgument(!StringUtils.isBlank(password));
//         Preconditions.checkArgument(!StringUtils.isBlank(token));
// 
//         this.username = username;
//         this.password = password;
//         this.token = token;
//         this.userId = userId;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public String getToken() {
//         return token;
//     }
// 
//     public Integer getUserId() {
//         return userId;
//     }
// 
// }
// 
// Path: src/com/nitindhar/kampr/util/ForrstUtil.java
// public class ForrstUtil {
// 
//     private static final ForrstAPI forrst = new ForrstAPIClient(HttpProvider.JAVA_NET);
// 
//     public static ForrstAPI client() {
//         return forrst;
//     }
// 
// }


// Path: src/com/nitindhar/kampr/async/LoginTask.java
import java.util.concurrent.Callable;
import com.google.common.base.Optional;
import com.nitindhar.forrst.model.Auth;
import com.nitindhar.kampr.data.SessionDao;
import com.nitindhar.kampr.data.SessionSharedPreferencesDao;
import com.nitindhar.kampr.models.Session;
import com.nitindhar.kampr.util.ForrstUtil;

package com.nitindhar.kampr.async;



public class LoginTask implements Callable<Boolean> {

    private static SessionDao sessionDao = SessionSharedPreferencesDao.instance();

    private final String username;
    private final String password;

    public LoginTask(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public Boolean call() {
        boolean validCredentials = false;
        try {
            Optional<Auth> auth = ForrstUtil.client().usersAuth(username, password);
            if (auth.isPresent()) {
                Session session = new Session(username, password, auth.get()