1 41 42 package com.mvnforum.admin; 43 44 import java.io.*; 45 import java.util.*; 46 47 import com.mvnforum.*; 48 import com.mvnforum.auth.*; 49 import freemarker.template.*; 50 import freemarker.template.Configuration; 51 import net.myvietnam.mvncore.MVNCoreConfig; 52 import net.myvietnam.mvncore.configuration.DOM4JConfiguration; 53 import net.myvietnam.mvncore.exception.*; 54 import net.myvietnam.mvncore.util.*; 55 import net.myvietnam.mvncore.web.GenericRequest; 56 import org.apache.commons.logging.Log; 57 import org.apache.commons.logging.LogFactory; 58 import org.dom4j.*; 59 import org.dom4j.Node; 60 import org.dom4j.io.SAXReader; 61 import org.dom4j.io.XMLWriter; 62 63 public class ConfigurationWebHandler 64 { 65 private static Log log = LogFactory.getLog(ConfigurationWebHandler.class); 66 67 private OnlineUserManager onlineUserManager = OnlineUserManager.getInstance(); 68 69 public ConfigurationWebHandler() { 70 } 71 72 public void prepareConfigMVNForum(GenericRequest request) 73 throws IOException, AssertionException, DatabaseException, AuthenticationException { 74 75 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 76 MVNForumPermission permission = onlineUser.getPermission(); 77 permission.ensureCanAdminSystem(); 78 79 String strPathName = FileUtil.getServletClassesPath(); 80 DOM4JConfiguration mvnforumConfig; 81 try { 82 mvnforumConfig = new DOM4JConfiguration(new File(strPathName + "mvnforum.xml")); 83 } catch (Exception ex) { 84 log.error("Cannot load the DOM4JConfiguration.", ex); 85 throw new IOException("Cannot load the DOM4JConfiguration."); 86 } 87 88 request.setAttribute("mvnforumConfig", mvnforumConfig); 89 } 90 91 public void prepareConfigMVNCore(GenericRequest request) 92 throws IOException, AssertionException, DatabaseException, AuthenticationException { 93 94 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 95 MVNForumPermission permission = onlineUser.getPermission(); 96 permission.ensureCanAdminSystem(); 97 98 String strPathName = FileUtil.getServletClassesPath(); 99 DOM4JConfiguration mvncoreConfig; 100 try { 101 mvncoreConfig = new DOM4JConfiguration(new File(strPathName + "mvncore.xml")); 102 } catch (Exception ex) { 103 log.error("Cannot load the DOM4JConfiguration.", ex); 104 throw new IOException("Cannot load the DOM4JConfiguration."); 105 } 106 107 request.setAttribute("mvncoreConfig", mvncoreConfig); 108 } 109 110 public void updateConfigStepOne(GenericRequest request) 111 throws BadInputException, DocumentException, IOException, 112 AssertionException, DatabaseException, AuthenticationException { 113 114 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 115 MVNForumPermission permission = onlineUser.getPermission(); 116 permission.ensureCanAdminSystem(); 117 118 String mvnforum_home = GenericParamUtil.getParameterSafe(request, "mvnforum_home", true); 120 String mvnforum_log = GenericParamUtil.getParameterSafe(request, "mvnforum_log", true); 121 String webmaster_email = GenericParamUtil.getParameterEmail(request, "webmaster_email"); 122 String logo_url = GenericParamUtil.getParameterSafe(request, "logo_url", true); 123 String redirect_login_url = GenericParamUtil.getParameterSafe(request, "redirect_login_url", true); 124 String supported_locales = GenericParamUtil.getParameterSafe(request, "supported_locales", false); 125 String default_locale_name = GenericParamUtil.getParameterSafe(request, "default_locale_name", true); 126 String locale_parameter_name = GenericParamUtil.getParameterSafe(request, "locale_parameter_name", true); 127 String default_guest_name = GenericParamUtil.getParameterSafe(request, "default_guest_name", true); 128 int default_guest_timezone = GenericParamUtil.getParameterInt(request, "default_guest_timezone"); 129 130 String enable_portlet = GenericParamUtil.getParameterSafe(request, "enable_portlet", true); 131 String enable_cache_member = GenericParamUtil.getParameterSafe(request, "enable_cache_member", true); 132 String enable_cache_post = GenericParamUtil.getParameterSafe(request, "enable_cache_post", true); 133 String enable_cache_thread = GenericParamUtil.getParameterSafe(request, "enable_cache_thread", true); 134 String enable_cache_forum = GenericParamUtil.getParameterSafe(request, "enable_cache_forum", true); 135 String enable_cache_category = GenericParamUtil.getParameterSafe(request, "enable_cache_category", true); 136 137 String enable_passwordless_auth = GenericParamUtil.getParameterSafe(request, "enable_passwordless_auth", true); 138 String enable_login_info_in_cookie = GenericParamUtil.getParameterSafe(request, "enable_login_info_in_cookie", true); 139 String enable_login_info_in_session = GenericParamUtil.getParameterSafe(request, "enable_login_info_in_session", true); 140 String enable_login_info_in_realm = GenericParamUtil.getParameterSafe(request, "enable_login_info_in_realm", true); 141 String enable_login_info_in_customization = GenericParamUtil.getParameterSafe(request, "enable_login_info_in_customization", true); 142 String require_activation = GenericParamUtil.getParameterSafe(request, "require_activation", true); 143 String enable_login = GenericParamUtil.getParameterSafe(request, "enable_login", true); 144 String enable_new_member = GenericParamUtil.getParameterSafe(request, "enable_new_member", true); 145 String enable_new_post = GenericParamUtil.getParameterSafe(request, "enable_new_post", true); 146 String enable_rss = GenericParamUtil.getParameterSafe(request, "enable_rss", true); 147 String enable_watch = GenericParamUtil.getParameterSafe(request, "enable_watch", true); 148 String enable_attachment = GenericParamUtil.getParameterSafe(request, "enable_attachment", true); 149 String enable_avatar = GenericParamUtil.getParameterSafe(request, "enable_avatar", true); 150 String enable_emoticon = GenericParamUtil.getParameterSafe(request, "enable_emoticon", true); 151 String enable_captcha = GenericParamUtil.getParameterSafe(request, "enable_captcha", true); 152 String enable_portal_like_index_page = GenericParamUtil.getParameterSafe(request, "enable_portal_like_index_page", true); 153 154 String enable_search = GenericParamUtil.getParameterSafe(request, "enable_search", true); 155 String enable_online_users = GenericParamUtil.getParameterSafe(request, "enable_online_users", true); 156 String enable_duplicate_onlineusers = GenericParamUtil.getParameterSafe(request, "enable_duplicate_onlineusers", true); 157 String enable_invisible_users = GenericParamUtil.getParameterSafe(request, "enable_invisible_users", true); 158 String enable_listmembers = GenericParamUtil.getParameterSafe(request, "enable_listmembers", true); 159 String enable_show_last_login = GenericParamUtil.getParameterSafe(request, "enable_show_last_login", true); 160 String enable_private_message = GenericParamUtil.getParameterSafe(request, "enable_private_message", true); 161 String enable_public_message = GenericParamUtil.getParameterSafe(request, "enable_public_message", true); 162 String enable_message_attachment = GenericParamUtil.getParameterSafe(request, "enable_message_attachment", true); 163 String enable_most_active_threads = GenericParamUtil.getParameterSafe(request, "enable_most_active_threads", true); 164 String enable_most_active_members = GenericParamUtil.getParameterSafe(request, "enable_most_active_members", true); 165 String enable_site_statistics_overview = GenericParamUtil.getParameterSafe(request, "enable_site_statistics_overview", true); 166 String enable_admin_can_change_password = GenericParamUtil.getParameterSafe(request, "enable_admin_can_change_password", true); 167 String enable_guest_view_image_attachment = GenericParamUtil.getParameterSafe(request, "enable_guest_view_image_attachment", true); 168 169 int default_watch_option = GenericParamUtil.getParameterInt(request, "default_watch_option"); 170 int default_moderation_option = GenericParamUtil.getParameterInt(request, "default_moderation_option"); 171 172 String member_implementation = GenericParamUtil.getParameterSafe(request, "member_implementation", true); 174 String onlineuser_implementation = GenericParamUtil.getParameterSafe(request, "onlineuser_implementation", true); 175 String authenticator_implementation = GenericParamUtil.getParameterSafe(request, "authenticator_implementation", false); 176 String requestprocessor_implementation = GenericParamUtil.getParameterSafe(request, "requestprocessor_implementation", true); 177 String lucene_analyzer_implementation = GenericParamUtil.getParameterSafe(request, "lucene_analyzer_implementation", true); 178 String binarystorage_implementation = GenericParamUtil.getParameterSafe(request, "binarystorage_implementation", true); 179 180 Locale locale = onlineUser.getLocale(); 182 183 try { 184 FileUtil.createDirs(mvnforum_home, true); 186 187 String tempFilename = mvnforum_home + File.separatorChar + "mvnforum_tempfile.tmp"; 188 File tempFile = new File(tempFilename); 189 if (log.isDebugEnabled()) { 190 log.debug("Temp file = " + tempFilename); 191 log.debug("Absolute filename of temp file = " + tempFile.getAbsolutePath()); 192 } 193 194 FileOutputStream fos = new FileOutputStream(tempFilename); 195 fos.write(tempFilename.getBytes()); 196 fos.close(); 197 198 tempFile.delete(); 199 } catch (IOException ex) { 200 String errorMessage = "Check your mvnforum_home. Detail : " + ex.getMessage(); 201 throw new BadInputException(errorMessage); 202 } 203 204 try { 205 int lastBackSlashIndex = mvnforum_log.lastIndexOf('\\'); 206 int lastForwardSlashIndex = mvnforum_log.lastIndexOf('/'); 207 int index = Math.max(lastBackSlashIndex, lastForwardSlashIndex); 208 if (index < 0) { 209 throw new BadInputException("Cannot find any '\\' or '/' in mvnforum_log : " + mvnforum_log); 210 } 211 String parentFolder = mvnforum_log.substring(0, index); 212 log.debug("parentFolder = " + parentFolder); 213 214 FileUtil.createDirs(parentFolder, true); 216 217 String tempFilename = parentFolder + File.separatorChar + "mvnforum_tempfile.tmp"; 218 File tempFile = new File(tempFilename); 219 if (log.isDebugEnabled()) { 220 log.debug("Temp file in log folder = " + tempFilename); 221 log.debug("Absolute filename of temp file in log folder = " + tempFile.getAbsolutePath()); 222 } 223 224 FileOutputStream fos = new FileOutputStream(tempFilename); 225 fos.write(tempFilename.getBytes()); 226 fos.close(); 227 228 tempFile.delete(); 229 } catch (IOException ex) { 230 String errorMessage = "Check your mvnforum_log. Detail : " + ex.getMessage(); 231 throw new BadInputException(errorMessage); 232 } 233 234 MyUtil.checkClassName(locale, member_implementation, true); 235 MyUtil.checkClassName(locale, onlineuser_implementation, true); 236 MyUtil.checkClassName(locale, authenticator_implementation, false); 237 MyUtil.checkClassName(locale, requestprocessor_implementation, true); 238 MyUtil.checkClassName(locale, lucene_analyzer_implementation, true); 239 MyUtil.checkClassName(locale, binarystorage_implementation, true); 240 241 String strPathName = FileUtil.getServletClassesPath(); 243 SAXReader reader = new SAXReader(); 244 Document document = reader.read(new File(strPathName + "mvnforum.xml")); 245 246 Element root = document.getRootElement(); 247 for (Iterator i = root.elementIterator(); i.hasNext(); ) { 249 Element element = (Element) i.next(); 250 for (int j = 0, size = element.nodeCount(); j < size; j++) { 251 Node node = element.node(j); 252 if (node.getNodeTypeName().equals("Element")) { 253 if (node.getName().equals("mvnforum_home")) { 254 node.setText(mvnforum_home); 255 } else if (node.getName().equals("mvnforum_log")) { 256 node.setText(mvnforum_log); 257 } else if (node.getName().equals("webmaster_email")) { 258 node.setText(webmaster_email); 259 } else if (node.getName().equals("logo_url")) { 260 node.setText(logo_url); 261 } else if (node.getName().equals("redirect_login_url")) { 262 node.setText(redirect_login_url); 263 } else if (node.getName().equals("supported_locales")) { 264 node.setText(supported_locales); 265 } else if (node.getName().equals("default_locale_name")) { 266 node.setText(default_locale_name); 267 } else if (node.getName().equals("locale_parameter_name")) { 268 node.setText(locale_parameter_name); 269 } else if (node.getName().equals("default_guest_name")) { 270 node.setText(default_guest_name); 271 } else if (node.getName().equals("default_guest_timezone")) { 272 node.setText(String.valueOf(default_guest_timezone)); 273 274 } else if (node.getName().equals("enable_portlet")) { 275 node.setText(enable_portlet); 276 } else if (node.getName().equals("enable_cache_member")) { 277 node.setText(enable_cache_member); 278 } else if (node.getName().equals("enable_cache_post")) { 279 node.setText(enable_cache_post); 280 } else if (node.getName().equals("enable_cache_thread")) { 281 node.setText(enable_cache_thread); 282 } else if (node.getName().equals("enable_cache_forum")) { 283 node.setText(enable_cache_forum); 284 } else if (node.getName().equals("enable_cache_category")) { 285 node.setText(enable_cache_category); 286 287 } else if (node.getName().equals("enable_passwordless_auth")) { 288 node.setText(enable_passwordless_auth); 289 } else if (node.getName().equals("enable_login_info_in_cookie")) { 290 node.setText(enable_login_info_in_cookie); 291 } else if (node.getName().equals("enable_login_info_in_session")) { 292 node.setText(enable_login_info_in_session); 293 } else if (node.getName().equals("enable_login_info_in_realm")) { 294 node.setText(enable_login_info_in_realm); 295 } else if (node.getName().equals("enable_login_info_in_customization")) { 296 node.setText(enable_login_info_in_customization); 297 } else if (node.getName().equals("require_activation")) { 298 node.setText(require_activation); 299 } else if (node.getName().equals("enable_login")) { 300 node.setText(enable_login); 301 } else if (node.getName().equals("enable_new_member")) { 302 node.setText(enable_new_member); 303 } else if (node.getName().equals("enable_new_post")) { 304 node.setText(enable_new_post); 305 } else if (node.getName().equals("enable_rss")) { 306 node.setText(enable_rss); 307 } else if (node.getName().equals("enable_watch")) { 308 node.setText(enable_watch); 309 } else if (node.getName().equals("enable_attachment")) { 310 node.setText(enable_attachment); 311 } else if (node.getName().equals("enable_avatar")) { 312 node.setText(enable_avatar); 313 } else if (node.getName().equals("enable_emoticon")) { 314 node.setText(enable_emoticon); 315 } else if (node.getName().equals("enable_captcha")) { 316 node.setText(enable_captcha); 317 } else if (node.getName().equals("enable_portal_like_index_page")) { 318 node.setText(enable_portal_like_index_page); 319 320 } else if (node.getName().equals("enable_search")) { 321 node.setText(enable_search); 322 } else if (node.getName().equals("enable_online_users")) { 323 node.setText(enable_online_users); 324 } else if (node.getName().equals("enable_duplicate_onlineusers")) { 325 node.setText(enable_duplicate_onlineusers); 326 } else if (node.getName().equals("enable_invisible_users")) { 327 node.setText(enable_invisible_users); 328 } else if (node.getName().equals("enable_listmembers")) { 329 node.setText(enable_listmembers); 330 } else if (node.getName().equals("enable_show_last_login")) { 331 node.setText(enable_show_last_login); 332 } else if (node.getName().equals("enable_private_message")) { 333 node.setText(enable_private_message); 334 } else if (node.getName().equals("enable_public_message")) { 335 node.setText(enable_public_message); 336 } else if (node.getName().equals("enable_message_attachment")) { 337 node.setText(enable_message_attachment); 338 } else if (node.getName().equals("enable_most_active_threads")) { 339 node.setText(enable_most_active_threads); 340 } else if (node.getName().equals("enable_most_active_members")) { 341 node.setText(enable_most_active_members); 342 } else if (node.getName().equals("enable_site_statistics_overview")) { 343 node.setText(enable_site_statistics_overview); 344 } else if (node.getName().equals("enable_admin_can_change_password")) { 345 node.setText(enable_admin_can_change_password); 346 } else if (node.getName().equals("enable_guest_view_image_attachment")) { 347 node.setText(enable_guest_view_image_attachment); 348 349 } else if (node.getName().equals("default_watch_option")) { 350 node.setText(String.valueOf(default_watch_option)); 351 } else if (node.getName().equals("default_moderation_option")) { 352 node.setText(String.valueOf(default_moderation_option)); 353 354 } else if (node.getName().equals("member_implementation")) { 356 node.setText(member_implementation); 357 } else if (node.getName().equals("onlineuser_implementation")) { 358 node.setText(onlineuser_implementation); 359 } else if (node.getName().equals("authenticator_implementation")) { 360 node.setText(authenticator_implementation); 361 } else if (node.getName().equals("requestprocessor_implementation")) { 362 node.setText(requestprocessor_implementation); 363 } else if (node.getName().equals("lucene_analyzer_implementation")) { 364 node.setText(lucene_analyzer_implementation); 365 } else if (node.getName().equals("binarystorage_implementation")) { 366 node.setText(binarystorage_implementation); 367 } 368 } 369 } 370 } 371 372 saveDocument(document, strPathName + "mvnforum.xml"); 373 request.setAttribute("step", "1"); 374 } 375 376 public void updateConfigStepTwo(GenericRequest request) 377 throws BadInputException, DocumentException, IOException, 378 AssertionException, DatabaseException, AuthenticationException { 379 380 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 381 MVNForumPermission permission = onlineUser.getPermission(); 382 permission.ensureCanAdminSystem(); 383 384 int max_private_message = GenericParamUtil.getParameterUnsignedInt(request, "max_private_message"); 385 String max_message_attachment_size = GenericParamUtil.getParameterSafe(request, "max_message_attachment_size", true); 386 String max_attachment_size = GenericParamUtil.getParameterSafe(request, "max_attachment_size", true); 387 int max_favorite_thread = GenericParamUtil.getParameterUnsignedInt(request, "max_favorite_thread"); 388 int max_edit_days = GenericParamUtil.getParameterUnsignedInt(request, "max_edit_days"); 389 int max_attach_days = GenericParamUtil.getParameterUnsignedInt(request, "max_attach_days"); 390 int max_delete_days = GenericParamUtil.getParameterUnsignedInt(request, "max_delete_days"); 391 int rows_per_page = GenericParamUtil.getParameterUnsignedInt(request, "rows_per_page"); 392 int rows_per_rss = GenericParamUtil.getParameterUnsignedInt(request, "rows_per_rss"); 393 int hot_topic_threshold = GenericParamUtil.getParameterUnsignedInt(request, "hot_topic_threshold"); 394 395 int max_posts_per_hour = GenericParamUtil.getParameterUnsignedInt(request, "max_posts_per_hour"); 396 int max_members_per_hour = GenericParamUtil.getParameterUnsignedInt(request, "max_members_per_hour"); 397 int max_logins_per_hour = GenericParamUtil.getParameterUnsignedInt(request, "max_logins_per_hour"); 398 int max_messages_per_hour = GenericParamUtil.getParameterUnsignedInt(request, "max_messages_per_hour"); 399 400 int max_chars_in_short_summary = GenericParamUtil.getParameterUnsignedInt(request, "max_chars_in_short_summary"); 401 int max_chars_in_long_summary = GenericParamUtil.getParameterUnsignedInt(request, "max_chars_in_long_summary"); 402 int max_chars_in_rss = GenericParamUtil.getParameterUnsignedInt(request, "max_chars_in_rss"); 403 404 String enable_backup_on_server = GenericParamUtil.getParameterSafe(request, "enable_backup_on_server", true); 405 String max_import_size = GenericParamUtil.getParameterSafe(request, "max_import_size", true); 406 407 String strPathName = FileUtil.getServletClassesPath(); 408 SAXReader reader = new SAXReader(); 409 Document document = reader.read(new File(strPathName + "mvnforum.xml")); 410 Element root = document.getRootElement(); 411 412 for (Iterator i = root.elementIterator("mvnforumconfig"); i.hasNext(); ) { 414 Element element = (Element) i.next(); 415 for (int j = 0, size = element.nodeCount(); j < size; j++) { 416 Node node = element.node(j); 417 if (node.getNodeTypeName().equals("Element")) { 418 if (node.getName().equals("max_private_message")) { 419 node.setText(String.valueOf(max_private_message)); 420 } else if (node.getName().equals("max_message_attachment_size")) { 421 node.setText(max_message_attachment_size); 422 } else if (node.getName().equals("max_attachment_size")) { 423 node.setText(max_attachment_size); 424 } else if (node.getName().equals("max_favorite_thread")) { 425 node.setText(String.valueOf(max_favorite_thread)); 426 } else if (node.getName().equals("max_edit_days")) { 427 node.setText(String.valueOf(max_edit_days)); 428 } else if (node.getName().equals("max_attach_days")) { 429 node.setText(String.valueOf(max_attach_days)); 430 } else if (node.getName().equals("max_delete_days")) { 431 node.setText(String.valueOf(max_delete_days)); 432 } else if (node.getName().equals("rows_per_page")) { 433 node.setText(String.valueOf(rows_per_page)); 434 } else if (node.getName().equals("rows_per_rss")) { 435 node.setText(String.valueOf(rows_per_rss)); 436 } else if (node.getName().equals("hot_topic_threshold")) { 437 node.setText(String.valueOf(hot_topic_threshold)); 438 439 } else if (node.getName().equals("max_posts_per_hour")) { 440 node.setText(String.valueOf(max_posts_per_hour)); 441 } else if (node.getName().equals("max_members_per_hour")) { 442 node.setText(String.valueOf(max_members_per_hour)); 443 } else if (node.getName().equals("max_logins_per_hour")) { 444 node.setText(String.valueOf(max_logins_per_hour)); 445 } else if (node.getName().equals("max_messages_per_hour")) { 446 node.setText(String.valueOf(max_messages_per_hour)); 447 448 } else if (node.getName().equals("max_chars_in_short_summary")) { 449 node.setText(String.valueOf(max_chars_in_short_summary)); 450 } else if (node.getName().equals("max_chars_in_long_summary")) { 451 node.setText(String.valueOf(max_chars_in_long_summary)); 452 } else if (node.getName().equals("max_chars_in_rss")) { 453 node.setText(String.valueOf(max_chars_in_rss)); 454 455 } else if (node.getName().equals("enable_backup_on_server")) { 456 node.setText(enable_backup_on_server); 457 } else if (node.getName().equals("max_import_size")) { 458 node.setText(max_import_size); 459 } 460 } 461 } 462 } 463 saveDocument(document, strPathName + "mvnforum.xml"); 464 request.setAttribute("step", "2"); 465 } 466 467 public void updateConfigMVNCore(GenericRequest request) 468 throws BadInputException, DocumentException, IOException, 469 AssertionException, DatabaseException, AuthenticationException { 470 471 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 472 MVNForumPermission permission = onlineUser.getPermission(); 473 permission.ensureCanAdminSystem(); 474 475 String enable_mvnforum = GenericParamUtil.getParameterSafe(request, "enable_mvnforum", true); 476 String enable_mvncms = GenericParamUtil.getParameterSafe(request, "enable_mvncms", true); 477 478 String use_datasource = GenericParamUtil.getParameterSafe(request, "use_datasource", true); 479 boolean isUseDatasource = use_datasource.equals("true") ? true : false; 480 481 int database_type = 0; 482 String driver_class_name = ""; 483 String database_url = ""; 484 String database_user = ""; 485 String database_password = ""; 486 int max_connection = 0; 487 int max_time_to_wait = 0; 488 int minutes_between_refresh = 0; 489 String datasource_name = ""; 490 491 if (isUseDatasource == false) { 492 database_type = GenericParamUtil.getParameterUnsignedInt(request, "database_type"); 493 driver_class_name = GenericParamUtil.getParameterSafe(request, "driver_class_name", true); 494 database_url = GenericParamUtil.getParameterSafe(request, "database_url", true); 495 database_user = GenericParamUtil.getParameterSafe(request, "database_user", true); 496 database_password = GenericParamUtil.getParameterSafe(request, "database_password", false); 497 max_connection = GenericParamUtil.getParameterUnsignedInt(request, "max_connection"); 498 max_time_to_wait = GenericParamUtil.getParameterUnsignedInt(request, "max_time_to_wait"); 499 minutes_between_refresh = GenericParamUtil.getParameterUnsignedInt(request, "minutes_between_refresh"); 500 } else { 501 datasource_name = GenericParamUtil.getParameterSafe(request, "datasource_name", false); 502 } 503 504 String default_mail_from = GenericParamUtil.getParameterEmail(request, "default_mail_from"); 505 506 String use_mailsource = GenericParamUtil.getParameterSafe(request, "use_mailsource", true); 507 boolean isUseMailsource = use_mailsource.equals("true") ? true : false; 508 509 String mail_server = ""; 510 String username = ""; 511 String password = ""; 512 int port = 0; 513 String mailsource_name = ""; 514 515 if (isUseMailsource == false) { 516 mail_server = GenericParamUtil.getParameterSafe(request, "mail_server", true); 517 username = GenericParamUtil.getParameterSafe(request, "username", false); 518 password = GenericParamUtil.getParameterSafe(request, "password", false); 519 port = GenericParamUtil.getParameterUnsignedInt(request, "port"); 520 } else { 521 mailsource_name = GenericParamUtil.getParameterSafe(request, "mailsource_name", true); 522 } 523 524 String context_path = GenericParamUtil.getParameterSafe(request, "context_path", false); 525 String server_path = GenericParamUtil.getParameterSafe(request, "server_path", true); 526 527 int server_hour_offset = GenericParamUtil.getParameterInt(request, "server_hour_offset"); 528 529 String blocked_user_agent = GenericParamUtil.getParameterSafe(request, "blocked_user_agent", false); 530 String blocked_ip = GenericParamUtil.getParameterSafe(request, "blocked_ip", false); 531 532 String enable_link_nofollow = GenericParamUtil.getParameterSafe(request, "enable_link_nofollow", true); 533 String enable_encode_url = GenericParamUtil.getParameterSafe(request, "enable_encode_url", true); 534 String portal_type = GenericParamUtil.getParameterSafe(request, "portal_type", true); 535 String urlresolver_implementation = GenericParamUtil.getParameterSafe(request, "urlresolver_implementation", true); 536 String uploadparser_implementation = GenericParamUtil.getParameterSafe(request, "uploadparser_implementation", true); 537 String mvncoreservice_implementation = GenericParamUtil.getParameterSafe(request, "mvncoreservice_implementation", true); 538 539 String mailinterceptor_implementation = GenericParamUtil.getParameterSafe(request, "mailinterceptor_implementation", false); 540 String contentinterceptor_implementation = GenericParamUtil.getParameterSafe(request, "contentinterceptor_implementation", false); 541 String loginidinterceptor_implementation = GenericParamUtil.getParameterSafe(request, "loginidinterceptor_implementation", false); 542 543 Locale locale = onlineUser.getLocale(); 545 546 MyUtil.checkClassName(locale, driver_class_name, true); 547 548 MyUtil.checkClassName(locale, urlresolver_implementation, true); 549 MyUtil.checkClassName(locale, uploadparser_implementation, true); 550 MyUtil.checkClassName(locale, mvncoreservice_implementation, true); 551 552 MyUtil.checkClassName(locale, mailinterceptor_implementation, false); 553 MyUtil.checkClassName(locale, contentinterceptor_implementation, false); 554 MyUtil.checkClassName(locale, loginidinterceptor_implementation, false); 555 556 String strPathName = FileUtil.getServletClassesPath(); 558 SAXReader reader = new SAXReader(); 559 Document document = reader.read(new File(strPathName + "mvncore.xml")); 560 Element root = document.getRootElement(); 561 562 for (Iterator i = root.elementIterator(); i.hasNext(); ) { 564 Element element = (Element) i.next(); 565 for (int j = 0, size = element.nodeCount(); j < size; j++) { 566 Node node = element.node(j); 567 if (node.getNodeTypeName().equals("Element")) { 568 if (node.getName().equals("enable_mvnforum")) { 569 node.setText(enable_mvnforum); 570 } else if (node.getName().equals("enable_mvncms")) { 571 node.setText(enable_mvncms); 572 573 } else if (node.getName().equals("database_type")) { 575 node.setText(String.valueOf(database_type)); 576 } else if (node.getName().equals("use_datasource")) { 577 node.setText(use_datasource); 578 } else if (node.getName().equals("driver_class_name")) { 579 if (isUseDatasource == false) { 580 node.setText(driver_class_name); 581 } 582 } else if (node.getName().equals("database_url")) { 583 if (isUseDatasource == false) { 584 node.setText(database_url); 585 } 586 } else if (node.getName().equals("database_user")) { 587 if (isUseDatasource == false) { 588 node.setText(database_user); 589 } 590 } else if (node.getName().equals("database_password")) { 591 if (isUseDatasource == false) { 592 node.setText(database_password); 593 } 594 } else if (node.getName().equals("max_connection")) { 595 if (isUseDatasource == false) { 596 node.setText(String.valueOf(max_connection)); 597 } 598 } else if (node.getName().equals("max_time_to_wait")) { 599 if (isUseDatasource == false) { 600 node.setText(String.valueOf(max_time_to_wait)); 601 } 602 } else if (node.getName().equals("minutes_between_refresh")) { 603 if (isUseDatasource == false) { 604 node.setText(String.valueOf(minutes_between_refresh)); 605 } 606 } else if (node.getName().equals("datasource_name")) { 607 if (isUseDatasource) { 608 node.setText(datasource_name); 609 } 610 611 } else if (node.getName().equals("default_mail_from")) { 613 node.setText(default_mail_from); 614 } else if (node.getName().equals("use_mailsource")) { 615 node.setText(use_mailsource); 616 } else if (node.getName().equals("mail_server")) { 617 if (isUseMailsource == false) { 618 node.setText(mail_server); 619 } 620 } else if (node.getName().equals("username")) { 621 if (isUseMailsource == false) { 622 node.setText(username); 623 } 624 } else if (node.getName().equals("password")) { 625 if (isUseMailsource == false) { 626 node.setText(password); 627 } 628 } else if (node.getName().equals("port")) { 629 if (isUseMailsource == false) { 630 node.setText(String.valueOf(port)); 631 } 632 } else if (node.getName().equals("mailsource_name")) { 633 if (isUseMailsource) { 634 node.setText(String.valueOf(mailsource_name)); 635 } 636 637 } else if (node.getName().equals("context_path")) { 639 node.setText(context_path); 640 } else if (node.getName().equals("server_path")) { 641 node.setText(server_path); 642 643 } else if (node.getName().equals("server_hour_offset")) { 644 node.setText(String.valueOf(server_hour_offset)); 645 646 } else if (node.getName().equals("blocked_user_agent")) { 647 node.setText(blocked_user_agent); 648 } else if (node.getName().equals("blocked_ip")) { 649 node.setText(blocked_ip); 650 651 } else if (node.getName().equals("enable_link_nofollow")) { 653 node.setText(enable_link_nofollow); 654 } else if (node.getName().equals("enable_encode_url")) { 655 node.setText(enable_encode_url); 656 } else if (node.getName().equals("portal_type")) { 657 node.setText(portal_type); 658 } else if (node.getName().equals("urlresolver_implementation")) { 659 node.setText(urlresolver_implementation); 660 } else if (node.getName().equals("uploadparser_implementation")) { 661 node.setText(uploadparser_implementation); 662 } else if (node.getName().equals("mvncoreservice_implementation")) { 663 node.setText(mvncoreservice_implementation); 664 665 } else if (node.getName().equals("mailinterceptor_implementation")) { 667 node.setText(mailinterceptor_implementation); 668 } else if (node.getName().equals("contentinterceptor_implementation")) { 669 node.setText(contentinterceptor_implementation); 670 } else if (node.getName().equals("loginidinterceptor_implementation")) { 671 node.setText(loginidinterceptor_implementation); 672 } 673 } 674 } 675 } 676 saveDocument(document, strPathName + "mvncore.xml"); 677 request.setAttribute("action", "updatemvncore"); 678 } 679 680 public void updateUrlPattern(GenericRequest request) 681 throws BadInputException, DocumentException, IOException, 682 AssertionException, AuthenticationException, DatabaseException { 683 684 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 685 MVNForumPermission permission = onlineUser.getPermission(); 686 permission.ensureCanAdminSystem(); 687 688 String admin_url = GenericParamUtil.getParameterSafe(request, "admin_url", true); 689 String user_url = GenericParamUtil.getParameterSafe(request, "user_url", true); 690 691 String strPathName = FileUtil.getServletClassesPath(); 692 SAXReader reader = new SAXReader(); 693 String xmlFilePath = strPathName + "mvnforum.xml"; 694 Document document = reader.read(new File(xmlFilePath)); 695 696 Element root = document.getRootElement(); 697 for (int i = 0; i < root.nodeCount(); i++) { 698 Node node = root.node(i); 699 if (node.getNodeTypeName().equals("Element")) { 701 if (node.getName().equals("adminmoduleconfig")) { 702 Node subElement = ((Element) node).element("url_pattern"); 703 subElement.setText(admin_url); 705 } else if (node.getName().equals("usermoduleconfig")) { 706 Node subElement = ((Element) node).element("url_pattern"); 707 subElement.setText(user_url); 709 } 710 } 711 } 712 713 saveDocument(document, xmlFilePath); 714 request.setAttribute("action", "updateurls"); 715 } 716 717 public void configBackupProcess(GenericRequest request) 718 throws IOException, AssertionException, DatabaseException, AuthenticationException { 719 720 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 721 MVNForumPermission permission = onlineUser.getPermission(); 722 permission.ensureCanAdminSystem(); 723 724 String servletClassPath = FileUtil.getServletClassesPath(); 725 726 String mvncoreFileName = servletClassPath + File.separator + "mvncore.xml"; 727 String mvnforumFileName = servletClassPath + File.separator + "mvnforum.xml"; 728 729 String pattern = "yyyy-MM-dd_HH-mm-ss"; 730 String nowDesc = DateUtil.format(new Date(), pattern); 731 String newMVNCoreFileName = servletClassPath + File.separator + "mvncore_" + nowDesc + ".xml"; 732 String newMVNForumFileName = servletClassPath + File.separator + "mvnforum_" + nowDesc + ".xml"; 733 734 FileUtil.copyFile(mvncoreFileName, newMVNCoreFileName, false); 736 FileUtil.copyFile(mvnforumFileName, newMVNForumFileName, false); 737 738 File newMVNCoreFile = new File(newMVNCoreFileName); 739 File newMVNForumFile = new File(newMVNForumFileName); 740 741 request.setAttribute("MVNCoreFileName", newMVNCoreFile.getAbsolutePath()); 742 request.setAttribute("MVNForumFileName", newMVNForumFile.getAbsolutePath()); 743 request.setAttribute("step", "Backup"); 744 } 745 746 private void saveDocument(Document doc, String fileName) throws IOException { 747 XMLWriter writer = new XMLWriter(new FileWriter(fileName)); 748 writer.write(doc); 749 writer.close(); 750 } 751 752 public void prepareEditTemplate(GenericRequest request) 753 throws AuthenticationException, DatabaseException, AssertionException, 754 IOException, FileNotFoundException, BadInputException { 755 756 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 757 MVNForumPermission permission = onlineUser.getPermission(); 758 permission.ensureCanAdminSystem(); 759 760 String templateName = GenericParamUtil.getParameterSafe(request, "template", false); 761 StringUtil.checkGoodName(templateName); 762 String subject = ""; 763 String body = ""; 764 final String SUBJECT_SUFFIX = "-subject.ftl"; 765 final String BODY_SUFFIX = "-body.ftl"; 766 767 if (templateName.equals("")) { 768 templateName = MVNForumGlobal.TEMPLATE_SENDACTIVATECODE_PREFIX; 769 } 770 if ((templateName.equals(MVNForumGlobal.TEMPLATE_FORGOTPASSWORD_PREFIX) == false) && 772 (templateName.equals(MVNForumGlobal.TEMPLATE_SENDACTIVATECODE_PREFIX) == false) && 773 (templateName.equals(MVNForumGlobal.TEMPLATE_WATCHMAIL_PREFIX) == false) ) { 774 throw new AssertionException("Does not accept invalid input: " + templateName); 775 } 776 777 String templateDir = MVNForumConfig.getTemplateDir(); 778 String subjectFileName = templateDir + File.separator + templateName + SUBJECT_SUFFIX; 779 String bodyFileName = templateDir + File.separator + templateName + BODY_SUFFIX; 780 781 subject = FileUtil.readFile(subjectFileName, "UTF-8"); 784 body = FileUtil.readFile(bodyFileName, "UTF-8"); 785 786 request.setAttribute("TemplateSubject", subject); 787 request.setAttribute("TemplateBody", body); 788 } 789 790 public void processEditTemplate(GenericRequest request) 791 throws DatabaseException, AuthenticationException, IOException, 792 FileNotFoundException, AssertionException, BadInputException, TemplateException { 793 794 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 795 MVNForumPermission permission = onlineUser.getPermission(); 796 permission.ensureCanAdminSystem(); 797 798 final String SUBJECT_SUFFIX = "-subject.ftl"; 799 final String BODY_SUFFIX = "-body.ftl"; 800 801 String templateName = GenericParamUtil.getParameterSafe(request, "template", true); 802 StringUtil.checkGoodName(templateName); 803 if ((templateName.equals(MVNForumGlobal.TEMPLATE_FORGOTPASSWORD_PREFIX) == false) && 805 (templateName.equals(MVNForumGlobal.TEMPLATE_SENDACTIVATECODE_PREFIX) == false) && 806 (templateName.equals(MVNForumGlobal.TEMPLATE_WATCHMAIL_PREFIX) == false) ) { 807 throw new AssertionException("Does not accept invalid input: " + templateName); 808 } 809 810 String subject = GenericParamUtil.getParameter(request, "subject", true); 811 String body = GenericParamUtil.getParameter(request, "body", true); 812 813 String templateDir = MVNForumConfig.getTemplateDir(); 814 815 String subjectFileName = templateDir + File.separator + templateName + SUBJECT_SUFFIX; 816 String bodyFileName = templateDir + File.separator + templateName + BODY_SUFFIX; 817 818 SimpleHash root = new SimpleHash(); 820 try { 821 Configuration cfg = MVNForumConfig.getFreeMarkerConfiguration(); 822 if (templateName.equals(MVNForumGlobal.TEMPLATE_SENDACTIVATECODE_PREFIX)) { 823 root.put("serverName", ""); 824 root.put("MVNForumInfo", ""); 825 root.put("activationUrl", ""); 826 root.put("memberName", ""); 827 root.put("activateCode", ""); 828 } else if (templateName.equals(MVNForumGlobal.TEMPLATE_FORGOTPASSWORD_PREFIX)) { 829 root.put("serverName", ""); 830 root.put("MVNForumInfo", ""); 831 root.put("passwordResetUrl", ""); 832 root.put("memberName", ""); 833 root.put("currentTempPassword", ""); 834 } else if (templateName.equals(MVNForumGlobal.TEMPLATE_WATCHMAIL_PREFIX)) { 835 root.put("lastSent", ""); 836 root.put("now", ""); 837 root.put("forumBase", ""); 838 839 ArrayList list = new ArrayList(); 840 SimpleHash subroot = new SimpleHash(); 841 subroot.put("leader", true); 842 subroot.put("categoryName", ""); 843 subroot.put("forumName", ""); 844 subroot.put("threadTopic", ""); 845 subroot.put("memberName", ""); 846 subroot.put("lastPostMemberName", ""); 847 subroot.put("threadLastPostDate", ""); 848 subroot.put("threadUrl", ""); 849 list.add(subroot); 850 851 root.put("threadWatchList", list); 852 } else { 853 throw new AssertionException("Does not accept invalid input: " + templateName); 854 } 855 StringReader subjectReader = new StringReader(subject); 856 StringReader bodyReader = new StringReader(body); 857 858 Template subjectTemplate = new Template("", subjectReader, cfg, ""); 859 StringWriter subjectWriter = new StringWriter(256); 860 subjectTemplate.process(root, subjectWriter); 861 862 Template bodyTemplate = new Template("", bodyReader, cfg, ""); 863 StringWriter bodyWriter = new StringWriter(1024); 864 bodyTemplate.process(root, bodyWriter); 865 } catch(TemplateException ex) { 866 throw ex; 867 } 868 FileUtil.writeFile(subject, subjectFileName, "UTF-8"); 869 FileUtil.writeFile(body, bodyFileName, "UTF-8"); 870 871 request.setAttribute("Successful", "true"); 872 request.setAttribute("TemplateSubject", subject); 873 request.setAttribute("TemplateBody", body); 874 } 875 876 public void commitConfig(GenericRequest request) 877 throws DatabaseException, AuthenticationException, AssertionException { 878 879 OnlineUser onlineUser = onlineUserManager.getOnlineUser(request); 880 MVNForumPermission permission = onlineUser.getPermission(); 881 permission.ensureCanAdminSystem(); 882 MVNForumConfig.reload(); 883 MVNCoreConfig.reload(); 884 request.setAttribute("action", "commit"); 885 } 886 } 887
| Popular Tags
|