# all the imports from __future__ import with_statement from contextlib import closing import sqlite3 from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, jsonify import requests from bs4 import BeautifulSoup import re from email.mime.text import MIMEText from subprocess import Popen, PIPE import smtplib # configuration DATABASE = '/tmp/dysprosium.db' DEBUG = True SECRET_KEY = 'development key' USERNAME = 'admin' PASSWORD = 'dupa.8' app = Flask(__name__) app.config.from_object(__name__) def connect_db(): return sqlite3.connect(app.config['DATABASE']) def init_db(): with closing(connect_db()) as db: with app.open_resource('schema.sql') as f: db.cursor().executescript(f.read()) db.commit() @app.before_request def before_request(): g.db = connect_db() @app.teardown_request def teardown_request(exception): g.db.close() @app.route('/') def ask_for_text(): return render_template('ask_for_text.html') @app.route('/options', methods=['POST']) def add_entry(): if not session.get('logged_in'): abort(401) g.db.execute('insert into entries (title, text) values (?, ?)', [request.form['title'], request.form['text']]) g.db.commit() flash('New entry was successfully posted') return redirect(url_for('ask_for_text.html')) @app.route('/login', methods=['GET', 'POST']) def login(): error = None if request.method == 'POST': if request.form['username'] != app.config['USERNAME']: error = 'Invalid username' elif request.form['password'] != app.config['PASSWORD']: error = 'Invalid password' else: session['logged_in'] = True flash('You were logged in') return redirect(url_for('ask_for_text')) return render_template('login.html', error=error) @app.route('/logout') def logout(): session.pop('logged_in', None) flash('You were logged out') return redirect(url_for('ask_for_text')) def get_exact_translation(retrieved_json): try: response = retrieved_json["term0"]["PrincipalTranslations"]["0"]["FirstTranslation"]["term"] if len(response) == 0: response = "No translation" except: response = "No translation" return response @app.route('/_find_translations') def find_translations(): text_for_translation = request.args.get('text', 0) language = request.args.get('language', 0) dictionary_link = "http://api.wordreference.com/a95ae/json/" + language + "/" words = text_for_translation.split(" ") translations = [] for word in words: translation = get_exact_translation(requests.get(dictionary_link + strip_punctuation(word)).json) translations.append(translation) return jsonify(result=translations, words=words, html_output=prepare_html_output(words)) @app.route('/_send_mail') def send_mail(): from_address = "attero@hackerspace.pl" to_address = request.args.get('mail_address', 0) message_text = request.args.get('message', 0) msg = ("From: %s\r\nTo: %s\r\nSubject: Lanre\r\n" % (from_address, to_address)) server = smtplib.SMTP('hackerspace.pl', 587) server.starttls() server.login("attero", "dupa.8") server.set_debuglevel(1) print(from_address) print(to_address) print(msg + message_text) print("somethin wrong in loging to server") server.sendmail(from_address, to_address, msg + message_text) server.quit() return jsonify(result="success") def prepare_html_output(words): words_with_html = ["" + word + "" for i, word in enumerate(words)] output = " ".join(words_with_html) return output def strip_punctuation(word): try: if(word[len(word)-1].isalpha()): return word else: return word[0:(len(word)-1)] except: return word #a95ae api key for word reference is: a95ae #http://www.wordreference.com/docs/api.aspx if __name__ == '__main__': init_db() app.run()