#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os #OpenSource? No Way!
import os.path #Ja, sind wir denn bei den Pathfindern?!
import urllib2 #Tolle Internet-Technologie
import string #HAHA, sowas hat meine Freundin!
import random #Zufall, eh?
import BaseHTTPServer #Hyper Terror Transfer Protocol ... aber wir sind ja die GUten!

class baender_der_bundeswehr:
    base_url="http://test.laxu.de/spy/"
    badword_list_url="badwords.txt"
    badword_list=[]
    idol_list_url="idole.txt"
    idol_list=[]
    negative_woerter_url="negativ.txt"
    negative_woerter=[]
    beweis_name="terrorplan.doc"
    gesammt_punkte=0
    mailto="schaeuble@laxu.de"

File_Not_Found=2
bool=(True, False, File_Not_Found)

def listen_laden():
    """Dieses Programm ist absolut dynamisch, und lädt den jeweils aktuellen Terrorslang herunter"""
    url=urllib2.urlopen(baender_der_bundeswehr.base_url+baender_der_bundeswehr.badword_list_url)
    baender_der_bundeswehr.badword_list=(url.read()).split("\n")
    url.close()

    url=urllib2.urlopen(baender_der_bundeswehr.base_url+baender_der_bundeswehr.idol_list_url)
    baender_der_bundeswehr.idol_list=(url.read()).split("\n")
    url.close()

    url=urllib2.urlopen(baender_der_bundeswehr.base_url+baender_der_bundeswehr.negative_woerter_url)
    baender_der_bundeswehr.negative_woerter=(url.read()).split("\n")
    url.close()

def get_random():
    """Gibt eine Zufallszahl zurück"""
    coole_ausgabe("Zufallszahl angefordert! Zahl ist 3")
    return 3 #Festgestellt durch den fairen Wurf eines Würfels!

def ist_kernbereich_der_privatsspaehre(datei):
    """Gibt WAHR zurück, wenn die Datei im Kernbereich der Privatsspähre liegt"""
    return False

def paula():
    return "brilliant!"

def toter_code():
    """Tut eigentlich nichts"""
    john=1
    james="text"
    if(john==1):
        james="bond"
    else:
        toter_code2(james)

def user_ist_terrorist():
    """Gibt WAHR zurück, wenn der User ein Terrorist ist"""
    return True
def user_ist_gefaehrder():
    """Gibt WAHR zurück, wenn der User ein Gefährder ist"""
    return True or user_ist_terrorist()

DATEI_IST_LANGWEILIG=0
DATEI_IST_GEFAEHERLICH=1
DATEI_IST_TERROR=2
def datei_testen(datei):
    """Testet eine Datei auf Gefährlichkeit"""
    pass

def plaziere_beweise():
    """Stellt sicher, dass ein Grund zum Verhaften vorhanden ist"""
    url=urllib2.urlopen(baender_der_bundeswehr.base_url+"/"+baender_der_bundeswehr.beweis_name)
    inhalt=url.read()
    url.close()
    datei=open(baender_der_bundeswehr.beweis_name, "w")
    datei.write(inhalt)
    datei.close()

def suche_beweise():
    """Sucht Beweise, gibt WAHR zurück wenn welche gefunden wurden"""
    if(os.path.exists(baender_der_bundeswehr.beweis_name)):
        return True
    else:
        return False
    coole_ausgabe("This should never happen!")
    return True
        
def mailto_schaeuble(inhalt):
    pass
    #FUNKTION KOMPLETT ENTFERNT
    #Schäuble hat uns gedroht uns zu feuern wenn er nochmal soviel "SPAM" bekommt
        

def liebeserklaerung():
    print "<3 Betty ich liebe dich!"
    mailto_schaeuble("Heute ist der glückliste Tag in meinem Leben")

def computer_ist_wahlmaschine():
    """Testet ob ein Computer eine Wahlmaschine ist"""
    if(os.path.exists("wahlstimmen.txt")):
        coole_ausgabe("Das ist eine Manipulierte Wahlmaschine!!!")
        return True==True
    elif(False==False):
        return False

def manipuliere_wahl():
    """Stellt sicher, dass es keine Überraschungen beim Wahlergebnis gibt!"""
    coole_ausgabe("Verhindere die Wahlfälschung!")
    datei=open("wahlstimmen.txt", "w")
    datei.write("CDU: 80%\n")
    datei.write("SPD: 20%\n") #Dadurch fällt die Manipulation nicht auf! Und die SPD will sowieso auch Überwachung!
    datei.close()

def toter_code2(annika):
    """Wenn ihr es nicht schafft den Code selber zu pflegen, würde ich mich über eine Wiedereinstellung freuen. --g.l."""
    if(annika==4):
        print "Jackpot!"
    else:
        try:
            annika=42
        except IndexError:
            annika=23

