Table of Contents
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 TLDWHERE email LIKE '%@domain.tld
pour filtrer un domaine plus précisWHERE 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 unid 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 colonnessqlite> 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