YunoHost-Apps / dato_ynh

Dato package for YunoHost
GNU Affero General Public License v3.0
6 stars 1 forks source link

Pas d'accès à la page principale de dato #11

Closed jlnbdt closed 3 years ago

jlnbdt commented 3 years ago

Bonjour,

J'ai installé avec succès un serveur couchdb (sur couchdb.mondomaine.tld) ainsi que dato (sur dato.mondomaine.tld), avec l'autosync. Si j'ai bien compris, pour utiliser dato, j'ai le choix entre :

Après avoir tenté la première solution, la connexion à dato aboutit à une page tournant en rond, et indiquant "Loading data app…".

Quant à l'accès à dato.mondomain.tld/users/, après saisie du login/mot de passe admin, la page affichée est simplement grise (aucun texte), avec un quart de cercle jaune en bas à droite me permettant de me déconnecter.

Merci :-)

eauchat commented 3 years ago

Bonjour @jlnbdt,

Merci pour le rapport de bug, et désolé pour le délai de réponse. Alors en effet, il y avait un bug dans dato que ça m'a permis de corriger.

Si tu mets l'application à jour (version 1.5.16), ça devrait fonctionner.

Une note sur les utilisateurs.

L'utilisateur administrateur de couchdb devrait pouvoir accéder à tout, sans avoir besoin de lui attribuer aucun rôle, il me semble, mais je n'ai jamais testé. Si tu peux ouvrir la console du navigateur et envoyer les logs peut-être je peux essayer de comprendre pourquoi ça bloque au chargement de l'application. Mais je te déconseille de te loguer sur dato avec l'utilisateur admin de couchdb, à part sur la page "/users/".

Merci pour la patience que tu as eu devant la suite de problèmes :) Tes retours sont bien utiles pour le développement ;)

jlnbdt commented 3 years ago

Bonjour @eauchat,

C'est moi qui te remercie pour ces explications claires et tout ce travail !

La bonne nouvelle est qu'effectivement, la page /users/ fonctionne bien désormais. Elle m'affiche les utilisateurs pré-existants (que j'avais créés manuellement) et j'ai pu en créer un nouveau.

La moins bonne nouvelle est que je ne parviens à me connecter avec aucun de ces utilisateurs, puisque j'obtiens le message Internal error attempting to login to dato. J'ai remarqué que lorsque je lançais sudo yunohost service reload dato j'obtenais un log plutôt instructif :

Sep 08 22:52:44 dato[5344]:   username: 'julien',
Sep 08 22:52:44 dato[5344]:   status: 'error',
Sep 08 22:52:44 dato[5344]:   couchResponse: {
Sep 08 22:52:44 dato[5344]:     error: 'forbidden',
Sep 08 22:52:44 dato[5344]:     reason: 'You are not allowed to access this db.'
Sep 08 22:52:44 dato[5344]:   }
Sep 08 22:52:44 dato[5344]: }
Sep 08 22:52:44 dato[5344]: electrode | [GET] /login/?status=error&url=/
Sep 08 22:54:24 dato[5344]: electrode | [POST] /login/?url=/
Sep 08 22:54:24 dato[5344]: electrode | ✖ Unknown error trying to login 'jln':
Sep 08 22:54:24 dato[5344]: {
Sep 08 22:54:24 dato[5344]:   username: 'jln',
Sep 08 22:54:24 dato[5344]:   status: 'error',
Sep 08 22:54:24 dato[5344]:   couchResponse: {
Sep 08 22:54:24 dato[5344]:     error: 'forbidden',
Sep 08 22:54:24 dato[5344]:     reason: 'You are not allowed to access this db.'
Sep 08 22:54:24 dato[5344]:   }
Sep 08 22:54:24 dato[5344]: }
Sep 08 22:54:24 dato[5344]: electrode | [GET] /login/?status=error&url=/

Bien sûr, mes utilisateurs ont bien le rôle dato

image

Si je tente d'accéder à l'app avec le compte admin de couchdb, je retombe sur la page qui tourne "en boucle" indiquant "Loading dato app". La console du navigateur indique ceci :

image

Je lis "Could not find configuration for database dato", mais il n'y a effectivement aucune base nommée ainsi sur mon serveur CouchDB. C'est d'ailleurs un truc que je n'ai pas compris : l'installation de dato avec Yunohost demande de renseigner l'adresse du serveur si l'on veut activer l'autosync, mais pas le nom de la base à créer ou utiliser.

