Skip to content

Instantly share code, notes, and snippets.

@wixaw
Last active December 20, 2019 07:41
Show Gist options
  • Save wixaw/4b13734d912ece52fae19dd43cfcdbfd to your computer and use it in GitHub Desktop.
Save wixaw/4b13734d912ece52fae19dd43cfcdbfd to your computer and use it in GitHub Desktop.
Management users and projects - sharelatex or overleaf

= order of use

1 - list user : info_user_projets_and_collab.sh

2 - change owner sharing projects : sharelatex-overleaf_replace-project-owner.sh

3 - delete project and user : delete_user_and_projects.sh

#!/bin/sh
mongo sharelatex --eval "var param1='$1'" delete_user_and_project.js
print("##########################################################################");
print("use : sh delete_user_and_projects.sh MailOwner");
print("##########################################################################");
print("Mail User: " + param1);
var listFileRM = []
// On cherche l'utilisateur
var users = db.users.find({
email: param1
})
while (users.hasNext()) {
var userDetail = users.next();
print()
print("*******************************************")
print("Compte sharelatex : " + userDetail.email + " (ID : " + "ObjectId(\"" + userDetail._id + "\"))");
// On cherche ses projets
var projectsList = db.projects.find({
"owner_ref": userDetail._id
});
while (projectsList.hasNext()) {
projet = projectsList.next();
if (projet.archived == true) {
var archived = "--> Archivé";
} else {
var archived = "";
}
print(" Projet : " + projet.name + " (ID : " + projet._id + ") ", archived);
for (var collab in projet.collaberator_refs) {
var emailcollab = db.users.find({
"_id": projet.collaberator_refs[collab]
});
// On vérifie qu'il n'y a pas de projet avec des collabs, auquel cas on stop
while (emailcollab.hasNext()) {
unemail = emailcollab.next();
print(" Collab : " + unemail.email + " (ID : " + unemail._id + ")");
throw new Error("Impossible de supprimer le compte, il a encore des projets partagés");
}
}
listFileRM.push("rm -rf /local/sharelatex/data/user_files/" + projet._id + "*");
// On supprime le projet
db.projects.deleteOne({
_id: projet._id
});
print(" -> Projet supprimé sur la base de donnees")
}
print("*******************************************")
print();
// On supprime le compte
db.users.deleteOne({
_id: userDetail._id
});
print("Le compte a bien été supprimé");
print("*******************************************")
print();
print("Commandes à executer pour supprimer les fichiers restant: ")
for (val of listFileRM) {
print(val);
}
print();
}
print("##########################################################################");
print("use : sh info_user_projets_and_collab.sh MailOwner");
print("##########################################################################");
// On cherche l'utilisateur
var users = db.users.find({
email: param1
})
while (users.hasNext()) {
var userDetail = users.next();
print()
print("*******************************************")
print("Compte sharelatex : " + userDetail.email + " (ID : " + "ObjectId(\"" + userDetail._id + "\"))");
// On cherche ses projets
var projectsList = db.projects.find({
"owner_ref": userDetail._id
});
while (projectsList.hasNext()) {
projet = projectsList.next();
if (projet.archived == true) {
var archived = "--> Archivé";
} else {
var archived = "";
}
print(" Projet : " + projet.name + " (ID : " + projet._id + ") ", archived);
for (var collab in projet.collaberator_refs) {
var emailcollab = db.users.find({
"_id": projet.collaberator_refs[collab]
});
while (emailcollab.hasNext()) {
unemail = emailcollab.next();
print(" Collab : " + unemail.email + " (ID : " + unemail._id + ") ");
print(" -> ( sh sharelatex-overleaf_replace-project-owner.sh " + projet._id + " " + unemail._id + ")");
}
}
print()
}
print("##########################################################################");
}
#!/bin/sh
mongo sharelatex --eval "var param1='$1'" info_user_projets_and_collab.js
print("##########################################################################");
print("use : sh sharelatex-overleaf_replace-project-owner.sh IDProject IDNewOwner");
print("##########################################################################");
if (!param2) {
throw new Error("nothing user defined");
}
print("Search ID " + param1);
print("New Owner ID " + param2);
// On cherche le projet
var selectProject = db.projects.find({
_id: ObjectId(param1)
});
// On le traite
while (selectProject.hasNext()) {
var projet = selectProject.next();
print();
print("*******************************************");
print("Project name : " + projet.name + " (IDproject : " + "ObjectId(\"" + projet._id + "\"))");
var oldOwner = db.users.find({
_id: projet.owner_ref
})
while (oldOwner.hasNext()) {
var user = oldOwner.next();
print("Old Owner : " + user.email + " (IDowner : " + "ObjectId(\"" + user._id + "\"))");
}
var valid = false;
var newOwner = db.users.find({
_id: ObjectId(param2)
})
while (newOwner.hasNext()) {
var user = newOwner.next();
print("New Owner : " + user.email + " (IDowner : " + "ObjectId(\"" + user._id + "\"))");
valid = true;
}
if (valid == false) {
throw new Error("probleme avec le nouvel owner");
}
// On execute la modification en BD
db.projects.updateOne({
_id: ObjectId(param1)
}, {
$set: {
owner_ref: ObjectId(param2)
}
});
print("##########################################################################");
print()
}
#!/bin/sh
mongo sharelatex --eval "var param1='$1';param2='$2'" sharelatex-overleaf_replace-project-owner.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment