Author: alexlehm
Date: 2008-01-11 15:28:37 +0000 (Fri, 11 Jan 2008)
New Revision: 17010

Modified:
   trunk/apps/Freemail/src/freemail/AccountManager.java
   trunk/apps/Freemail/src/freemail/FreemailCli.java
   trunk/apps/Freemail/src/freemail/FreemailPlugin.java
   trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java
Log:
1745: freemail accepts "@" as short address char 
(https://bugs.freenetproject.org/view.php?id=1745) and
1843: @-character allowed in account name -> Thunderbird/Evolution won't 
connect (https://bugs.freenetproject.org/view.php?id=1843)

validate username and short address agains list of invalid chars (still rather 
lenient, but it should catch common errors)


Modified: trunk/apps/Freemail/src/freemail/AccountManager.java
===================================================================
--- trunk/apps/Freemail/src/freemail/AccountManager.java        2008-01-11 
14:10:33 UTC (rev 17009)
+++ trunk/apps/Freemail/src/freemail/AccountManager.java        2008-01-11 
15:28:37 UTC (rev 17010)
@@ -64,10 +64,34 @@

        public static final String MAILSITE_SUFFIX = "mailsite";
        public static final String MAILSITE_VERSION = "-1";
+
+       // avoid invalid chars in username or address
+       // returns the first invalid char to give user a hint
+       private static String validateChars(String username, String invalid) {
+               for(int i=0;i<invalid.length();i++) {
+                       if(username.indexOf(invalid.substring(i,i+1))>=0) {
+                               return invalid.substring(i,i+1);
+                       }
+               }
+               return "";
+       }
+
+       // @ plus chars that may be invalid as filenames
+       public static String validateUsername(String username) {
+               return validateChars(username, "@\'\"\\/ :");
+       }
+
+       // @, space and other email meta chars
+       public static String validateShortAddress(String username) {
+               return validateChars(username, "@\'\"\\/,:%()+ ");
+       }

-
-       public static void Create(String username) throws IOException {
+       public static void Create(String username) throws 
IOException,IllegalArgumentException {
                File datadir = new File(DATADIR);
+               String invalid=validateUsername(username);
+               if(!invalid.isEmpty()) {
+                       throw new IllegalArgumentException("The username may 
not contain the character '"+invalid+"'");
+               }
                if (!datadir.exists()) {
                        if (!datadir.mkdir()) throw new IOException("Failed to 
create data directory");
                }
@@ -241,6 +265,11 @@
                if (!accountdir.exists()) {
                        throw new Exception("No such account - "+username+".");
                }
+
+               String invalid=validateShortAddress(alias);
+               if(!invalid.isEmpty()) {
+                       throw new IllegalArgumentException("The short address 
may not contain the character '"+invalid+"'");
+               }

                PropsFile accfile = getAccountFile(accountdir);


Modified: trunk/apps/Freemail/src/freemail/FreemailCli.java
===================================================================
--- trunk/apps/Freemail/src/freemail/FreemailCli.java   2008-01-11 14:10:33 UTC 
(rev 17009)
+++ trunk/apps/Freemail/src/freemail/FreemailCli.java   2008-01-11 15:28:37 UTC 
(rev 17010)
@@ -109,6 +109,8 @@
                                //System.out.println("For the time being, you 
address is "+account+"@nim.freemail");
                        } catch (IOException ioe) {
                                System.out.println("Couldn't create account. 
Please check write access to Freemail's working directory. If you want to 
overwrite your account, delete the appropriate directory manually in 'data' 
first. Freemail will intentionally not overwrite it. Error: "+ioe.getMessage());
+                       } catch (IllegalArgumentException iae) {
+                               System.out.println("Couldn't create account. 
Error: "+iae.getMessage());
                        }
                        return;
                } else if (action.equals("--passwd")) {
@@ -123,6 +125,9 @@
                } else if (action.equals("--shortaddress")) {
                        try {
                                AccountManager.addShortAddress(account, alias);
+                       } catch (IllegalArgumentException iae) {
+                               System.out.println("Couldn't add short address 
for "+account+". Error: "+iae.getMessage());
+                               return;
                        } catch (Exception e) {
                                System.out.println("Couldn't add short address 
for "+account+". "+e.getMessage());
                                e.printStackTrace();
@@ -161,6 +166,10 @@
                                continue;
                        if (!files[i].isDirectory()) continue;

+                       
if(!AccountManager.validateUsername(files[i].getName()).isEmpty()) {
+                               System.out.println("Account name 
"+files[i].getName()+" contains invalid chars, you may get problems accessing 
the account.");
+                       }
+                       
                        Thread t = new Thread(new 
SingleAccountWatcher(files[i]), "Account Watcher for "+files[i].getName());
                        t.setDaemon(true);
                        t.start();

Modified: trunk/apps/Freemail/src/freemail/FreemailPlugin.java
===================================================================
--- trunk/apps/Freemail/src/freemail/FreemailPlugin.java        2008-01-11 
14:10:33 UTC (rev 17009)
+++ trunk/apps/Freemail/src/freemail/FreemailPlugin.java        2008-01-11 
15:28:37 UTC (rev 17010)
@@ -101,6 +101,11 @@
                        if (files[i].getName().equals(".") || 
files[i].getName().equals(".."))
                                continue;
                        if (!files[i].isDirectory()) continue;
+
+                       String 
invalid=AccountManager.validateUsername(files[i].getName());
+                       if(!invalid.isEmpty()) {
+                               Logger.error(this,"Account name 
"+files[i].getName()+" contains invalid chars (\""+invalid+"\"), you may get 
problems accessing the account.");
+                       }

                        SingleAccountWatcher saw = new 
SingleAccountWatcher(files[i]); 
                        singleAccountWatcherList.add(saw);

Modified: trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java
===================================================================
--- trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java  2008-01-11 
14:10:33 UTC (rev 17009)
+++ trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java  2008-01-11 
15:28:37 UTC (rev 17010)
@@ -86,6 +86,11 @@
                String shortdomain = 
AccountManager.getKSKFreemailDomain(accdir);
                if (shortdomain != null) {
                        Logger.normal(this,"Short Freemail address (*probably* 
secure): <anything>@"+shortdomain);
+
+                       String 
invalid=AccountManager.validateUsername(shortdomain);
+                       if(!invalid.isEmpty()) {
+                               Logger.normal(this,"Your short Freemail address 
contains invalid characters (\""+invalid+"\"), others may have problems sending 
you mail");
+                       }
                } else {
                        Logger.normal(this,"You don't have a short Freemail 
address. You could get one by running Freemail with the --shortaddress option, 
followed by your account name and the name you'd like. For example, 'java -jar 
freemail.jar --shortaddress bob bob' will give you all addresses ending 
'@bob.freemail'. Try to pick something unique!");
                }


Reply via email to