Added avatar export in local folder support. Resolves issue #19891

This commit is contained in:
Mauro Mugnaini 2020-10-06 13:05:38 +02:00
parent cb4dcd876b
commit 9ae47335a5
4 changed files with 793 additions and 15 deletions

View File

@ -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).

View File

@ -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());
}
}

View File

@ -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;
}

View File

@ -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": []
}
}
]