Package com.kokakiwi.mclauncher.core

Source Code of com.kokakiwi.mclauncher.core.Loginer$Login

package com.kokakiwi.mclauncher.core;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Random;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

import com.kokakiwi.mclauncher.MCLauncher;

public class Loginer
{
    private final MCLauncher main;
    private Login            lastLogin      = new Login();
   
    private String           storedUsername = null;
    private String           storedPassword = null;
   
    public Loginer(MCLauncher main)
    {
        this.main = main;
    }
   
    public void init()
    {
        try
        {
            readLogin();
        }
        catch (final Exception e)
        {
            e.printStackTrace();
        }
    }
   
    // Actions
   
    public String doLogin(String username, String password, boolean rememberMe)
    {
        String result = null;
       
        final String url = main.getConfig().getString("login.url");
       
        final Map<String, String> params = new LinkedHashMap<String, String>();
        params.put("user", username);
        params.put("password", password);
        params.put("version",
                main.getConfig().getString("login.launcherVersion"));
       
        final String request = main.getApi().postUrl(url, params);
       
        if (request.contains(":"))
        {
            final String[] parts = request.split(":");
            lastLogin = new Login();
            lastLogin.setTimestamp(Long.parseLong(parts[0]));
            lastLogin.setDownloadTicket(parts[1]);
            lastLogin.setUsername(parts[2]);
            lastLogin.setSessionId(parts[3]);
        }
        else
        {
            result = request;
        }
       
        if (result == null)
        {
            if (rememberMe)
            {
                try
                {
                    storedUsername = username;
                    storedPassword = password;
                    storeLogin(username, password);
                }
                catch (final Exception e)
                {
                    e.printStackTrace();
                }
            }
            else
            {
                deleteLogin();
            }
        }
       
        return result;
    }
   
    // Utils
   
    public void storeLogin(String username, String password) throws Exception
    {
        final File file = new File(main.getApi().getMinecraftDirectory(),
                "lastlogin");
       
        final Cipher cipher = getCipher(Cipher.ENCRYPT_MODE, main.getConfig()
                .getString("login.encryptionKey"));
        final DataOutputStream out = new DataOutputStream(
                new CipherOutputStream(new FileOutputStream(file), cipher));
        out.writeUTF(username);
        out.writeUTF(password);
        out.close();
    }
   
    public void readLogin() throws Exception
    {
        final File file = new File(main.getApi().getMinecraftDirectory(),
                "lastlogin");
       
        if (file.exists())
        {
            final Cipher cipher = getCipher(Cipher.DECRYPT_MODE, main
                    .getConfig().getString("login.encryptionKey"));
            final DataInputStream in = new DataInputStream(
                    new CipherInputStream(new FileInputStream(file), cipher));
            storedUsername = in.readUTF();
            storedPassword = in.readUTF();
           
            in.close();
        }
    }
   
    private void deleteLogin()
    {
        final File file = new File(main.getApi().getMinecraftDirectory(),
                "bin/lastlogin");
        file.delete();
    }
   
    private Cipher getCipher(int mode, String password) throws Exception
    {
        final Random random = new Random(43287234L);
        final byte[] salt = new byte[8];
        random.nextBytes(salt);
        final PBEParameterSpec pbeParamSpec = new PBEParameterSpec(salt, 5);
       
        final SecretKey pbeKey = SecretKeyFactory.getInstance(
                "PBEWithMD5AndDES").generateSecret(
                new PBEKeySpec(password.toCharArray()));
        final Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
        cipher.init(mode, pbeKey, pbeParamSpec);
        return cipher;
    }
   
    // Getter / Setter
   
    public MCLauncher getMain()
    {
        return main;
    }
   
    public Login getLastLogin()
    {
        return lastLogin;
    }
   
    public String getStoredUsername()
    {
        return storedUsername;
    }
   
    public String getStoredPassword()
    {
        return storedPassword;
    }
   
    public static class Login
    {
        private long   timestamp;
        private String downloadTicket;
        private String username;
        private String sessionId;
       
        public long getTimestamp()
        {
            return timestamp;
        }
       
        public void setTimestamp(long timestamp)
        {
            this.timestamp = timestamp;
        }
       
        public String getDownloadTicket()
        {
            return downloadTicket;
        }
       
        public void setDownloadTicket(String downloadTicket)
        {
            this.downloadTicket = downloadTicket;
        }
       
        public String getUsername()
        {
            return username;
        }
       
        public void setUsername(String username)
        {
            this.username = username;
        }
       
        public String getSessionId()
        {
            return sessionId;
        }
       
        public void setSessionId(String sessionId)
        {
            this.sessionId = sessionId;
        }
    }
}
TOP

Related Classes of com.kokakiwi.mclauncher.core.Loginer$Login

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.