From 860943a4a7578a40a0100d528bc5a3f877150fba Mon Sep 17 00:00:00 2001 From: tmeissner Date: Thu, 14 May 2020 22:39:55 +0200 Subject: [PATCH] Add cgi-bin & data folder & content; move static content into subfolder meissner-wohnen --- cgi-bin/meissner-wohnen.py | 194 ++++++++++++++++++ data/buchung.template | 141 +++++++++++++ buchung.html => meissner-wohnen/buchung.html | 0 .../buchung_erfolgreich.html | 0 .../buchung_fehler.html | 0 {css => meissner-wohnen/css}/style.css | 0 .../datenschutz.html | 0 extras.html => meissner-wohnen/extras.html | 0 {images => meissner-wohnen/images}/header.jpg | Bin .../images}/transparent.png | Bin .../images}/willkommen.jpg | Bin .../images}/willkommen_links.jpg | Bin .../images}/willkommen_rechts.jpg | Bin .../images}/wohnung1.jpg | Bin .../images}/wohnung2.jpg | Bin .../images}/wohnung3.jpg | Bin .../images}/wohnung4.jpg | Bin .../images}/wohnung5.jpg | Bin .../images}/wohnung6.jpg | Bin .../images}/wohnung7.jpg | Bin .../images}/wohnung8.jpg | Bin .../impressum.html | 0 index.html => meissner-wohnen/index.html | 0 {js => meissner-wohnen/js}/meissner-wohnen.js | 0 kontakt.html => meissner-wohnen/kontakt.html | 0 wohnung.html => meissner-wohnen/wohnung.html | 0 26 files changed, 335 insertions(+) create mode 100755 cgi-bin/meissner-wohnen.py create mode 100644 data/buchung.template rename buchung.html => meissner-wohnen/buchung.html (100%) rename buchung_erfolgreich.html => meissner-wohnen/buchung_erfolgreich.html (100%) rename buchung_fehler.html => meissner-wohnen/buchung_fehler.html (100%) rename {css => meissner-wohnen/css}/style.css (100%) rename datenschutz.html => meissner-wohnen/datenschutz.html (100%) rename extras.html => meissner-wohnen/extras.html (100%) rename {images => meissner-wohnen/images}/header.jpg (100%) rename {images => meissner-wohnen/images}/transparent.png (100%) rename {images => meissner-wohnen/images}/willkommen.jpg (100%) rename {images => meissner-wohnen/images}/willkommen_links.jpg (100%) rename {images => meissner-wohnen/images}/willkommen_rechts.jpg (100%) rename {images => meissner-wohnen/images}/wohnung1.jpg (100%) rename {images => meissner-wohnen/images}/wohnung2.jpg (100%) rename {images => meissner-wohnen/images}/wohnung3.jpg (100%) rename {images => meissner-wohnen/images}/wohnung4.jpg (100%) rename {images => meissner-wohnen/images}/wohnung5.jpg (100%) rename {images => meissner-wohnen/images}/wohnung6.jpg (100%) rename {images => meissner-wohnen/images}/wohnung7.jpg (100%) rename {images => meissner-wohnen/images}/wohnung8.jpg (100%) rename impressum.html => meissner-wohnen/impressum.html (100%) rename index.html => meissner-wohnen/index.html (100%) rename {js => meissner-wohnen/js}/meissner-wohnen.js (100%) rename kontakt.html => meissner-wohnen/kontakt.html (100%) rename wohnung.html => meissner-wohnen/wohnung.html (100%) diff --git a/cgi-bin/meissner-wohnen.py b/cgi-bin/meissner-wohnen.py new file mode 100755 index 0000000..1c975df --- /dev/null +++ b/cgi-bin/meissner-wohnen.py @@ -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 "

Uuups, da ist ein Fehler aufgetreten. Bitte zur Startseite zurückkehren

" + + +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() diff --git a/data/buchung.template b/data/buchung.template new file mode 100644 index 0000000..5567159 --- /dev/null +++ b/data/buchung.template @@ -0,0 +1,141 @@ + + + + + Willkommen bei Ferienwohnung Meißner - Preise und Buchungsanfrage + + + + + + + + + +
+ + + + + +
+
+

Buchungsanfrage

+
+
+ Kontaktformular +
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + +
      +
    • +
    • +
    • +
    +
  • +
  • + + + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • +

    Ihre Daten werden verschlüsselt
    übertragen.

    +
  • +
  • + + +
  • + +
+
+
+

Per Email

+

+ Senden Sie eine Email mit Ihrer Buchungsanfrage an unsere Kontaktadresse + kontakt@meissner-wohnen.de. + Bitte vergessen Sie nicht den Zeitraum und die Zahl der Personen anzugeben. +

+
+
+

Preise

+

Übernachtung

+ + + + + + + + + + + + + + + + + + + + + +
PersonenPreis/Nacht
1-238€
36€ ab 5 Nächte
34€ ab 14 Nächte
Dritte Person7€ Zuschlag
+

weitere Leistungen

+ + + + + +
Endreinigunginkl.
+

+ Profil bei Travanto (mit Belegungsplan) +

+
+
+ + + +
+ + + + diff --git a/buchung.html b/meissner-wohnen/buchung.html similarity index 100% rename from buchung.html rename to meissner-wohnen/buchung.html diff --git a/buchung_erfolgreich.html b/meissner-wohnen/buchung_erfolgreich.html similarity index 100% rename from buchung_erfolgreich.html rename to meissner-wohnen/buchung_erfolgreich.html diff --git a/buchung_fehler.html b/meissner-wohnen/buchung_fehler.html similarity index 100% rename from buchung_fehler.html rename to meissner-wohnen/buchung_fehler.html diff --git a/css/style.css b/meissner-wohnen/css/style.css similarity index 100% rename from css/style.css rename to meissner-wohnen/css/style.css diff --git a/datenschutz.html b/meissner-wohnen/datenschutz.html similarity index 100% rename from datenschutz.html rename to meissner-wohnen/datenschutz.html diff --git a/extras.html b/meissner-wohnen/extras.html similarity index 100% rename from extras.html rename to meissner-wohnen/extras.html diff --git a/images/header.jpg b/meissner-wohnen/images/header.jpg similarity index 100% rename from images/header.jpg rename to meissner-wohnen/images/header.jpg diff --git a/images/transparent.png b/meissner-wohnen/images/transparent.png similarity index 100% rename from images/transparent.png rename to meissner-wohnen/images/transparent.png diff --git a/images/willkommen.jpg b/meissner-wohnen/images/willkommen.jpg similarity index 100% rename from images/willkommen.jpg rename to meissner-wohnen/images/willkommen.jpg diff --git a/images/willkommen_links.jpg b/meissner-wohnen/images/willkommen_links.jpg similarity index 100% rename from images/willkommen_links.jpg rename to meissner-wohnen/images/willkommen_links.jpg diff --git a/images/willkommen_rechts.jpg b/meissner-wohnen/images/willkommen_rechts.jpg similarity index 100% rename from images/willkommen_rechts.jpg rename to meissner-wohnen/images/willkommen_rechts.jpg diff --git a/images/wohnung1.jpg b/meissner-wohnen/images/wohnung1.jpg similarity index 100% rename from images/wohnung1.jpg rename to meissner-wohnen/images/wohnung1.jpg diff --git a/images/wohnung2.jpg b/meissner-wohnen/images/wohnung2.jpg similarity index 100% rename from images/wohnung2.jpg rename to meissner-wohnen/images/wohnung2.jpg diff --git a/images/wohnung3.jpg b/meissner-wohnen/images/wohnung3.jpg similarity index 100% rename from images/wohnung3.jpg rename to meissner-wohnen/images/wohnung3.jpg diff --git a/images/wohnung4.jpg b/meissner-wohnen/images/wohnung4.jpg similarity index 100% rename from images/wohnung4.jpg rename to meissner-wohnen/images/wohnung4.jpg diff --git a/images/wohnung5.jpg b/meissner-wohnen/images/wohnung5.jpg similarity index 100% rename from images/wohnung5.jpg rename to meissner-wohnen/images/wohnung5.jpg diff --git a/images/wohnung6.jpg b/meissner-wohnen/images/wohnung6.jpg similarity index 100% rename from images/wohnung6.jpg rename to meissner-wohnen/images/wohnung6.jpg diff --git a/images/wohnung7.jpg b/meissner-wohnen/images/wohnung7.jpg similarity index 100% rename from images/wohnung7.jpg rename to meissner-wohnen/images/wohnung7.jpg diff --git a/images/wohnung8.jpg b/meissner-wohnen/images/wohnung8.jpg similarity index 100% rename from images/wohnung8.jpg rename to meissner-wohnen/images/wohnung8.jpg diff --git a/impressum.html b/meissner-wohnen/impressum.html similarity index 100% rename from impressum.html rename to meissner-wohnen/impressum.html diff --git a/index.html b/meissner-wohnen/index.html similarity index 100% rename from index.html rename to meissner-wohnen/index.html diff --git a/js/meissner-wohnen.js b/meissner-wohnen/js/meissner-wohnen.js similarity index 100% rename from js/meissner-wohnen.js rename to meissner-wohnen/js/meissner-wohnen.js diff --git a/kontakt.html b/meissner-wohnen/kontakt.html similarity index 100% rename from kontakt.html rename to meissner-wohnen/kontakt.html diff --git a/wohnung.html b/meissner-wohnen/wohnung.html similarity index 100% rename from wohnung.html rename to meissner-wohnen/wohnung.html