├── README.asciidoc ├── apidocs ├── allclasses-frame.html ├── allclasses-noframe.html ├── constant-values.html ├── deprecated-list.html ├── help-doc.html ├── index-all.html ├── index.html ├── org │ └── sonatype │ │ └── nexus │ │ ├── BlobStoreApi.html │ │ ├── CoreApi.html │ │ ├── class-use │ │ ├── BlobStoreApi.html │ │ └── CoreApi.html │ │ ├── common │ │ └── script │ │ │ ├── ScriptApi.html │ │ │ ├── class-use │ │ │ └── ScriptApi.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ ├── package-tree.html │ │ ├── package-use.html │ │ ├── script │ │ └── plugin │ │ │ ├── RepositoryApi.html │ │ │ ├── class-use │ │ │ └── RepositoryApi.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ │ └── security │ │ ├── SecurityApi.html │ │ ├── class-use │ │ └── SecurityApi.html │ │ ├── package-frame.html │ │ ├── package-summary.html │ │ ├── package-tree.html │ │ └── package-use.html ├── overview-frame.html ├── overview-summary.html ├── overview-tree.html ├── package-list ├── script.js └── stylesheet.css ├── complex-script ├── addRole.groovy ├── addUpdateScript.groovy ├── core.groovy ├── dockerRepositories.groovy ├── grapeConfig.xml ├── npmAndBowerRepositories.groovy ├── provision.sh ├── rawRepositories.groovy └── security.groovy ├── nexus-script-example ├── build.gradle ├── pom.xml ├── settings.gradle └── src │ └── main │ └── groovy │ ├── countComponents.groovy │ ├── listRepos.groovy │ ├── listRolesToUsers.groovy │ ├── listUsers.groovy │ ├── listUsersTask.groovy │ ├── maven.groovy │ ├── provision.groovy │ ├── repoAssetLister.groovy │ └── repoAssetListerTask.groovy └── simple-shell-example ├── anonymous.json ├── bower.json ├── create.sh ├── delete.sh ├── echo.json ├── list.sh ├── maven.json ├── npm.json ├── run.sh ├── setAnonymous.sh └── update.sh /README.asciidoc: -------------------------------------------------------------------------------- 1 | == Integration API Scripting Examples 2 | 3 | Example projects for the Integration API as documented in https://help.sonatype.com/display/NXRM3/REST+and+Integration+API 4 | 5 | See what other interesting scripts have been created at https://community.sonatype.com 6 | 7 | Getting Started 8 | ~~~~~~~~~~~~~~~ 9 | Look at the examples in these projects to get more familiar with how to load, run, and write your own scripts to run inside of Nexus Repository Manager. 10 | 11 | Step 1 - simple-shell-example:: simple JSON script files and shell scripts for interaction with the REST API 12 | Step 2 - nexus-script-example:: Maven project for script development with IntelliJ IDEA-supported code completion 13 | Step 3 - complex-script:: complex provisioning setup based on a shell script invoking numerous groovy scripts for upload and execution 14 | 15 | Passing Parameters 16 | ~~~~~~~~~~~~~~~~~~ 17 | When running the script, the body of the POST request will be passed to your groovy in the _args_ field. You can treat this as a normal string, use Groovy's JsonSlurper to parse it as JSON, or read in any other groovy way. 18 | 19 | The link:simple-shell-example/echo.json[echo.json] sample shows this in action. To test it out: 20 | 21 | . First, cut and paste the contents of _echo.json_ into the body field in the Nexus API UI for adding a new script and give your script a name, and click the "execute" button to submit the POST _/v1/script_ request to save the script in your instance of Nexus Repository Manager 22 | . Next, using the name from Step 1, execute the POST _/v1/script/{name}/run_ request with any text you choose in the body. 23 | . Notice that the response for Step 2 will return the text that you passed in! 24 | 25 | For a more interesting example, see link:complex-script/addRole.groovy[addRole.groovy] and the corresponding documentation at the bottom of https://help.sonatype.com/repomanager3/rest-and-integration-api/script-api/examples. This script allows you to create your own custom REST API that enables you automate the creation of new Roles inside of Nexus Repository Manager. 26 | 27 | 28 | API Reference 29 | ~~~~~~~~~~~~~ 30 | There are 4 officially supported API interfaces: 31 | 32 | . Core 33 | . BlobStore 34 | . Repository 35 | . Security 36 | 37 | To learn more about the methods in each interface, use code complete in your favorite IDE with the _nexus-script-example_ project, or take a look at the Javadoc link:apidocs/index.html[index.html] 38 | 39 | -------------------------------------------------------------------------------- /apidocs/allclasses-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/deprecated-list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/help-doc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.
82 |Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:
86 |Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:
98 |Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
118 |Each annotation type has its own separate page with the following sections:
122 |Each enum has its own separate page with the following sections:
133 |Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
143 |There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object
. The interfaces do not inherit from java.lang.Object
.
The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
155 |The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
159 |These links take you to the next or previous class, interface, package, or related page.
163 |These links show and hide the HTML frames. All pages are available with or without frames.
167 |The All Classes link shows all classes and interfaces except non-static nested types.
171 |Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
175 |The Constant Field Values page lists the static final fields and their values.
179 |Copyright © 2018. All rights reserved.
230 | 231 | 232 | -------------------------------------------------------------------------------- /apidocs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Modifier and Type | 132 |Method and Description | 133 |
---|---|
org.sonatype.nexus.blobstore.api.BlobStoreConfiguration |
136 | createFileBlobStore(String name,
137 | String path)
138 | Create a new File based BlobStore.
139 | |
140 |
default String |
143 | getName()
144 | The name of the api provided.
145 | |
146 |
default String getName()169 |
ScriptApi
org.sonatype.nexus.blobstore.api.BlobStoreConfiguration createFileBlobStore(String name, 184 | String path)185 |
name
- the name for the new BlobStorepath
- the path where the BlobStore should store dataCopyright © 2018. All rights reserved.
263 | 264 | 265 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/class-use/BlobStoreApi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/class-use/CoreApi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/common/script/ScriptApi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |public interface ScriptApi
110 | Modifier and Type | 131 |Method and Description | 132 |
---|---|
String |
135 | getName()
136 | The name of the api provided.
137 | |
138 |
String getName()161 |
Copyright © 2018. All rights reserved.
234 | 235 | 236 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/common/script/class-use/ScriptApi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Package | 83 |Description | 84 |
---|---|
org.sonatype.nexus | 88 |89 | |
org.sonatype.nexus.script.plugin | 92 |93 | |
org.sonatype.nexus.security | 96 |97 | |
Modifier and Type | 111 |Interface and Description | 112 |
---|---|
interface |
116 | BlobStoreApi
117 | BlobStore provisioning capabilities of the repository manager.
118 | |
119 |
interface |
122 | CoreApi
123 | Core provisioning capabilities of the repository manager.
124 | |
125 |
Modifier and Type | 137 |Interface and Description | 138 |
---|---|
interface |
142 | RepositoryApi
143 | Repository provisioning capabilities of the repository manager.
144 | |
145 |
Modifier and Type | 157 |Interface and Description | 158 |
---|---|
interface |
162 | SecurityApi
163 | Security provisioning capabilities of the repository manager.
164 | |
165 |
Copyright © 2018. All rights reserved.
221 | 222 | 223 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/common/script/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Interface | 83 |Description | 84 |
---|---|
ScriptApi | 88 |
89 | Marker interface for anyone wanting to include an api for use in a Script.
90 | |
91 |
Copyright © 2018. All rights reserved.
145 | 146 | 147 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/common/script/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
134 | 135 | 136 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/common/script/package-use.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Package | 83 |Description | 84 |
---|---|
org.sonatype.nexus | 88 |89 | |
org.sonatype.nexus.script.plugin | 92 |93 | |
org.sonatype.nexus.security | 96 |97 | |
Class and Description | 108 |
---|
ScriptApi
112 | Marker interface for anyone wanting to include an api for use in a Script.
113 | |
114 |
Class and Description | 125 |
---|
ScriptApi
129 | Marker interface for anyone wanting to include an api for use in a Script.
130 | |
131 |
Class and Description | 142 |
---|
ScriptApi
146 | Marker interface for anyone wanting to include an api for use in a Script.
147 | |
148 |
Copyright © 2018. All rights reserved.
202 | 203 | 204 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Interface | 83 |Description | 84 |
---|---|
BlobStoreApi | 88 |
89 | BlobStore provisioning capabilities of the repository manager.
90 | |
91 |
CoreApi | 94 |
95 | Core provisioning capabilities of the repository manager.
96 | |
97 |
Copyright © 2018. All rights reserved.
151 | 152 | 153 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
139 | 140 | 141 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/package-use.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/script/plugin/class-use/RepositoryApi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/script/plugin/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Interface | 83 |Description | 84 |
---|---|
RepositoryApi | 88 |
89 | Repository provisioning capabilities of the repository manager.
90 | |
91 |
Copyright © 2018. All rights reserved.
145 | 146 | 147 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/script/plugin/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
138 | 139 | 140 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/script/plugin/package-use.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/security/class-use/SecurityApi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/security/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Interface | 83 |Description | 84 |
---|---|
SecurityApi | 88 |
89 | Security provisioning capabilities of the repository manager.
90 | |
91 |
Copyright © 2018. All rights reserved.
145 | 146 | 147 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/security/package-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
138 | 139 | 140 | -------------------------------------------------------------------------------- /apidocs/org/sonatype/nexus/security/package-use.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
125 | 126 | 127 | -------------------------------------------------------------------------------- /apidocs/overview-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |24 | 25 | 26 | -------------------------------------------------------------------------------- /apidocs/overview-summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Package | 81 |Description | 82 |
---|---|
org.sonatype.nexus | 86 |87 | |
org.sonatype.nexus.common.script | 90 |91 | |
org.sonatype.nexus.script.plugin | 94 |95 | |
org.sonatype.nexus.security | 98 |99 | |
Copyright © 2018. All rights reserved.
151 | 152 | 153 | -------------------------------------------------------------------------------- /apidocs/overview-tree.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Copyright © 2018. All rights reserved.
144 | 145 | 146 | -------------------------------------------------------------------------------- /apidocs/package-list: -------------------------------------------------------------------------------- 1 | org.sonatype.nexus 2 | org.sonatype.nexus.common.script 3 | org.sonatype.nexus.script.plugin 4 | org.sonatype.nexus.security 5 | -------------------------------------------------------------------------------- /apidocs/script.js: -------------------------------------------------------------------------------- 1 | function show(type) 2 | { 3 | count = 0; 4 | for (var key in methods) { 5 | var row = document.getElementById(key); 6 | if ((methods[key] & type) != 0) { 7 | row.style.display = ''; 8 | row.className = (count++ % 2) ? rowColor : altColor; 9 | } 10 | else 11 | row.style.display = 'none'; 12 | } 13 | updateTabs(type); 14 | } 15 | 16 | function updateTabs(type) 17 | { 18 | for (var value in tabs) { 19 | var sNode = document.getElementById(tabs[value][0]); 20 | var spanNode = sNode.firstChild; 21 | if (value == type) { 22 | sNode.className = activeTableTab; 23 | spanNode.innerHTML = tabs[value][1]; 24 | } 25 | else { 26 | sNode.className = tableTab; 27 | spanNode.innerHTML = "" + tabs[value][1] + ""; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /apidocs/stylesheet.css: -------------------------------------------------------------------------------- 1 | /* Javadoc style sheet */ 2 | /* 3 | Overall document style 4 | */ 5 | 6 | @import url('resources/fonts/dejavu.css'); 7 | 8 | body { 9 | background-color:#ffffff; 10 | color:#353833; 11 | font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; 12 | font-size:14px; 13 | margin:0; 14 | } 15 | a:link, a:visited { 16 | text-decoration:none; 17 | color:#4A6782; 18 | } 19 | a:hover, a:focus { 20 | text-decoration:none; 21 | color:#bb7a2a; 22 | } 23 | a:active { 24 | text-decoration:none; 25 | color:#4A6782; 26 | } 27 | a[name] { 28 | color:#353833; 29 | } 30 | a[name]:hover { 31 | text-decoration:none; 32 | color:#353833; 33 | } 34 | pre { 35 | font-family:'DejaVu Sans Mono', monospace; 36 | font-size:14px; 37 | } 38 | h1 { 39 | font-size:20px; 40 | } 41 | h2 { 42 | font-size:18px; 43 | } 44 | h3 { 45 | font-size:16px; 46 | font-style:italic; 47 | } 48 | h4 { 49 | font-size:13px; 50 | } 51 | h5 { 52 | font-size:12px; 53 | } 54 | h6 { 55 | font-size:11px; 56 | } 57 | ul { 58 | list-style-type:disc; 59 | } 60 | code, tt { 61 | font-family:'DejaVu Sans Mono', monospace; 62 | font-size:14px; 63 | padding-top:4px; 64 | margin-top:8px; 65 | line-height:1.4em; 66 | } 67 | dt code { 68 | font-family:'DejaVu Sans Mono', monospace; 69 | font-size:14px; 70 | padding-top:4px; 71 | } 72 | table tr td dt code { 73 | font-family:'DejaVu Sans Mono', monospace; 74 | font-size:14px; 75 | vertical-align:top; 76 | padding-top:4px; 77 | } 78 | sup { 79 | font-size:8px; 80 | } 81 | /* 82 | Document title and Copyright styles 83 | */ 84 | .clear { 85 | clear:both; 86 | height:0px; 87 | overflow:hidden; 88 | } 89 | .aboutLanguage { 90 | float:right; 91 | padding:0px 21px; 92 | font-size:11px; 93 | z-index:200; 94 | margin-top:-9px; 95 | } 96 | .legalCopy { 97 | margin-left:.5em; 98 | } 99 | .bar a, .bar a:link, .bar a:visited, .bar a:active { 100 | color:#FFFFFF; 101 | text-decoration:none; 102 | } 103 | .bar a:hover, .bar a:focus { 104 | color:#bb7a2a; 105 | } 106 | .tab { 107 | background-color:#0066FF; 108 | color:#ffffff; 109 | padding:8px; 110 | width:5em; 111 | font-weight:bold; 112 | } 113 | /* 114 | Navigation bar styles 115 | */ 116 | .bar { 117 | background-color:#4D7A97; 118 | color:#FFFFFF; 119 | padding:.8em .5em .4em .8em; 120 | height:auto;/*height:1.8em;*/ 121 | font-size:11px; 122 | margin:0; 123 | } 124 | .topNav { 125 | background-color:#4D7A97; 126 | color:#FFFFFF; 127 | float:left; 128 | padding:0; 129 | width:100%; 130 | clear:right; 131 | height:2.8em; 132 | padding-top:10px; 133 | overflow:hidden; 134 | font-size:12px; 135 | } 136 | .bottomNav { 137 | margin-top:10px; 138 | background-color:#4D7A97; 139 | color:#FFFFFF; 140 | float:left; 141 | padding:0; 142 | width:100%; 143 | clear:right; 144 | height:2.8em; 145 | padding-top:10px; 146 | overflow:hidden; 147 | font-size:12px; 148 | } 149 | .subNav { 150 | background-color:#dee3e9; 151 | float:left; 152 | width:100%; 153 | overflow:hidden; 154 | font-size:12px; 155 | } 156 | .subNav div { 157 | clear:left; 158 | float:left; 159 | padding:0 0 5px 6px; 160 | text-transform:uppercase; 161 | } 162 | ul.navList, ul.subNavList { 163 | float:left; 164 | margin:0 25px 0 0; 165 | padding:0; 166 | } 167 | ul.navList li{ 168 | list-style:none; 169 | float:left; 170 | padding: 5px 6px; 171 | text-transform:uppercase; 172 | } 173 | ul.subNavList li{ 174 | list-style:none; 175 | float:left; 176 | } 177 | .topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { 178 | color:#FFFFFF; 179 | text-decoration:none; 180 | text-transform:uppercase; 181 | } 182 | .topNav a:hover, .bottomNav a:hover { 183 | text-decoration:none; 184 | color:#bb7a2a; 185 | text-transform:uppercase; 186 | } 187 | .navBarCell1Rev { 188 | background-color:#F8981D; 189 | color:#253441; 190 | margin: auto 5px; 191 | } 192 | .skipNav { 193 | position:absolute; 194 | top:auto; 195 | left:-9999px; 196 | overflow:hidden; 197 | } 198 | /* 199 | Page header and footer styles 200 | */ 201 | .header, .footer { 202 | clear:both; 203 | margin:0 20px; 204 | padding:5px 0 0 0; 205 | } 206 | .indexHeader { 207 | margin:10px; 208 | position:relative; 209 | } 210 | .indexHeader span{ 211 | margin-right:15px; 212 | } 213 | .indexHeader h1 { 214 | font-size:13px; 215 | } 216 | .title { 217 | color:#2c4557; 218 | margin:10px 0; 219 | } 220 | .subTitle { 221 | margin:5px 0 0 0; 222 | } 223 | .header ul { 224 | margin:0 0 15px 0; 225 | padding:0; 226 | } 227 | .footer ul { 228 | margin:20px 0 5px 0; 229 | } 230 | .header ul li, .footer ul li { 231 | list-style:none; 232 | font-size:13px; 233 | } 234 | /* 235 | Heading styles 236 | */ 237 | div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { 238 | background-color:#dee3e9; 239 | border:1px solid #d0d9e0; 240 | margin:0 0 6px -8px; 241 | padding:7px 5px; 242 | } 243 | ul.blockList ul.blockList ul.blockList li.blockList h3 { 244 | background-color:#dee3e9; 245 | border:1px solid #d0d9e0; 246 | margin:0 0 6px -8px; 247 | padding:7px 5px; 248 | } 249 | ul.blockList ul.blockList li.blockList h3 { 250 | padding:0; 251 | margin:15px 0; 252 | } 253 | ul.blockList li.blockList h2 { 254 | padding:0px 0 20px 0; 255 | } 256 | /* 257 | Page layout container styles 258 | */ 259 | .contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { 260 | clear:both; 261 | padding:10px 20px; 262 | position:relative; 263 | } 264 | .indexContainer { 265 | margin:10px; 266 | position:relative; 267 | font-size:12px; 268 | } 269 | .indexContainer h2 { 270 | font-size:13px; 271 | padding:0 0 3px 0; 272 | } 273 | .indexContainer ul { 274 | margin:0; 275 | padding:0; 276 | } 277 | .indexContainer ul li { 278 | list-style:none; 279 | padding-top:2px; 280 | } 281 | .contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { 282 | font-size:12px; 283 | font-weight:bold; 284 | margin:10px 0 0 0; 285 | color:#4E4E4E; 286 | } 287 | .contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { 288 | margin:5px 0 10px 0px; 289 | font-size:14px; 290 | font-family:'DejaVu Sans Mono',monospace; 291 | } 292 | .serializedFormContainer dl.nameValue dt { 293 | margin-left:1px; 294 | font-size:1.1em; 295 | display:inline; 296 | font-weight:bold; 297 | } 298 | .serializedFormContainer dl.nameValue dd { 299 | margin:0 0 0 1px; 300 | font-size:1.1em; 301 | display:inline; 302 | } 303 | /* 304 | List styles 305 | */ 306 | ul.horizontal li { 307 | display:inline; 308 | font-size:0.9em; 309 | } 310 | ul.inheritance { 311 | margin:0; 312 | padding:0; 313 | } 314 | ul.inheritance li { 315 | display:inline; 316 | list-style:none; 317 | } 318 | ul.inheritance li ul.inheritance { 319 | margin-left:15px; 320 | padding-left:15px; 321 | padding-top:1px; 322 | } 323 | ul.blockList, ul.blockListLast { 324 | margin:10px 0 10px 0; 325 | padding:0; 326 | } 327 | ul.blockList li.blockList, ul.blockListLast li.blockList { 328 | list-style:none; 329 | margin-bottom:15px; 330 | line-height:1.4; 331 | } 332 | ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { 333 | padding:0px 20px 5px 10px; 334 | border:1px solid #ededed; 335 | background-color:#f8f8f8; 336 | } 337 | ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { 338 | padding:0 0 5px 8px; 339 | background-color:#ffffff; 340 | border:none; 341 | } 342 | ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { 343 | margin-left:0; 344 | padding-left:0; 345 | padding-bottom:15px; 346 | border:none; 347 | } 348 | ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { 349 | list-style:none; 350 | border-bottom:none; 351 | padding-bottom:0; 352 | } 353 | table tr td dl, table tr td dl dt, table tr td dl dd { 354 | margin-top:0; 355 | margin-bottom:1px; 356 | } 357 | /* 358 | Table styles 359 | */ 360 | .overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { 361 | width:100%; 362 | border-left:1px solid #EEE; 363 | border-right:1px solid #EEE; 364 | border-bottom:1px solid #EEE; 365 | } 366 | .overviewSummary, .memberSummary { 367 | padding:0px; 368 | } 369 | .overviewSummary caption, .memberSummary caption, .typeSummary caption, 370 | .useSummary caption, .constantsSummary caption, .deprecatedSummary caption { 371 | position:relative; 372 | text-align:left; 373 | background-repeat:no-repeat; 374 | color:#253441; 375 | font-weight:bold; 376 | clear:none; 377 | overflow:hidden; 378 | padding:0px; 379 | padding-top:10px; 380 | padding-left:1px; 381 | margin:0px; 382 | white-space:pre; 383 | } 384 | .overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, 385 | .useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, 386 | .overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, 387 | .useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, 388 | .overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, 389 | .useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, 390 | .overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, 391 | .useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { 392 | color:#FFFFFF; 393 | } 394 | .overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, 395 | .useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { 396 | white-space:nowrap; 397 | padding-top:5px; 398 | padding-left:12px; 399 | padding-right:12px; 400 | padding-bottom:7px; 401 | display:inline-block; 402 | float:left; 403 | background-color:#F8981D; 404 | border: none; 405 | height:16px; 406 | } 407 | .memberSummary caption span.activeTableTab span { 408 | white-space:nowrap; 409 | padding-top:5px; 410 | padding-left:12px; 411 | padding-right:12px; 412 | margin-right:3px; 413 | display:inline-block; 414 | float:left; 415 | background-color:#F8981D; 416 | height:16px; 417 | } 418 | .memberSummary caption span.tableTab span { 419 | white-space:nowrap; 420 | padding-top:5px; 421 | padding-left:12px; 422 | padding-right:12px; 423 | margin-right:3px; 424 | display:inline-block; 425 | float:left; 426 | background-color:#4D7A97; 427 | height:16px; 428 | } 429 | .memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { 430 | padding-top:0px; 431 | padding-left:0px; 432 | padding-right:0px; 433 | background-image:none; 434 | float:none; 435 | display:inline; 436 | } 437 | .overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, 438 | .useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { 439 | display:none; 440 | width:5px; 441 | position:relative; 442 | float:left; 443 | background-color:#F8981D; 444 | } 445 | .memberSummary .activeTableTab .tabEnd { 446 | display:none; 447 | width:5px; 448 | margin-right:3px; 449 | position:relative; 450 | float:left; 451 | background-color:#F8981D; 452 | } 453 | .memberSummary .tableTab .tabEnd { 454 | display:none; 455 | width:5px; 456 | margin-right:3px; 457 | position:relative; 458 | background-color:#4D7A97; 459 | float:left; 460 | 461 | } 462 | .overviewSummary td, .memberSummary td, .typeSummary td, 463 | .useSummary td, .constantsSummary td, .deprecatedSummary td { 464 | text-align:left; 465 | padding:0px 0px 12px 10px; 466 | } 467 | th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, 468 | td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ 469 | vertical-align:top; 470 | padding-right:0px; 471 | padding-top:8px; 472 | padding-bottom:3px; 473 | } 474 | th.colFirst, th.colLast, th.colOne, .constantsSummary th { 475 | background:#dee3e9; 476 | text-align:left; 477 | padding:8px 3px 3px 7px; 478 | } 479 | td.colFirst, th.colFirst { 480 | white-space:nowrap; 481 | font-size:13px; 482 | } 483 | td.colLast, th.colLast { 484 | font-size:13px; 485 | } 486 | td.colOne, th.colOne { 487 | font-size:13px; 488 | } 489 | .overviewSummary td.colFirst, .overviewSummary th.colFirst, 490 | .useSummary td.colFirst, .useSummary th.colFirst, 491 | .overviewSummary td.colOne, .overviewSummary th.colOne, 492 | .memberSummary td.colFirst, .memberSummary th.colFirst, 493 | .memberSummary td.colOne, .memberSummary th.colOne, 494 | .typeSummary td.colFirst{ 495 | width:25%; 496 | vertical-align:top; 497 | } 498 | td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { 499 | font-weight:bold; 500 | } 501 | .tableSubHeadingColor { 502 | background-color:#EEEEFF; 503 | } 504 | .altColor { 505 | background-color:#FFFFFF; 506 | } 507 | .rowColor { 508 | background-color:#EEEEEF; 509 | } 510 | /* 511 | Content styles 512 | */ 513 | .description pre { 514 | margin-top:0; 515 | } 516 | .deprecatedContent { 517 | margin:0; 518 | padding:10px 0; 519 | } 520 | .docSummary { 521 | padding:0; 522 | } 523 | 524 | ul.blockList ul.blockList ul.blockList li.blockList h3 { 525 | font-style:normal; 526 | } 527 | 528 | div.block { 529 | font-size:14px; 530 | font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; 531 | } 532 | 533 | td.colLast div { 534 | padding-top:0px; 535 | } 536 | 537 | 538 | td.colLast a { 539 | padding-bottom:3px; 540 | } 541 | /* 542 | Formatting effect styles 543 | */ 544 | .sourceLineNo { 545 | color:green; 546 | padding:0 30px 0 0; 547 | } 548 | h1.hidden { 549 | visibility:hidden; 550 | overflow:hidden; 551 | font-size:10px; 552 | } 553 | .block { 554 | display:block; 555 | margin:3px 10px 2px 0px; 556 | color:#474747; 557 | } 558 | .deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, 559 | .overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, 560 | .seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { 561 | font-weight:bold; 562 | } 563 | .deprecationComment, .emphasizedPhrase, .interfaceName { 564 | font-style:italic; 565 | } 566 | 567 | div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, 568 | div.block div.block span.interfaceName { 569 | font-style:normal; 570 | } 571 | 572 | div.contentContainer ul.blockList li.blockList h2{ 573 | padding-bottom:0px; 574 | } 575 | -------------------------------------------------------------------------------- /complex-script/addRole.groovy: -------------------------------------------------------------------------------- 1 | // From https://help.sonatype.com/repomanager3/rest-and-integration-api/script-api/examples 2 | 3 | import groovy.json.JsonSlurper 4 | 5 | //expects json string with appropriate content to be passed in 6 | def role = new JsonSlurper().parseText(args) 7 | 8 | security.addRole(role.id, role.name, role.description, role.privilegeIds, role.roleIds) -------------------------------------------------------------------------------- /complex-script/addUpdateScript.groovy: -------------------------------------------------------------------------------- 1 | /** 2 | * An example script that handles adding or updating a groovy script via the REST API. 3 | */ 4 | @Grab('org.sonatype.nexus:nexus-rest-client:3.9.0-01') 5 | @Grab('org.sonatype.nexus:nexus-rest-jackson2:3.9.0-01') 6 | @Grab('org.sonatype.nexus:nexus-script:3.9.0-01') 7 | @Grab('org.jboss.spec.javax.servlet:jboss-servlet-api_3.1_spec:1.0.0.Final') 8 | @Grab('com.fasterxml.jackson.core:jackson-core:2.8.6') 9 | @Grab('com.fasterxml.jackson.core:jackson-databind:2.8.6') 10 | @Grab('com.fasterxml.jackson.core:jackson-annotations:2.8.6') 11 | @Grab('com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.8.6') 12 | @Grab('org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:1.0.1.Beta1') 13 | @Grab('org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.0.Final') 14 | @Grab('javax.activation:activation:1.1.1') 15 | @Grab('net.jcip:jcip-annotations:1.0') 16 | @Grab('org.jboss.logging:jboss-logging-annotations:2.0.1.Final') 17 | @Grab('org.jboss.logging:jboss-logging-processor:2.0.1.Final') 18 | @Grab('com.sun.xml.bind:jaxb-impl:2.2.7') 19 | @Grab('com.sun.mail:javax.mail:1.5.6') 20 | @Grab('org.apache.james:apache-mime4j:0.6') 21 | @GrabExclude('org.codehaus.groovy:groovy-all') 22 | import javax.ws.rs.NotFoundException 23 | 24 | import org.sonatype.nexus.script.ScriptClient 25 | import org.sonatype.nexus.script.ScriptXO 26 | 27 | import org.jboss.resteasy.client.jaxrs.BasicAuthentication 28 | import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder 29 | 30 | CliBuilder cli = new CliBuilder( 31 | usage: 'groovy addUpdateScript.groovy -u admin -p admin123 -f scriptFile.groovy [-n explicitName] [-h nx3Url]') 32 | cli.with { 33 | u longOpt: 'username', args: 1, required: true, 'A User with permission to use the NX3 Script resource' 34 | p longOpt: 'password', args: 1, required: true, 'Password for given User' 35 | f longOpt: 'file', args: 1, required: true, 'Script file to send to NX3' 36 | h longOpt: 'host', args: 1, 'NX3 host url (including port if necessary). Defaults to http://localhost:8081' 37 | n longOpt: 'name', args: 1, 'Name to store Script file under. Defaults to the name of the Script file.' 38 | } 39 | def options = cli.parse(args) 40 | if (!options) { 41 | return 42 | } 43 | 44 | def file = new File(options.f) 45 | assert file.exists() 46 | 47 | def host = options.h ?: 'http://localhost:8081' 48 | def resource = 'service/rest' 49 | 50 | ScriptClient scripts = new ResteasyClientBuilder() 51 | .build() 52 | .register(new BasicAuthentication(options.u, options.p)) 53 | .target("$host/$resource") 54 | .proxy(ScriptClient) 55 | 56 | String name = options.n ?: file.name 57 | 58 | // Look to see if a script with this name already exists so we can update if necessary 59 | boolean newScript = true 60 | try { 61 | scripts.read(name) 62 | newScript = false 63 | println "Existing Script named '$name' will be updated" 64 | } 65 | catch (NotFoundException e) { 66 | println "Script named '$name' will be created" 67 | } 68 | 69 | def script = new ScriptXO(name, file.text, 'groovy') 70 | if (newScript) { 71 | scripts.add(script) 72 | } 73 | else { 74 | scripts.edit(name, script) 75 | } 76 | 77 | println "Stored scripts are now: ${scripts.browse().collect { it.name }}" 78 | -------------------------------------------------------------------------------- /complex-script/core.groovy: -------------------------------------------------------------------------------- 1 | 2 | // the repository manager is hosted behind a nging proxy server that redirects ports, 3 | // manages HTTPS and is configured with a DNS name 4 | // so we need to set the base URL 5 | core.baseUrl('https://repo.example.com') 6 | 7 | // another proxy server in the data center is the gate to the internet and therefore 8 | // any remote proxy repositoriesthe repository manager therefore needs to connect to 9 | // it as HTTP/HTTPS proxy and authenticate to be able to retrieve remote content 10 | core.httpProxyWithBasicAuth('webproxy', 9999, 'repomgr', 'letmethrough') 11 | 12 | log.info('Script core completed successfully') -------------------------------------------------------------------------------- /complex-script/dockerRepositories.groovy: -------------------------------------------------------------------------------- 1 | import org.sonatype.nexus.blobstore.api.BlobStoreManager 2 | 3 | // create hosted repo and expose via https to allow deployments 4 | repository.createDockerHosted('docker-internal', null, 18444) 5 | 6 | // create proxy repo of Docker Hub and enable v1 to get search to work 7 | // no ports since access is only indirectly via group 8 | repository.createDockerProxy('docker-hub', // name 9 | 'https://registry-1.docker.io', // remoteUrl 10 | 'HUB', // indexType 11 | null, // indexUrl 12 | null, // httpPort 13 | null, // httpsPort 14 | BlobStoreManager.DEFAULT_BLOBSTORE_NAME, // blobStoreName 15 | true, // strictContentTypeValidation 16 | true // v1Enabled 17 | ) 18 | 19 | // create group and allow access via https 20 | def groupMembers = ['docker-hub', 'docker-internal'] 21 | repository.createDockerGroup('docker-all', null, 18443, groupMembers, true) 22 | 23 | 24 | log.info('Script dockerRepositories completed successfully') -------------------------------------------------------------------------------- /complex-script/grapeConfig.xml: -------------------------------------------------------------------------------- 1 |