Browse Source

Fix an infinite redirect on Login when having SSL errors

Add Invitation URLs for MUC
pull/395/head
Timothée Jaussoin 9 years ago
parent
commit
7600a31b04
  1. 9
      app/controllers/LoginController.php
  2. 2
      app/widgets/ContactData/_contactdata.tpl
  3. 32
      app/widgets/Login/Login.php
  4. 2
      app/widgets/Login/locales.ini
  5. 19
      app/widgets/Login/login.tpl
  6. 1
      app/widgets/Rooms/Rooms.php
  7. 8
      app/widgets/Rooms/_rooms_invite.tpl
  8. 1
      app/widgets/Rooms/locales.ini
  9. 3
      linker.php
  10. 1
      locales/locales.ini
  11. 1
      src/Movim/Bootstrap.php
  12. 2
      src/Movim/Route.php

9
app/controllers/LoginController.php

@ -3,6 +3,8 @@
use Movim\Controller\Base;
use Movim\User;
use Respect\Validation\Validator;
class LoginController extends Base
{
function load()
@ -16,7 +18,12 @@ class LoginController extends Base
$user = new User;
if($user->isLogged()) {
$this->redirect('root');
if($this->fetchGet('i') && Validator::length(8)->validate($this->fetchGet('i'))) {
$invitation = \Modl\Invite::get($this->fetchGet('i'));
$this->redirect('chat', [$invitation->resource, 'room']);
} else {
$this->redirect('root');
}
}
}
}

2
app/widgets/ContactData/_contactdata.tpl

@ -151,7 +151,7 @@
</div>
{if="count($subscriptions) > 0"}
<ul class="list active middle large">
<ul class="list active large">
<li class="subheader large">
<p>
<span class="info">{$subscriptions|count}</span>

32
app/widgets/Login/Login.php

@ -20,6 +20,7 @@ class Login extends \Movim\Widget\Base
$this->registerEvent('storage_get_handle', 'onConfig');
$this->registerEvent('storage_get_errorfeaturenotimplemented', 'onConfig');
$this->registerEvent('storage_get_errorserviceunavailable', 'onConfig');
$this->registerEvent('ssl_error', 'onSSLError');
}
function onStart($packet)
@ -65,9 +66,21 @@ class Login extends \Movim\Widget\Base
$pop = 0;
foreach(scandir(USERS_PATH) as $f)
if(is_dir(USERS_PATH.'/'.$f))
foreach(scandir(USERS_PATH) as $f) {
if(is_dir(USERS_PATH.'/'.$f)) {
$pop++;
}
}
$this->view->assign('invitation', null);
if($this->get('i') && Validator::length(8)->validate($this->get('i'))) {
$invitation = \Modl\Invite::get($this->get('i'));
$this->view->assign('invitation', $invitation);
$cd = new \Modl\ContactDAO;
$this->view->assign('contact', $cd->get($invitation->jid));
}
$this->view->assign('pop', $pop-2);
$this->view->assign('connected', (int)requestURL('http://localhost:1560/started/', 2));
@ -109,24 +122,23 @@ class Login extends \Movim\Widget\Base
return $view->draw('_login_error', true);
}
function onSSLError()
{
$this->showErrorBlock('fail_auth');
}
function onSASLFailure($packet)
{
switch($packet->content) {
case 'not-authorized':
$error = 'wrong_account';
break;
case 'invalid-mechanism':
$error = 'mechanism';
break;
case 'malformed-request':
$error = 'mechanism';
break;
case 'bad-protocol':
$error = 'fail_auth';
break;
case 'not-authorized':
case 'bad-auth':
$error = 'wrong_account';
break;
case 'bad-protocol':
default :
$error = 'fail_auth';
break;

2
app/widgets/Login/locales.ini

@ -28,3 +28,5 @@ no_account = No account yet ?
whitelist_info = You can login with accounts from theses servers
connected = Connected
population = Population
invite_chatroom = %s invited you to join a chatroom

19
app/widgets/Login/login.tpl

@ -22,6 +22,25 @@
<section>
<span class="info">{$c->__('form.connected')} {$connected} / {$pop}</span>
<h3>{$c->__('page.login')}</h3>
{if="$invitation != null"}
<br />
<ul class="list middle">
<li>
{$url = $contact->getPhoto('m')}
{if="$url"}
<span class="primary icon bubble" style="background-image: url({$url});">
</span>
{else}
<span class="primary icon bubble color {$contact->jid|stringToColor}">
{$contact->getTrueName()|firstLetterCapitalize}
</span>
{/if}
<p class="line">{$c->__('form.invite_chatroom', $contact->getTrueName())}</p>
<p class="line">{$invitation->resource}</p>
</li>
</ul>
{/if}
<form
data-action="{$submit}"
method="post" action="login"

1
app/widgets/Rooms/Rooms.php

@ -126,6 +126,7 @@ class Rooms extends \Movim\Widget\Base
$cd = new \Modl\ContactDAO;
$view->assign('contacts', $cd->getRosterSimple());
$view->assign('room', $room);
$view->assign('invite', \Modl\Invite::set($this->user->getLogin(), $room));
Dialog::fill($view->draw('_rooms_invite', true));
}

8
app/widgets/Rooms/_rooms_invite.tpl

@ -2,6 +2,13 @@
<form name="invite">
<h3>{$c->__('room.invite')}</h3>
<h4>{$room}</h4>
<div>
<input
readonly
value="{$c->route('login', $invite->code)}">
<label>{$c->__('room.invite_code')}</label>
</div>
<h2 style="text-align: center;">{$c->__('global.or')}</h2>
<div>
<input type="hidden" value="{$room}" name="to" id="to"/>
<datalist id="contact_list" style="display: none;">
@ -31,5 +38,4 @@
{$c->__('button.invite')}
</button>
</div>
</div>

1
app/widgets/Rooms/locales.ini

@ -33,3 +33,4 @@ anonymous_login = Login on %s
nick = Your nickname
invite = Invite a contact
invited = Invitation sent
invite_code = Send this link to your contact

3
linker.php

@ -222,6 +222,9 @@ $xmpp_behaviour = function (React\Stream\Stream $stream) use (&$conn, $loop, &$s
restore_error_handler();
if($out !== true) {
$evt = new Movim\Widget\Event;
$evt->run('ssl_error');
$loop->stop();
return;
}

1
locales/locales.ini

@ -2,6 +2,7 @@
no_js = "You don't have javascript enabled. Good luck with that."
description = Movim is a kickass distributed social networking platform that protect your privacy an comes with a set of awesome features.
loading = Loading…
or = Or
[page]
account = Account

1
src/Movim/Bootstrap.php

@ -285,6 +285,7 @@ class Bootstrap
\Modl\Utils::loadModel('SharedSubscription');
\Modl\Utils::loadModel('Caps');
\Modl\Utils::loadModel('Item');
\Modl\Utils::loadModel('Invite');
\Modl\Utils::loadModel('Message');
\Modl\Utils::loadModel('Sessionx');
\Modl\Utils::loadModel('Setting');

2
src/Movim/Route.php

@ -26,7 +26,7 @@ class Route extends Base
'help' => false,
'home' => ['i'],
'infos' => false,
'login' => ['err'],
'login' => ['i'],
'main' => false,
'node' => ['s', 'n', 'i'],
'news' => ['s', 'n', 'i'],

Loading…
Cancel
Save