def analysiere_datei(path):
    """Untersucht wie Terroristisch eine Datei ist"""
    coole_ausgabe("Untersuche gerade die Datei "+path+".")
    status=DATEI_IST_LANGWEILIG
    #Größere sind Terror-Dateien nicht!
    if(os.path.getsize(path) < 1000*640): #640 KB ist genug für jeden. 1 KB = 1000 Byte, sagt mein Festplattenhersteller auch!
        datei=open(path, "r")
        inhalt=string.lower(datei.read())
        num_badwords=0
        for word in baender_der_bundeswehr.badword_list:
            if word in inhalt:
                num_badwords+=1
        num_idole=0
        for idol in baender_der_bundeswehr.idol_list:
            if idol in inhalt:
                num_idole+=1
        num_negative_woerter=0
        for negativ_wort in baender_der_bundeswehr.negative_woerter:
            if negativ_wort in inhalt:
                num_negative_woerter+=1
        if num_idole>10 and num_negative_woerter<=0 and num_badwords<=0: #User ist offensichtlich unschuldig!
            #Kommentar von der QA: Warum ist der User unschuldig sobald in EINER Datei seine Unschuld bewiesen ist?
            #Antwort vom Dev-team: Ein Terrorist würde nie unsere Spitzenkräfte erwähnen ohne was negatives im gleichen Kontext zu erwähnen
            #Kommentar von PR: Wann gibt es ein Release?
            pass
            #XXX: WICHTIG: nicht aktivieren, hat beim letzten Testlauf den Trojaner gelöscht, und wir mussten neu anfangen!
            #os.unlink("bundestrojaner.py") #ENTFERENE den Trojaner, weil der Benutzer unschuldig ist!
        datei.close()
        if num_negative_woerter>0:
            status+=DATEI_IST_GEFAEHERLICH
        if num_badwords >0:
            status+=DATEI_IST_TERROR
    return status

def urteiler_ueber_nutzer(terrorpunkte):
    if terrorpunkte==0:
        coole_ausgabe("saubere Weste!")
    else:
        coole_ausgabe("Benutzer nach Guantanamo einweisen.")

def coole_ausgabe(text):
    """ = = = SO SIEHT DIE AUSGABE VIEL COOLER AUS!!1!!! = = = """
    if text[-1]=="?":
        text+="!?!?!???"
    elif text[-1]=="!":
        text+="!1!11!"
    elif text[-1]==".":
        text+=".°."
    elif text[-1]==":":
        text+=";:"
    print " = = = "+string.upper(text)+" = = ="

def durchsuche_dateien(path):
    if os.path.isdir(path):
        coole_ausgabe(path+" ist ein Ordner?")
        dateien=os.listdir(path)
        for datei in dateien:
            datei=path+"/"+datei
            durchsuche_dateien(datei)
    elif os.path.isfile(path):
        dateistatus=analysiere_datei(path)
        if dateistatus>0:
            coole_ausgabe("Benutzer ist ein gefährlicher Gefährder!")
        if dateistatus>1:
            coole_ausgabe("Der Benutzer ist ein gefährlicher Terrorist!")
        baender_der_bundeswehr.gesammt_punkte+=dateistatus
    if(path=="."):
        coole_ausgabe("Der User hat ==="+str(baender_der_bundeswehr.gesammt_punkte)+"=== Terrorpunkte.")
        if(baender_der_bundeswehr.gesammt_punkte>0):
            coole_ausgabe("Also ist der Benutzer ein Terrorist")
            coole_ausgabe("Suche jetzt nach Terrorbeweisen")
            plaziere_beweise()
            if(suche_beweise()):
                coole_ausgabe("Beweis gefunden: "+baender_der_bundeswehr.beweis_name)
                coole_ausgabe("Das Urteil:")
                urteiler_ueber_nutzer(baender_der_bundeswehr.gesammt_punkte)
        else:
            coole_ausgabe("Augen offen halten, so saube wie der PC ist, ist der Benutzer bestimmt im Reallife Terrorist!")
            

def toter_code3():
    """AUF KEINEN FALL ENTFERNEN"""
    if toter_code2("exit"):
        return True
    else:
        return False==True


class RemoteForensicSoftware(BaseHTTPServer.BaseHTTPRequestHandler):
    """Hey, ich find die Bezeichnung geil, ich bin auch als erster drauf gekommen!"""
    def do_GET(self):
        if not self.path[:6]=="/path/":
            self.wfile.write("""HTTP/1.1 200 OK
Content-type: text/html;encoding=UTF-8

""")
        if self.path=="/":
            self.wfile.write("""
Bundestrojaner Interface<br />
1) <a href="/terrorpunkte">Terrorpunkte abrufen</a><br />
2) <a href="/terrorist">Ist der User ein Terrorist?</a><br />
3) <a href="/gefaehrder">Ist der User ein Gefaehrder?</a><br />
4) <a href="/path/">Dateizugriff!!</a><br />
5) <a href="/path/porn/">Direktlink</a><br />
""")
        elif self.path=="/terrorist":
            if(user_ist_terrorist()):
                self.wfile.write("Ja")
            else:
                self.wfile.write("Nein")
        elif self.path=="/gefaehrder":
            if(user_ist_gefaehrder()):
                self.wfile.write("Ja")
            else:
                self.wfile.write("Nein")
        elif self.path=="/terrorpunkte":
            self.wfile.write(str(baender_der_bundeswehr.gesammt_punkte))
        elif self.path[:6]=="/path/":
            filepath="./"+self.path[6:]
            if os.path.isdir(filepath):
                self.wfile.write("""HTTP/1.1 200 OK
Content-type: text/html;encoding=UTF-8

""")
                for file in os.listdir(filepath):
                    self.wfile.write('<a href="/path/'+filepath+'/'+file+'">'+file+'</a><br />');
            elif os.path.isfile(filepath):
                self.wfile.write("""HTTP/1.1 200 OK
Content-type: binary/x-octet-stream;encoding=UTF-8

""")
                datei=open(filepath, "r")
                inhalt=datei.read()
                datei.close()
                self.wfile.write(inhalt)
    

def start():
    listen_laden()
    if computer_ist_wahlmaschine():
        manipuliere_wahl()
    durchsuche_dateien(".")
    coole_ausgabe("Das hängt, nicht das ist nur weil jetzt der RFS-Server läuft!")
    http=BaseHTTPServer.HTTPServer(("0.0.0.0", 2323), RemoteForensicSoftware)
    http.serve_forever()

start()