Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
O
openebench-rest-api
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
INB
ELIXIR
OpenEBench
openebench-rest-api
Commits
1057893e
Commit
1057893e
authored
Nov 05, 2020
by
redmitry@list.ru
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
protect Privilege collection
parent
b8c0564e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
94 additions
and
3 deletions
+94
-3
src/main/java/es/bsc/inb/elixir/openebench/rest/OpenEBenchService.java
.../es/bsc/inb/elixir/openebench/rest/OpenEBenchService.java
+31
-1
src/main/java/es/bsc/inb/elixir/openebench/rest/dao/Database.java
.../java/es/bsc/inb/elixir/openebench/rest/dao/Database.java
+63
-2
No files found.
src/main/java/es/bsc/inb/elixir/openebench/rest/OpenEBenchService.java
View file @
1057893e
...
...
@@ -38,8 +38,11 @@ import java.io.UnsupportedEncodingException;
import
java.io.Writer
;
import
java.net.URLDecoder
;
import
java.security.Principal
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
javax.annotation.PostConstruct
;
import
javax.annotation.security.PermitAll
;
import
javax.enterprise.context.RequestScoped
;
import
javax.inject.Inject
;
...
...
@@ -58,6 +61,10 @@ import javax.ws.rs.core.Response;
import
javax.ws.rs.core.Response.Status
;
import
javax.ws.rs.core.SecurityContext
;
import
javax.ws.rs.core.StreamingOutput
;
import
org.keycloak.KeycloakPrincipal
;
import
org.keycloak.KeycloakSecurityContext
;
import
org.keycloak.representations.AccessToken
;
import
org.keycloak.representations.AccessToken.Access
;
/**
* @author Dmitry Repchevsky
...
...
@@ -123,7 +130,7 @@ public class OpenEBenchService {
StreamingOutput
stream
=
(
OutputStream
out
)
->
{
try
(
Writer
writer
=
new
BufferedWriter
(
new
OutputStreamWriter
(
out
,
"UTF-8"
)))
{
dao
.
write
(
writer
,
"Privilege"
);
dao
.
getPrivileges
(
writer
,
sc
);
}
catch
(
Exception
ex
)
{
Logger
.
getLogger
(
OpenEBenchService
.
class
.
getName
()).
log
(
Level
.
SEVERE
,
null
,
ex
);
}
...
...
@@ -132,6 +139,29 @@ public class OpenEBenchService {
}
@GET
@Path
(
"/Privilege/{id : .*}"
)
@PermitAll
@Produces
(
MediaType
.
APPLICATION_JSON
)
public
Response
getPrivilege
(
@Context
SecurityContext
sc
,
@PathParam
(
"id"
)
@Parameter
(
description
=
"privilege id"
,
example
=
"OEBC00200001FO"
)
@Encoded
final
String
id
)
{
final
String
privilege
=
dao
.
getPrivilege
(
id
,
sc
);
if
(
privilege
==
null
)
{
return
Response
.
status
(
Status
.
NOT_FOUND
).
build
();
}
if
(
"{}"
.
equals
(
privilege
))
{
return
Response
.
status
(
Status
.
UNAUTHORIZED
).
build
();
}
return
Response
.
ok
(
privilege
,
MediaType
.
APPLICATION_JSON
).
build
();
}
@GET
@Path
(
"/{collection}"
)
@PermitAll
...
...
src/main/java/es/bsc/inb/elixir/openebench/rest/dao/Database.java
View file @
1057893e
...
...
@@ -68,13 +68,11 @@ public class Database {
private
MongoClientURI
uri
;
private
MongoClient
mc
;
private
Jsonb
jsonb
;
@PostConstruct
protected
void
init
()
{
uri
=
new
MongoClientURI
(
ctx
.
getInitParameter
(
"mongodb.url"
));
mc
=
new
MongoClient
(
uri
);
jsonb
=
JsonbBuilder
.
create
();
}
@PreDestroy
...
...
@@ -197,6 +195,60 @@ public class Database {
}
}
public
String
getPrivilege
(
final
String
id
,
final
SecurityContext
sc
)
{
try
{
final
MongoDatabase
mdb
=
mc
.
getDatabase
(
uri
.
getDatabase
());
final
MongoCollection
<
Document
>
privileges
=
mdb
.
getCollection
(
"Privilege"
);
final
Document
privilege
=
privileges
.
find
(
Filters
.
eq
(
"_id"
,
id
)).
first
();
if
(
privilege
!=
null
&&
checkPrivilegeAccess
(
privilege
,
sc
))
{
return
privilege
.
toJson
();
}
return
"{}"
;
}
catch
(
Exception
ex
)
{
Logger
.
getLogger
(
Database
.
class
.
getName
()).
log
(
Level
.
SEVERE
,
null
,
ex
);
}
return
null
;
}
public
void
getPrivileges
(
final
Writer
writer
,
final
SecurityContext
sc
)
{
try
{
MongoDatabase
mdb
=
mc
.
getDatabase
(
uri
.
getDatabase
());
final
MongoCollection
<
Document
>
privileges
=
mdb
.
getCollection
(
"Privilege"
);
final
JsonWriter
jwriter
=
new
ReusableJsonWriter
(
writer
);
try
{
jwriter
.
writeStartArray
();
final
DocumentCodec
codec
=
new
DocumentCodec
()
{
@Override
public
void
encode
(
BsonWriter
writer
,
Document
document
,
EncoderContext
encoderContext
)
{
super
.
encode
(
jwriter
,
document
,
encoderContext
);
}
};
FindIterable
<
Document
>
iter
=
privileges
.
find
();
try
(
MongoCursor
<
Document
>
cursor
=
iter
.
iterator
())
{
loop:
while
(
cursor
.
hasNext
())
{
final
Document
privilege
=
cursor
.
next
();
if
(
checkPrivilegeAccess
(
privilege
,
sc
))
{
privilege
.
toJson
(
codec
);
}
}
}
}
finally
{
jwriter
.
writeEndArray
();
jwriter
.
close
();
}
}
catch
(
Exception
ex
)
{
Logger
.
getLogger
(
Database
.
class
.
getName
()).
log
(
Level
.
SEVERE
,
null
,
ex
);
}
}
public
String
getChallenge
(
final
String
id
,
final
SecurityContext
sc
)
{
try
{
final
MongoDatabase
mdb
=
mc
.
getDatabase
(
uri
.
getDatabase
());
...
...
@@ -325,6 +377,15 @@ public class Database {
}
}
private
boolean
checkPrivilegeAccess
(
final
Document
privilege
,
final
SecurityContext
sc
)
{
if
(
sc
.
isUserInRole
(
Roles
.
ADMIN
))
{
return
true
;
}
return
false
;
}
private
boolean
checkChallengeAccess
(
final
Document
challenge
,
final
SecurityContext
sc
,
final
MongoCollection
<
Document
>
events
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment