14
14
import org .obiba .magma .security .Authorizer ;
15
15
import org .obiba .magma .security .shiro .ShiroAuthorizer ;
16
16
import org .obiba .opal .core .domain .ResourceReference ;
17
+ import org .obiba .opal .core .service .NoSuchProjectException ;
18
+ import org .obiba .opal .core .service .ProjectService ;
17
19
import org .obiba .opal .core .service .ResourceReferenceService ;
18
20
import org .obiba .opal .r .service .RServerManagerService ;
19
21
import org .obiba .opal .spi .r .RServerException ;
@@ -37,14 +39,18 @@ public class ProjectResourceReferenceResource implements BaseResource {
37
39
38
40
private final RServerManagerService rServerManagerService ;
39
41
42
+ private final ProjectService projectService ;
43
+
40
44
@ Autowired
41
- public ProjectResourceReferenceResource (ResourceReferenceService resourceReferenceService , RServerManagerService rServerManagerService ) {
45
+ public ProjectResourceReferenceResource (ResourceReferenceService resourceReferenceService , RServerManagerService rServerManagerService , ProjectService projectService ) {
42
46
this .resourceReferenceService = resourceReferenceService ;
43
47
this .rServerManagerService = rServerManagerService ;
48
+ this .projectService = projectService ;
44
49
}
45
50
46
51
@ GET
47
52
public Projects .ResourceReferenceDto get (@ PathParam ("project" ) String project , @ PathParam ("name" ) String name ) {
53
+ checkProject (project );
48
54
ResourceReference reference = resourceReferenceService .getResourceReference (project , name );
49
55
return Dtos .asDto (reference , resourceReferenceService .createResource (reference ), isEditable (project , name ));
50
56
}
@@ -54,6 +60,7 @@ public Response update(@PathParam("project") String project, @PathParam("name")
54
60
// check same project
55
61
if (!project .equals (referenceDto .getProject ()))
56
62
throw new IllegalArgumentException ("Expecting a resource of project: " + project );
63
+ checkProject (project );
57
64
// check it is not a creation
58
65
ResourceReference originalReference = resourceReferenceService .getResourceReference (project , name );
59
66
ResourceReference updatedReference = Dtos .fromDto (referenceDto );
@@ -70,6 +77,7 @@ public Response update(@PathParam("project") String project, @PathParam("name")
70
77
@ PUT
71
78
@ Path ("_test" )
72
79
public Response test (@ PathParam ("project" ) String project , @ PathParam ("name" ) String name ) throws RServerException {
80
+ checkProject (project );
73
81
ResourceAssignROperation rop = resourceReferenceService .asAssignOperation (project , name , "rsrc" );
74
82
// test in the R server where the resource provider is defined
75
83
rServerManagerService .getRServerWithPackages (rop .getRequiredPackages ()).execute (rop );
@@ -78,6 +86,7 @@ public Response test(@PathParam("project") String project, @PathParam("name") St
78
86
79
87
@ DELETE
80
88
public Response delete (@ PathParam ("project" ) String project , @ PathParam ("name" ) String name ) {
89
+ checkProject (project );
81
90
resourceReferenceService .delete (project , name );
82
91
return Response .noContent ().build ();
83
92
}
@@ -86,4 +95,16 @@ private boolean isEditable(String project, String name) {
86
95
return authorizer .isPermitted ("rest:/project/" + project + "/resource/" + name + ":PUT" );
87
96
}
88
97
98
+ private boolean isReadable (String project ) {
99
+ return authorizer .isPermitted ("rest:/project/" + project + ":GET" );
100
+ }
101
+
102
+ /**
103
+ * Ensure project exists and is readable.
104
+ *
105
+ * @param name
106
+ */
107
+ private void checkProject (String name ) {
108
+ if (!projectService .hasProject (name ) || !isReadable (name )) throw new NoSuchProjectException (name );
109
+ }
89
110
}
0 commit comments