Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 38C7F200C73 for ; Wed, 26 Apr 2017 01:06:05 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 3772C160BB6; Tue, 25 Apr 2017 23:06:05 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 88C90160BC0 for ; Wed, 26 Apr 2017 01:06:02 +0200 (CEST) Received: (qmail 2191 invoked by uid 500); 25 Apr 2017 23:06:01 -0000 Mailing-List: contact commits-help@groovy.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@groovy.apache.org Delivered-To: mailing list commits@groovy.apache.org Received: (qmail 1930 invoked by uid 99); 25 Apr 2017 23:06:01 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 25 Apr 2017 23:06:01 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 3272ADFEF3; Tue, 25 Apr 2017 23:06:01 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: paulk@apache.org To: commits@groovy.apache.org Date: Tue, 25 Apr 2017 23:06:07 -0000 Message-Id: <99167ef28c6b4d3eb4fedd83b93cfc2e@git.apache.org> In-Reply-To: <8d10f77e90304206b999621498e8c776@git.apache.org> References: <8d10f77e90304206b999621498e8c776@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [07/20] groovy-user-site git commit: move content to asf-site branch archived-at: Tue, 25 Apr 2017 23:06:05 -0000 http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/download.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/download.groovy b/site/src/site/pages/download.groovy deleted file mode 100644 index 28c4842..0000000 --- a/site/src/site/pages/download.groovy +++ /dev/null @@ -1,323 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - Download', - mainContent: contents { - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - ul(class: 'nav-sidebar') { - li(class: 'active') { - a(href: 'download.html') { strong('Download Groovy') } - } - li { - a(href: '#distro', class: 'anchor-link', 'Distributions') - } - li { - a(href: '#sdkman', class: 'anchor-link', 'Through SDKMAN!') - } - li { - a(href: '#buildtools', class: 'anchor-link', 'From your build tools') - } - li { - a(href: '#otherways', class: 'anchor-link', 'Other ways to get Groovy') - } - li { - a(href: '#requirements', class: 'anchor-link', 'System requirements') - } - li { - a(href: 'versioning.html', 'Groovy version scheme') - } - li { - a(href: 'indy.html', 'Invoke dynamic support') - } - li { - a(href: 'releases.html', 'Release notes') - } - } - } - - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-cloud-download') {} - yield ' Download' - } - def linkVersionToDownload = distributions.collect { it.packages }.flatten().find { it.stable }.version - button(id: 'big-download-button', type: 'button', class: 'btn btn-default', - title: "Download Groovy ${linkVersionToDownload}", - onclick: "window.location.href=\"https://dl.bintray.com/groovy/maven/apache-groovy-sdk-${linkVersionToDownload}.zip\"") { - i(class: 'fa fa-download') {} - yield ' Download' - } - article { - p { - yield 'In this download area, you will be able to download the ' - a(href: '#distro', 'distribution') - yield ' (binary and source), the Windows installer (for some of the versions) and the documentation for Groovy.' - } - p { - yield 'All downloads (except the source download) are hosted in ' - a(href: 'http://bintray.com/groovy/', 'Bintray\'s Groovy repository') - yield '. Registering on Bintray allows you to rate, review, and register for new version notifications.' - a(href: 'https://dl.bintray.com/groovy/maven/', '[direct link to the downloads]') - } - p { - yield 'For a quick and effortless start on Mac OSX, Linux or Cygwin, you can use ' - a(href: 'http://sdkman.io/', 'SDKMAN! (The Software Development Kit Manager)') - yield ' to download and configure any Groovy version of your choice. Basic ' - a(href: '#sdkman', 'instructions') - yield ' can be found below. ' - br() - yield 'Windows users can use ' - a(href: 'https://github.com/flofreud/posh-gvm', 'Posh-GVM') - yield ' (POwerSHell Groovy enVironment Manager), a PowerShell clone of the GVM CLI.' - } - } - hr(class: 'divider') - - a(name: 'distro') {} - article { - h1 'Distributions' - p 'You can download a binary, a source or a documentation bundle, as well as a bundle of all three.' - - distributions.each { dist -> - h2 { - i(class: 'fa fa-star') {} - yield " ${dist.name}" - } - if (dist.description) { - p { - dist.description.rehydrate(this, this, this)() - } - } - dist.packages.each { pkg -> - h3 "${pkg.version} distributions" - table(width: '100%', class: 'download-table') { - tr { - td { - a(href: "https://dl.bintray.com/groovy/maven/apache-groovy-binary-${pkg.version}.zip") { - i(class: 'fa fa-gears fa-4x') {} - br() - yield 'binary' - } - } - td { - a(href: "http://www.apache.org/dyn/closer.cgi/groovy/${pkg.version}/sources/apache-groovy-src-${pkg.version}.zip") { - i(class: 'fa fa-code fa-4x') {} - br() - yield ' source' - } - } - td { - a(href: "https://dl.bintray.com/groovy/maven/apache-groovy-docs-${pkg.version}.zip") { - i(class: 'fa fa-file-text fa-4x') {} - br() - yield ' documentation' - } - } - td { - a(href: "https://dl.bintray.com/groovy/maven/apache-groovy-sdk-${pkg.version}.zip") { - i(class: 'fa fa-file-zip-o fa-4x') {} - br() - yield ' SDK bundle' - } - } - if (pkg.windowsInstaller) { - td { - a(href: pkg.windowsInstaller) { - i(class: 'fa fa-windows fa-4x') {} - br() - yield ' Windows installer' - } - } - } - } - } - p { - yield 'Please consult the ' - a(href: "changelogs/changelog-${pkg.version}.html", ' change log') - yield ' for details. Please read the ' - a(href: "indy.html", 'invoke dynamic support information') - yield ' if you like to use Groovy on JDK 7+.' - } - } - } - article { - h3 'Changelog' - - p { - yield 'You can also read the changelogs for ' - a(href: "changelogs.html", 'other versions') - yield '.' - } - } - } - - hr(class: 'divider') - - a(name: 'sdkman') {} - article { - h1 'SDKMAN! (The Software Development Kit Manager)' - p { - yield 'This tool makes installing Groovy on any Bash platform (Mac OSX, Linux, Cygwin, Solaris or FreeBSD) very easy.' - br() - yield 'Simply open a new terminal and enter:' - } - pre { code '$ curl -s get.sdkman.io | bash' } - p { - yield 'Follow the instructions on-screen to complete installation.' - br() - yield 'Open a new terminal or type the command:' - } - pre { code '$ source "$HOME/.sdkman/bin/sdkman-init.sh"' } - p 'Then install the latest stable Groovy:' - pre { code '$ sdk install groovy' } - p 'After installation is complete and you\'ve made it your default version, test it with:' - pre { code '$ groovy -version' } - p 'That\'s all there is to it!' - } - hr(class: 'divider') - - a(name: 'buildtools') {} - article { - h1 'From your build tools' - p 'If you wish to add Groovy as a dependency in your projects, you can refer to the Groovy JARs in the dependency section of your project build file descriptor:' - table(class: 'table') { - thead { - tr { - th 'Gradle' - th 'Maven' - th 'Explanation' - } - } - tbody { - tr { - td { - code 'org.codehaus.groovy:groovy:x.y.z' - } - td { - code '<groupId>org.codehaus.groovy</groupId>' - br() - code '<artifactId>groovy</artifactId>' - br() - code '<version>x.y.z</version>' - } - td 'Just the core of Groovy without the modules (see below). Also includes jarjar\'ed versions of Antlr, ASM, and Commons-CLI.' - } - tr { - td { - code 'org.codehaus.groovy:groovy-$module:x.y.z' - } - td { - code '<groupId>org.codehaus.groovy</groupId>' - br() - code '<artifactId>groovy-$module</artifactId>' - br() - code '<version>x.y.z</version>' - } - td { - code '"$module"' - yield ' stands for the different optional groovy modules "ant", "bsf", "console", "docgenerator", "groovydoc", "groovysh", "jmx", "json", "jsr223", "nio", "servlet", "sql", "swing", "test", "templates", "testng" and "xml".' - br() - yield 'Example: ' - code '<artifactId>groovy-sql</artifactId>' - } - } - tr { - td { - code 'org.codehaus.groovy:groovy-all:x.y.z' - } - td { - code '<groupId>org.codehaus.groovy</groupId>' - br() - code '<artifactId>groovy-all</artifactId>' - br() - code '<version>x.y.z</version>' - } - td 'The core plus all the modules. Also includes jarjar\'ed versions of Antlr, ASM, Commons-CLI.\n' + - 'Optional dependencies are marked as optional.\n' + - 'You may need to include some of the optional dependencies to use some features of Groovy, e.g. AntBuilder, GroovyMBeans...' - } - } - } - h3 'Maven repositories' - p "Groovy releases are downloadable from ${$a(href:'http://repo1.maven.org/maven2/org/codehaus/groovy/','Maven Central')} or ${$a(href:'http://jcenter.bintray.com/org/codehaus/groovy/','JCenter')}." - p "Groovy snapshots are downloadable from ${$a(href:'https://oss.jfrog.org/oss-snapshot-local/org/codehaus/groovy','JFrog OpenSource Snapshots repository')}." - } - hr(class: 'divider') - - a(name: 'otherways') {} - article { - h1 'Other ways to get Groovy' - p { - yield 'If you\'re on MacOS and have ' - a(href: 'http://brew.sh/', 'Homebrew') - yield ' installed, you can install Groovy with:' - pre { code 'brew install groovy' } - yield 'If you\'re on MacOS and have ' - a(href: 'http://www.macports.org/', 'MacPorts') - yield ' installed, you can install Groovy with:' - pre { code 'sudo port install groovy' } - yield 'If you\'re using Docker, Groovy is available on ' - a(href: 'https://hub.docker.com/_/groovy/', 'Docker Hub') - yield '.' - br() - yield 'If you prefer to live on the bleeding edge, you can also grab the ' - a(href: 'https://github.com/apache/groovy', 'source code from GitHub') - yield '.' - br() - yield 'If you are an IDE user, you can just grab the latest ' - a(href: 'ides.html', 'IDE plugin') - yield ' and follow the plugin installation instructions.' - } - } - a(name: 'requirements') {} - article { - h1 'System requirements' - p { - table(class: 'table') { - thead { - tr { - th 'Groovy' - th 'JVM Required (non-indy)' - th 'JVM Required (indy) *' - } - } - tbody { - tr { - td { b '2.5 - current' } - td '1.7+' - td '1.7+' - } - tr { - td { b '2.3 - 2.4' } - td '1.6+' - td '1.7+' - } - tr { - td { b '2.0 - 2.2' } - td '1.5+' - td '1.7+' - } - tr { - td { b '1.6 - 1.8' } - td '1.5+' - td 'N/A' - } - tr { - td { b '1.0 - 1.5' } - td '1.4+' - td 'N/A' - } - } - } - yield '* If you plan to use invoke dynamic support, please read the ' - a(href: "indy.html", 'support information') - yield '.' - } - } - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/ecosystem.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/ecosystem.groovy b/site/src/site/pages/ecosystem.groovy deleted file mode 100644 index 18fda88..0000000 --- a/site/src/site/pages/ecosystem.groovy +++ /dev/null @@ -1,59 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - Ecosystem', - mainContent: contents { - div(id: 'content', class: 'page-1') { - section(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - ul(class: 'nav-sidebar') { - li(class: 'active') { a(href: 'ecosystem.html') { strong('Ecosystem') } } - ecosys.keySet().each { name -> - li { a(href: "#$name", class: 'anchor-link', name) } - } - } - } - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-leaf') {} - yield ' Ecosystem' - } - p { - yield ''' - Beside the language and its API, Groovy gave birth to a fruitful ecosystem of projects around it, - on various themes such as web frameworks, desktop application framework, concurrency, testing, and more. - In this section, we'll highlight a few of the most well-known and successful projects, - which leverage Groovy at their core. - ''' - } - hr(class: 'divider') - - ecosys.eachWithIndex { e, index -> - def (name, item) = [e.key, e.value] - article { - a(name: "${name}") {} - div(class:"content-heading clearfix media") { - div { - if (item.logo) { - img class: "pull-${(index % 2 == 0) ? 'left' : 'right'}", src: item.logo, alt: name, hspace: '20px' - } else { - h2(name) - } - p(item.description) - } - a(href: item.url, target:'_blank', "Learn more...") - } - } - hr(class: 'divider') - } - article { - p """ - There are of course many other projects using or built with the Groovy programming language. - For instance, you can find some more by having a look at the ${$a(href:'https://github.com/trending?l=groovy', 'trending Groovy projects')} on Github. - """ - } - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/events.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/events.groovy b/site/src/site/pages/events.groovy deleted file mode 100644 index 071a86a..0000000 --- a/site/src/site/pages/events.groovy +++ /dev/null @@ -1,61 +0,0 @@ -import model.Event - -/** - * This template is generating the events page. - * If you want to add a new event, please edit the "allEvents" section in src/site/sitemap.groovy - */ - -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - Events', - mainContent: contents { - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - include template: 'includes/community-navbar.groovy' - } - - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-calendar') {} - yield ' Events' - } - article { - p ''' - Groovy and its ecosystem are often represented at various Java-oriented conferences, - but there are also events fully dedicated to the Groovy ecosystem. - Here are upcoming ones you might be interested in learning about. - ''' - hr(class: 'divider') - allEvents.each { - String eventName = it.key - Event event = it.value - div(class: 'event-logo') { - img(src: "${event.logo}", class:'event-logo', alt:"${eventName}") - } - h2 { - a(href: event.url, eventName) - } - - h3 { - i(class: 'fa fa-globe') {} - yieldUnescaped "  ${event.location}   —   " - i(class: 'fa fa-calendar') {} - yieldUnescaped "  " - em event.date - } - div { - yieldUnescaped event.description - } - hr(class: 'divider') - } - } - - } - } - } - } - } - - http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/faq.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/faq.groovy b/site/src/site/pages/faq.groovy deleted file mode 100644 index c69ae66..0000000 --- a/site/src/site/pages/faq.groovy +++ /dev/null @@ -1,52 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - FAQ - Frequently Asked Questions', - mainContent: contents { - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - ul(class: 'nav-sidebar') { - li { - a(href: 'documentation.html', 'Documentation') - } - docSections.each { section -> - li { a(href: "documentation.html#${section.anchor}", class: 'anchor-link', section.name) } - } - li { - a(href: "documentation.html#all-versions", class: 'anchor-link', 'Documentation for other versions') - } - li(class: 'active') { - a(href: 'faq.html') { strong('FAQ') } - } - } - } - - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-question-circle') {} - yieldUnescaped ' Frequently Asked Questions' - } - hr(class: 'divider') - article { - h2 'Is Groovy an Open Source project?' - p { - yield 'Yes, Groovy is an Open Source programming language project, licensed under the ' - a(href: 'http://www.apache.org/licenses/LICENSE-2.0', 'Apache License v2') - yield '. You can see the license header in all the source files of the project, as well as a ' - a(href: 'https://github.com/apache/groovy/blob/master/LICENSE', 'license file') - yield ' at the root of the project' - } - - h2 'What are the differences between Groovy and Java?' - p { - yield 'Learn more about the ' - a(href: 'differences.html', 'differences between Groovy and Java') - yield '.' - } - } - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/gdk.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/gdk.groovy b/site/src/site/pages/gdk.groovy deleted file mode 100644 index 8895762..0000000 --- a/site/src/site/pages/gdk.groovy +++ /dev/null @@ -1,2 +0,0 @@ -layout 'layouts/iframedoc.groovy', true, - pageTitle: "The Apache Groovy programming language - Groovy APIs" http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/groovy-weekly.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/groovy-weekly.groovy b/site/src/site/pages/groovy-weekly.groovy deleted file mode 100644 index 20d373a..0000000 --- a/site/src/site/pages/groovy-weekly.groovy +++ /dev/null @@ -1,103 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - Groovy newsletter', - mainContent: contents { - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - include template: 'includes/community-navbar.groovy' - } - - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-envelope-o') {} - yield ' Groovy Newsletter ' - } - article { - p 'Once in a while, receive a newsletter, directly in your inbox, with all the news ' + - 'of the Groovy ecosystem: the latest releases, interesting articles, interviews, ' + - 'presentations, relevant tweets or Google+ posts, links to podcasts or screencasts, ' + - 'code snippets, books, upcoming events, and more.' - p 'The Groovy newsletter is the best way to stay up-to-date with all things Groovy!' - p { - yield 'This newsletter is powered by ' - a(href: "http://eepurl.com/XXyCD", 'MailChimp') - yield '.' - } - } - hr(class: 'divider') - - a(name: 'subscribe') {} - h2 { - i(class: 'fa fa-envelope') {} - yield ' Subscribe to the newsletter' - } - article { - p 'To subscribe to the newsletter, please fill in the form below.' - p 'Please note that all fields are required.' - } - div(id: 'mc_embed_signup') { - form(action: 'http://appspot.us4.list-manage2.com/subscribe/post?u=cb8b56e9d6a1cb1696cecc673&id=1a76961630', - method: 'post', id: 'mc-embedded-subscribe-form', name: 'mc-embedded-subscribe-form', - class: 'validate', target: '_blank', novalidate: true, role: 'form') { - div(class: 'form-group') { - label(for: 'mce-EMAIL', 'Email address') - input(type: 'email', value: '', class: 'required email form-control', id: 'mce-EMAIL') - } - div(class: 'form-group') { - label(for: 'mce-MNAME', 'First name') - input(type: 'text', value: '', class: 'required required email form-control', id: 'mce-FNAME') - } - div(class: 'form-group') { - label(for: 'mce-LNAME', 'Last name') - input(type: 'text', value: '', class: 'required required email form-control', id: 'mce-LNAME') - } - div(class: 'form-group') { - label(for: 'mce-COMPANY', 'Company') - input(type: 'text', value: '', class: 'required required email form-control', id: 'mce-COMPANY') - } - div(class: 'form-group radio') { - div { - strong 'Email format ' - } - label(class: 'radio-inline') { - input(type: 'radio', value: 'html', name: 'EMAILTYPE', id: 'mce-EMAILTYPE-0', checked: 'checked') - span 'html' - } - label(class: 'radio-inline') { - input(type: 'radio', value: 'text', name: 'EMAILTYPE', id: 'mce-EMAILTYPE-1') - span 'text' - } - } - div(id: 'mce-responses', class: 'clear') { - div(class: 'response', id: 'mce-error-response', style: 'display-none') {} - div(class: 'response', id: 'mce-success-response', style: 'display-none') {} - } - div(style: 'position: absolute; left: -5000px') { - input(type: 'text', name: 'b_cb8b56e9d6a1cb1696cecc673_1a76961630', tabindex: '-1', value: '') - } - br() - div(class: 'clear form-group') { - input(type: 'submit', value: 'Subscribe', name: 'subscribe', id: 'mc-embedded-subscribe', class: 'btn btn-default') - } - } - } - hr(class: 'divider') - - a(name: 'archives') {} - h2 { - i(class: 'fa fa-archive') {} - yield ' Archives' - } - article { - p { - a(href: 'http://us4.campaign-archive2.com/home/?u=cb8b56e9d6a1cb1696cecc673&id=1a76961630', - 'View past editions of the Groovy newsletter.') - } - } - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/index.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/index.groovy b/site/src/site/pages/index.groovy deleted file mode 100644 index 5775562..0000000 --- a/site/src/site/pages/index.groovy +++ /dev/null @@ -1,44 +0,0 @@ -import model.Event - -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language', - mainContent: contents { - div(id: 'band', class: 'band') { - - } - div(id: 'content') { - include unescaped: 'html/index.html' - - def firstTreeEvents = allEvents.keySet().take(3) - section(class: 'row colset-3-article first-event-row') { - h1 { strong "Groovy and Grails events you shouldn't miss!" } - firstTreeEvents.each { String eventName -> - Event event = allEvents[eventName] - article { - div(class: 'content') { - // Note that the event image should be 257x180 to look nice - div(class: 'event-img', style: "background-image: url(${event.logo})") {} - h1 { - a(href: event.url) { - strong eventName - br() - em event.location - } - } - time event.date - yieldUnescaped event.description - } - } - } - } - section(class: 'row last-event-row') { - p(class: 'text-center') { - yield "For more events see the " - a(href: relative("events.html")) { strong('Events') } - yield " page" - } - } - - } - include unescaped: 'html/they-use-groovy.html' - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/indy.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/indy.groovy b/site/src/site/pages/indy.groovy deleted file mode 100644 index 2d3aedc..0000000 --- a/site/src/site/pages/indy.groovy +++ /dev/null @@ -1,174 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - Versioning', - mainContent: contents { - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - ul(class: 'nav-sidebar') { - li { - a(href: 'download.html', 'Download Groovy') - } - li { - a(href: 'download.html#distro', class: 'anchor-link', 'Distributions') - } - li { - a(href: 'download.html#sdkman', class: 'anchor-link', 'Through SDKMAN!') - } - li { - a(href: 'download.html#buildtools', class: 'anchor-link', 'From your build tools') - } - li { - a(href: 'download.html#otherways', class: 'anchor-link', 'Other ways to get Groovy') - } - li { - a(href: 'versioning.html', 'Groovy version scheme') - } - li(class: 'active') { - a(href: 'indy.html') { - strong 'Invoke dynamic support' - } - } - } - } - - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-gear') {} - yield ' Invoke dynamic support' - } - article { - h2 'Introduction' - p ''' - Since Groovy 2.0, we added support for the JVM invokedynamic instruction. - This instruction is supported since Java 7 and is a new bytecode instruction in the JVM - that allows easier implementation of dynamic languages. - This instruction is used internally, by the JVM, for the lambda support in Java 8. - ''' - p ''' - This means that unlike APIs, AST transformations or syntactic sugar, - this feature is not visible to the developer or the end user. - It is a compilation and runtime feature only. - This means that given two programs written in Groovy, - you have the choice to compile it with or without invokedynamic support. - Whatever you choose, it comes with pros and cons. - ''' - ul { - li { - yield 'classes compiled with invokedynamic can only be used on JDK 1.7+' - ul { - li 'without invokedynamic, Groovy classes are still compatible with JDK 1.5+' - } - } - li 'call site caching, as implemented in "normal" Groovy is replaced with invokedynamic since Groovy 2.1' - li 'it is possible to mix classes compiled with and without invokedynamic in the same project, as long as you run JDK 1.7+' - li 'depending on the JVM (even different minor versions of the JVM), you can target close to Java performance for dynamic Groovy with invokedynamic support activated' - } - - h2 'JDK version' - p ''' - All JDK 7 versions ranging from 7u21 to 7u55 are buggy with regards to invokedynamic. - If you plan to use invokedynamic support, make sure you either use 7u60 or JDK 8. - ''' - - h2 'The distributions' - h3 'Two JARs' - p 'The Groovy distribution comes with two jars:' - ul { - li { - code 'groovy-x.y.z.jar' - yield ': compatible with JDK 1.5+, makes use of call site caching' - } - li { - code 'groovy-x-y-z-indy.jar' - yield ': compatible with JDK 1.7+ only, has invokedynamic support bundled, old call site caching still possible' - } - } - p ''' - The first jar is Groovy compiled without invokedynamic support, while the second one has invokedynamic support bundled. - As Groovy core and the groovy modules are sometimes written in Groovy, we currently have no choice but issuing two distinct versions of Groovy. - This means that if you pick the "normal" jar, the groovy classes of groovy itself are compiled with call site caching (1.5+), - while if you use the "indy" jar, the groovy classes of groovy itself are compiled using invokedynamic. - This means that the invokedynamic version of Groovy doesn't make use of the old call site caching mechanism. - ''' - p 'Both jars contain a fully working groovy implementation. They are mutually exclusive (don\'t put both on classpath).' - - h3 'Command-line and indy' - p ''' - If you download the distribution and that you use the command line, - it's always the "normal" version of Groovy which is picked up in classpath. - This means that whatever command you use (groovy, groovyc, groovysh or groovyConsole), invokedynamic support is not available out of the box. - To use the invokedynamic version, you have to switch the jars manually. - The distribution makes use of the jars in the lib directory, while the indy jars are available in the indy directory. - You have three things to do: - ''' - ul { - li 'remove or rename the groovy-*.jar files in the lib directory' - li 'replace them with the indy version from the indy directory' - li 'remove the -indy classifier from jar names' - } - p "Here's a bash script that would do it all at once:" - pre { code '$ for f in `ls lib/groovy*.jar | cut -d/ -f2`;do k=`basename $f .jar`; mv lib/$k.jar lib/$k.jar.old; cp indy/$k-indy.jar lib/$k.jar ; done' } - - h3 'Running groovy script from command line' - p ''' - The usual way to run a script from the command line is by "groovy foo.groovy", where foo.groovy is the groovy program in source form. - To use indy for this you have to use the indy distribution and "groovy --indy foo.groovy". - Doing this without the indy distribution will result in an error message. - ''' - - h3 'The compilation flag' - p ''' - Independently of the jar version that you use (and after having exchanged the jars as described), invokedynamic support requires a specific compilation flag (indy). - If you want to compile your classes with invokedynamic support, this flag must be set at compile time. - The following tables show you what happens with user compiled classes and groovy core classes depending on the jar you use and the compilation flag: - ''' - p 'For user compiled classes:' - table(class: 'table') { - tr { - th 'indy flag' - th 'off' - th 'on' - } - tr { - td 'normal jar' - td 'call site caching' - td 'N/A' - } - tr { - td 'indy jar' - td 'call site caching' - td 'invokedynamic' - } - } - - p 'For core Groovy classes:' - table(class: 'table') { - tr { - th 'indy flag' - th 'off' - th 'on' - } - tr { - td 'normal jar' - td 'call site caching' - td 'N/A' - } - tr { - td 'indy jar' - td 'invokedynamic' - td 'invokedynamic' - } - } - p ''' - So even if you use the indy jar, if you don't use the invokedynamic flag at compile time, - then the compiled classes will use the "old" format, meaning they will use the JDK1.5+ classes without invokedynamic. - ''' - } - hr(class: 'divider') - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/learn.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/learn.groovy b/site/src/site/pages/learn.groovy deleted file mode 100644 index 70858ce..0000000 --- a/site/src/site/pages/learn.groovy +++ /dev/null @@ -1,193 +0,0 @@ -import model.Book -import model.Video -import model.Course - -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - Learn', - extraStyles: ['book.css'], - mainContent: contents { - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - ul(class: 'nav-sidebar') { - li(class: 'active') { - a(href: '#') { strong('Learn') } - } - li { - a(href: '#books', class: 'anchor-link', 'Books') - } - li { - a(href: '#videos', class: 'anchor-link', 'Presentations') - } - li { - a(href: '#courses', class: 'anchor-link', 'Courses') - } - } - } - - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-graduation-cap') {} - yield ' Learn' - } - article { - p 'Welcome to the learning section of the Groovy website.' - p """ - First of all, you will need to ${$a(href: 'documentation.html#gettingstarted', 'get started')} - by installing Groovy on your system or project. - """ - p """ - Once all set up, we invite you to have a look at the Groovy - ${$a(href: 'documentation.html', 'documentation')}, which explains all the - ${$a(href: 'documentation.html#languagespecification', 'details of the language')}, such as how to use the - ${$a(href: 'documentation.html#tools', 'tools')} - that come with a Groovy installation, and how to tackle more complex tasks with the various - ${$a(href: 'documentation.html#groovymoduleguides', 'module user guides')}. - """ - p """ - But there are other ways to learn more about Groovy, thanks to ${$a(href: '#books', 'books')} - and ${$a(href: '#videos', 'presentations')} given about Groovy at conferences. - """ - hr(class: 'divider') - - a(name: 'books') {} - h2 { - i(class: 'fa fa-book') {} - yield ' Books' - } - p ''' - Another great approach to learning Groovy is to read the various books published - on the language:''' - - allBooks.each { - String title = it.key - Book book = it.value - - figure(class: 'book') { - ul(class: 'hardcover_front') { - li { - img(src: book.cover, width: '100%', height: '100%') - } - li {} - } - ul(class: 'page') { - li {} - li { - a(class: 'book-btn', href: book.url, target: '_blank', 'More info') - } - 3.times { li {} } - } - ul(class: 'hardcover_back') { - 2.times { li {} } - } - ul(class: 'book_spine') { - 2.times { li {} } - } - figcaption { - h1 { a(href: book.url, book.title) } - span "By ${book.authors}" - p book.description - } - } - } - - hr(class: 'divider') - - a(name: 'videos') {} - h2 { - i(class: 'fa fa-film') {} - yield ' Presentations' - } - p """ - Many Groovy-related presentations have been recorded at ${$a(href: 'events.html', 'conferences')} - that you might wish to have a look at, to learn more about Groovy, delve into particular topics, and more. - """ - p """ - Below are a few selected presentations given at the - ${$a(href: 'http://springone2gx.com/', 'SpringOne2GX')}, - ${$a(href: 'http://gr8conf.eu/', 'GR8Conf')} and - ${$a(href: 'http://greach.es/', 'Greach')} conferences. - """ - - videos.each { Video video -> - div(class: 'presentations') { - a(href: video.videoUrl) { - img(class: 'screenshot', src: "img/videos/${video.pictureUrl}") - } - div(class: 'metadata') { - a(href: video.videoUrl) { - h1(class: 'title', video.title) - } - span(class: 'speaker', "By ${video.speaker}") - if(video.slidesUrl || video.codeUrl) { - p(class: 'urls') { - if (video.slidesUrl) { - i(class: 'fa fa-photo') {} - yield ' ' - a(href: video.slidesUrl, 'slides') - } - if (video.slidesUrl && video.codeUrl) yield ' | ' - if (video.codeUrl) { - i(class: 'fa fa-code') {} - yield ' ' - a(href: video.codeUrl, 'source code') - } - } - } - div(class: 'summary') { - yieldUnescaped video.summary - } - } - } - } - - p "You can find more presentations:" - ul { - li { - a(href: 'https://www.youtube.com/channel/UCJXNOMywewNmau4hzAy4LjA/videos', 'GR8Conf YouTube channel') - } - li { - a(href: 'https://www.youtube.com/user/GR8ConfUS/videos', 'GR8Conf US YouTube channel') - } - li { - a(href: 'https://www.youtube.com/user/TheGreachChannel/videos', 'Greach YouTube channel') - } - } - - hr(class: 'divider') - - a(name: 'courses') {} - h2 { - i(class: 'fa fa-film') {} - yield ' Courses' - } - p ''' - Another great resource for learning Groovy is by watching a course. You could spend time hunting down - various videos on the web but these courses have all the information you need packed into one place. - ''' - - courses.each { Course course -> - div(class: 'courses') { - a(href: course.url, target: "_blank") { - img(class: 'screenshot', src: "img/courses/${course.cover}") - } - div(class: 'metadata') { - a(href: course.url, target: '_blank') { - h1(class: 'title', course.title) - } - span(class: 'instructor', "By ${course.instructor}") - div(class: 'description') { - yieldUnescaped course.description - } - } - } - } - - } - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/mailing-lists.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/mailing-lists.groovy b/site/src/site/pages/mailing-lists.groovy deleted file mode 100644 index d22d906..0000000 --- a/site/src/site/pages/mailing-lists.groovy +++ /dev/null @@ -1,76 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - Mailing-lists', - mainContent: contents { - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - include template: 'includes/community-navbar.groovy' - } - - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-envelope-o') {} - yield ' Mailing-lists' - } - p '''The Groovy mailing-lists is the main means of interaction with the Groovy developers and Groovy users.''' - hr(class: 'divider') - - article { - h1 'Available lists' - table(class: 'table') { - tr { - td { - strong 'users@groovy.apache.org' - } - td 'high volume list for questions and general discussion about Groovy' - td { a(href: 'mailto:users-subscribe@groovy.apache.org', 'Subscribe') } - td { a(href: 'http://mail-archives.apache.org/mod_mbox/groovy-users/', 'Archive') } - td { a(href: 'mailto:users-unsubscribe@groovy.apache.org', 'Unsubscribe') } - } - tr { - td { - strong 'dev@groovy.apache.org' - } - td 'medium volume list useful for those interested in ongoing developments' - td { a(href: 'mailto:dev-subscribe@groovy.apache.org', 'Subscribe') } - td { a(href: 'http://mail-archives.apache.org/mod_mbox/groovy-dev/', 'Archive') } - td { a(href: 'mailto:dev-unsubscribe@groovy.apache.org', 'Unsubscribe') } - } - tr { - td { - strong 'commits@groovy.apache.org' - } - td 'medium volume list that logs commits' - td { a(href: 'mailto:commits-subscribe@groovy.apache.org', 'Subscribe') } - td { a(href: 'http://mail-archives.apache.org/mod_mbox/groovy-commits/', 'Archive') } - td { a(href: 'mailto:commits-unsubscribe@groovy.apache.org', 'Unsubscribe') } - } - tr { - td { - strong 'notifications@groovy.apache.org' - } - td 'high volume list for JIRA and Github notifications' - td { a(href: 'mailto:notifications-subscribe@groovy.apache.org', 'Subscribe') } - td { a(href: 'http://mail-archives.apache.org/mod_mbox/groovy-notifications/', 'Archive') } - td { a(href: 'mailto:notifications-unsubscribe@groovy.apache.org', 'Unsubscribe') } - } - } - hr(class: 'divider') - - h2 'Mailing-lists archive on Nabble' - p """ - The mailing-lists are archived on ${$a(href: 'http://www.nabble.com/', 'Nabble')}. - Below you can see the archives of the lists. - Even if you can post messages to the mailing-lists through Nabble, - you first need to be registered to the Apache Groovy mailing-lists! - """ - a(id: 'nabblelink', href: 'http://groovy.329449.n5.nabble.com/', 'Nabble forum') - script(src: 'http://groovy.329449.n5.nabble.com/embed/f329449') {} - } - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/release-notes.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/release-notes.groovy b/site/src/site/pages/release-notes.groovy deleted file mode 100644 index d5f2447..0000000 --- a/site/src/site/pages/release-notes.groovy +++ /dev/null @@ -1,48 +0,0 @@ -import generator.DocUtils - -modelTypes = { - String groovyVersion - String notes -} - -layout 'layouts/main.groovy', true, - pageTitle: "The Apache Groovy programming language - Groovy $groovyVersion release notes", - extraStyles: ['https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css'], - extraFooter: contents { - script(src:'https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js') { } - script { yieldUnescaped "document.addEventListener('DOMContentLoaded',prettyPrint)" } - }, - mainContent: contents { - Map options = [attributes:[DOCS_BASEURL:DocUtils.DOCS_BASEURL]] - def notesAsHTML = asciidocText(notes,options) - def matcher = notesAsHTML =~ /

