]> source.dussan.org Git - archiva.git/blob
5aff95ef66f65ba05e93e2ef1bec1a2808e195cc
[archiva.git] /
1 package org.apache.archiva.rest.api.services.v2;
2 /*
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19
20 import io.swagger.v3.oas.annotations.Operation;
21 import io.swagger.v3.oas.annotations.Parameter;
22 import io.swagger.v3.oas.annotations.headers.Header;
23 import io.swagger.v3.oas.annotations.media.Content;
24 import io.swagger.v3.oas.annotations.media.Schema;
25 import io.swagger.v3.oas.annotations.responses.ApiResponse;
26 import io.swagger.v3.oas.annotations.security.OAuthScope;
27 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
28 import io.swagger.v3.oas.annotations.tags.Tag;
29 import org.apache.archiva.components.rest.model.PagedResult;
30 import org.apache.archiva.redback.authorization.RedbackAuthorization;
31 import org.apache.archiva.rest.api.model.v2.FileInfo;
32 import org.apache.archiva.rest.api.model.v2.MavenManagedRepository;
33 import org.apache.archiva.rest.api.model.v2.MavenManagedRepositoryUpdate;
34 import org.apache.archiva.security.common.ArchivaRoleConstants;
35
36 import javax.ws.rs.Consumes;
37 import javax.ws.rs.DELETE;
38 import javax.ws.rs.DefaultValue;
39 import javax.ws.rs.GET;
40 import javax.ws.rs.POST;
41 import javax.ws.rs.PUT;
42 import javax.ws.rs.Path;
43 import javax.ws.rs.PathParam;
44 import javax.ws.rs.Produces;
45 import javax.ws.rs.QueryParam;
46 import javax.ws.rs.core.MediaType;
47 import javax.ws.rs.core.Response;
48 import java.util.List;
49
50 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
51 import static org.apache.archiva.rest.api.services.v2.RestConfiguration.DEFAULT_PAGE_LIMIT;
52
53 /**
54  * @author Martin Stockhammer <martin_s@apache.org>
55  * @since 3.0
56  */
57 @Schema( name = "ManagedRepositoryService", description = "Managing and configuration of managed repositories" )
58 @Path( "repositories/maven/managed" )
59 @Tag(name = "v2")
60 @Tag(name = "v2/Repositories")
61 public interface MavenManagedRepositoryService
62 {
63     @Path( "" )
64     @GET
65     @Produces( {APPLICATION_JSON} )
66     @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
67     @Operation( summary = "Returns all managed repositories.",
68         parameters = {
69             @Parameter( name = "q", description = "Search term" ),
70             @Parameter( name = "offset", description = "The offset of the first element returned" ),
71             @Parameter( name = "limit", description = "Maximum number of items to return in the response" ),
72             @Parameter( name = "orderBy", description = "List of attribute used for sorting (key, value)" ),
73             @Parameter( name = "order", description = "The sort order. Either ascending (asc) or descending (desc)" )
74         },
75         security = {
76             @SecurityRequirement(
77                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
78             )
79         },
80         responses = {
81             @ApiResponse( responseCode = "200",
82                 description = "If the list could be returned",
83                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = PagedResult.class ) )
84             ),
85             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to gather the information",
86                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
87         }
88     )
89     PagedResult<MavenManagedRepository> getManagedRepositories(
90         @QueryParam( "q" ) @DefaultValue( "" ) String searchTerm,
91         @QueryParam( "offset" ) @DefaultValue( "0" ) Integer offset,
92         @QueryParam( "limit" ) @DefaultValue( value = DEFAULT_PAGE_LIMIT ) Integer limit,
93         @QueryParam( "orderBy" ) @DefaultValue( "id" ) List<String> orderBy,
94         @QueryParam( "order" ) @DefaultValue( "asc" ) String order )
95         throws ArchivaRestServiceException;
96
97
98     @Path( "{id}" )
99     @GET
100     @Produces( {MediaType.APPLICATION_JSON} )
101     @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
102     @Operation( summary = "Returns the managed repository with the given id.",
103         security = {
104             @SecurityRequirement(
105                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
106             )
107         },
108         responses = {
109             @ApiResponse( responseCode = "200",
110                 description = "If the managed repository could be returned",
111                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = MavenManagedRepository.class ) )
112             ),
113             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to gather the information",
114                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
115             @ApiResponse( responseCode = "404", description = "The managed repository with this id does not exist",
116                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
117         }
118     )
119     MavenManagedRepository getManagedRepository( @PathParam( "id" ) String repositoryId )
120         throws ArchivaRestServiceException;
121
122
123     @Path( "{id}" )
124     @DELETE
125     @Produces( {MediaType.APPLICATION_JSON} )
126     @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
127     @Operation( summary = "Deletes the managed repository with the given id.",
128         security = {
129             @SecurityRequirement(
130                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
131             )
132         },
133         responses = {
134             @ApiResponse( responseCode = "200",
135                 description = "If the managed repository could be returned"
136             ),
137             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to gather the information",
138                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
139             @ApiResponse( responseCode = "404", description = "The managed repository with this id does not exist",
140                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
141         }
142     )
143     Response deleteManagedRepository( @PathParam( "id" ) String repositoryId,
144                                       @QueryParam( "deleteContent" ) boolean deleteContent )
145         throws ArchivaRestServiceException;
146
147
148     @Path( "" )
149     @POST
150     @Consumes( {MediaType.APPLICATION_JSON} )
151     @Produces( {MediaType.APPLICATION_JSON} )
152     @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
153     @Operation( summary = "Creates the managed repository",
154         security = {
155             @SecurityRequirement(
156                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
157             )
158         },
159         responses = {
160             @ApiResponse( responseCode = "201",
161                 description = "If the managed repository could be created",
162                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = MavenManagedRepository.class ) )
163             ),
164             @ApiResponse( responseCode = "303", description = "The repository exists already",
165                 headers = {
166                     @Header( name = "Location", description = "The URL of existing repository ", schema = @Schema( type = "string" ) )
167                 }
168             ),
169             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to add repositories",
170                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
171             @ApiResponse( responseCode = "422", description = "The body data is not valid",
172                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
173         }
174     )
175     MavenManagedRepository addManagedRepository( MavenManagedRepository managedRepository )
176         throws ArchivaRestServiceException;
177
178
179     @Path( "{id}" )
180     @PUT
181     @Consumes( {MediaType.APPLICATION_JSON} )
182     @Produces( {MediaType.APPLICATION_JSON} )
183     @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
184     @Operation( summary = "Updates the managed repository with the given id",
185         security = {
186             @SecurityRequirement(
187                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
188             )
189         },
190         responses = {
191             @ApiResponse( responseCode = "200",
192                 description = "If the managed repository could be updated",
193                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = MavenManagedRepository.class ) )
194             ),
195             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to add repositories",
196                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
197             @ApiResponse( responseCode = "422", description = "The body data is not valid",
198                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
199             @ApiResponse( responseCode = "404", description = "The managed repository with this id does not exist",
200                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
201         }
202     )
203     MavenManagedRepository updateManagedRepository( @PathParam( "id" ) String repositoryId,  MavenManagedRepositoryUpdate managedRepository )
204         throws ArchivaRestServiceException;
205
206
207     @Path( "{id}/path/{filePath: .+}" )
208     @GET
209     @Produces( {MediaType.APPLICATION_JSON} )
210     @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS, resource = "{id}")
211     @Operation( summary = "Returns the status of a given file in the repository",
212         security = {
213             @SecurityRequirement(
214                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
215             )
216         },
217         responses = {
218             @ApiResponse( responseCode = "200",
219                 description = "If the file status is returned",
220                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = FileInfo.class ) )
221             ),
222             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to add repositories",
223                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
224             @ApiResponse( responseCode = "404", description = "The managed repository with this id does not exist. Or the file does not exist.",
225                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
226         }
227     )
228     FileInfo getFileStatus( @PathParam( "id" ) String repositoryId, @PathParam( "filePath" ) String fileLocation )
229         throws ArchivaRestServiceException;
230
231
232     /**
233      * Permissions are checked in impl
234      * will copy an artifact from the source repository to the target repository
235      */
236     @Path ("{srcId}/path/{path: .+}/copyto/{dstId}")
237     @POST
238     @Produces({APPLICATION_JSON})
239     @RedbackAuthorization (noPermission = true)
240     @Operation( summary = "Copies a artifact from the source repository to the destination repository",
241         security = {
242             @SecurityRequirement(
243                 name = ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS,
244                 scopes = {
245                     "{srcId}"
246                 }
247             ),
248             @SecurityRequirement(
249                 name= ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD,
250                 scopes = {
251                     "{dstId}"
252                 }
253             )
254
255         },
256         responses = {
257             @ApiResponse( responseCode = "200",
258                 description = "If the artifact was copied"
259             ),
260             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to gather the information",
261                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
262             @ApiResponse( responseCode = "404", description = "The repository does not exist, or if the artifact was not found",
263                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
264         }
265     )
266     Response copyArtifact( @PathParam( "srcId" ) String srcRepositoryId, @PathParam( "dstId" ) String dstRepositoryId,
267                            @PathParam( "path" ) String path )
268         throws ArchivaRestServiceException;
269
270
271     @Path ("{id}/path/{path: .+}")
272     @DELETE
273     @Consumes ({ APPLICATION_JSON })
274     @RedbackAuthorization (noPermission = true)
275     @Operation( summary = "Deletes a artifact in the repository.",
276         security = {
277             @SecurityRequirement(
278                 name = ArchivaRoleConstants.OPERATION_RUN_INDEXER
279             )
280         },
281         responses = {
282             @ApiResponse( responseCode = "200",
283                 description = "If the artifact was deleted"
284             ),
285             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to gather the information",
286                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
287             @ApiResponse( responseCode = "404", description = "The repository or the artifact does not exist",
288                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
289         }
290     )
291     Response deleteArtifact( @PathParam( "id" ) String repositoryId, @PathParam( "path" ) String path )
292         throws ArchivaRestServiceException;
293
294     @Path ( "{id}/co/{group}/{project}/{version}" )
295     @DELETE
296     @Produces ({ MediaType.APPLICATION_JSON })
297     @RedbackAuthorization (noPermission = true)
298     @Operation( summary = "Removes a version tree in the repository",
299         security = {
300             @SecurityRequirement(
301                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
302             )
303         },
304         responses = {
305             @ApiResponse( responseCode = "200",
306                 description = "If the deletion was successful"
307             ),
308             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to delete in repositories",
309                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
310             @ApiResponse( responseCode = "404", description = "The managed repository with this id does not exist. Or the version does not exist.",
311                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
312         }
313     )
314     Response removeProjectVersion( @PathParam ( "id" ) String repositoryId,
315                                    @PathParam ( "group" ) String namespace, @PathParam ( "project" ) String projectId,
316                                    @PathParam ( "version" ) String version )
317         throws org.apache.archiva.rest.api.services.ArchivaRestServiceException;
318
319
320     @Path ( "{id}/co/{group}/{project}" )
321     @DELETE
322     @Produces ({ MediaType.APPLICATION_JSON })
323     @RedbackAuthorization (noPermission = true)
324     @Operation( summary = "Removes a project tree in the repository",
325         security = {
326             @SecurityRequirement(
327                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
328             )
329         },
330         responses = {
331             @ApiResponse( responseCode = "200",
332                 description = "If the deletion was successful"
333             ),
334             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to delete in repositories",
335                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
336             @ApiResponse( responseCode = "404", description = "The managed repository with this id does not exist. Or the project does not exist.",
337                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
338         }
339     )
340     Response deleteProject( @PathParam ("id") String repositoryId, @PathParam ( "group" ) String namespace, @PathParam ( "project" ) String projectId )
341         throws org.apache.archiva.rest.api.services.ArchivaRestServiceException;
342
343     @Path ( "{id}/co/{namespace}" )
344     @DELETE
345     @Produces ({ MediaType.APPLICATION_JSON })
346     @RedbackAuthorization (noPermission = true)
347     @Operation( summary = "Removes a namespace tree in the repository",
348         security = {
349             @SecurityRequirement(
350                 name = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION
351             )
352         },
353         responses = {
354             @ApiResponse( responseCode = "200",
355                 description = "If the deletion was successful"
356             ),
357             @ApiResponse( responseCode = "403", description = "Authenticated user is not permitted to delete namespaces in repositories",
358                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) ),
359             @ApiResponse( responseCode = "404", description = "The managed repository with this id does not exist. Or the namespace does not exist.",
360                 content = @Content( mediaType = APPLICATION_JSON, schema = @Schema( implementation = ArchivaRestError.class ) ) )
361         }
362     )
363     Response deleteNamespace( @PathParam ("id") String repositoryId, @PathParam ( "namespace" ) String namespace )
364         throws org.apache.archiva.rest.api.services.ArchivaRestServiceException;
365
366 }