void BundleInstallHandler::run() { ServiceRef::Ptr pInstallerRef = context()->registry().findByName(BundleInstallerService::SERVICE_NAME); AutoPtr<BundleInstallerService> pInstaller = pInstallerRef->castedInstance<BundleInstallerService>(); HTMLForm form; InstallPartHandler partHandler(form, pInstaller); form.load(request(), request().stream(), partHandler); std::string title; std::string backLink; std::string backLinkTitle; std::string symbolicName = form.get("symbolicName", ""); if (!symbolicName.empty()) { Bundle::Ptr pBundle = context()->findBundle(symbolicName); title = text("upgradeBundle"); title += ": "; title += symbolicName; backLink = bundlePath(symbolicName); backLinkTitle = text("bundle"); backLinkTitle += ": "; backLinkTitle += pBundle->name(); } else { title = text("installBundle"); backLink = bundle()->properties().getString("web.path"); backLinkTitle = text("installedBundles"); } beginPage(title, backLink, backLinkTitle); if (partHandler.installed()) { templat().clear(); templat().setString("symbolicName", partHandler.bundle()->symbolicName()); templat().setString("name", partHandler.bundle()->name()); sendTemplate("html.installComplete"); beginList(); item(text("id"), NumberFormatter::format(partHandler.bundle()->id())); item(text("symbolicName"), partHandler.bundle()->symbolicName()); item(text("version"), partHandler.bundle()->version().toString()); item(text("path"), partHandler.bundle()->path()); endList(); } else if (symbolicName.empty()) { sendTemplate("html.installForm"); } else { templat().clear(); templat().setString("symbolicName", symbolicName); sendTemplate("html.upgradeForm"); } endPage(); }
void HTMLFormTest::testFieldLimitUrl() { HTTPRequest req("GET", "/form.cgi?field1=value1&field2=value%202&field3=value%3D3&field4=value%264"); HTMLForm form; form.setFieldLimit(3); try { form.load(req); fail("field limit violated - must throw"); } catch (Poco::Net::HTMLFormException&) { } }
void HTMLFormTest::testFieldLimitMultipart() { std::istringstream istr( "\r\n" "--MIME_boundary_0123456789\r\n" "Content-Disposition: form-data; name=\"field1\"\r\n" "\r\n" "value1\r\n" "--MIME_boundary_0123456789\r\n" "Content-Disposition: form-data; name=\"field2\"\r\n" "\r\n" "value 2\r\n" "--MIME_boundary_0123456789\r\n" "Content-Disposition: form-data; name=\"field3\"\r\n" "\r\n" "value=3\r\n" "--MIME_boundary_0123456789\r\n" "Content-Disposition: form-data; name=\"field4\"\r\n" "\r\n" "value&4\r\n" "--MIME_boundary_0123456789\r\n" "Content-Disposition: file; name=\"attachment1\"; filename=\"att1.txt\"\r\n" "Content-Type: text/plain\r\n" "\r\n" "This is an attachment\r\n" "--MIME_boundary_0123456789--\r\n" ); HTTPRequest req("POST", "/form.cgi"); req.setContentType(HTMLForm::ENCODING_MULTIPART + "; boundary=\"MIME_boundary_0123456789\""); StringPartHandler sah; HTMLForm form; form.setFieldLimit(3); try { form.load(req, istr, sah); fail("field limit violated - must throw"); } catch (Poco::Net::HTMLFormException&) { } }