J'espère que ces quelques infos seront de nature à t'aider :-)

Edit : alors en fait, la connexion avec "admin" se passe très bien si je ne suis pas dans un onglet privé ! En revanche, avec "admin-dato" (créé lors de l'installation de l'app dato avec Ynh) ou bien avec les deux autres utilisateurs qui n'ont que le rôle "dato" (jln et julien), le problème demeure.

eauchat commented 3 years ago

Alors, j'ai l'impression qu'il y a plus d'un problème, selon ce que tu décris.

  1. Les logs côté serveur:

    Sep 08 22:54:24 dato[5344]: electrode | ✖ Unknown error trying to login 'jln':
    Sep 08 22:54:24 dato[5344]: {
    Sep 08 22:54:24 dato[5344]:   username: 'jln',
    Sep 08 22:54:24 dato[5344]:   status: 'error',
    Sep 08 22:54:24 dato[5344]:   couchResponse: {
    Sep 08 22:54:24 dato[5344]:     error: 'forbidden',
    Sep 08 22:54:24 dato[5344]:     reason: 'You are not allowed to access this db.'
    Sep 08 22:54:24 dato[5344]:   }
    Sep 08 22:54:24 dato[5344]: }

    Je pense que cette erreur vient d'un changement dans couchdb. Avant par défaut un utilisateur pouvait accéder à son propre profil dans la database "_users", ce n'est plus le cas par défaut. J'ai posté une mise à jour de dato pour que l'application l'active lors de l'installation. Mettre à jour l'app ne le fera pas, donc tu peux soit désinstaller et réinstaller dato, soit tu peux faire le changement manuellement, il suffit d'éditer le fichier /opt/couchdb/etc/local.d/dato.ini et d'y ajouter les lignes suivantes:

    [couchdb]
    users_db_security_editable = true

    et ensuite ajouter les rôles "dato" et "dato-admin" à la section "members" des permissions de la base de donnée "_users" (en utilisant fauxton ou curl).

  2. Les logs côté navigateur:

Alors, côté navigateur, il y a un autre soucis. C'est un bug que je connais, mais auquel je n'ai pas encore trouvé de solution. J'ai l'impression que c'est un bug du navigateur, mais peut-être y a quelque chose que je ne comprends pas quelque part. C'est le indexed_db_went_bad. Il semble que la base de donnée se soit corrompue et ne marche plus. Ça m'arrive de temps en temps. La seule solution que j'ai trouvé jusqu'à présent c'est d'aller dans les préférences de firefox, ouvrir "Privacy & Security > Cookies and Site Data > Manage Data" et de supprimer les données pour l'url de dato. À faire avec précaution, parce que ça supprime toutes les données créées dans dato. D'où l'intérêt quelles soient toujours synchronisées vers couchdb, ce qui permettra au navigateur de réimporter tout au prochain login. Additionnellment, tu peux aussi recharger l'application avec ctrl+shift+r pour supprimer le cache.

Sinon, le fait que tu ne doive pas renseigner de database est normal. Quand tu créera une base de donnée dans dato, en bas de la fenêtre tu verra qu'il rempli automatiquement l'addresse de la base de donnée correspondante sur couchdb, et il la crée automatiquement dans couchdb avec comme nom "username--dbname".

jlnbdt commented 3 years ago

Malheureusement ça ne fonctionne toujours pas après la mise à jour de l'application (désinstallation/réinstallation ; users_db_security_editable est bien à true)

J'ai nettoyé CouchDB de ses utilisateurs et bases existants (sauf le compte admin bien sûr).

Premier constat : l'utilisateur admin_dato créé lors de l'installation (il apparaît bien dans la base _users) n'a toujours pas accès à la page /users/ ; les logs sont inchangés

Sep 09 11:13:59 dato[5196]: electrode | [POST] /login/?url=/users/
Sep 09 11:13:59 dato[5196]: electrode | ✖ Unknown error trying to login 'admin_dato':
Sep 09 11:13:59 dato[5196]: {
Sep 09 11:13:59 dato[5196]:   username: 'admin_dato',
Sep 09 11:13:59 dato[5196]:   status: 'error',
Sep 09 11:13:59 dato[5196]:   couchResponse: {
Sep 09 11:13:59 dato[5196]:     error: 'forbidden',
Sep 09 11:13:59 dato[5196]:     reason: 'You are not allowed to access this db.'
Sep 09 11:13:59 dato[5196]:   }
Sep 09 11:13:59 dato[5196]: }
Sep 09 11:13:59 dato[5196]: electrode | [GET] /login/?status=error&url=/users/

Deuxième constat : je peux accéder à /users/ avec admin et y créer des utilisateurs (qui apparaissent bien dans _users également), mais ceux-ci n'ont toujours pas accès à l'appli (même logs que précédemment)

eauchat commented 3 years ago
jlnbdt commented 3 years ago

Si tu ouvres la database "_users" dans fauxton et que tu vas dans "permissions", il y'a bien les rôles "dato" et "dato-admin" listés dans la section membres (en bas à droite) ? Si c'est pas le cas, ajoute les (et si tu peux me le dire c'est cool, parce que j'ai du merder quelque chose dans le dernier patch).

Effectivement, ces rôles n'y sont pas ! Mais j'ai un message d'erreur si je veux les ajouter : image

Est-ce que tu peux recharger couchdb, tu devrais pouvoir le faire avec: sudo yunohost service restart couchdb je pense. (Au cas où couchdb n'as pas pris en compte les changements.)

Je tenterai cela lorsque j'aurais résolu le problème précédent :)

Si tu as toujours le log indexed_db_went_bad dans le navigateur, est-ce que tu peux essayer avec un autre navigateur voir si c'est différent ? (Ou même juste ouvrir firefox avec un autre profile.)

Après plusieurs tests, je te confirme ce que j'avais indiqué plus haut : ce problème ne survient (et ne continu à survenir) que sous un profil privé, et non pas sous un profil normal.

Ça ne devrait pas avoir d'impact dans cette situation je pense, mais je le dis au cas où: si tu ouvres l'"url" about:serviceworkers dans firefox et clique "unregister" sur le worker de dato pour ton domaine ça le forcera à rerécupérer l'application complète depuis le serveur. Je ne pense pas que ce soit hyper utile avec les problèmes que tu as, mais on sait jamais. C'est un moyen de forcer une mise à jour / rafraîchissement de l'interface navigateur avec la dernière version présente sur le serveur.

Je note cela pour plus tard, quand le problème de droits sera résolu. Merci pour cette astuce que je ne connaissais pas !

eauchat commented 3 years ago

Alors si couchdb te laisses pas changer les permissions de la database "_users" ça veut dire qu'il a pas encore pris en compte users_db_security_editable = true. Donc il faut faire: sudo yunohost service restart couchdb et après il te laissera changer les permissions dans "_users". Après ça, tu devrais pouvoir te loguer normalement.

eauchat commented 3 years ago

À noter que, sur le navigateur que j'utilise en général, pas mal de choses sont bloquées et j'ai pas mal d'add-on. Notamment par exemple les service-workers sont bloqués. Pour dato, j'utilise donc un autre navigateur ou profil sans tous ces blocages, parce que sinon l'appli ne fonctionne pas offline notamment. Donc selon les extensions que tu as, peut-être certaines choses empêchent dato de fonctionner normalement. Perso je n'ai jamais investigué quelles extensions posaient problème et pourquoi, je me contente d'utiliser un navigateur clean pour dato. Mais c'est parce que je connais l'app, lui fait confiance, et parce que je l'utilise beaucoup, donc c'est pas gênant pour moi d'avoir à ouvrir un autre navigateur. Après j'ai des amis qui utilisent l'app avec leur navigateur classique pleins d'extensions sans problèmes, donc à toi d'investiguer spécifiquement ton navigateur et extensions.

jlnbdt commented 3 years ago

Ça fonctionne 😄

Je ne suis pas parvenu à relancer le service couchdb (ça échoue et les logs sont obscures), mais en relançant directement /opt/couchdb/bin/couchdb ça a fait l'affaire. C'est un souci qu'il faudra que je ré-investigue…

Mais désormais, j'ai pu accéder à la page users avec l'utilisateur admin_dato, créer un utilisateur julien puis accéder à l'app avec cet utilisateur.

En revanche, ce que je ne pige pas désormais, c'est qu'après avoir créé un nouveau type dans dato, la base julien--dato demeure entièrement vide (sauf erreur de ma part, elle devrait contenir le type, non ?) Sur la page des types, l'icône de synchro (les deux flèches formant un cercle) est grisée et un clic dessus m'indique "The database haven't been set to synchronize with any remote database." Par ailleurs, sur "Data Home Settings", l'adresse du serveur distant est incorrect car il manque un slash entre le nom de domaine et le nom de la base (https://monserveurcouchd.netjulien--dato au lieu de https://monserveurcouchdb.net/julien--dato).

image

Enfin, lorsque j'ouvre une base nouvellement créée dans dato, la synchro ne fonctionne pas.

image

Peut-être préfères-tu que j'ouvre d'autres tickets pour traiter cela…

jlnbdt commented 3 years ago

En réinstallant dato et en n'omettant pas le slash final lors de la saisie du serveur couchdb, tout semble être rentré dans l'ordre ;-)

