Advertisement
Guest User

TEST

a guest
May 22nd, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.96 KB | None | 0 0
  1. from flask_wtf import FlaskForm
  2. from wtforms import StringField, PasswordField, BooleanField, SubmitField, TextAreaField, validators
  3. from wtforms.fields.html5 import EmailField
  4. from wtforms.validators import DataRequired, ValidationError, EqualTo, Email
  5. from server_app.models import Category, User
  6.  
  7.  
  8. class LoginForm(FlaskForm):
  9. username = StringField('Username', validators=[DataRequired()])
  10. password = PasswordField('Password', validators=[DataRequired()])
  11. remember_me = BooleanField('Remember Me')
  12. submit = SubmitField('Sign In')
  13.  
  14.  
  15. class SignUpForm(FlaskForm):
  16. username = StringField('Username', validators=[DataRequired()])
  17. email = StringField('Email', validators=[DataRequired(), Email()])
  18. password = PasswordField('Password', validators=[DataRequired()])
  19. password2 = PasswordField(
  20. 'Repeat Password', validators=[DataRequired(), EqualTo('password')])
  21. submit = SubmitField('Register')
  22.  
  23. def validate_username(self, username):
  24. user = User.query.filter_by(username=username.data).first()
  25. if user is not None:
  26. raise ValidationError('Please use a different username.')
  27.  
  28. def validate_email(self, email):
  29. user = User.query.filter_by(email=email.data).first()
  30. if user is not None:
  31. raise ValidationError('Please use a different email address.')
  32.  
  33.  
  34. def get_scope_categories():
  35. categories = Category.query.all()
  36. return [c.name for c in categories]
  37.  
  38.  
  39. class WorkForm(FlaskForm):
  40. text = TextAreaField('Work Text')
  41. submit = SubmitField('Fertig bearbeitet!')
  42. next = SubmitField('Nächste')
  43. back = SubmitField('Zurück')
  44.  
  45.  
  46. class CategoryForm(FlaskForm):
  47. scopes = get_scope_categories()
  48. category_1 = BooleanField(scopes[0])
  49. category_2 = BooleanField(scopes[1])
  50. category_3 = BooleanField(scopes[2])
  51. category_4 = BooleanField(scopes[3])
  52. category_5 = BooleanField(scopes[4])
  53. category_6 = BooleanField(scopes[5])
  54. category_7 = BooleanField(scopes[6])
  55. category_8 = BooleanField(scopes[7])
  56. category_9 = BooleanField(scopes[8])
  57. category_10 = BooleanField(scopes[9])
  58. category_11 = BooleanField(scopes[10])
  59. category_12 = BooleanField(scopes[11])
  60. category_1_pi = BooleanField()
  61. category_2_pi = BooleanField()
  62. category_3_pi = BooleanField()
  63. category_4_pi = BooleanField()
  64. category_5_pi = BooleanField()
  65. category_6_pi = BooleanField()
  66. category_7_pi = BooleanField()
  67. category_8_pi = BooleanField()
  68. category_9_pi = BooleanField()
  69. category_10_pi = BooleanField()
  70. category_11_pi = BooleanField()
  71.  
  72. category_13 = BooleanField(scopes[12])
  73. category_14 = BooleanField(scopes[13])
  74. category_15 = BooleanField(scopes[14])
  75. category_16 = BooleanField(scopes[15])
  76. category_17 = BooleanField(scopes[16])
  77. category_18 = BooleanField(scopes[17])
  78. category_19 = BooleanField(scopes[18])
  79. category_20 = BooleanField(scopes[19])
  80. category_21 = BooleanField(scopes[20])
  81. category_22 = BooleanField(scopes[21])
  82. category_13_fp = BooleanField()
  83. category_14_fp = BooleanField()
  84. category_15_fp = BooleanField()
  85. category_16_fp = BooleanField()
  86. category_17_fp = BooleanField()
  87. category_18_fp = BooleanField()
  88. category_19_fp = BooleanField()
  89. category_21_fp = BooleanField()
  90. category_13_pp = BooleanField()
  91. category_14_pp = BooleanField()
  92. category_16_pp = BooleanField()
  93. category_17_pp = BooleanField()
  94. category_18_pp = BooleanField()
  95. category_19_pp = BooleanField()
  96. category_21_pp = BooleanField()
  97. done = SubmitField('Bestätigen')
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. from server_app import app, db
  110. from flask import render_template, flash, redirect, url_for, request
  111. from server_app.forms import LoginForm, WorkForm, CategoryForm, SignUpForm
  112. from flask_login import current_user, login_user, logout_user, login_required
  113. from server_app.models import User, DSE, App
  114. from werkzeug.urls import url_parse
  115. import re
  116. import sqlite3
  117. import random
  118. from flask_paginate import Pagination, get_page_parameter
  119.  
  120.  
  121. def parse_text(text):
  122. my_str = re.sub("<.*?>", '', text).replace('\t', '').strip()
  123. my_str = re.sub(' +', ' ', my_str)
  124. my_str = re.sub('(\n )+', '\n', my_str)
  125. return my_str
  126.  
  127.  
  128. def get_scope_categories():
  129. connection = sqlite3.connect("app.db")
  130. cursor = connection.cursor()
  131. sql_cmd = "select name from main.category"
  132. cursor.execute(sql_cmd)
  133. result = cursor.fetchall()
  134. cursor.close()
  135. connection.close()
  136. return [i[0] for i in result]
  137.  
  138.  
  139. def load_dse(my_app):
  140. if my_app == 0:
  141. new_apps = App.query.all()
  142. random_int = random.randint(1, len(new_apps))
  143. my_app = new_apps[random_int - 1]
  144. print(my_app)
  145. my_app.paragraphs = []
  146. else:
  147. my_app = App.query.filter_by(id=my_app).first_or_404()
  148.  
  149. work_app = App.get_attributes(my_app)
  150. dse = DSE.query.filter_by(app_id=work_app[3]).first_or_404()
  151. dse_text = open(dse.path_dse, encoding="utf8").read()
  152. paragraphs = dse_text.split('<split>')
  153. return dse, paragraphs, work_app
  154.  
  155.  
  156. @app.route('/')
  157. @app.route('/index')
  158. def index():
  159. return render_template('index.html', title='Home')
  160.  
  161.  
  162. @app.route('/work', methods=['GET', 'POST'])
  163. @app.route('/work/<my_app>', methods=['GET', 'POST'])
  164. @login_required
  165. def work(my_app=0):
  166. # initialisierung
  167. change = False
  168. form = WorkForm()
  169. cat_form = CategoryForm()
  170. page = request.args.get(get_page_parameter(), type=int, default=1)
  171. work_dse, paragraphs, work_app = load_dse(my_app)
  172. search = False
  173. q = request.args.get('q')
  174. if q:
  175. search = True
  176. per_page = 1
  177.  
  178. # submit checks
  179. if request.form.getlist("current app") == [str(my_app)]:
  180. flash('Finished policy. Data is being stored.')
  181. s = 'paragraph|' + '|'.join(get_scope_categories())
  182.  
  183. for x in request.form:
  184. if x == 'current app':
  185. continue
  186. data_str = request.form.getlist(x)[0]
  187. # print('json data_str:', data_str)
  188. s += '\n' + str(x)
  189. s_1 = ''
  190. s_2 = ''
  191. s_3 = ''
  192. work_string_1 = data_str[22] + data_str[43] + data_str[47]
  193. work_string_2 = data_str[:22] + data_str[29:31]
  194. work_string_3 = data_str[23:29] + data_str[31:43] + data_str[44:47]
  195. for value in work_string_1:
  196. s_1 += '|' + value
  197. for i in range(0, len(work_string_2), 2):
  198. if work_string_2[i+1] == '1':
  199. s_2 += '|2'
  200. elif work_string_2[i] == '1':
  201. s_2 += '|1'
  202. else:
  203. s_2 += '|0'
  204. for i in range(0, len(work_string_3), 3):
  205. if work_string_3[i+2] == '1':
  206. s_3 += '|3'
  207. elif work_string_3[i+1] == '1':
  208. s_3 += '|2'
  209. elif work_string_3[i] == '1':
  210. s_3 += '|1'
  211. else:
  212. s_3 += '|0'
  213. s += s_2[:22] + s_1[:2] + s_3[:4] + s_2[22:] + s_3[4:12] + s_1[2:4] + s_3[12:] + s_1[4:]
  214. print(s)
  215.  
  216. # csv datei erstellen
  217. path = 'data/CSV/' + work_app[5].split('id=', 1)[1] + '_' + current_user.username + '.csv'
  218. # print('path', path)
  219. new_file = open(path, "w", encoding="utf8")
  220. new_file.write(s)
  221. new_file.close()
  222.  
  223. # neue policy laden
  224. work_dse, paragraphs, work_app = load_dse(0)
  225. page = 1
  226.  
  227. # seite erstellen
  228. offset = (page - 1) * per_page
  229. worked_on_app = work_app[3]
  230.  
  231. form.text.data = parse_text(paragraphs[offset])
  232. pagination = Pagination(page=page, total=len(paragraphs), search=search, record_name='paragraphs', per_page=1, css_framework='bootstrap3',
  233. href='/work/' + str(worked_on_app) + '?page={0}')
  234. if change:
  235. print('worked_on_app:', work_app)
  236. print('paragraph:', paragraphs[offset])
  237. print('url link:', '/work/' + str(worked_on_app) + '?page={0}')
  238.  
  239. return render_template('work.html', title='Work Work', form=form, form2=cat_form, categories=get_scope_categories(),
  240. pagination=pagination, app=work_app, url='/work/' + str(worked_on_app) + '?page=' + str(page), page=page)
  241.  
  242.  
  243. @app.route('/erklaerungen')
  244. def erklaerungen():
  245.  
  246. return render_template('erklaerungen.html', title='Erklärungen Englisch')
  247.  
  248.  
  249. @app.route('/erklaerungen_de')
  250. def erklaerungen_de():
  251.  
  252. return render_template('erklaerungen_de.html', title='Erklärungen Deutsch')
  253.  
  254.  
  255. @app.route('/anleitung')
  256. def anleitung():
  257.  
  258. return render_template('anleitung.html', title='Anleitung')
  259.  
  260.  
  261. @app.route('/artikel')
  262. def artikel():
  263.  
  264. return render_template('artikel.html', title='DSGVO Artikel')
  265.  
  266.  
  267. @app.route('/work/popup/<value>')
  268. @login_required
  269. def popup(value=''):
  270. # initialisierung
  271. categories = []
  272. file = open("data/erklaerungen_de.txt", "r", encoding="utf8")
  273. lines = file.readlines()
  274. for line in lines:
  275. categories.append(line.split('|'))
  276. cats_3_1 = categories[0:11]
  277. cats_3_2 = categories[12:14] + categories[15:19] + categories[20:21]
  278. cats_2 = categories[14]
  279. cats_1 = categories[11:12] + categories[19:20] + categories[21:22]
  280.  
  281. if value == cats_2[0]:
  282. erklaerung = cats_2[1]
  283. text_1 = cats_2[2]
  284. text_2 = cats_2[3]
  285. return render_template('popup_2.html', erklaerung=erklaerung, text_1=text_1, text_2=text_2)
  286. else:
  287. for y in cats_1:
  288. if value == y[0]:
  289. cat_bool = True
  290. erklaerung = y[1]
  291. return render_template('popup.html', erklaerung=erklaerung, category=cat_bool)
  292. for x in cats_3_1:
  293. if value == x[0]:
  294. erklaerung = x[1]
  295. text_1 = x[2]
  296. text_2 = x[3]
  297. text_3 = 'falls keine Informationen dazu in dem Abschnitt stehen, einfach nichts markieren.'
  298. h1 = 'Voll informativ'
  299. h2 = 'Ungenügend informativ'
  300. h3 = 'Nicht vorhanden'
  301. return render_template('popup_3.html', erklaerung=erklaerung, text_1=text_1, text_2=text_2,
  302. text_3=text_3, h1=h1, h2=h2, h3=h3)
  303. for x in cats_3_2:
  304. if value == x[0]:
  305. erklaerung = x[1]
  306. text_1 = x[2]
  307. text_2 = x[3]
  308. text_3 = x[4]
  309. h1 = 'Faire Datenverarbeitung'
  310. h2 = 'Problematische Datenverarbeitung'
  311. h3 = 'Unfaire Datenverarbeitung'
  312. return render_template('popup_3.html', erklaerung=erklaerung, text_1=text_1, text_2=text_2,
  313. text_3=text_3, h1=h1, h2=h2, h3=h3)
  314.  
  315. cat_bool = False
  316. return render_template('popup.html', category=cat_bool)
  317.  
  318.  
  319. @app.route('/user/<username>')
  320. @login_required
  321. def user(username):
  322. if username != current_user.username:
  323. flash('Wrong Profile! Redirected!')
  324. username = current_user.username
  325. user = User.query.filter_by(username=username).first_or_404()
  326. stats = [
  327. {'author': user, 'body': '%i Datenschutzerklärungen fertig bearbeitet' % user.worked_on_DSE},
  328. {'author': user, 'body': '%i Abschnitte fertig bearbeitet' % user.worked_on_paragraphs},
  329. {'author': user, 'body': '%i Attribute gesetzt' % user.worked_on_categories}
  330. ]
  331. return render_template('user.html', user=user, stats=stats)
  332.  
  333.  
  334. @app.route('/login', methods=['GET', 'POST'])
  335. def login():
  336. if current_user.is_authenticated:
  337. return redirect('/user/' + current_user.username)
  338. form = LoginForm()
  339. if form.validate_on_submit():
  340. user = User.query.filter_by(username=form.username.data).first()
  341. if user is None or not user.check_password(form.password.data):
  342. flash('Invalid username or password')
  343. return redirect(url_for('login'))
  344. login_user(user, remember=form.remember_me.data)
  345. next_page = request.args.get('next')
  346. if not next_page or url_parse(next_page).netloc != '':
  347. next_page = url_for('work')
  348. return redirect(next_page)
  349. return render_template('login.html', title='Sign In', form=form)
  350.  
  351. @app.route('/register', methods=['GET', 'POST'])
  352. def register():
  353. if current_user.is_authenticated:
  354. return redirect(url_for('index'))
  355. form = SignUpForm()
  356. if form.validate_on_submit():
  357. user = User(username=form.username.data, email=form.email.data)
  358. user.set_password(form.password.data)
  359. db.session.add(user)
  360. db.session.commit()
  361. flash('Congratulations, you are now a registered user!')
  362. return redirect(url_for('login'))
  363. return render_template('register.html', title='Register', form=form)
  364.  
  365.  
  366. @app.route('/logout')
  367. def logout():
  368. logout_user()
  369. return redirect(url_for('index'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement