On reprend quelques années plus tard avec l'aide de notre ami Gemini
Il faut reconnaître que ça va plus vite
Le mot de passe d'admin c'est az
Pour le récupérer il faut faire quelques manipulations le plus simple que j'ai trouvé c'est de repousser le fichier admin_sec_password à son emplacement sinon ça demande des manipulations un an plus finir parce que le mot de passe élu dans le fichier déjà crypté et puis placer dans un secret de cœur donc il faut accéder au container bref c'est galère
Le mot de passe de user kriko c'est ganja
Pour le récupérer faut aller bidouiller en base de données
Au travers du shell dans le container
venv/bin/py4web shell apps/_default
puis
(InteractiveConsole)
>>> from apps.common import db , auth
from apps.common import db , auth
from pydal.validators import CRYPT # 1. Récupérer l'utilisateur
user = db(db.auth_user.email == "stephane.krikorian@gmail.com").select().first()
# 2. Hacher explicitement le mot de passe
crypt = CRYPT()
hashed_password = str(crypt("NouveauMotDePasse123")[0])
# Vérification : hashed_password doit maintenant commencer par "pbkdf2:..." ou "sha512:..."
print(hashed_password)
# 3. Mettre à jour et enregistrer
user.update_record(password=hashed_password)
db.commit()
--------------
pour creer le user
user_id = db.auth_user.insert(
username = "kriko",
email="stephane.krikorian@gmail.com",
first_name="Stéphane",
last_name="Krikorian",
sso_id="", # Sera mis à jour automatiquement par Google SSO lors du prochain login
)
db.commit()
print(f"Utilisateur créé avec l'ID : {user_id}")
puis faire la manip avec le mot de passe chiffré (voir avant)
Notes importantes
1/ pour filtrer qui se connecte il ne faut pas ajouter de controle dans le code genre
#if "manager" not in groups.get(auth.get_user()["id"]):
# redirect(URL("auth/logout"))
ou bien
#if "manager" not in groups.get(auth.get_user()["id"]):
# redirect(URL("not_authorized"))
2/ j'ai du modifier (gemini) l'enregistrement du plugin dans common.py
pour qu'il demande un user et non pas utiliser toujours le meme.
il faut surcharger le plugin
a voir si ca ne le fait pas car c'est du spécifique.
----------------
données migrate etc ...
Une incompatibilité de version avec une version trop ancienne de postgres on fait tourner en rond pendant longtemps.
La mécanique que je comprends un peu mieux est la suivante
Ce qui est défini dans le fichier models.py est dans le langage py4web e c'est-à-dire en pydal.
Pour faire une bonne migration de données il faut laisser le flag migrate= True
Et supprimer tous les fichiers databases/nomdela table.table
Le démarrage du serveur py4web il recrée physiquement dans la base de données postgres
Il y a aussi un flag fake_migrate à n'utiliser qu'une seule fois si il gueule parce que la table est déjà présente.
Et un fonctionnement plus simple pour maintenir en synchro l'abstraction py4web et la base de données
Ainsi que le fichier password.txt se trouve bien au-dessus du répertoire apps
Ça doit bien marcher après
2/ je fais une montée de version Python 3.14
Pour éviter le problème d'espace disque j'ai passé la rotation des logs à 5 jours dans l'interface d'admin dans la partie advanced. On verra si ça fonctionne sinon il faudra ouvrir un ticket
Ensuite j'ai dû modifier dans environnement la version de Python
J'ai supprimé à la main dans le répertoire. Local/ lib tous les modules python installés (site-packages)
Ensuite j'ai fait l'installation avec pip de py4web et de psycopg2
python3 -m pip install --upgrade py4web --no-cache-dir --user
python3 -m pip install --upgrade psycopg2 --no-cache-dir --user
No comments:
Post a Comment