[Resolved] Change where goes Nextcloud after logout

:uk:

My YunoHost server

Hardware: VPS bought online
YunoHost version: 4.3.4.2
I have access to my server : Through SSH | through the webadmin | direct access via keyboard / screen | …
Are you in a special context or did you perform some particular tweaking on your YunoHost instance ? : no

Description of my issue

I have some nextcloud users directly registered in nextcloud, and not with LDAP and yunohost.
My Nextcloud is directly accessible by an URL, without login by yunohost portal (but with a direct login to nextcloud).
For the connection, zero problem.

But when someone logout himself from nextcloud, he is redirecting to Yunohost url server, with yunohost portal login… Not Nexctloud connection home. And I don’t want that.

How can I change this redirection ? And to do that better, how can I change that only for people with only a nextcloud account, and without yunohost account, if it’s possible to make a difference between users ?


:fr:

Mon serveur YunoHost

Matériel: VPS acheté en ligne
Version de YunoHost: 4.3.4.2
J’ai accès à mon serveur : En SSH | Par la webadmin | En direct avec un clavier/écran | …
Êtes-vous dans un contexte particulier ou avez-vous effectué des modificiations particulières sur votre instance ? : non

Description du problème

J’ai quelques utilisateurs nextcloud enregistrés directement depuis nextcloud, et pas depuis le LDAP yunohost. Nextcloud est directement accessible depuis une url, sans connexion par le portail yunohost (mais avec une connexion directe à nextcloud).
Pour la connexion pas de problème.

Pour la déconnexion par contre, la personne est redirigée sur l’adresse du serveur, pour se connecter au portail yunohost, et pas vers la page de connexion directe à nextcloud directement. Et je ne veux pas ça, je voudrais que les personnes ne voient pas le portail yunohost.

Comment puis-je changer cela ? Et pour faire cela au mieux, comment puis-je changer cela SEULEMENT pour les personnes qui n’ont pas de compte yunohost, s’il est possible de les différencier ?

Thank you for taking the trouble to post your question bilagual. I am not well equipped to formulate a coherent answer in French, sorry for that!

[quote=“Cellophile, post:1, topic:18096”]
How can I change this redirection ?[/quote]
I think it opens the ‘default’ application (either for the domain, or for the server)

A logged-out user is a visitor/unknown gurest. There is no way to discern visitors in a privacy friendly way, other than ask them to log in.

Besides yourself, is anyone bothered by the behaviour of the site? Something that might be a work around, is creating a single webpage and use that as default app, where half the page is logon to Yunohsot, and the other half is Nextcloud.

Another option would be to have a neutral public app (a blog for example) as the default app that opens when visiting your domain. People would have to create a bookmark for the Yunohost- or Nextcloud login (or remember the URL).

Thanks for your answer and your propositions !

I just don’t want that people know that this nextcloud is on a yunohot server, and that logout redirection is a real problem, because as the users doesn’t have a yunohost account, when they are on the yunohost login page after logout of nextcloud, if they don’t take care and try to authenticate themselves by this login page, they never access to their nextcloud account !

The natural comportment of a website is, after a logout, to redirect user to the login page. For the moment, the redirection goes to the yunohost login page, and I would like to redirect to the nextcloud login page (for all users, it’s perfect).

There is some possibilities to custom this ‘default’ app ?

Thanks !

There’s a button the configuration page of each app,

So, anyone visiting the domain, is forwarded to the /blog location (instead of seeing the Yunohost login)

Is it uncomfortable for you when they find out, or confusing for them when they can’t log in? In case of the last, you could consider creating a new user group,

image

and then giving only Nextcloud permissions

and adding those users to Nextcloud anyway, but put them in the ‘only_nextcloud_users’ group.

Pay attention to the ‘All users’ group in that case, you will need to move those apps to another group of ‘full yunohost users’.

I just realize another option, that might be a better fit. Is Nextcloud on its own (sub)domain, or in a subdirectory? This would involve having Nextcloud and the Yunohost on different domains.

The Yunohost portal is on the default domain, marked with a star:
image

So, if your domain is cellophile.fr, and your Yuno-users go to cellophile.fr to log in, and your NC-users go to data.cellophile.fr to log in, would that reflect the situation?

So, after loging out from NC, users are redirected to the default app, which is the SSOwat-portal if nothing is changed. Would it work when configured like:

I think that should work. It is even compatible with ‘adding nextcloud users to yunohost and only giving them nextcloud’ as outlined above.

Bonsoir,

As-u vu cette réponse de @ljf ?

Par contre je ne sais pas comment appliquer ce patch, avec un peu de chance @ljf passera par là. Par contre, distinguer les utilisateurs yunohost des autres utilisateurs, sa réponse laisse supposer que ce n’est pas évident.
Je n’ai pas suivi la réponse de @wbk , aussi suis-je peut-être à côté de la plaque ou que sa réponse répond déjà à ton attente.

Thanks @wbk for your response, but it doesn’t help me :wink:

The “make default” button is made to redirect the root server url. It’s not what I want, I have another url to access to my yunohost panel, and I keep this one :slight_smile:
Morover, as nextcloud is installed on this url, I can’t use it for a default url.

For your group’s proposition : Yes, it is a solution, if my users are registered in yunohost, but it’s not the case. Some users are directly created in nextcloud (yes you can do that, without create an account in yunohost :wink:) and those users haven’t a yunohost account. So I can’t create any group for them.
If I created users in yunohost, they could login by the yunohost portal, and my problem would be inexistant… But those users haven’t to be created in yunohost, only directly in nextcloud. Their ID and password aren’t managed by yunohost, but only nexctloud. I’m sorry if I repeat too many times the same things, it’s just to be sure that english doesn’t limit the problem understanding ! :smiley:

On its own subdomain.

Yes, it’s something like that !

Unfortunately not, because you can’t have more than one default domain on a yunohost server…


Bonsoir @metyun, Non je n’avais pas vu cette réponse !
C’est parfaitement ce que je cherchais !!! Merci !

Alors, pour expliquer ce que je fais, si d’autres ont le même problème :

cd /var/www/nextcloud/core/Controller
nano LoginController.php

j’ai bien

        public function logout() {
                $loginToken = $this->request->getCookie('nc_token');
                if (!is_null($loginToken)) {
                        $this->config->deleteUserValue($this->userSession->getUser()->getUID(), 'login_token', $loginToken);
                }
                $this->userSession->logout();

                $redirectUrl = $this->config->getSystemValue('logout_url',
                      $this->urlGenerator->linkToRouteAbsolute(
                              'core.login.showLoginForm',
                              ['clear' => true] // this param the the code in login.js may be removed when the "Clear-Site-Data" is working in the browsers)
                ));

                $response = new RedirectResponse($redirectUrl);
                $this->session->set('clearingExecutionContexts', '1');
                $this->session->close();

                if (!$this->request->isUserAgent([Request::USER_AGENT_CHROME, Request::USER_AGENT_ANDROID_MOBILE_CHROME])) {
                        $response->addHeader('Clear-Site-Data', '"cache", "storage"');
                }

                return $response;
        }

Et l’équipe de Yunohost est absolument géniale, parce qu’elle a laissé accessible le code original, dans un second fichier, stocké au même endroit, nommé LoginController.php.orig

Rien de plus simple donc, il suffit de renommer les deux fichiers :

mv LoginController.php LoginController.php.ynhmod 
mv LoginController.php.orig LoginController.php

Et le tour est joué !
La question que je me pose, c’est : Est-ce qu’à la prochaine mise à jour je devrai refaire ce changement ? Je le saurai… à la prochaine mise à jour ! :wink:


:uk:
To explain in english :
Yunohost has done a patch to redirect NC to his own login portal. But, because they are totally awesome, they have put in same place the original file. If you want to redirect your NC to the NC login page, you have just to do this three commands :

cd /var/www/nextcloud/core/Controller
mv LoginController.php LoginController.php.ynhmod 
mv LoginController.php.orig LoginController.php

there is still a question about Nextcloud update : will I have to redo the manipulation for each update?
The next update will bring the response… :wink:

Thanks !

Haha, repetition is the source of magic, or something like that they say in marketing :stuck_out_tongue:

That part of the problem was clear to me, it was just me ignoring it (not lack of clarity in your description :slight_smile: )

Great!

J’ai testé mais il y a un souci quand je me connecte à partir de la tuile du SSO. Quand je me déconnecte via nextcloud, je tombe sur cette erreur: “Accès non autorisé CSRF check failed”. Donc cette solution n’est que partiel, elle oblige à se connecter uniquement à partir de la page de Login de Nextcloud.

Si tu ne veux pas te poser de question et être sûr que ça reste en place, profite du reload de nginx qui a lieu à la fin de l’installation ou des mises à jour de Nextcloud pour rétablir le bon fichier; Si la mise à jour n’écrase pas les modifications, le script ne fera rien dans ce cas:

/etc/yunohost/hooks.d/conf_regen/16-nginx_nextcloud

#!/bin/bash
action=$1
pending_dir=$4
nginx_dir=$pending_dir/../nginx/etc/nginx
nextcloud_dir=/var/www/nextcloud/core/Controller
[[ $action == "pre" ]] || exit 0
[[ -d $nginx_dir ]] || exit 0
[[ -e $nextcloud_dir ]] || exit 0

if [[ -e $nextcloud_dir/LoginController.php.orig ]];then
        mv $nextcloud_dir/LoginController.php $nextcloud_dir/LoginController.php.ynhmod &&
        mv $nextcloud_dir/LoginController.php.orig $nextcloud_dir/LoginController.php
fi

Salut @metyun,
J’ai fait un nouveau test, je n’ai pas ton erreur quand j’essaie pareil. Si je me connecte depuis la tuile Ynh, puis que je me déconnecte de nextcloud seulement, je retourne bien sur le portail de nextcloud après déconnexion, sans erreur.
Si je retourne sur le portail Ynh, je suis toujours connecté.
Par contre, il y a une erreur si je reclique sur la tuile nextcloud : je suis identifié, puis nextcloud me dit probleme, réauthentification dans 5,4,3,2,1… Et je me retrouve sur la page de nextcloud à devoir me reconnecter.

Pour moi, cela n’est pas un soucis. Les utilisateurs ayant un compte ynh savent qu’il ont un accès par tuile, et donc une déconnexion globale, les autres n’ont qu’un seul accès avec une seule déconnexion.

Pour le reload, bonne idée ! mais je ne trouve pas le fichier dont tu parles…
dans /etc/yunohost/hooks.d/ j’ai uniquement :

root@XXXX:/etc/yunohost/hooks.d# ls -l
total 12
drwxr-xr-x 2 root root 4096 Dec  8 13:19 backup
drwxr-xr-x 2 root root 4096 Dec  8 13:19 backup_method
drwxr-xr-x 2 root root 4096 Dec  9 08:02 post_user_create

Tant mieux si ça fonctionne pour toi, chez moi c’est aléatoire, un coup ça se déconnecte bien, une autre fois ça refuse de se déconnecter et parfois j’ai l’erreur CSRF. Je n’ai cette dernière erreur qu’avec firefox, sur chromium je ne l’ai pas.
Par contre en se connectant directement de l’interface de Nextcloud, tout fonctionne.

C’est normal que tu ne trouves pas ce fichier, c’est à toi de le créer, ça s’appelle un hook. J’ai posté un tuto à ce sujet sur le forum, c’est très pratique si tu apportes des modifications perso à ton yunohost qui t’oblige à les refaire à chaque mise à jour.

Salut @metyun,
Excellent, un fois de plus ! :smiley:
J’ai regardé plusieurs de tes fils et tutos, pour essayer de comprendre comment ça marche.
J’ai plusieurs questions :

  • Comment choisis-tu le nom du fichier à créer (" 16-nginx_nextcloud" pour celui-ci par exemple) ? Dans ce fil, je vois qu’il y a toujours un chiffre, puis une appli, mais est-ce par convention, est-ce par rapport à d’autres fichiers installés par ailleurs, … ?
  • Dans ce tuto, tu parles de cette commande :

Est-ce à faire uniquement après la mise en place du hook (ou d’une modification du hook) ? Après chaque mise à jour de yunohost ou d’une appli ?

  • Quel langage est utilisé pour écrire ce hook ? ( c’est par curiosité, mais fermer la balise if par fi, je n’ai pas encore vu :slight_smile: )

Pour le nom de fichier, j’ai mis le lien vers une discussion dans le fil que tu cites, tu trouveras les explications.
La commande est à faire uniquement après la mise en place du hook pour prendre en compte celui-ci. Après c’est automatique, il se fait oublier. Et l’avantage, le diagnostique ne râle pas, ces modifications sont considérées comme natives.
Pour le langage, c’est tout simplement du bash.
Si tu veux plus d’infos, passe sur le fil dédié, ça sera plus approprié qu’ici vu que ton sujet est résolu.