eauchat commented 3 years ago

Ok, super que ça marche. Merci pour le retour sur l'url. J'ai posté un patch pour supporter aussi le fait de mettre une url sans slash final.

J'espère que toutes ces modifs que j'ai fait sur dato et le paquet dato_ynh fonctionnent bien dans yunohost, parce que je ne suis pas en mesure de tester la partie yunohost actuellement à cause de problèmes avec mon environnement de développement yunohost.

jlnbdt commented 3 years ago

J'espère que toutes ces modifs que j'ai fait sur dato et le paquet dato_ynh fonctionnent bien dans yunohost, parce que je ne suis pas en mesure de tester la partie yunohost actuellement à cause de problèmes avec mon environnement de développement yunohost.

Quelques petits retours là-dessus ci cela peut t'aider : lorsque tu as mis à jour le paquet dato pour Yunohost hier ou avant-hier, je n'ai pas vu cette mise à jour disponible lors d'un update du système. J'ai donc réinstallé l'appli en indiquant directement l'adresse de ce dépôt Github. Toutefois, ce matin, l'update de 1.5.16 vers 1.5.17 est bien apparue dans Yunohost.

J'ai testé de nouveau une installation "fraîche" après avoir pris soin de nettoyer couchdb de ses bases et de ses utilisateurs. J'obtiens différents warnings lors de l'installation de dato, dont un qui peut "faire peur" : 

Warning: [Error] There was an error enabling dato users to access their user profile in couch. You will have to do it manually (check the 'Configure couchdb so that it accepts requests from dato' section in the following page for instructions: https://squeak.eauchat.org/apps/dato/?setups).
Warning: [Error] Here is the error message from couchdb:
Warning: [Error] {"ok":true}

Toutefois l'installation se poursuit sans problème et l'app est bien utilisable.

Il y a d'autres warnings relatifs à quelques dépendances : 

Warning: npm WARN deprecated highlight.js@9.18.5: Support has ended for 9.x series. Upgrade to @latest
Warning: npm WARN deprecated uuid@3.2.1: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
Warning: npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.

Bonne journée

jlnbdt commented 3 years ago

J'ai l'impression qu'au fur et à mesure des différentes installations, les accès par rôles sont redondants :

image

eauchat commented 3 years ago

Alors, pour ce qui est de la première mise à jour qui n'est pas apparue et les suivantes si, c'est normal sans doute parce que j'ai oublié de changer le numéro de version de l'app la première fois, donc le système n'a pas dû détecter qu'il y avait une mise à jour.

Les premiers logs que tu envoie viennent d'une erreur qui devrait être corrigée dans la mise à jour, mais l'erreur était juste de mettre ce log d'erreur alors qu'il n'y a pas d'erreur en fait, donc pas de problème à l'ignorer. — Beaucoup d'erreurs pour une seule phrase ;)

Les warnings lancés par npm ne sont pas un problème, ils viennent de dépendances de dépendances qui ne sont pas à jour. Il faut juste attendre que les mainteneurs des dépendances mettent à jour les paquets qu'ils utilisent.

Et pour le fait que les rôles "dato" et "dato-admin" se rajoutent à chaque installation, oui ce n'est pas très propre, mais c'est la solution temporaire que j'ai choisis. Idéalement il faudrait regarder si les rôles sont déjà présents et ne les ajouter que si nécessaire. Mais je ne pense pas que ce soit un problème pour couchdb, et puis normalement les admin ne devraient pas avoir à installer l'application plusieurs fois. Mais c'est pas super esthétique.

Sinon j'ai finalisé quelques vidéos de tutoriels et uploadé des exemples de configurations. J'écris un post sur le forum yunohost pour l'annoncer tout de suite.

eauchat commented 3 years ago

Est-ce que ce ticket peut être fermé du coup ? Si besoin d'autres peuvent être ouverts pour d'autres soucis avec ce paquet.

jlnbdt commented 3 years ago

Ouaip, je clos le ticket. Merci pour ton support !