(.+?)<\/h2>/ - def sections = [:] - while (matcher.find()) { - sections[matcher.group(1)] = matcher.group(2) - } - - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - ul(class: 'nav-sidebar') { - li(class:'active') { - a(href: '#releasenotes', "Release notes for Groovy $groovyVersion") - } - sections.each { k,v -> - li { - a(href:"#$k", class: 'anchor-link', v) - } - } - } - } - - div(class: 'col-lg-8 col-lg-pull-0') { - a(name:"releasenotes"){} - h1("Release notes for Groovy $groovyVersion") - yieldUnescaped notesAsHTML - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/releases.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/releases.groovy b/site/src/site/pages/releases.groovy deleted file mode 100644 index bf6abfa..0000000 --- a/site/src/site/pages/releases.groovy +++ /dev/null @@ -1,36 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: "The Apache Groovy programming language - Release notes", - mainContent: contents { - - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - ul(class: 'nav-sidebar') { - li(class: 'active') { - a(href: '#notes', "Release notes") - } - versions.each { v -> - li { a(href: "#notes$v", class: 'anchor-link', "Groovy $v") } - } - } - } - - div(class: 'col-lg-8 col-lg-pull-0') { - h1('Release notes for Groovy') - p '''Here you can find the release notes for the past Groovy releases, describing -thoroughly what are the novelties and bug fixes of each version.''' - ul { - versions.each { mj -> - li { - a(name: "notes$mj") {} - yieldUnescaped "Release notes for " - a(href: "releasenotes/groovy-${mj}.html", "Groovy $mj") - } - } - } - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/search.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/search.groovy b/site/src/site/pages/search.groovy deleted file mode 100644 index 6a6d061..0000000 --- a/site/src/site/pages/search.groovy +++ /dev/null @@ -1,113 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: 'The Apache Groovy programming language - Search', - mainContent: contents { - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') {} - - div(class: 'col-lg-8 col-lg-pull-0') { - include template: 'includes/contribute-button.groovy' - h1 { - i(class: 'fa fa-search') {} - yield ' Search' - } - p ''' - You can search the Groovy website, the Groovy documentation, and the Groovy APIs, - with the Google Custom Search box below. Please type your search query, and hit enter:''' - div { - script ''' - (function() { - var cx = '013939896723962546743:hbhn__olhii'; - var gcse = document.createElement('script'); - gcse.type = 'text/javascript'; - gcse.async = true; - gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + - '//www.google.com/cse/cse.js?cx=' + cx; - var s = document.getElementsByTagName('script')[0]; - s.parentNode.insertBefore(gcse, s); - })(); - ''' - 'gcse:search'(linkTarget: '_blank'){} - style ''' - .gsc-input-box { - height: 30px; - } - input.gsc-search-button, input.gsc-search-button-v2 { - height: 30px; - display: none; - } - .gs-title { - line-height: 20px; - font-weight: bold; - } - .gs-snippet { - margin-left: 8px; - line-height: 18px; - font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; - } - .gsc-cursor-page { - margin: 4px; - padding: 4px; - padding-left: 8px; - padding-right: 8px; - border: 1px solid gray; - } - .gsc-cursor-page:hover { - color: white !important; - background-color: #db4800 !important; - text-decoration: none !important; - } - .gsc-cursor-current-page { - background-color: #F2F2F2 !important; - color: black !important; - } - .gsc-selected-option-container { - width: 120px !important; - } - td.gsc-search-button { - padding-top: 6px; - } - td.gsc-orderby-container { - padding-right: 20px; - } - .gs-no-results-result .gs-snippet { - font-weight: bold; - color: #db4800; - background-color: white; - border: 0px; - } - .gsc-webResult, .gsc-result { - font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; - } - .gsst_a, .gscb_a { - margin-top: 3px; - } - .gs-per-result-labels { - margin-left: 8px; - margin-top: 4px; - } - .gs-per-result-labels:before { - font-family: FontAwesome; - content: '\\f02c'; - margin-right: 8px; - } - .gsc-tabHeader.gsc-tabhActive { - border-color: #CCCCCC; - border-bottom-color: #F2F2F2; - background-color: #F2F2F2; - } - .gsc-tabsArea { - border-bottom: 0; - } - a.gs-label, img.gs-image { - margin-left: 5px; - } - ''' - } - hr(class: 'divider') - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/security.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/security.groovy b/site/src/site/pages/security.groovy deleted file mode 100644 index 67815e5..0000000 --- a/site/src/site/pages/security.groovy +++ /dev/null @@ -1,150 +0,0 @@ -layout 'layouts/main.groovy', true, - pageTitle: "The Apache Groovy programming language - Security", - mainContent: contents { - - div(id: 'content', class: 'page-1') { - div(class: 'row') { - div(class: 'row-fluid') { - div(class: 'col-lg-3') { - ul(class: 'nav-sidebar') { - li(class: 'active') { - a(href: '#security', "Security updates") - } - } - } - - div(class: 'col-lg-8 col-lg-pull-0') { - a(name: 'security') {} - h1('Security updates') - p '''Here you can find information about security patches or updates released for Apache Groovy. Note that unless specified otherwise, -no binary or source patches are available. To obtain a security fix, you need to upgrade to the latest maintained version of Apache Groovy.''' - p '''Releases prior to 2.4.4 were not released under Apache so no official patches for security updates are available for older versions.''' - ul { - li { - h2 "Groovy 2.4.x vulnerabilities" - h3 'CVE-2015-3253 Apache Groovy Information Disclosure' - asciidoc ''' -Severity: Important - -Vendor: The Apache Software Foundation - -Versions Affected: - -* Unsupported Codehaus versions of Groovy from 1.7.0 to 2.4.3 -* Fixed in version 2.4.4 - -Impact: - -Remote execution of untrusted code, DoS - -Description: - -When an application has Groovy on the classpath and uses standard Java serialization mechanisms to communicate between servers, or to store local data, it is possible for an attacker to bake a special serialized object that will execute code directly when deserialized. All applications which rely on serialization and do not isolate the code which deserializes objects are subject to this vulnerability. - -Mitigation: - -Apache Groovy 2.4.4 is the first supported release under the Apache Software Foundation. It is strongly recommended that all users using serialization upgrade to this version. -If you cannot upgrade or rely on an older, unsupported version of Groovy, you can apply the following patch on the `MethodClosure` class (`src/main/org/codehaus/groovy/runtime/MethodClosure.java`): - -``` - public class MethodClosure extends Closure { -+ private Object readResolve() { -+ throw new UnsupportedOperationException(); -+ } -``` - -Alternatively, you should make sure to use a custom security policy file (using the standard Java security manager) or make sure that you do not rely on serialization to communicate remotely. - -Credit: - -This vulnerability was discovered by: - -* cpnrodzc7 working with HP's Zero Day Initiative - -References: - -* http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-3253[CVE-2015-3253: Remote execution of untrusted code] -* http://groovy-lang.org/security.html - -''' - h3 'CVE-2016-6814 Apache Groovy Information Disclosure' - asciidoc ''' -Severity: Important - -Vendor: The Apache Software Foundation - -Versions Affected: - -* Unsupported Codehaus versions of Groovy from 1.7.0 to 2.4.3 -* Apache Groovy 2.4.4 to 2.4.7 -* Fixed in version 2.4.8 - -Impact: - -Remote execution of untrusted code, DoS - -Description: - -When an application with Groovy on classpath uses standard -Java serialization mechanisms, e.g. to communicate between servers -or to store local data, it is possible for an attacker to bake a special -serialized object that will execute code directly when deserialized. -All applications which rely on serialization and do not isolate the -code which deserializes objects are subject to this vulnerability. -This is similar to CVE-2015-3253 but this exploit involves extra -wrapping of objects and catching of exceptions which are now safe -guarded against. - -Mitigation: - -Users of Groovy relying on (de)serialization with the affected versions -should apply one of the following mitigations: - -* Isolate the code doing the (de)serialization -* Upgrade to Apache Groovy 2.4.8 or later -* Users of older versions of Groovy can apply the following patch to the -`MethodClosure` class (`src/main/org/codehaus/groovy/runtime/MethodClosure.java`): - -``` -public class MethodClosure extends Closure { -+ private void readObject(java.io.ObjectInputStream stream) throws -IOException, ClassNotFoundException { -+ if (ALLOW_RESOLVE) { -+ stream.defaultReadObject(); -+ } -+ throw new UnsupportedOperationException(); -+ } -``` - -Credit: - -This vulnerability was discovered by: - -* Sam Thomas of Pentest Limited working with Trend Micro's Zero Day Initiative - -History: - -* 2016-09-20 Original advisory -* 2017-01-12 Updated information on affected versions - -References: - -* http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6814[CVE-2016-6814: Remote execution of untrusted code] -* http://groovy-lang.org/security.html - -''' - } - li { - h2 "Reporting problems" - p """The Apache Software Foundation takes a very active stance in eliminating security problems in its software products. -If you have questions about how to configure or use Groovy securely, you should send them to the users ${$a(href: 'mailing-lists.html', 'mailing list')}. -If you find any security problems due to bugs in Groovy software, you should raise issues in the ${$a(href: 'contribute.html#reporting-issues', 'bug tracker')}. -The Apache Software Foundation has a dedicated ${$a(href: 'http://www.apache.org/security/', 'security team')} which you may contact should the need arise. -""" - } - } - } - } - } - } - } http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/pages/singlepagedocumentation.groovy ---------------------------------------------------------------------- diff --git a/site/src/site/pages/singlepagedocumentation.groovy b/site/src/site/pages/singlepagedocumentation.groovy deleted file mode 100644 index 5443050..0000000 --- a/site/src/site/pages/singlepagedocumentation.groovy +++ /dev/null @@ -1,2 +0,0 @@ -layout 'layouts/iframedoc.groovy', true, - pageTitle: "The Apache Groovy programming language - Groovy reference documentation"