public function loginAction(Request $request, Player $me) { if ($me->isValid()) { throw new ForbiddenException("You are already logged in!"); } $query = $request->query; $session = $request->getSession(); $token = $query->get("token"); $username = $query->get("username"); if (!$token || !$username) { throw new BadRequestException(); } // Don't check whether IPs match if we're on a development environment $checkIP = !$this->isDebug(); $info = validate_token($token, $username, array(), $checkIP); if (!isset($info)) { throw new ForbiddenException("There was an error processing your login. Please go back and try again."); } $session->set("username", $info['username']); $session->set("groups", $info['groups']); $redirectToProfile = false; if (!Player::playerBZIDExists($info['bzid'])) { // If they're new, redirect to their profile page so they can add some info $player = Player::newPlayer($info['bzid'], $info['username']); $redirectToProfile = true; } else { $player = Player::getFromBZID($info['bzid']); if ($player->isDeleted()) { $player->setStatus('active'); } } $session->set("playerId", $player->getId()); $player->updateLastLogin(); $player->setUsername($info['username']); Visit::enterVisit($player->getId(), $request->getClientIp(), gethostbyaddr($request->getClientIp()), $request->server->get('HTTP_USER_AGENT'), $request->server->get('HTTP_REFERER')); $this->configPromoteAdmin($player); if ($redirectToProfile) { $profile = Service::getGenerator()->generate('profile_show'); return new RedirectResponse($profile); } else { return $this->goBack(); } }