2 Nettoyage des comptes Gitea
Darks edited this page 2019-11-21 10:16:46 +01:00
This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

À propos du spam

Il peut arriver qu'on se prenne une vague de spam dans les inscriptions du Gitea (tant qu'elles seront ouvertes). Cette page documente rapidement comment supprimer le gros des emmerdeurs.

Attention! Toujours effectuer un backup et un SELECT avant tout DELETE et vérifier que c'est ok! Ceinture et parachute avant tout!

Procédure complète

ssh user@gitea.planet-casio.com # On se loggue au VPS
user ~ $ sudo su gitea
gitea /home/user $ cd
gitea ~ $ cp data/gitea.db data/gitea.db.bck # Parachute
gitea ~ $ sqlite3 data/gitea.db # Ouverture de la porte
> SELECT name FROM user WHERE 1 = 2 LIMIT 5; # On resserre la ceinture
> DELETE FROM user WHERE 1 = 2; # On saute
> .exit # Atterissage

Quelques WHERE pas trop mals

  • WHERE email LIKE '%@%.tld' pour filter un TLD
  • WHERE email LIKE '%@domain.tld pour filtrer un domaine plus précis
  • WHERE created_unix = last_login_unix AND num_repos = 0 pour supprimer les comptes qui se sont jamais loggués. Attention à bien ajouter la condition sur le nombre de repos car certains comptes ont été migrés à la main et se sont jamais connectés.
  • WHERE is_active = 0 pour supprimer tous les comptes non-activés (peut se faire depuis le panel admin)
  • WHERE num_stars + num_repos + num_followers + num_following = 0 à combiner avec un id NOT IN (id1, id2) pour éviter de supprimer les comptes légitimes. Assez efficace dans la plupart des cas.

J'insiste sur les bretelles et le parachute : on est en prod donc on fait attention.

En cas de pépin

On se rend compte qu'un compte est manquant un peu après. Ah la boulette. Normalement en suivant ça on est ok :

  • ouvrir le backup
  • sqlite> .headers on pour activer le nom des colonnes
  • sqlite> SELECT * FROM user WHERE name = "pseudo" et copier les headers et données dans un coin
  • fermer le backup
  • modifier les headers et la data pour que l'insertion soit syntaxiquement valide (guillemets pour les strings, virgules de séparation, etc)
  • ouvrir la prod
  • INSERT INTO user (col1, col2, …) VALUES (val1, "val2", …);
  • vérifier que tout est en ordre