001package net.minecraft.server.management;
002
003import java.io.BufferedReader;
004import java.io.File;
005import java.io.FileNotFoundException;
006import java.io.FileReader;
007import java.io.FileWriter;
008import java.io.IOException;
009import java.io.PrintWriter;
010import java.text.SimpleDateFormat;
011import java.util.Date;
012import java.util.Iterator;
013import java.util.Map;
014import net.minecraft.server.MinecraftServer;
015
016public class BanList
017{
018    private final LowerStringMap theBanList = new LowerStringMap();
019    private final File fileName;
020
021    /** set to true if not singlePlayer */
022    private boolean listActive = true;
023
024    public BanList(File par1File)
025    {
026        this.fileName = par1File;
027    }
028
029    public boolean isListActive()
030    {
031        return this.listActive;
032    }
033
034    public void setListActive(boolean par1)
035    {
036        this.listActive = par1;
037    }
038
039    /**
040     * removes expired Bans before returning
041     */
042    public Map getBannedList()
043    {
044        this.removeExpiredBans();
045        return this.theBanList;
046    }
047
048    public boolean isBanned(String par1Str)
049    {
050        if (!this.isListActive())
051        {
052            return false;
053        }
054        else
055        {
056            this.removeExpiredBans();
057            return this.theBanList.containsKey(par1Str);
058        }
059    }
060
061    public void put(BanEntry par1BanEntry)
062    {
063        this.theBanList.putLower(par1BanEntry.getBannedUsername(), par1BanEntry);
064        this.saveToFileWithHeader();
065    }
066
067    public void remove(String par1Str)
068    {
069        this.theBanList.remove(par1Str);
070        this.saveToFileWithHeader();
071    }
072
073    public void removeExpiredBans()
074    {
075        Iterator iterator = this.theBanList.values().iterator();
076
077        while (iterator.hasNext())
078        {
079            BanEntry banentry = (BanEntry)iterator.next();
080
081            if (banentry.hasBanExpired())
082            {
083                iterator.remove();
084            }
085        }
086    }
087
088    /**
089     * Loads the ban list from the file (adds every entry, does not clear the current list).
090     */
091    public void loadBanList()
092    {
093        if (this.fileName.isFile())
094        {
095            BufferedReader bufferedreader;
096
097            try
098            {
099                bufferedreader = new BufferedReader(new FileReader(this.fileName));
100            }
101            catch (FileNotFoundException filenotfoundexception)
102            {
103                throw new Error();
104            }
105
106            String s;
107
108            try
109            {
110                while ((s = bufferedreader.readLine()) != null)
111                {
112                    if (!s.startsWith("#"))
113                    {
114                        BanEntry banentry = BanEntry.parse(s);
115
116                        if (banentry != null)
117                        {
118                            this.theBanList.putLower(banentry.getBannedUsername(), banentry);
119                        }
120                    }
121                }
122            }
123            catch (IOException ioexception)
124            {
125                MinecraftServer.getServer().getLogAgent().func_98234_c("Could not load ban list", ioexception);
126            }
127        }
128    }
129
130    public void saveToFileWithHeader()
131    {
132        this.saveToFile(true);
133    }
134
135    /**
136     * par1: include header
137     */
138    public void saveToFile(boolean par1)
139    {
140        this.removeExpiredBans();
141
142        try
143        {
144            PrintWriter printwriter = new PrintWriter(new FileWriter(this.fileName, false));
145
146            if (par1)
147            {
148                printwriter.println("# Updated " + (new SimpleDateFormat()).format(new Date()) + " by Minecraft " + "1.5.1");
149                printwriter.println("# victim name | ban date | banned by | banned until | reason");
150                printwriter.println();
151            }
152
153            Iterator iterator = this.theBanList.values().iterator();
154
155            while (iterator.hasNext())
156            {
157                BanEntry banentry = (BanEntry)iterator.next();
158                printwriter.println(banentry.buildBanString());
159            }
160
161            printwriter.close();
162        }
163        catch (IOException ioexception)
164        {
165            MinecraftServer.getServer().getLogAgent().func_98234_c("Could not save ban list", ioexception);
166        }
167    }
168}