Package net.ftb.data

Source Code of net.ftb.data.UserManager

/*
* This file is part of FTB Launcher.
*
* Copyright © 2012-2014, FTB Launcher Contributors <https://github.com/Slowpoke101/FTBLaunch/>
* FTB Launcher is licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*  http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.ftb.data;

import java.io.BufferedReader;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;
import java.util.ArrayList;

import net.ftb.gui.LaunchFrame;
import net.ftb.gui.dialogs.ProfileAdderDialog;
import net.ftb.locale.I18N;
import net.ftb.log.Logger;
import net.ftb.util.CryptoUtils;
import net.ftb.util.OSUtils;

public class UserManager {
    public final static ArrayList<User> _users = new ArrayList<User>();
    private File _file;
    private File _oldFile;

    public UserManager (File file, File oldFile) {
        _file = file;
        _oldFile = oldFile;
        read();
    }

    public void write () throws IOException {

        if (OSUtils.getCurrentOS() == OSUtils.OS.WINDOWS) {
            if (_oldFile.exists()) {
                _oldFile.delete();
            }

            if (_file.exists()) {
                _file.delete();
            }
        }

        FileOutputStream fileOutputStream = new FileOutputStream(_file);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
        try {
            for (User user : _users) {
                objectOutputStream.writeObject(user);
            }

        } finally {
            objectOutputStream.close();
            fileOutputStream.close();
        }
    }

    public void read () {
        if (!_file.exists() && !_oldFile.exists()) {
            return;
        }
        _users.clear();
        if (!OSUtils.verifyUUID()) {
            Logger.logError(I18N.getLocaleString("CHANGEDUUID"));
            //TODO: GUI depencency here
            ProfileAdderDialog p = new ProfileAdderDialog(LaunchFrame.getInstance(), "CHANGEDUUID", true);
            p.setVisible(true);
            return;
        }
        try {
            FileInputStream fileInputStream;

            if (_file.exists()) {
                fileInputStream = new FileInputStream(_file);
            } else {
                fileInputStream = new FileInputStream(_oldFile);
            }

            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            try {
                Object obj;
                while ((obj = objectInputStream.readObject()) != null) {
                    if (obj instanceof User) {
                        _users.add((User) obj);
                    }
                }
            } catch (EOFException ignored) {
            } finally {
                objectInputStream.close();
                fileInputStream.close();
            }
        } catch (StreamCorruptedException e) {
            Logger.logWarn("Failed to decode logindata. Trying old format");
        } catch (Exception e) {
            Logger.logError("Failed to decode logindata", e);
        }

        // TODO: Remove this in a while once people are unlikely to have old format saved logindata
        if (_users.isEmpty()) {
            //Logger.logError(I18N.getLocaleString("OLDCREDS"));
            // ProfileAdderDialog p = new ProfileAdderDialog(LaunchFrame.getInstance(), "OLDCREDS", true);
            // p.setVisible(true);

            try {
                BufferedReader read;

                if (_file.exists()) {
                    read = new BufferedReader(new FileReader(_file));
                } else {
                    read = new BufferedReader(new FileReader(_oldFile));
                }

                String str;
                while ((str = read.readLine()) != null) {
                    str = CryptoUtils.decryptLegacy(str, OSUtils.getMacAddress());
                    _users.add(new User(str));
                }
                read.close();
            } catch (NumberFormatException ex) {
                // If logindata is new format and empty it will contain bytes 0xae 0xed 0x00 0x05
                // Catch exception from parseInt => no more stack prints for end users
            } catch (Exception ex) {
                Logger.logError("Error while reading logindata", ex);
            }
            if (_users.isEmpty()) {
                Logger.logInfo("No users found after decoding old logindata format. Malformed logindata or empty logindata");
            }
        }
    }

    public static void addUser (String username, String password, String name) {
        _users.add(new User(username, password, name));
    }

    public static ArrayList<String> getUsernames () {
        ArrayList<String> ret = new ArrayList<String>();
        for (User user : _users) {
            ret.add(user.getName());
        }
        return ret;
    }

    public static ArrayList<String> getNames () {
        ArrayList<String> ret = new ArrayList<String>();
        for (User user : _users) {
            ret.add(user.getName());
        }
        return ret;
    }

    public static String getUsername (String name) {
        for (User user : _users) {
            if (user.getName().equals(name)) {
                return user.getUsername();
            }
        }
        return "";
    }

    public static String getPassword (String name) {
        for (User user : _users) {
            if (user.getName().equals(name)) {
                return user.getPassword();
            }
        }
        return "";
    }

    private static User findUser (String name) {
        for (User user : _users) {
            if (user.getName().equals(name)) {
                return user;
            }
        }
        return null;
    }

    public static void removePass (String username) {
        for (User user : _users) {
            if (user.getUsername().equals(username)) {
                user.setPassword("");
                return;
            }
        }
    }

    public static void removeUser (String name) {
        User temp = findUser(name);
        if (temp != null) {
            _users.remove(_users.indexOf(temp));
        }
    }

    public static void updateUser (String oldName, String username, String password, String name) {
        User temp = findUser(oldName);
        if (temp != null) {
            _users.get(_users.indexOf(temp)).setUsername(username);
            _users.get(_users.indexOf(temp)).setPassword(password);
            _users.get(_users.indexOf(temp)).setName(name);
        }
    }

    //used by authlib helper in order to send key's back to disc for next load
    public static void setStore (String user, String encode) {
        if (encode != null && !encode.isEmpty()) {
            User temp = findUser(user);
            if (temp != null) {
                temp.setStore(encode);
            }
        }
    }

    //used by authlib helper in order to send key's back to disc for next load
    public static String getMojangData (String user) {
        User temp = findUser(user);
        if (temp != null) {
            return temp.getDecryptedDatastore();
        }
        return null;
    }

    public static String getUUID (String username) {
        User temp = findUser(username);
        if (temp != null) {
            return temp.getDecryptedDatastore();
        }
        return null;
    }

    public static void setUUID (String username, String uuid) {
        User temp = findUser(username);
        if (temp != null) {
            temp.setUUID(uuid);
        }
    }

    public static void setSaveMojangData (String username, boolean b) {
        User temp = findUser(username);
        if (temp != null) {
            temp.setSaveMojangData(b);
        }
    }

    public static boolean getSaveMojangData (String username) {
        User temp = findUser(username);
        return temp != null && temp.getSaveMojangData();
    }

    public static String getName (String username) {
        User temp = findUser(username);
        if (temp != null) {
            return temp.getName();
        }
        return null;
    }
}
TOP

Related Classes of net.ftb.data.UserManager

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.