on, après quelques jours, je ne sais pas ce qui s’est passé, mais le hook n’existe plus, et les fichiers modifiés sont redevenus comme à l’origine.
J’ai soit oublié quelque chose, soit fait une fausse manip, soit…

Toujours est-il que ça m’a permis de découvrir une autre méthode beaucoup plus simple :smiley:

Dans /var/www/nextcloud/config/config.php
il y a cette ligne vers la fin :

'logout_url' => 'https://yourdomain.fr/yunohost/sso/?action=logout',

Il suffit de remplacer cette url par celle qu’on veut (en l’occurence, dans le cas de ce fil, j’ai remis l’adresse de mon nextcloud), et ça fonctionne sans problème.

C’est sans doute beaucoup plus simple, et peut-être même fait exprès ! :wink:

:uk:

There is a better way to resolve this problem.
Go directly to /var/www/nextcloud/config/config.php, and modify one of the latest lines :

'logout_url' => 'https://yourdomain.fr/yunohost/sso/?action=logout',

You just have to replace the existant url by one of your choice (in the case of this topic, I’ve replaced by my nextcloud url adress).

It’s easiest than hook, and maybe (surely) done for that ! :smiley:

??? Effectivement à part une fausse manip je ne vois pas. Même le dossier conf_regen a disparu?
/var/www/nextcloud/config/config.php est bien fait exprès pour les configurations personnelles de Nextcloud. Je l’utilise pour plusieurs choses dont les preview pdf,mp4,etc…la durée de rétention de la poubelle, preview generator, etc… et je n’avais même pas fais attention qu’il existait une option pour logout_url :roll_eyes:
Bien vu @Cellophile.

Oui, tout le dossier a disparu…

Ah? Bizarre, ça ne disparaît pas tout seul, il y a forcément une manip qui l’a supprimé comme une restauration de backup, un rm mal positionné, etc… L’essentiel est que tu as résolu ton problème.

Pour clarifier les choses, je voulais préciser que la piste du hook n’était pas bonne, ça ne peut fonctionner qu’avec des fichiers spécifiques à yunohost et non avec ceux spécifiques aux applications, je me suis aperçu de mon erreur entre temps. Ça automatise uniquement les modifications apportées qui apparaissent avec la commande yunohost tools regen-conf -n -d.
Donc même si il n’y avait pas eu de solution avec le fichier /var/www/nextcloud/config/config.php , le hook n’aurait pas été complètement automatique, la commande yunohost tools regen-conf nginx --force après la mise à jour de l’application aurait été nécessaire.

Ok, Merci Metyun pour la précision !

Je ne suis pas trop fan de cette solution, car la ligne initiale permettait de s’assurer que l’utilisateur était bien déconnecté de YunoHost après s’être déconnecté de Nextcloud. (De mémoire ça pouvait induire des risques de sécurité si on ne le faisait pas)

Tu peux garder la ligne initiale et ajouter &r= à la fin, suivi de la représentation en base64 de l’adresse de destination. Tu peux trouver des convertisseurs en ligne.

Rediriger vers https://test.example/ donnerait ainsi

'logout_url' => 'https://yourdomain.fr/yunohost/sso/?action=logout&r=aHR0cHM6Ly90ZXN0LmV4YW1wbGUv',

Il faudra vérifier que YunoHost ne grogne pas si on tente de déconnecter quelqu’un qui n’est pas déjà connecté. :sweat_smile:

Bonjour @tituspijean !

Bien sûr, mais là, je ne sais pas si tu as tout lu, il se trouve que sur ce nextcloud, les utilisateurs n’ont pas de compte yunohost. Leur compte est seulement créé depuis l’interface de nextcloud. On aime ou on n’aime pas, pour moi dans un cas prévis, c’est la meilleure manière de donner un peu d’autonomie à un admin nextcloud, sans le perdre dans yunohost. Et donc je ne veux pas non plus perdre les utilisateurs en leur montrant une page de déconnexion sans aucun rapport avec le cloud qu’ils ont l’habitude d’utiliser ! :wink: