Added avatar export in local folder support. Resolves issue #19891
This commit is contained in:
parent
cb4dcd876b
commit
9ae47335a5
|
@ -1,7 +1,7 @@
|
|||
# Changelog for "oidc-keycloak-library"
|
||||
|
||||
## [v1.0.0-SNAPSHOT]
|
||||
- First release (#19143)
|
||||
- First release (#19143, #19891)
|
||||
|
||||
|
||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
@ -1,8 +1,13 @@
|
|||
package org.gcube.oidc.keycloak.d4science;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Collections;
|
||||
|
@ -14,6 +19,7 @@ import java.util.Set;
|
|||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.gcube.oidc.D4ScienceMappings.Role;
|
||||
import org.gcube.oidc.D4ScienceMappings.Scope;
|
||||
import org.gcube.oidc.keycloak.KeycloakHelper;
|
||||
|
@ -53,7 +59,7 @@ public class ClientsCreatorFromExport {
|
|||
|
||||
public void createClients() throws KeycloakResourceCreationException, UnsupportedEncodingException {
|
||||
RealmResource realmResource = keycloak.realm(realm);
|
||||
for (String contextClient : exportParser.getAllContexts()) {
|
||||
for (String contextClient : getExportParser().getAllContexts()) {
|
||||
System.out.println("adding client: " + contextClient);
|
||||
ClientResource client = kh.addClient(realmResource, contextClient,
|
||||
contextClient,
|
||||
|
@ -142,7 +148,7 @@ public class ClientsCreatorFromExport {
|
|||
|
||||
public void deleteClients() {
|
||||
RealmResource realmResource = keycloak.realm(realm);
|
||||
for (String contextClient : exportParser.getAllContexts()) {
|
||||
for (String contextClient : getExportParser().getAllContexts()) {
|
||||
System.out.println("- deleting: " + contextClient);
|
||||
try {
|
||||
kh.removeClient(realmResource, contextClient);
|
||||
|
@ -154,7 +160,7 @@ public class ClientsCreatorFromExport {
|
|||
|
||||
public void mapUsersWithRolesToClients() throws UnsupportedEncodingException {
|
||||
RealmResource realmResource = keycloak.realm(realm);
|
||||
Map<String, Map<String, Set<String>>> usersToContextsAndRoles = exportParser.getAllUserContextsAndRoles();
|
||||
Map<String, Map<String, Set<String>>> usersToContextsAndRoles = getExportParser().getAllUserContextsAndRoles();
|
||||
for (String userName : usersToContextsAndRoles.keySet()) {
|
||||
System.out.println("- user: " + userName);
|
||||
UserResource userResource = kh.findUser(realmResource, userName);
|
||||
|
@ -182,31 +188,82 @@ public class ClientsCreatorFromExport {
|
|||
}
|
||||
}
|
||||
|
||||
public void saveAvatarsLocally(String avatarBaseURL, String destinationFolder) {
|
||||
URL baseURL;
|
||||
try {
|
||||
baseURL = new URL(avatarBaseURL);
|
||||
} catch (MalformedURLException e) {
|
||||
System.err.println("Bad avatar base URL provided: " + e.getMessage());
|
||||
return;
|
||||
}
|
||||
Map<String, String> usersAndAvatars = getExportParser().getAllUsersAndAvatars();
|
||||
File destinationFolderFile = null;
|
||||
if (destinationFolder != null) {
|
||||
destinationFolderFile = new File(destinationFolder);
|
||||
} else {
|
||||
destinationFolderFile = new File(".");
|
||||
}
|
||||
if (!destinationFolderFile.exists()) {
|
||||
System.out.println("- Creating destination folder: " + destinationFolderFile.getAbsolutePath());
|
||||
destinationFolderFile.mkdir();
|
||||
} else if (!destinationFolderFile.isDirectory()) {
|
||||
System.err.println("Provided destination is not a folder: " + destinationFolderFile.getAbsolutePath());
|
||||
}
|
||||
for (String username : usersAndAvatars.keySet()) {
|
||||
String avatarURLSuffix = usersAndAvatars.get(username);
|
||||
if (avatarURLSuffix != null) {
|
||||
System.out.println("- Saving avatar of user: " + username);
|
||||
try {
|
||||
URL avatarURL = new URL(baseURL, avatarURLSuffix);
|
||||
InputStream avatarIS = avatarURL.openStream();
|
||||
File destinationFile = new File(destinationFolder, username);
|
||||
FileOutputStream destinationFOS = new FileOutputStream(destinationFile);
|
||||
IOUtils.copy(avatarIS, destinationFOS);
|
||||
destinationFOS.close();
|
||||
if (destinationFile.exists() && destinationFile.length() == 0) {
|
||||
System.out.println(" -- Deleting zero bytes length avatar for user: " + username);
|
||||
destinationFile.delete();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
System.out.println("--- Avatar URL not provided for user: " + username);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ExportParser getExportParser() {
|
||||
return exportParser;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
String serverURL = null;
|
||||
String kcServerURL = null;
|
||||
String username = null;
|
||||
String password = null;
|
||||
String realm = null;
|
||||
FileInputStream exportFileFIS = null;
|
||||
String avatarBaseURL = null;
|
||||
String avatarExportFolder = null;
|
||||
if (args.length < 5) {
|
||||
System.err.println("Missing params.\n\nUsage: " + ClientsCreatorFromExport.class.getName()
|
||||
+ " [serverURL] [username] [password] [realm] [export_file]");
|
||||
+ " [keycloak_serverURL] [username] [password] [realm] [export_file] [[avatar_base_url] [avatar_export_folder]]");
|
||||
|
||||
return;
|
||||
} else {
|
||||
serverURL = args[0];
|
||||
kcServerURL = args[0];
|
||||
username = args[1];
|
||||
password = args[2];
|
||||
realm = args[3];
|
||||
exportFileFIS = new FileInputStream(args[4]);
|
||||
if (args.length > 5) {
|
||||
avatarBaseURL = args[5];
|
||||
}
|
||||
if (args.length == 7) {
|
||||
avatarExportFolder = args[6];
|
||||
}
|
||||
}
|
||||
ClientsCreatorFromExport creator = new ClientsCreatorFromExport(serverURL, username, password, realm,
|
||||
ClientsCreatorFromExport creator = new ClientsCreatorFromExport(kcServerURL, username, password, realm,
|
||||
exportFileFIS);
|
||||
|
||||
Date start = new Date();
|
||||
|
@ -217,10 +274,14 @@ public class ClientsCreatorFromExport {
|
|||
creator.createClients();
|
||||
System.out.println("\n\n * * * Mapping users to client's roles * * *");
|
||||
creator.mapUsersWithRolesToClients();
|
||||
if (avatarBaseURL != null) {
|
||||
System.out.println("\n\n * * * Exporting user's avatar * * *");
|
||||
creator.saveAvatarsLocally(avatarBaseURL, avatarExportFolder);
|
||||
}
|
||||
Date end = new Date();
|
||||
System.out.println("Elapsed seconds: " + new Long(end.getTime() - start.getTime()).floatValue() / 1000);
|
||||
System.out.println("\nClients: " + creator.getExportParser().getAllContexts().size());
|
||||
System.out.println("Users: " + creator.getExportParser().getAllUsers().size());
|
||||
System.out.println("Users: " + creator.getExportParser().getAllUsersAndAvatars().size());
|
||||
Map<String, Map<String, Set<String>>> ucar = creator.getExportParser().getAllUserContextsAndRoles();
|
||||
float rolesPerUserMean = 0;
|
||||
for (String user : ucar.keySet()) {
|
||||
|
@ -228,6 +289,7 @@ public class ClientsCreatorFromExport {
|
|||
rolesPerUserMean += ucar.get(user).get(context).size() + 1;
|
||||
}
|
||||
}
|
||||
System.out.println("Roles per user mean: " + rolesPerUserMean / creator.getExportParser().getAllUsers().size());
|
||||
System.out.println(
|
||||
"Roles per user mean: " + rolesPerUserMean / creator.getExportParser().getAllUsersAndAvatars().size());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,12 +27,12 @@ public class ExportParser {
|
|||
rootNode = (ArrayNode) objectMapper.readTree(exportFileFIS);
|
||||
}
|
||||
|
||||
public Set<String> getAllUsers() {
|
||||
Set<String> users = new TreeSet<>();
|
||||
public Map<String, String> getAllUsersAndAvatars() {
|
||||
Map<String, String> users = new TreeMap<>();
|
||||
Iterator<JsonNode> arrayIterator = rootNode.elements();
|
||||
while (arrayIterator.hasNext()) {
|
||||
JsonNode entry = arrayIterator.next();
|
||||
users.add(entry.get("username").asText());
|
||||
users.put(entry.get("username").asText(), entry.get("avatarURL").asText());
|
||||
}
|
||||
return users;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,716 @@
|
|||
[
|
||||
{
|
||||
"username": "20158",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=GVAKASx5ucYDY6dM4baHyzjSDd4%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "nikolaos.drakopoulos",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=gc9vDHJhL%2F5BNmQ4dq2iQ8ZJTlU%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "roberto.cirillo",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=8iuD%2B6QNL9RGtvmP1nas%2Fp1ZAG4%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"VRE-Manager",
|
||||
"DataMiner-Manager"
|
||||
],
|
||||
"/gcube/devsec": [
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devNext/NextNext": [],
|
||||
"/gcube/devNext": [
|
||||
"VO-Admin"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "alessia.bardi",
|
||||
"avatarURL": "/image/user_female_portrait?img_id=0&img_id_token=21xFZ3FJ25JGakekjYR%2F10PbKmA%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "aureliano.gentile",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=S2oqdVxZH9Bz5eqjQqjniVRBId0%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "ngalante",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=1SSKciv1WOE9PwogK2jCgCVyzo8%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "nicolas.bailly",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=GFTwsmfU%2BAHJK47RuFU4BELipvY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "taha.imzilen",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=ukplcF%2B7pSktjCHiIiEbTctAiho%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "lucio.lelii",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=jBlUJmNkNJdSyeYwMyzfY8Om5iY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [
|
||||
"Infrastructure-Manager"
|
||||
],
|
||||
"/gcube/devsec/Mon20July1612": [
|
||||
"VRE-Manager"
|
||||
],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"VRE-Manager",
|
||||
"DataMiner-Manager"
|
||||
],
|
||||
"/gcube/devsec": [
|
||||
"VRE-Manager",
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"DataMiner-Manager"
|
||||
],
|
||||
"/gcube/devNext": [
|
||||
"VRE-Designer",
|
||||
"VRE-Manager",
|
||||
"VO-Admin"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "paul.taconet",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=JEUwZOo2DHobPqAnKqmpsZOEoxs%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "gianpaolo.coro",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=HwYlOTPpwzCNdt5OajuCpTK%2FNEY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": [
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devNext": [],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"Data-Manager",
|
||||
"Catalogue-Admin",
|
||||
"DataMiner-Manager"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "ciro.formisano",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=lch2BNnJMQ1LoyIoflynr0PTzjs%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "valentina.marioli",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=30175726&img_id_token=OWgCtyZGGumk1lExq3%2BY1a2OYsY%3D&t=1601546256284",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "andrea.dellamico",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=deHZlJ%2BaL6rODb2mnPt%2FyRPewGo%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext/NextNext": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "panagiota.koltsida",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=6e38INmp5qj6fkmicQ5mlYdKBaY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": [
|
||||
"Data-Manager",
|
||||
"VRE-Designer"
|
||||
],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "konstantinos.giannousis",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=%2BcLoGMO%2BW7Y8SBqrFP3l6erqUpk%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "tommaso.piccioli",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=wj5tj3LVRYfyeXDwopaT1bXxxuc%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "paolo.manghi",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=sPbxHcTNi1tSv4YMcnj%2FZ7rK60c%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "emmanuel.blondel",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=Zc7O0B4L7V49mTzTgQLh%2FoVr580%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "francesco.mangiacrapa",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=9MfQjjk3%2FIzIVQtsMah83E1z4vs%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"Catalogue-Admin"
|
||||
],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"Catalogue-Admin"
|
||||
],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "ashtoash",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=IjjGs6OZycGOAwrv4W%2FxzyrmmRQ%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "anton.ellenbroek",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=qtIE5HN%2BAE23bmg7Ox9gTfvAyF4%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "pasquale.pagano",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=JO2uil%2BuyGlAUh27tzFHwPS1jcU%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": [
|
||||
"VRE-Manager",
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"Data-Manager",
|
||||
"Catalogue-Admin"
|
||||
],
|
||||
"/gcube/devNext": [
|
||||
"VO-Admin"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "leonardo.candela",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=xu2bKoUrhElmR%2FceOxVnTbBaQEQ%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"VRE-Designer",
|
||||
"VRE-Manager",
|
||||
"Catalogue-Admin"
|
||||
],
|
||||
"/gcube/devsec": [
|
||||
"VRE-Manager",
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devNext": [],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"VRE-Manager",
|
||||
"Catalogue-Admin"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "donatella.castelli",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=l5pzxpmxa98uH0RDoJcYiEd9OYs%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "julien.barde",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=Eouucnhg7yD%2F6cg%2FpeEHD%2FIQa%2Bo%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "giancarlo.panichi",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=4Xwy%2B61I3rSZ7Qt018DOW4TH%2Fjo%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [
|
||||
"Infrastructure-Manager"
|
||||
],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"DataMiner-Manager"
|
||||
],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"Data-Manager",
|
||||
"VRE-Manager",
|
||||
"Catalogue-Editor",
|
||||
"DataMiner-Manager"
|
||||
],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "luca.frosini",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=%2BFIqz%2FIogZCjrbfmSuo%2FHBp4Pso%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [
|
||||
"VRE-Manager",
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"Catalogue-Admin"
|
||||
],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": [],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"Catalogue-Admin",
|
||||
"Accounting-Manager"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "fabio.sinibaldi",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=LR2wXrHdP3qSXMX8fLr6NQNlQGc%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"Catalogue-Admin"
|
||||
],
|
||||
"/gcube/devsec": [
|
||||
"VO-Admin",
|
||||
"Catalogue-Admin"
|
||||
],
|
||||
"/gcube/devNext": [
|
||||
"VRE-Designer",
|
||||
"VRE-Manager",
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"Catalogue-Admin"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "yannis.marketakis",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=4gAiTy2YF6ABHuSYiagvr6Ku%2FhI%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": [],
|
||||
"/gcube/devNext/NextNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "paolo.fabriani",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=Ysyc1VD6Srsf8UK2GSX6pHL1Ik0%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "nikolas.laskaris",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=n9QaEgg6H4PlPbWhoD6lxvKR3SY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "massimiliano.assante",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=39185507&img_id_token=51%2BzKsVudKPCTFBxV%2FEgNGG6D7M%3D&t=1601545765713",
|
||||
"contexts": {
|
||||
"/gcube": [
|
||||
"Infrastructure-Manager",
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"VRE-Manager"
|
||||
],
|
||||
"/gcube/devsec/Mon20July1612": [
|
||||
"VRE-Manager",
|
||||
"Catalogue-Editor"
|
||||
],
|
||||
"/gcube/devsec": [
|
||||
"VRE-Manager",
|
||||
"VO-Admin"
|
||||
],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"VRE-Manager"
|
||||
],
|
||||
"/gcube/devNext": [
|
||||
"Infrastructure-Manager",
|
||||
"VRE-Manager",
|
||||
"VO-Admin"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "gkakas",
|
||||
"avatarURL": "/image/user_female_portrait?img_id=0&img_id_token=6e3KM5BiPinMkJsAosAMujtb0YQ%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "gantzoulatos",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=PSQTz6tY9hgoeIaam8tiDojQV5w%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "enrico.anello",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=lNQ8%2FL8Rf5zQNxEC5t%2FWU1xnsiY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "mister.orange",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=G8CostRyxLg9Jfw5xuzWYXebigc%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "mister.blue",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=4dk76aMw%2FzCHIOh1d7VjxRkVLLU%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "kostas.kakaletris",
|
||||
"avatarURL": "/image/user_female_portrait?img_id=0&img_id_token=CmX36QiuYR0XMgkdzXDyZbun0h8%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"Infrastructure-Manager"
|
||||
],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "leviwesterveld",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=nfTI78XqYjxCaJ43Hub0YQVDqgc%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "dataminer",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=apVwzKiExbkgLQ1V5eUvkDIQLAA%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "andrea.rossi",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=30110057&img_id_token=gAJ4uVWTA74xwQ6%2FCA72RRinysY%3D&t=1601545799059",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"VRE-Manager",
|
||||
"Catalogue-Editor"
|
||||
],
|
||||
"/gcube/devsec/Mon20July1612": [
|
||||
"VRE-Designer",
|
||||
"Catalogue-Editor"
|
||||
],
|
||||
"/gcube/devsec": [
|
||||
"VRE-Designer"
|
||||
],
|
||||
"/gcube/devNext": [],
|
||||
"/gcube/devNext/NextNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "efthymios",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=MY02p044ame0ejhM8dHdeKaprlg%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "miles",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=yzg255CrF36xGieEz5IWD54qalM%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "kgiannakelos",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=1TyGvJOiGOVkdtgRNdowT5XKu1w%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "grsf.publisher",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=CkQQapbhbcFel5qiLHTg1aCx4%2Fo%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devNext": [],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"Catalogue-Admin"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "jsonws.user",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=25603407&img_id_token=WDv6qtAFEFbm%2FvzrRoAmgCx3iwU%3D&t=1601546256419",
|
||||
"contexts": {
|
||||
"/gcube": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "ay",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=x4pAA%2BKtkVNr8VayfKsbMha0XFc%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "salvam",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=GlygbuzwA6tbfnCF5UjvoHhpuhw%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "nikos",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=nJIyOwnlx7KuQy7Tmv1WiM%2BPLu0%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "statistical.manager",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=tsAwwpZRPUiFm72s51ymLazpOfU%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext/NextNext": [
|
||||
"Data-Manager"
|
||||
],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "manuele.simi",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=31248083&img_id_token=TwIodQXO8q%2Bg3%2BPM8ftbdCwFUiI%3D&t=1601546256438",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devNext/NextNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "vfloros",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=fX1fd9w4f4pcJ0V6%2F8m6cv0GQ14%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"Catalogue-Editor"
|
||||
],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "rob.knapen",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=LcOEVy85EAy8P5MVf%2Bj8CJFemHY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "mister.white",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=CBG%2BYgIMvWXE5M1KdNR6qrAqjRY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devNext/NextNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "chiamag",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=3SRUpAosZFPDtV0yNsN3uAGcd%2Fw%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "mauro.mugnaini",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=39131064&img_id_token=3hw14Gvh724icS9X8KOpGQ%2BbOUk%3D&t=1601546256457",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/Mon20July1612": [
|
||||
"VRE-Manager"
|
||||
],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": [],
|
||||
"/gcube/devNext": [],
|
||||
"/gcube/devNext/NextNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "pino",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=yoymRDXOhQOX6vc6cORHcs%2BHpfo%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [
|
||||
"Data-Manager",
|
||||
"DataMiner-Manager"
|
||||
],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "marco.lettere",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=39131005&img_id_token=4TrJGGgbzLAKZ1KT5khri31hB3Q%3D&t=1601546256464",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "mauro.mugnaini.altro",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=RhM1gdNIzW20YmKJSSRs36aejvY%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "mugna.inimauro",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=3EQb2wggDMC%2BwzPfPR5tT7ixhCc%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "ginone.stillone",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=Y%2F76Ld%2F0auCkf8vGm0YX3JLjkds%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devNext": [],
|
||||
"/gcube/devNext/NextNext": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "vincenzo.cestone",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=yvmt3fUAfqVZmeqZCb9mTwa9hxk%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "dicondina.tiziano",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=EnDGhzwqlemN%2BG3c1v%2B5a5SExtE%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "vietnam",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=LiCO1c%2FDdD4ehe%2FZYNr2gAvFb40%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"username": "massimiliano.assante.1",
|
||||
"avatarURL": "/image/user_male_portrait?img_id=0&img_id_token=xQ0GKEA%2Fiu1I3PeGSpWRHZ7OK%2Bk%3D&t=1601290149069",
|
||||
"contexts": {
|
||||
"/gcube": [],
|
||||
"/gcube/devsec/devVRE": [],
|
||||
"/gcube/devsec": []
|
||||
}
|
||||
}
|
||||
]
|
Loading…
Reference in New Issue