public function connect(Application $app) { // creates a new controller based on the default route $controllers = $app['controllers_factory']; /** * Display a login form */ $controllers->get('/', function (Request $request) use($app) { $IsError = $request->query->get('error') === "1"; $x = $app['twig']->render('login.twig', ['error' => $IsError]); return $x; }); /** * Handle login form submissions */ $controllers->post('/', function (Request $request) use($app) { $UsernameInput = User::GetDomainAndUsernameFromInput($request->request->get('username'), $app); $Password = $request->request->get('password'); $DeviceID = $request->query->get('device_id'); $Username = $UsernameInput['Username']; $Domain = $UsernameInput['Domain']; $Ldap = new LdapAuthentication($app); try { $LoginResult = $Ldap->TryToAuthenticate($Domain, $Username, $Password); } catch (\Exception $ex) { return $app->redirect("/login?error=1&device_id=" . urlencode($DeviceID)); } if (!$LoginResult) { return $app->redirect("/login?error=1&device_id=" . urlencode($DeviceID)); } /* @var $User User */ $User = User::TryGetUserByUsername($Username, $Domain, $app); if ($User !== NULL) { $User->Load(); $User->ResetToken(); $User->DeviceID = $DeviceID; $User->Save(); } else { $User = new User($app); $User->DeviceID = $DeviceID; $User->Username = $Username; $User->Domain = $Domain; $User->ResetToken(); $User->Save(); } $UserFields = ['Domain' => $User->Domain, 'Username' => $User->Username, 'Token' => $User->Token]; return $app->redirect('/login/close?' . http_build_query($UserFields)); }); /** * Close the WebView on the Android client. TODO: remove the * webview altogether */ $controllers->get('/close', function () { return ''; }); return $controllers; }