static void decodeAuth(String auth, AuthConfig config) throws IOException {
   String str = new String(Base64.decodeBase64(auth), Charset.forName("UTF-8"));
   String[] parts = str.split(":", 2);
   if (parts.length != 2) {
     throw new IOException("Invalid auth configuration file");
   }
   config.setUsername(parts[0]);
   config.setPassword(parts[1]);
 }
  public static AuthConfigFile loadConfig(File confFile) throws IOException {
    AuthConfigFile configFile = new AuthConfigFile();
    if (!confFile.exists()) {
      return new AuthConfigFile();
    }
    Map<String, AuthConfig> configMap = null;
    try {
      configMap = MAPPER.readValue(confFile, CONFIG_MAP_TYPE);
    } catch (IOException e) {
      // pass
    }
    if (configMap != null) {
      for (Map.Entry<String, AuthConfig> entry : configMap.entrySet()) {
        AuthConfig authConfig = entry.getValue();
        decodeAuth(authConfig.getAuth(), authConfig);
        authConfig.setAuth(null);
        authConfig.setServerAddress(entry.getKey());
        configFile.addConfig(authConfig);
      }
    } else {
      List<String> authFileContent = FileUtils.readLines(confFile);
      if (authFileContent.size() < 2) {
        throw new IOException("The Auth Config file is empty");
      }
      AuthConfig config = new AuthConfig();
      String[] origAuth = authFileContent.get(0).split(" = ");
      if (origAuth.length != 2) {
        throw new IOException("Invalid Auth config file");
      }
      decodeAuth(origAuth[1], config);

      String[] origEmail = authFileContent.get(1).split(" = ");
      if (origEmail.length != 2) {
        throw new IOException("Invalid Auth config file");
      }
      config.setEmail(origEmail[1]);
      configFile.addConfig(config);
    }
    return configFile;
  }
 void addConfig(AuthConfig config) {
   authConfigMap.put(config.getServerAddress(), config);
 }