Twitter to RSS Service – self hosted

Twitter hat bekanntermassen mit der Abschaltung der Version 1.0 der Twitter API dafuer gesorgt, dass man die Timeline eines Nutzers nicht mehr einfach per RSS Feed abrufen kann. Da ich das jedoch ueberaus praktisch finde, habe ich nach einer Moeglichkeit gesucht, wie man das nun wieder hinbekommt. Gelandet bin ich bei dem Projekt Tweetledee.

Tweetledee ist ein PHP basiertes Projekt, das Zugriff auf viele Twitterfunktionen bietet, Favoriten, Listen, Suchergebnissen, Timelines usw. Die Ergebnisse werden als RSS oder JSON zur Verfuegung gestellt.

Um Tweetledee zu installieren benoetigt man einen Webserver mit PHP 5.1 und libcurl. Fuer die Konfiguration muss man dann noch bei Twitter eine Applikation erzeugen, um an die OAuth Einstellungen zu kommen. Das wars. Funktioniert super, und laesst sich einwandfrei mit meinem webbasierten RSS Feedreader Tiny Tiny RSS nutzen.

Nagios/Icinga plugin to check Joomla Update status (passive check)

Wenn man Software von Hand und nicht aus den Repositories installiert, muss man sich auch von Hand um die Updates kuemmern. Da ich kein Plugin gefunden habe, dass mir den Joomla Update Status ueberprueft und in Nagios anzeigt, habe ich fix eines selber geschrieben. Es muss als passive Check aufgerufen werden, da es mit einer lokalen Datei auf dem Server ueberprueft, welche Version installiert ist. Das Plugin hat bei den Updates auf 2.5.7 und 2.5.8 verlaesslich angezeigt das ein Update existiert. Extensions sind nicht mit inbegriffen!

<?php
 
/***
 * Simple and dirty php script to check if the local joomla version
 * is up to date. This script only works on the server, were Joomla
 * is installed. If Nagios is not running on the same server, you 
 * possibly need to run it via NSCA or similar systems.
 *
 * @version: 0.1
 *
 * @author: jan.toenjes@intranda.com
 *
 * @changelog: initial version
 *
 ***/
 
 
/***
 * CONFIGURATION
 *
 * localVersionFile: set the full path to the version.php file from your Joomla installation
 * remoteVersionUrl: set the link to the list.xml file from the Joomla core update server
 ***/
$localVersionFile = "/var/www/joomla/libraries/cms/version/version.php";
$remoteVersionUrl = "http://update.joomla.org/core/list.xml";
 
 
// get local Joomla Version
define('_JEXEC', 1);
require "$localVersionFile";
$jversion = new JVersion;
$localJoomlaVersion = $jversion->getShortVersion();
 
 
// get remote Joomla Version
$xml = simplexml_load_file($remoteVersionUrl);
$remoteJoomlaVersion = $xml->extension['version'];
 
 
// compare and return info
if ($localJoomlaVersion < $remoteJoomlaVersion) {
        echo "A new version is available: $remoteJoomlaVersion";
        exit (2);
}
else {
        echo "Your current Version $localJoomlaVersion is up to date";
}
 
?>

Remote Kommandos auf Server via xinetd ausfuehren / Adminfun

Es gibt Sachen die machen Spass, z.B. diese Spielerei. Es geht darum auf einem Server ein Remotekommando / Shellskript via Webbrowser auszufuehren, ohne das dafuer irgendeine grosse Software-Remotemanagement-Loesung laufen muss. Die Antwort ist der gute alte (x)inetd verbunden mit einem kleinen PHP-Skript. Ich kommentiere das jetzt hier nicht weiter sondern schreibe es einfach mal runter:

Als erstes muessen die Programme installiert werden:

 aptitude install xinetd php5-cli

Danach die folgende Datei unter /etc/xinetd.d/test ablegen

