#!/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()

