Newer
Older
KeeperJerry_Launcher / LaunchServer / source / command / legacy / DumpBinaryAuthHandler.java
@KeeperJerry KeeperJerry on 27 Jun 2020 3 KB Рефактор кода
package launchserver.command.legacy;

import launcher.helper.IOHelper;
import launcher.helper.LogHelper;
import launcher.serialize.config.TextConfigWriter;
import launcher.serialize.config.entry.BlockConfigEntry;
import launcher.serialize.config.entry.ConfigEntry;
import launcher.serialize.config.entry.StringConfigEntry;
import launchserver.LaunchServer;
import launchserver.auth.handler.BinaryFileAuthHandler;
import launchserver.auth.handler.FileAuthHandler.Entry;
import launchserver.command.Command;

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

public final class DumpBinaryAuthHandler extends Command
{
    public DumpBinaryAuthHandler(LaunchServer server)
    {
        super(server);
    }

    private static StringConfigEntry cc(String value)
    {
        StringConfigEntry entry = new StringConfigEntry(value, true, 4);
        entry.setComment(0, "\n\t"); // Pre-name
        entry.setComment(2, " "); // Pre-value
        return entry;
    }

    @Override
    public String getArgsDescription()
    {
        return null;
    }

    @Override
    public String getUsageDescription()
    {
        return "Dumps BinaryAuthHandler to text file";
    }

    @Override
    public void invoke(String... args)
    {
        LogHelper.subInfo("Dumping BinaryAuthHandler file...");
        BinaryFileAuthHandler handler = (BinaryFileAuthHandler) server.config.authHandler;
        boolean next = false;

        // Write auth blocks to map
        Set<Map.Entry<UUID, Entry>> entrySet = handler.entrySet();
        Map<String, ConfigEntry<?>> map = new LinkedHashMap<>(entrySet.size());
        for (Map.Entry<UUID, Entry> entry : entrySet)
        {
            UUID uuid = entry.getKey();
            Entry auth = entry.getValue();

            // Set auth entry data
            Map<String, ConfigEntry<?>> authMap = new LinkedHashMap<>(entrySet.size());
            authMap.put("username", cc(auth.getUsername()));
            String accessToken = auth.getAccessToken();
            if (accessToken != null)
            {
                authMap.put("accessToken", cc(accessToken));
            }
            String serverID = auth.getServerID();
            if (serverID != null)
            {
                authMap.put("serverID", cc(serverID));
            }

            // Create and add auth block
            BlockConfigEntry authBlock = new BlockConfigEntry(authMap, true, 5);
            if (next)
            {
                authBlock.setComment(0, "\n"); // Pre-name
            }
            else
            {
                next = true;
            }
            authBlock.setComment(2, " "); // Pre-value
            authBlock.setComment(4, "\n"); // Post-comment
            map.put(uuid.toString(), authBlock);
        }

        // Write auth handler file
        try (BufferedWriter writer = IOHelper.newWriter(Paths.get("authHandler.dump.cfg")))
        {
            BlockConfigEntry authFile = new BlockConfigEntry(map, true, 1);
            authFile.setComment(0, "\n");
            TextConfigWriter.write(authFile, writer, true);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}