diff options
Diffstat (limited to 'fake-service/app/pixelated_user_agent.py')
-rw-r--r-- | fake-service/app/pixelated_user_agent.py | 196 |
1 files changed, 0 insertions, 196 deletions
diff --git a/fake-service/app/pixelated_user_agent.py b/fake-service/app/pixelated_user_agent.py deleted file mode 100644 index cc58355f..00000000 --- a/fake-service/app/pixelated_user_agent.py +++ /dev/null @@ -1,196 +0,0 @@ -# # Copyright (c) 2014 ThoughtWorks, Inc. -# -# Pixelated is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pixelated is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Pixelated. If not, see <http://www.gnu.org/licenses/>. -from flask import Flask, request, Response, redirect -import os -import csv -import json -import datetime -import mailbox -import StringIO -import requests -from adapter import MailService -from search import SearchQuery - -app = Flask(__name__, static_url_path='', static_folder='../../web-ui/app') -MEDIUM_TAGGED_URL = 'https://static.wazokazi.is/py-mediumtagged.tar.gz' -client = None -converter = None -account = None -autoload = os.environ.get('AUTOLOAD', False) -mail_service = MailService() - - -def respond_json(entity): - response = json.dumps(entity) - return Response(response=response, mimetype="application/json") - - -@app.route('/features') -def disabled_features(): - return respond_json({'disabled_features': [], 'dispatcher_features': {}}) - - -@app.route('/mails', methods=['POST']) -def save_draft_or_send(): - mail = request.json - if mail['ident']: - ident = mail_service.send(mail) - else: - ident = mail_service.save_draft(mail) - - return respond_json({'ident': ident}) - - -@app.route('/mails', methods=['PUT']) -def update_draft(): - mail = request.json - ident = mail_service.update_draft(mail) - return respond_json({'ident': ident}) - - -@app.route('/mails') -def mails(): - query = SearchQuery.compile(request.args.get('q', '')) - page = request.args.get('p', '') - window_size = request.args.get('w', '') - fetched_mails = mail_service.mails(query, page, window_size) - - mails = [mail.__dict__ for mail in fetched_mails] - response = { - "stats": { - "total": len(mails), - "read": 0, - "starred": 0, - "replied": 0 - }, - "mails": mails - } - - return respond_json(response) - - -@app.route('/mail/<int:mail_id>', methods=['DELETE']) -def delete_mails(mail_id): - mail_service.delete_mail(mail_id) - return respond_json(None) - - -@app.route('/tags') -def tags(): - tags = mail_service.tagsset.all_tags() - return respond_json([tag.__dict__ for tag in tags]) - - -@app.route('/mail/<int:mail_id>') -def mail(mail_id): - return respond_json(mail_service.mail(mail_id).__dict__) - - -@app.route('/mail/<int:mail_id>/tags', methods=['POST']) -def mail_tags(mail_id): - new_tags = request.json['newtags'] - mail_service.update_tags_for(mail_id, new_tags) - return respond_json(request.json['newtags']) - - -@app.route('/mail/<int:mail_id>/read', methods=['POST']) -def mark_mail_as_read(mail_id): - mail_service.mark_as_read(mail_id) - return "" - - -@app.route('/contacts') -def contacts(): - contacts_query = request.args.get('q') - return respond_json( - {'contacts': mail_service.search_contacts(contacts_query)}) - - -@app.route('/draft_reply_for/<int:mail_id>') -def draft_reply_for(mail_id): - mail = mail_service.draft_reply_for(mail_id) - if mail: - return respond_json(mail.__dict__) - else: - return respond_json(None) - - -def utf_8_encoder(unicode_csv_data): - for line in unicode_csv_data: - yield line.encode('utf-8') - - -@app.route('/control/mailset/csv/load', methods=['POST']) -def load_mailset_from_csv(): - csv_data = request.form.keys()[0] - csv_string = StringIO.StringIO(csv_data) - csv_reader = csv.reader(utf_8_encoder(csv_string)) - headers = csv_reader.next() - messages = [] - for row in csv_reader: - mail = "" - row[3] = ', '.join(filter(len, row[3].split(' '))) - for header, value in zip(headers, row): - if header == 'Body': - mail += "\n" - else: - mail += header + ": " - mail += value + "\n" - messages.append(mailbox.mboxMessage(mail)) - mail_service.index_messages(messages) - return respond_json(None) - - -@app.route('/control/mailset/<mailset>/load', methods=['POST']) -def load_mailset(mailset): - import os - from tarfile import TarFile - from gzip import GzipFile - mbox_root = os.path.join(os.environ['HOME'], 'mailsets') - if not os.path.isdir(os.path.join(mbox_root)): - os.mkdir(mbox_root) - - if len(os.listdir(mbox_root)) == 0: - response = requests.get(MEDIUM_TAGGED_URL, verify=False) - mbox_archive_path = os.path.join(mbox_root, 'py-mediumtagged.tar.gz') - mbox_archive = open(mbox_archive_path, 'w') - mbox_archive.write(response.content) - mbox_archive.close() - gzippedfile = GzipFile(filename=mbox_archive_path) - tarfile = TarFile(fileobj=gzippedfile) - tarfile.extractall(path=mbox_root) - - mail_service.reset() - mail_service.load_mailset() - - return respond_json(None) - - -@app.route('/') -def index(): - global autoload - if autoload: - load_mailset('mediumtagged') - autoload = False - - return app.send_static_file('index.html') - - -def setup(): - app.run(host="0.0.0.0", debug=True, port=4567) - - -if __name__ == '__main__': - setup() |