James Moger
2011-12-04 93f4729cdfc856d2a3b155bcf3e97f85b47ce760
src/com/gitblit/FileUserService.java
@@ -34,14 +34,19 @@
import com.gitblit.utils.StringUtils;
/**
 * FileUserService is Gitblit's default user service implementation.
 * FileUserService is Gitblit's original default user service implementation.
 * 
 * Users and their repository memberships are stored in a simple properties file
 * which is cached and dynamically reloaded when modified.
 * 
 * This class was deprecated in Gitblit 0.8.0 in favor of ConfigUserService
 * which is still a human-readable, editable, plain-text file but it is more
 * flexible for storing additional fields.
 *
 * @author James Moger
 * 
 */
@Deprecated
public class FileUserService extends FileSettings implements IUserService {
   private final Logger logger = LoggerFactory.getLogger(FileUserService.class);
@@ -50,6 +55,16 @@
   public FileUserService(File realmFile) {
      super(realmFile.getAbsolutePath());
   }
   /**
    * Setup the user service.
    *
    * @param settings
    * @since 0.6.1
    */
   @Override
   public void setup(IStoredSettings settings) {
   }
   /**
@@ -116,11 +131,20 @@
      UserModel returnedUser = null;
      UserModel user = getUserModel(username);
      if (user.password.startsWith(StringUtils.MD5_TYPE)) {
         // password digest
         String md5 = StringUtils.MD5_TYPE + StringUtils.getMD5(new String(password));
         if (user.password.equalsIgnoreCase(md5)) {
            returnedUser = user;
         }
      } else if (user.password.startsWith(StringUtils.COMBINED_MD5_TYPE)) {
         // username+password digest
         String md5 = StringUtils.COMBINED_MD5_TYPE
               + StringUtils.getMD5(username.toLowerCase() + new String(password));
         if (user.password.equalsIgnoreCase(md5)) {
            returnedUser = user;
         }
      } else if (user.password.equals(new String(password))) {
         // plain-text password
         returnedUser = user;
      }
      return returnedUser;
@@ -149,6 +173,8 @@
            // Permissions
            if (role.equalsIgnoreCase(Constants.ADMIN_ROLE)) {
               model.canAdmin = true;
            } else if (role.equalsIgnoreCase(Constants.NOT_FEDERATED_ROLE)) {
               model.excludeFromFederation = true;
            }
            break;
         default:
@@ -188,6 +214,9 @@
         // Permissions
         if (model.canAdmin) {
            roles.add(Constants.ADMIN_ROLE);
         }
         if (model.excludeFromFederation) {
            roles.add(Constants.NOT_FEDERATED_ROLE);
         }
         StringBuilder sb = new StringBuilder();
@@ -336,12 +365,11 @@
            StringBuilder sb = new StringBuilder();
            sb.append(password);
            sb.append(',');
            List<String> revisedRoles = new ArrayList<String>();
            // skip first value (password)
            for (int i = 1; i < values.length; i++) {
               String value = values[i];
               if (!value.equalsIgnoreCase(role)) {
                  revisedRoles.add(value);
                  sb.append(value);
                  sb.append(',');
               }
@@ -382,7 +410,7 @@
            for (int i = 1; i < roles.length; i++) {
               String r = roles[i];
               if (r.equalsIgnoreCase(oldRole)) {
                  needsRenameRole.remove(username);
                  needsRenameRole.add(username);
                  break;
               }
            }
@@ -396,13 +424,13 @@
            StringBuilder sb = new StringBuilder();
            sb.append(password);
            sb.append(',');
            List<String> revisedRoles = new ArrayList<String>();
            revisedRoles.add(newRole);
            sb.append(newRole);
            sb.append(',');
            // skip first value (password)
            for (int i = 1; i < values.length; i++) {
               String value = values[i];
               if (!value.equalsIgnoreCase(oldRole)) {
                  revisedRoles.add(value);
                  sb.append(value);
                  sb.append(',');
               }
@@ -443,7 +471,7 @@
            for (int i = 1; i < roles.length; i++) {
               String r = roles[i];
               if (r.equalsIgnoreCase(role)) {
                  needsDeleteRole.remove(username);
                  needsDeleteRole.add(username);
                  break;
               }
            }
@@ -457,12 +485,10 @@
            StringBuilder sb = new StringBuilder();
            sb.append(password);
            sb.append(',');
            List<String> revisedRoles = new ArrayList<String>();
            // skip first value (password)
            for (int i = 1; i < values.length; i++) {
               String value = values[i];
               if (!value.equalsIgnoreCase(role)) {
                  revisedRoles.add(value);
                  sb.append(value);
                  sb.append(',');
               }
@@ -499,14 +525,15 @@
      // If the write is successful, delete the current file and rename
      // the temporary copy to the original filename.
      if (realmFileCopy.exists() && realmFileCopy.length() > 0) {
         if (propertiesFile.delete()) {
            if (!realmFileCopy.renameTo(propertiesFile)) {
               throw new IOException(MessageFormat.format("Failed to rename {0} to {1}!",
                     realmFileCopy.getAbsolutePath(), propertiesFile.getAbsolutePath()));
         if (propertiesFile.exists()) {
            if (!propertiesFile.delete()) {
               throw new IOException(MessageFormat.format("Failed to delete {0}!",
                     propertiesFile.getAbsolutePath()));
            }
         } else {
            throw new IOException(MessageFormat.format("Failed to delete (0)!",
                  propertiesFile.getAbsolutePath()));
         }
         if (!realmFileCopy.renameTo(propertiesFile)) {
            throw new IOException(MessageFormat.format("Failed to rename {0} to {1}!",
                  realmFileCopy.getAbsolutePath(), propertiesFile.getAbsolutePath()));
         }
      } else {
         throw new IOException(MessageFormat.format("Failed to save {0}!",
@@ -533,4 +560,9 @@
      }
      return allUsers;
   }
   @Override
   public String toString() {
      return getClass().getSimpleName() + "(" + propertiesFile.getAbsolutePath() + ")";
   }
}