Browse Source

Add cgi-bin & data folder & content; move static content into subfolder meissner-wohnen

master
T. Meissner 4 years ago
parent
commit
860943a4a7
26 changed files with 335 additions and 0 deletions
  1. +194
    -0
      cgi-bin/meissner-wohnen.py
  2. +141
    -0
      data/buchung.template
  3. +0
    -0
      meissner-wohnen/buchung.html
  4. +0
    -0
      meissner-wohnen/buchung_erfolgreich.html
  5. +0
    -0
      meissner-wohnen/buchung_fehler.html
  6. +0
    -0
      meissner-wohnen/css/style.css
  7. +0
    -0
      meissner-wohnen/datenschutz.html
  8. +0
    -0
      meissner-wohnen/extras.html
  9. +0
    -0
      meissner-wohnen/images/header.jpg
  10. +0
    -0
      meissner-wohnen/images/transparent.png
  11. +0
    -0
      meissner-wohnen/images/willkommen.jpg
  12. +0
    -0
      meissner-wohnen/images/willkommen_links.jpg
  13. +0
    -0
      meissner-wohnen/images/willkommen_rechts.jpg
  14. +0
    -0
      meissner-wohnen/images/wohnung1.jpg
  15. +0
    -0
      meissner-wohnen/images/wohnung2.jpg
  16. +0
    -0
      meissner-wohnen/images/wohnung3.jpg
  17. +0
    -0
      meissner-wohnen/images/wohnung4.jpg
  18. +0
    -0
      meissner-wohnen/images/wohnung5.jpg
  19. +0
    -0
      meissner-wohnen/images/wohnung6.jpg
  20. +0
    -0
      meissner-wohnen/images/wohnung7.jpg
  21. +0
    -0
      meissner-wohnen/images/wohnung8.jpg
  22. +0
    -0
      meissner-wohnen/impressum.html
  23. +0
    -0
      meissner-wohnen/index.html
  24. +0
    -0
      meissner-wohnen/js/meissner-wohnen.js
  25. +0
    -0
      meissner-wohnen/kontakt.html
  26. +0
    -0
      meissner-wohnen/wohnung.html

+ 194
- 0
cgi-bin/meissner-wohnen.py View File

