He decidido hacer un paréntesis en el tipo de entradas que agrego al blog, de carácter técnico y dirigidas a un público muy concreto, para hacer una entrada que llevo tiempo queriendo hacer (desde mucho antes de abrir este blog).
Para los despistados, una de mis aficiones es colaborar con el meneame de una forma un tanto friki (si es que todo lo que toco, lo convierto en friki) que consiste en auditar su código y comunicar los errores de seguridad que encuentro, a Ricardo, para que los arregle.

Pese a que el meneame está muy bien programado, en contra de lo que dicen algunos sujetos, es cierto que ha tenido ciertos problemas de seguridad durante su historia, desde que colaboro, he encontrado varios problemas y de gravedad variada, sin embargo, el número total de problemas de seguridad, ha sido mucho menor que en otros sites populares y con mas tiempo, y el tiempo de reacción ante estos problemas, ha sido de minutos, por lo que considero a meneame, un site muy seguro y una demostración irrefutable de que el software libre es beneficioso cara a la seguridad.
Dejando de lado las presentaciones y la explicación de mi relación con meneame, este post trata sobre algo que llevo tiempo queriendo escribir…y es que auditando meneame continuamente, he aprendido mucho de su código y sus secretos, el como funciona, etc…y hay algunas cosas que siempre he querido documentar, pero nunca he encontrado el momento.
Antes de empezar, podemos ver el código de meneame, navegando por la carpeta www/ de su repositorio svn:
http://svn.meneame.net/index.cgi/branches/version3/www/
El primer directorio que vemos, es admin/, del cual nos llama la atención que no tiene index.php, por lo que si hacemos:
http://meneame.net/admin/
Veremos un forbidden, que nos impide listar el contenido del directorio, el único archivo que hay en ese directorio, es el archivo bans.php:
http://svn.meneame.net/index.cgi/branches/version3/www/admin/bans.php?rev=1372&view=markup
El cual, nada mas empezar hace una comprobación:
if ($current_user->user_level==”god” || $current_user->user_level==”admin”) {
Esto nos lleva a nuestra primera deducción: en meneame hay dos tipos de administradores, unos conocidos como admin, y otros conocidos como god, como si fuesen dos niveles distintos de acceso.
La primera pregunta que se nos viene a la cabeza es: vale, ¿Pero que es eso de $current_user? $current_user es una instancia de la clase User, que se encuentra en:
http://svn.meneame.net/index.cgi/*checkout*/branches/version3/www/libs/user.php?content-type=text%2Fplain&rev=1547
Esta clase, como vemos, es una clase que representa a un usuario del meneame, y maneja su información, tanto su karma, como su nivel de acceso, etc.
Todo el meneame funciona con clases como esta, que representan cosas en meneame, están todas en:
http://svn.meneame.net/index.cgi/branches/version3/www/libs/
Otro ejemplo de clase como user, pero que representa links, es Link:
http://svn.meneame.net/index.cgi/*checkout*/branches/version3/www/libs/link.php?content-type=text%2Fplain&rev=1550
Para los javeros, estas clases podríamos decir que son una mezcla entre DAO y TO (Transfer Object), pero todo junto en una misma clase.
Aparte de este mecanismo de clases que representan cosas en meneame, existe otro mecanismo interesante usado en el meneame: el de los backend.
En meneame, en muchos sitios, pasamos el ratón por encima y sale un cartelito con información, por ejemplo, cuando alguien cita otro comentario en una noticia, usando #X, si pasamos el ratón por encima del #, veremos el comentario número X en una cajita amarilla, que sigue al ratón.
Esto lo consigue con unos pequeños php, que están en:
http://svn.meneame.net/index.cgi/branches/version3/www/backend/
Y que reciben un argumento, por ejemplo, el numero de comentario, y devuelven un pequeño código html, que es el que va dentro del cuadro amarillo.
Ademas de los cuadros amarillos (que también van por ajax), el backend se utiliza en realidad para recibir las peticiones Ajax de toda la web, y procesarlas, así está todo bien ordenado.
Un ejemplo de esto es el backend get_user_api_key, que está en:
http://svn.meneame.net/index.cgi/branches/version3/www/backend/get_user_api_key.php?rev=1431&view=markup
Que es quien atiende a la llamada Ajax que se produce, cuando en tu perfil, haces click sobre ver tu clave api, como vemos en su código:
if ($id != $current_user->user_id && $current_user->user_level != ‘god’ ) {
Cada usuario puede ver solo su API key, excepto los gods, que pueden ver las de todos, sin embargo, los admins no pueden.
Esto aclara un poco lo de los dos distintos niveles de acceso, admin y god.
Aparte de todo esto, tenemos otra carpeta interesante en el svn:
http://svn.meneame.net/index.cgi/branches/version3/www/api/?rev=1550
Api, que es donde se alojan los archivos php que atienden las llamadas a la API pública del meneame, una API que podemos usar, para comunicar nuestros blogs, webs o aplicaciones de terceros con meneame, vamos a ver alguna interesante:
http://meneame.net/api/url.php?url=http://www.adn.es&all=1
Con esto obtenemos todos los enlaces en meneame hacia el site www.adn.es.
Existen algunas otras API en el meneame, todas en esa carpeta, sin embargo hay un archivo muy curioso ahí:
http://svn.meneame.net/index.cgi/branches/version3/www/api/check_url_test.php?rev=1340&view=markup
Que como se puede ver, es alguna especie de prueba, pero que está en el svn desde hace mucho tiempo, y ahí sigue…misterios del código.
Aparte de todo esto, en el código de meneame hay algunas otras curiosidades, por ejemplo, un site accesible llamado mueveme, aquí:
http://meneame.net/mueveme/
El cual parece algo para acceder desde el mobil, o algo así, ni idea, no navego con el mobil.
Otra versión alternativa accesible de meneame, es la versión para nintendo DS:
http://meneame.net/nds/
Y por si la nintendo DS fuese poco, también hay para la WII:
http://meneame.net/wii/
Otra curiosidad que no acabo de entender (aunque seguro que ha sido dicha en el blog de meneame…), es por que hay un icono en el svn con nombre: apple-touch-icon.png:
http://meneame.net/apple-touch-icon.png
Supongo que sera para cuando entras con el iphone, a saber, ya lo buscaré por el código.
Como conclusión, decir que si eres informático, el código de meneame tiene muchas cosas interesantes y muchos ejemplos de como hacer cosas…como hacer un portal para la WII, para la NDS, etc etc.
Normalmente la gente no suele mirarse el código de meneame (me refiero a la gente que lo podría entender,a los desarrolladores), incluso si deciden bajarlo y usarlo en su site, no suelen estudiarlo ni un poco, y si lo hacen, no suelen compartir sus cambios con meneame.net.
Yo soy uno de los talibanes que sigue pensando que una web como meneame, donde el modelo de negocio es la publicidad, puede ser compatible con tener una comunidad a su alrededor, sin embargo, el caso de meneame me ha demostrado que muchos “webmasters” (como llamarlos?) solo buscan aprovecharse de que meneame comparte su código, y no buscan ni ayudar, ni colaborar, ni enriquecer nada mas que sus bolsillos.
Se que es una conclusión un tanto rara para un artículo como este, pero tenía que decirlo