[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.

1 Like

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.

2 Likes

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 !

1 Like

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!

1 Like

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.

1 Like

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:

3 Likes

??? 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:

1 Like

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: