· 6 years ago · May 12, 2019, 11:52 AM
1from flask import Flask,redirect, make_response, url_for, request, session, jsonify
2import os
3import sqlite3
4import binascii
5
6#konstante Variablen
7DATENBANK_NAME = "characterCreator.db"
8#Tabelle users
9TABLE_NAME_USERS = "users"
10COL_NAME_ID_TABLE_USERS = "id"
11COL_NAME_NAME_TABLE_USERS = "name"
12COL_NAME_PASSWORD_TABLE_USERS = "password"
13VALID_CHARACTERS_NAME = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'ß', 'ä', 'ö', 'ü', '-', ' ']
14MAXLENGTH_NAME = 30;
15MINLENGTH_NAME = 3;
16MAXLENGTH_PASSWORD = 30;
17MINLENGTH_PASSWORD = 8;
18SQL_CREATE_TABLE_USERS = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME_USERS + " (" + COL_NAME_ID_TABLE_USERS + " integer PRIMARY KEY AUTOINCREMENT NOT NULL, " + COL_NAME_NAME_TABLE_USERS + " varchar(" + str(MAXLENGTH_NAME) + ") NOT NULL, " + COL_NAME_PASSWORD_TABLE_USERS + " varchar(" + str(MAXLENGTH_PASSWORD) + ") NOT NULL)"
19#Tabelle Charaktere
20TABLE_NAME_CHARACTERS = "characters"
21COL_NAME_ID_TABLE_CHARACTERS = "id"
22COL_NAME_USERID_TABLE_CHARACTERS = "user_id"
23COL_NAME_VORNAME_TABLE_CHARACTERS = "vorname"
24COL_NAME_NACHNAME_TABLE_CHARACTERS = "nachname"
25COL_NAME_GEBURTSDATUM_TABLE_CHARACTERS = "geburtsdatum"
26COL_NAME_VORGESCHICHTE_TABLE_CHARACTERS = "vorgeschichte"
27COL_NAME_CHARAKTEREIGENSCHAFTEN_TABLE_CHARACTERS = "charaktereigenschaften"
28COL_NAME_VORLIEBEN_TABLE_CHARACTERS = "vorlieben"
29COL_NAME_ABNEIGUNGEN_TABLE_CHARACTERS = "abneigungen"
30SQL_CREATE_TABLE_CHARACTERS = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME_CHARACTERS + " (" + COL_NAME_ID_TABLE_CHARACTERS + " integer PRIMARY KEY AUTOINCREMENT NOT NULL, " + COL_NAME_USERID_TABLE_CHARACTERS + " integer NOT NULL, " + COL_NAME_VORNAME_TABLE_CHARACTERS + " varchar(30), " + COL_NAME_NACHNAME_TABLE_CHARACTERS + " varchar(30), " + COL_NAME_GEBURTSDATUM_TABLE_CHARACTERS + " varchar(20), " + COL_NAME_VORGESCHICHTE_TABLE_CHARACTERS + " varchar(5000), " + COL_NAME_CHARAKTEREIGENSCHAFTEN_TABLE_CHARACTERS + " varchar(2000), " + COL_NAME_VORLIEBEN_TABLE_CHARACTERS + " varchar(2000), " + COL_NAME_ABNEIGUNGEN_TABLE_CHARACTERS + " varchar(2000))"
31
32
33app = Flask(__name__)
34
35#def getValidCharsName():
36 #validLetters = []
37 #for asciiValue in range (ord("A"), ord("Z")+1):
38 #validLetters.append(chr(asciiValue))
39
40 #for asciiValue in range(ord("a"), ord("z")+1):
41 #validLetters.append(chr(asciiValue))
42
43 #validLetters.append("ß")
44 #validLetters.append("ä")
45 #validLetters.append("ö")
46 #validLetters.append("ü")
47 #validLetters.append("-")
48 #validLetters.append(" ")
49 #print(validLetters)
50
51def isStringValid(txt, validLetters, pos):
52 if isCharValid(txt[pos], validLetters):
53 if(pos < (len(txt) - 1)):
54 pos += 1
55 isStringValid(txt, validLetters, pos)
56 else:
57 return False
58 return True
59
60def isCharValid(character, validLetters):
61 return character in validLetters
62
63@app.route("/", methods = ['POST'])
64def index():
65 if request.method == 'POST':
66 name = request.form['name']
67 password = request.form['password']
68 conn = sqlite3.connect(DATENBANK_NAME)
69 conn.execute(SQL_CREATE_TABLE_USERS)
70 cursor = conn.cursor()
71 cursor.execute("SELECT " + COL_NAME_ID_TABLE_USERS + " FROM users WHERE name = ? and password = ?", (name, password))
72 rows = cursor.fetchall()
73 if len(rows) > 0:
74 session['id'] = str(rows[0][0])
75 session['name'] = name
76 session['password'] = password
77 resp = make_response("Erfolgreich eingeloggt")
78 return resp
79 else:
80 resp = make_response("Ungültige Logindaten")
81 return resp
82
83@app.route("/logout", methods = ['POST', 'GET'])
84def logout():
85 if request.method == 'POST' or request.method == 'GET':
86 session.pop("name", None)
87 session.pop("password", None)
88 session.pop("id", None)
89 resp = make_response("Erfolgreich ausgeloggt")
90 return resp
91 else:
92 resp = make_response("Ungültige Anfrage. ACHTUNG: Sie wurden unter Umständen nicht ausgeloggt.")
93 return resp
94@app.route("/register", methods = ['POST']) #Registrierung
95def register():
96 if request.method == 'POST':
97 name = request.form["name"]
98 password = request.form["password"]
99 else:
100 resp = make_response("Ungültige Anfrage")
101 print(resp)
102 return resp
103 if name == "" or password == "" or name == None or password == None:
104 resp = make_response("Bitte Name und Passwort angeben.")
105 print(resp)
106 return resp
107 if not isStringValid(name, VALID_CHARACTERS_NAME, 0):
108 resp = make_response("Ungültige Zeichen im Benutzernamen. Erlaubt sind: A bis Z, a bis z, ä, ö, ü, ß, Bindestrich und Leerzeichen")
109 print(resp)
110 return resp
111 lengthOfName = len(name)
112 if lengthOfName > MAXLENGTH_NAME or lengthOfName < MINLENGTH_NAME:
113 resp = make_response("Der Name muss eine Zeichenanzahl zwischen " + str(MINLENGTH_NAME) + " und " + str(MAXLENGTH_NAME) + " enthalten")
114 print(resp)
115 return resp
116 lengthOfPassword = len(password)
117 if lengthOfPassword < MINLENGTH_PASSWORD or lengthOfPassword > MAXLENGTH_PASSWORD:
118 resp = make_response("Das Passwort muss eine Zeichenanzahl zwischen " + str(MINLENGTH_PASSWORD) + " und " + str(MAXLENGTH_PASSWORD) + " enthalten")
119 print(resp)
120 return resp
121 conn = sqlite3.connect(DATENBANK_NAME)
122 conn.execute(SQL_CREATE_TABLE_USERS)
123 cursor = conn.cursor()
124 cursor.execute("SELECT name FROM " + TABLE_NAME_USERS + " WHERE name = ?", [name])
125 rows = cursor.fetchall()
126 if len(rows) > 0:
127 conn.close()
128 resp = make_response("Dieser Username existiert bereits. Bitte suchen Sie sich einen anderen Namen aus.")
129 print(resp)
130 return resp
131 cursor.execute("INSERT INTO " + TABLE_NAME_USERS + "(" + COL_NAME_NAME_TABLE_USERS + ", " + COL_NAME_PASSWORD_TABLE_USERS + ") VALUES (?, ?)", (name, password))
132 conn.commit()
133 cursor.execute("SELECT " + COL_NAME_ID_TABLE_USERS + " FROM " + TABLE_NAME_USERS + " WHERE name = ? and password = ?", (name, password))
134 rows = cursor.fetchall()
135 conn.close()
136 session['name'] = name
137 session['password'] = password
138 session['id'] = rows[0][0]
139 resp = make_response("Registrierung erfolgreich")
140 print(resp)
141 return resp
142
143@app.route("/characters", methods = ["POST"])
144def characters(): #value: edit, create, viewList, details
145 if request.method == "POST":
146 value = request.form["value"]
147 else:
148 resp = make_response("Anfrage ungültig")
149 return resp
150 if value == 'create':
151 vorname = request.form.get('vorname')
152 nachname = request.form.get('nachname')
153 geburtsdatum = request.form.get('geburtsdatum')
154 vorgeschichte = request.form.get('vorgeschichte')
155 charaktereigenschaften = request.form.get('charaktereigenschaften')
156 vorlieben = request.form.get('vorlieben')
157 abneigungen = request.form.get('abneigungen')
158 conn = sqlite3.connect(DATENBANK_NAME)
159 conn.execute(SQL_CREATE_TABLE_CHARACTERS)
160 cursor = conn.cursor()
161 cursor.execute("INSERT INTO " + TABLE_NAME_CHARACTERS + "(" + COL_NAME_USERID_TABLE_CHARACTERS + ", " + COL_NAME_VORNAME_TABLE_CHARACTERS + "," + COL_NAME_NACHNAME_TABLE_CHARACTERS + ", " + COL_NAME_GEBURTSDATUM_TABLE_CHARACTERS + ", " + COL_NAME_VORGESCHICHTE_TABLE_CHARACTERS + ", " + COL_NAME_CHARAKTEREIGENSCHAFTEN_TABLE_CHARACTERS + ", " + COL_NAME_VORLIEBEN_TABLE_CHARACTERS + ", " + COL_NAME_ABNEIGUNGEN_TABLE_CHARACTERS + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (session['id'], vorname, nachname, geburtsdatum, vorgeschichte, charaktereigenschaften, vorlieben, abneigungen))
162 conn.commit()
163 conn.close()
164 resp = make_response("Der Charakter erfolgreich angelegt.")
165 return resp
166 elif value == 'details':
167 if request.method == 'POST':
168 characterId = request.form['id']
169 else:
170 resp = make_response("Ungültige Anfrage")
171 return resp
172 conn = sqlite3.connect(DATENBANK_NAME)
173 cursor = conn.cursor()
174 cursor.execute("SELECT * FROM " + TABLE_NAME_CHARACTERS + " WHERE " + COL_NAME_USERID_TABLE_CHARACTERS + " = ? and " + COL_NAME_ID_TABLE_CHARACTERS + " = ?", (session['id'], characterId))
175 rows = cursor.fetchall()
176 resp = make_response(jsonify(rows))
177 return resp
178 elif value == 'viewList':
179 conn = sqlite3.connect(DATENBANK_NAME)
180 cursor = conn.cursor()
181 cursor.execute("SELECT * FROM " + TABLE_NAME_CHARACTERS + " WHERE " + COL_NAME_USERID_TABLE_CHARACTERS + " = " + session['id'])
182 rows = cursor.fetchall()
183 resp = make_response(jsonify(rows))
184 return resp
185 #elif value == 'edit':
186 else:
187 resp = make_response("Anfrage ungültig")
188 return resp
189
190app.secret_key = "2b22b3fcdca007c4c91828e3021388d17409aa18fee2b56c"
191
192if __name__ == "__main__":
193 app.run('0.0.0.0', port=5000, debug=True)