@ -0,0 +1,194 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cgi
import cgitb
import os
from email.mime.text import MIMEText
from subprocess import call
from datetime import datetime
from fnmatch import fnmatch
from string import Template
def escapeTags(text):
text = text.replace('<', '')
text = text.replace('>', '')
return text
def checkEntries(buchung):
mailstring = '*@*'
datestring = '[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]'
entries = {'name': False, 'sender': False, 'dates': False}
if len(buchung['name']) > 0:
entries['name'] = True
if fnmatch(buchung['sender'], mailstring):
entries['sender'] = True
try:
if (fnmatch(buchung['begin'], datestring) and fnmatch(buchung['end'], datestring) and
datetime.strptime(buchung['begin'], '%d.%m.%Y') >= datetime.now() and
datetime.strptime(buchung['end'], '%d.%m.%Y') > datetime.strptime(buchung['begin'], '%d.%m.%Y')):
entries['dates'] = True
except ValueError:
pass
return entries
class Mail:
def __init__(self, buchung, receiver, reply=False):
self.buchung = buchung
self.buchung['receiver'] = receiver
self.reply = reply
def genMailFile(self):
# write email to file
try:
self.filename = "../data/email_" + datetime.now().strftime('%d-%m-%Y_%H-%M-%S-%f') + ".txt"
fp = open(self.filename, 'wb')
fp.write(self.msg.as_string())
fp.close()
except IOError:
http = HttpResponse(url)
http.sendError()
exit()
def sendMail(self):
# send mail on strato powerweb
call(["mail", self.buchung['receiver']], stdin=open(self.filename))
def genMail(self):
# replace evil html tags
self.buchung['msg'] = escapeTags(self.buchung['msg'])
# gen mail text
if self.reply is True:
self.text = ("Buchungsanfrage:\n\nName: " + self.buchung['name'] +
"\nEmail: " + self.buchung['receiver'] + "\nTelefon: " + self.buchung['tel'] +
"\nAnreise: " + self.buchung['begin'] + "\nAbreise: " + self.buchung['end'] +
"\nPersonen: " + self.buchung['persons'] + "\n\nNachricht:\n" + self.buchung['msg'])
else:
self.text = ("Buchungsanfrage:\n\nName: " + self.buchung['name'] +
"\nEmail: " + self.buchung['sender'] + "\nTelefon: " + self.buchung['tel'] +
"\nAnreise: " + self.buchung['begin'] + "\nAbreise: " + self.buchung['end'] +
"\nPersonen: " + self.buchung['persons'] + "\n\nNachricht:\n" + self.buchung['msg'])
# gen mail
self.msg = MIMEText(self.text, 'plain', 'utf-8')
self.msg['Subject'] = 'Buchungsanfrage von %s' % self.buchung['name']
self.msg['From'] = self.buchung['sender']
self.msg['To'] = self.buchung['receiver']
class HttpResponse:
def __init__(self, url='https://www.meissner-wohnen.de'):
self.url = url
def sendRedirect(self):
# redirect to buchung.html
print 'Status: 301'
print 'Location: https://www.meissner-wohnen.de/%s' % self.url
print ''
def sendError(self):
print "Content-type: text/html\n"
print "<p>Uuups, da ist ein Fehler aufgetreten. Bitte zur <a href='https://www.meissner-wohnen.de'>Startseite</a> zurückkehren</p>"
def main():
#cgitb.enable()
# some values
buchung = {}
blub = ["name", "sender", "tel", "begin", "end", "persons", "msg", "reply"]
template_values = {'name_warning': '', 'email_warning': '', 'date_warning': '', 'name': '', 'email': '', 'tel': '', 'msg': '', 'kopie': ''}
url = 'buchung'
receiver = 'kontakt@meissner-wohnen.de'
# get cgi object
form = cgi.FieldStorage()
# bot detection
if form.getvalue('email'):
# logging
now = datetime.now().strftime('%d.%m.%Y %H:%M:%S')
f = open("../data/meissner_wohnen.log", "ab")
f.write(now + " : " + cgi.escape(os.environ["REMOTE_ADDR"]) + " : bot detected\n")
f.close()
# gen and send http response
http = HttpResponse(url + '.html')
http.sendRedirect()
exit()
# get form values if exist
for index in range(0, 8):
if form.getvalue(str(index)):
buchung[blub[index]] = form.getvalue(str(index))
else:
buchung[blub[index]] = ""
# check for valid entries
test = checkEntries(buchung)
# generate mails if entries are valid
if (test['name'] and test['sender'] and test['dates']):
msg = Mail(buchung, receiver)
msg.genMail()
msg.genMailFile()
msg.sendMail()
if buchung['reply'] == 'true':
receiver, buchung['sender'] = buchung['sender'], 'kontakt@meissner-wohnen.de'
msg = Mail(buchung, receiver, True)
msg.genMail()
msg.genMailFile()
msg.sendMail()
url = url + '_erfolgreich.html'
# generate error site from template if entries are invalid
else:
if not test['name']:
template_values['name_warning'] = 'warning'
if not test['sender']:
template_values['email_warning'] = 'warning'
if not test['dates']:
template_values['date_warning'] = 'warning'
url = url + '_fehler.html'
# read html template
try:
f = open("../data/buchung.template", "rb")
html_template = Template(f.read())
f.close()
except IOError:
http = HttpResponse(url)
http.sendError()
exit()
# write templated html file
try:
f = open('../meissner-wohnen/%s' % url, "wb")
f.write(html_template.safe_substitute(template_values))
f.close()
except IOError:
http = HttpResponse(url)
http.sendError()
exit()
# gen and send http response
http = HttpResponse(url)
http.sendRedirect()
if __name__ == '__main__':
main()

+ 141
- 0
data/buchung.template View File

@ -0,0 +1,141 @@
<!DOCTYPE html>
<html>
<head>
<title>Willkommen bei Ferienwohnung Mei&szlig;ner - Preise und Buchungsanfrage</title>
<meta charset="utf-8">
<meta name="keywords" content="Ferienwohnung, Mei&szlig;ner, Weixdorf, Dresden, &Uuml;bernachten">
<meta name="description" content="Willkommen bei Ferienwohnung Mei&szlig;ner. Unsere Preise. Au&szlig;erdem k&ouml;nnen Sie eine unverbindliche Buchungsanfrage stellen">
<meta name="author" content="Torsten Mei&szlig;ner">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="wrapper">
<div id="header">
<img src="images/header.jpg" alt="Kirchteich Weixdorf" width="944" height="200">
<h1>Ferienwohnung Mei&szlig;ner</h1>
</div>
<div id="nav">
<ul>
<li><a class="nav-left" href="index.html">Startseite</a></li>
<li><a href="wohnung.html">Wohnung</a></li>
<li><a class="active" href="buchung.html">Preis/Anfrage</a></li>
<li><a href="kontakt.html">Lage/Kontakt</a></li>
<li><a class="nav-right" href="extras.html">Ausfl&uuml;ge</a></li>
</ul>
</div>
<div id="content">
<div id="content-left">
<h2>Buchungsanfrage</h2>
<form id="buchung" action="https:www.meissner-wohnen.de/cgi-bin/meissner-wohnen.py" method="post">
<fieldset>
<legend>Kontaktformular</legend>
<ul>
<li>
<label for="buchung-name" class="$name_warning">Name</label>
<input class="textinput" id="buchung-name" name="0" type="text" placeholder="$name" required>
</li>
<li>
<label for="buchung-email" class="$email_warning">Email</label>
<input class="textinput" id="buchung-email" name="1" type="email" placeholder="$email" required>
</li>
<li>
<label for="buchung-tel">Telefon</label>
<input class="textinput" id="buchung-tel" name="2" type="tel" placeholder="$tel">
</li>
<li>
<label>Personen</label>
<ul id="buchung-personen">
<li><label><input type="radio" name="5" value="1" checked>1</label></li>
<li><label><input type="radio" name="5" value="2">2</label></li>
<li><label><input type="radio" name="5" value="3">3</label></li>
</ul>
</li>
<li>
<label for="buchung-anreise" class="$date_warning">Von</label>
<input class="textinput date" id="buchung-anreise" name="3" type="text" placeholder="TT.MM.JJJJ" required>
<label for="buchung-anreise" class="$date_warning">bis</label>
<input class="textinput date" id="buchung-abreise" name="4" type="text" placeholder="TT.MM.JJJJ" required>
</li>
<li>
<label for="buchung-nachricht">Nachricht</label>
<textarea class="textinput" id="buchung-nachricht" name="6" rows="3" placeholder="$msg"></textarea>
</li>
<li id="kopie">
<label for="buchung-kopie">Kopie erhalten</label>
<input type="checkbox" id="buchung-kopie" name="7" value="true" $kopie>
</li>
<li>
<p>Ihre Daten werden verschl&uuml;sselt<br />&uuml;bertragen.</p>
</li>
<li class="buttons last">
<input type="reset" id="buchung-reset" value="Zur&uuml;cksetzen">
<input type="submit" id="buchung-absenden" value="Absenden">
</li>
<li class="hidden">
<label for="email">Email</label>
<input id="email" name="email" type="text">
</li>
</ul>
</fieldset>
</form>
<h3>Per Email</h3>
<p>
Senden Sie eine Email mit Ihrer Buchungsanfrage an unsere Kontaktadresse
<a href="mailto:kontakt@meissner-wohnen.de">kontakt@meissner-wohnen.de</a>.
Bitte vergessen Sie nicht den Zeitraum und die Zahl der Personen anzugeben.
</p>
</div>
<div id="content-right">
<h2>Preise</h2>
<h3>&Uuml;bernachtung</h3>
<table>
<tr>
<th>Personen</th>
<th>Preis/Nacht</th>
</tr>
<tr>
<td>1-2</td>
<td>38€</td>
</tr>
<tr>
<td></td>
<td>36€ ab 5 N&auml;chte</td>
</tr>
<tr>
<td></td>
<td>34€ ab 14 N&auml;chte</td>
</tr>
<tr>
<td>Dritte Person</td>
<td>7€ Zuschlag</td>
</tr>
</table>
<h3>weitere Leistungen</h3>
<table>
<tr>
<td>Endreinigung</td>
<td>inkl.</td>
</tr>
</table>
<h3>
<a href="http://www.travanto.de/ferienwohnungen/dresden/1000693/ferienwohnung-meissner.php" title="Ferienwohnung Mei&szlig;ner in Dresden" target="_blank">Profil bei Travanto (mit Belegungsplan)</a>
</h3>
</div>
</div>
<div id="footer">
<div id="footer-left">&copy; 2020 Ferienwohnung Mei&szlig;ner</div>
<div id="footer-right"><a href="index.html">Startseite</a><a href="kontakt.html">Kontakt</a><a href="impressum.html">Impressum/Datenschutz</a></div>
</div>
</div>
</body>
</html>

buchung.html → meissner-wohnen/buchung.html View File


buchung_erfolgreich.html → meissner-wohnen/buchung_erfolgreich.html View File


buchung_fehler.html → meissner-wohnen/buchung_fehler.html View File


css/style.css → meissner-wohnen/css/style.css View File


datenschutz.html → meissner-wohnen/datenschutz.html View File


extras.html → meissner-wohnen/extras.html View File


images/header.jpg → meissner-wohnen/images/header.jpg View File


images/transparent.png → meissner-wohnen/images/transparent.png View File


images/willkommen.jpg → meissner-wohnen/images/willkommen.jpg View File


images/willkommen_links.jpg → meissner-wohnen/images/willkommen_links.jpg View File


images/willkommen_rechts.jpg → meissner-wohnen/images/willkommen_rechts.jpg View File


images/wohnung1.jpg → meissner-wohnen/images/wohnung1.jpg View File


images/wohnung2.jpg → meissner-wohnen/images/wohnung2.jpg View File


images/wohnung3.jpg → meissner-wohnen/images/wohnung3.jpg View File


images/wohnung4.jpg → meissner-wohnen/images/wohnung4.jpg View File


images/wohnung5.jpg → meissner-wohnen/images/wohnung5.jpg View File


images/wohnung6.jpg → meissner-wohnen/images/wohnung6.jpg View File


images/wohnung7.jpg → meissner-wohnen/images/wohnung7.jpg View File


images/wohnung8.jpg → meissner-wohnen/images/wohnung8.jpg View File


impressum.html → meissner-wohnen/impressum.html View File


index.html → meissner-wohnen/index.html View File


js/meissner-wohnen.js → meissner-wohnen/js/meissner-wohnen.js View File


kontakt.html → meissner-wohnen/kontakt.html View File


wohnung.html → meissner-wohnen/wohnung.html View File


Loading…
Cancel
Save