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