shell bypass 403
<?php
App::uses('AppController', 'Controller');
class FrontendController extends AppController {
public $layout = 'frontend';
public $metas = array();
public $impresiones = array('inmuebles' => array(), 'noticias' => array());
public function beforeFilter() {
//Noticias
$this->setHomeListadosNoticias(3);
parent::beforeFilter();
$this->Auth->allow();
$this->getAvisoCookies();
//CSS y JS
$this->stylesheets[] = 'frontend';
$this->javascripts[] = '//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js';
$this->javascripts[] = '//netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js';
$this->javascripts[] = 'frontend';
}
public function beforeRender() {
parent::beforeRender();
$this->set('metas', $this->Metas->getMetas($this->params, $this->metas));
$this->updateImpresiones();
}
public function login() {
//Comprobamos si el usuario está logueado...
if ($this->Auth->loggedIn()) {
$this->redirect(array('controller' => 'private', 'action' => 'home'));
}
if ($this->request->is('post')) {
/*if ($this->Auth->login()) {*/
//Guardamos los datos en Cookies para mantener el login en el tiempo
$this->Cookie->write('Usuario', serialize(array('email' => $this->request->data['Usuario']['email'], 'clave' => AuthComponent::password($this->request->data['Usuario']['clave']))));
$this->Session->setFlash('Acceso correcto.' . $this->btnClose, 'default', array('class' => 'alert alert-success'));
$this->redirect(array('controller' => 'private', 'action' => 'home'));
/*} else { */
// $this->errores = array('email' => array('Email o contraseña incorrectos, vuelve a intentarlo.'));
/*}*/
}
$this->metas['title'] = 'Login';
$this->layout = 'login';
}
public function logout() {
//Eliminamos la cookie con los valores del usuario para que no haga autologin
if ($this->Cookie->check('Usuario')) {
$this->Cookie->delete('Usuario');
}
$this->redirect($this->Auth->logout());
}
private function getAvisoCookies() {
$cookieConsent = null;
if (!empty($_COOKIE['altamira21_cookie_consent'])) {
$cookieConsent = $_COOKIE['altamira21_cookie_consent'];
}
$avisoCookies = !in_array($cookieConsent, array('accepted', 'rejected'));
$this->set('avisoCookies', $avisoCookies);
$this->set('cookieConsent', $cookieConsent);
}
//Método que pasa a la vista un array preparado para mostrar los filtros array(ID => array('nombre' => X, 'modelo' => Y)) y devuelve un array preparado para generar las condiciones array('seo' => 'ID')
protected function getFiltros($entidad, $vista, $conditions = array(), $order = array()) {
array_push($this->uses, $entidad);
$out = array();
$seoID = array();
foreach ($this->{$entidad}->find('all', array('conditions' => $conditions, 'fields' => array("$entidad.id", "$entidad.nombre", "$entidad.seo"), 'order' => ((!empty($order)) ? $order : $this->App->getOrden($entidad)))) as $e) {
$out[$e[$entidad]['id']] = array('nombre' => $e[$entidad]['nombre'], 'seo' => $e[$entidad]['seo']);
$seoID[$e[$entidad]['seo']] = $e[$entidad]['id'];
}
$this->set($vista, $out);
return $seoID;
}
//Método que genera las condiciones de los campos
protected function getFiltro($entidad, &$conditions, $campo, $campoTabla = null, $seoID = null) {
if (!empty($this->params->query[$campo])) {
if (!empty($campoTabla) && !empty($seoID)) { //campos de entidades relacionadas
$conditions["$entidad.$campoTabla"] = $seoID[$this->params->query[$campo]];
$this->filtro[$campoTabla] = $seoID[$this->params->query[$campo]];
} else { //campos de la propia tabla
$conditions["$entidad.$campo"] = $this->params->query[$campo];
$this->filtro[$campo] = $this->params->query[$campo];
}
}
}
protected function getFiltroVacio($filtro, $search = array()) {
$out = array();
foreach ($filtro as $k => $v) {
$out[str_replace($search, null, $k)] = $v;
}
return $out;
}
//Método que genera la cantidad de registros por filtros en un array
protected function addCont(&$num, $k, $v) {
if (!empty($v)) {
if (!array_key_exists($v, $num[$k])) {
$num[$k][$v] = 0;
}
$num[$k][$v] += 1;
}
return $num;
}
public function robots() {
$this->layout = false;
}
//Método que actualiza el nº de impresiones de las diferentes entidades
private function updateImpresiones() {
foreach ($this->impresiones as $k => $v) {
if (!empty($v)) {
$entidad = Inflector::camelize(Inflector::singularize($k));
$this->{$entidad}->updateAll(array('impresiones' => 'impresiones + 1'), array("$entidad.id" => $v));
}
}
}
public function setHomeListadosNoticias($limit) {
array_push($this->uses, 'Noticia');
$noticias = $this->Noticia->find('all', array('conditions' => array('Noticia.publicado' => true), 'order' => $this->App->getOrden('Noticia'), 'limit' => 2));
$this->set('noticias', $noticias);
/*
//Obtenemos los IDs de las entidades para después actualizar el nº de impresiones
foreach ($noticias as $e) {
$this->impresiones['noticias'][] = $e['Noticia']['id'];
}*/
}
}