# description: xinetd + php = fun
service test
{
        socket_type     = stream        
        protocol	= tcp
	wait            = no
        user            = root
	server		= /usr/bin/php5
	server_args	= /root/test.php
	disable		= no
}

Anschliessend die /etc/services editieren und die folgende Zeile einfuegen:

test		44444/tcp			# test

und nun noch diese PHP-Datei unter /root/test.php ablegen:

<?php
echo "+++ xinetd + php = fun +++
 
";
 
## read parameter
$handle = fopen('php://stdin','r');
$input = fgets($handle);
fclose($handle);
 
## split get parameter 
$out1=str_replace("GET /", "", $input);
$out2=str_replace(" HTTP/1.1", "", $out1);
$parameter=explode("/", $out2);
 
## check if we shall do sth. and if we know it
if (trim($parameter[0]) == "doStuff") {
 
  if (empty($parameter[1])) {
    echo "no job start requested...
    ";
  }
 
  elseif (! trim(empty($parameter[1])) AND trim($parameter[1]) == "psaux") {
    $out = shell_exec('ps aux');
    echo "$out";
  }
 
}
else {
  echo "no job start requested...
";
}
?>

Ich denke die PHP-Datei erklaert sich von selber und kann beliebig erweitert werden. Ein Aufruf von http://example.net:44444/doStuff/psaux gibt dann die Ausgabe des Befehls „ps aux“ wieder. Nun sind bei dem shell_exec keine Grenzen gesetzt… ;-) Wichtig daran ist, dass wir die GET Parameter via stdin auslesen, da der xinetd das Zeugs ja nicht per GET an das php-Skript weiterleitet. Aber was solls… Der Kreativitaet sind da keine Grenzen gesetzt.

Ich wuerde natuerlich noch den Zugriff ueber irgendeine iptables Regel beschraenken ala:

iptables -A INPUT -p tcp -m tcp --dport 44444 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 44444 -j REJECT

Und ueber Security von wegen das Skript als root laufen zu lassen usw. reden wir hier nicht weiter, es geht ja auch nicht darum das als Superloesung zu verkaufen, sondern einfach als simple kleine Adminspielerei ;-)

Neues Projekt: file delivery

Nach Goetemp und Werdertweets schmeiss ich jetzt mal file delivery hier raus ins Netz. Die Idee des Projekts ist relativ simpel. Ueber einen einfachen Weg Dateien im Internet zur Verfuegung zu stellen ohne den echten Dateinamen bekannt zu geben sowie die Dokumente im DocumentRoot vorzuhalten.
Dabei herausgekommen ist file delivery. Es ist ein in PHP geschriebenes kleines System wo ueber ein Webinterface Dateien hochgeladen werden koennen. Die Dateien koennen irgendwo im Dateisystem liegen und muessen nicht im DocumentRoot des Webservers verfuegbar sein. Nach dem Upload gibt es eine URL die aus dem Benutzernamen des Nutzers der die Datei hochgeladen und der MD5-Checksum der hochgeladenen Datei besteht. Nur mit dieser kryptischen URL kann man nun die eine Datei herunterladen.
Als kleines Addon ist eine optionale Emailbenachrichtigung implementiert, die eine Email verschickt, wenn die gewaehlte Datei heruntergeladen wird.

Das System hat eine simple Benutzerverwaltung. Neue Nutzer koennen von dem Administrator Account hinzugefuegt werden. Wenn das PHP-Modul „apc“ installiert und aktiviert ist, wird auch ein Upload Fortschrittsbalken angezeigt. file delivery nutzt Smarty als Templateengine und kann dadurch komplett geskinnt werden.

Das System habe ich unter http://files.pregos.info installiert. Zugangsdaten zum Testen sind „admin/password“. Fuer diese Installation habe ich das Passwort aendern fuer den Administrator deaktiviert.

Wer Anmerkungen, Kritik oder aehnliches hat, bitte immer her damit. Code gibts fuer interessierte auf Anfrage per Mail.